mm_sql 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/test.js CHANGED
@@ -1,255 +1,304 @@
1
1
  const { Sql } = require('./index.js');
2
2
 
3
3
  /**
4
- * @description Sql类测试
4
+ * Sql类测试
5
5
  */
6
6
  class SqlTest {
7
- constructor() {
8
- console.log('SqlTest构造函数开始执行');
9
- this.sql = null;
10
- this.testCount = 0;
11
- this.successCount = 0;
12
- console.log('SqlTest构造函数执行完毕');
13
- }
7
+ constructor() {
8
+ console.log('SqlTest构造函数开始执行');
9
+ this.sql = null;
10
+ this.count = 0;
11
+ this.success = 0;
12
+ console.log('SqlTest构造函数执行完毕');
13
+ }
14
14
 
15
- /**
16
- * @description 初始化测试
17
- */
18
- async init() {
19
- try {
20
- this.sql = new Sql({
21
- // db_type: 'mysql',
22
- db_type: 'sqlite',
23
- dir: './db',
24
- host: 'localhost',
25
- user: 'root',
26
- password: 'Asd159357',
27
- database: 'mm'
28
- });
29
- console.log('初始化测试成功');
30
- return true;
31
- } catch (error) {
32
- console.error('初始化测试失败:', error.message);
33
- return false;
34
- }
15
+ /**
16
+ * 初始化测试
17
+ * @returns {Promise<boolean>} 初始化结果
18
+ */
19
+ async init() {
20
+ try {
21
+ this.sql = new Sql({
22
+ // db_type: 'mysql',
23
+ db_type: 'sqlite',
24
+ dir: './db',
25
+ host: 'localhost',
26
+ user: 'root',
27
+ password: 'Asd159357',
28
+ database: 'mm'
29
+ });
30
+ console.log('初始化测试成功');
31
+ return true;
32
+ } catch (error) {
33
+ console.error('初始化测试失败:', error.message);
34
+ return false;
35
35
  }
36
+ }
37
+
38
+ /**
39
+ * 测试配置方法
40
+ * @returns {boolean} 测试结果
41
+ */
42
+ testConfigMethods() {
43
+ this.count++;
44
+ try {
45
+ // 测试setConfig方法
46
+ this.sql.setConfig({ size: 50 });
47
+ if (this.sql.config.size !== 50) {
48
+ throw new Error('setConfig方法测试失败');
49
+ }
36
50
 
37
- /**
38
- * @description 测试配置方法
39
- */
40
- testConfigMethods() {
41
- this.testCount++;
42
- try {
43
- // 测试setConfig方法
44
- this.sql.setConfig({ size: 50 });
45
- if (this.sql.config.size !== 50) {
46
- throw new Error('setConfig方法测试失败');
47
- }
51
+ console.log('配置方法测试成功');
52
+ this.success++;
53
+ return true;
54
+ } catch (error) {
55
+ console.error('配置方法测试失败:', error.message);
56
+ return false;
57
+ }
58
+ }
48
59
 
49
- console.log('配置方法测试成功');
50
- this.successCount++;
51
- return true;
52
- } catch (error) {
53
- console.error('配置方法测试失败:', error.message);
54
- return false;
55
- }
60
+ /**
61
+ * 测试SQL构建方法
62
+ * @returns {boolean} 测试结果
63
+ */
64
+ testSqlBuild() {
65
+ this.count++;
66
+ try {
67
+ console.log('SQL构建方法测试成功');
68
+ this.success++;
69
+ return true;
70
+ } catch (error) {
71
+ console.error('SQL构建方法测试失败:', error.message);
72
+ return false;
56
73
  }
74
+ }
57
75
 
58
- /**
59
- * @description 测试SQL构建方法
60
- */
61
- testSqlBuilderMethods() {
62
- this.testCount++;
63
- try {
64
- console.log('SQL构建方法测试成功');
65
- this.successCount++;
66
- return true;
67
- } catch (error) {
68
- console.error('SQL构建方法测试失败:', error.message);
69
- return false;
70
- }
76
+ /**
77
+ * 测试基本tplQuery方法
78
+ * @private
79
+ * @returns {boolean} 测试结果
80
+ */
81
+ _testBasicTplQuery() {
82
+ console.log('=== 测试tplQuery方法 ===');
83
+ const param = {
84
+ name: '张三',
85
+ uid: 123
86
+ };
87
+ const sql_tpl = {
88
+ name: "`name` like '%{0}%'",
89
+ uid: '`uid` = {0}'
90
+ };
91
+ const query = this.sql.tplQuery(param, sql_tpl);
92
+ console.log('tplQuery输入参数:', param);
93
+ console.log('tplQuery模板配置:', sql_tpl);
94
+ console.log('tplQuery输出结果:', query);
95
+ if (typeof query !== 'string') {
96
+ throw new Error('tplQuery方法应返回字符串');
71
97
  }
98
+ return true;
99
+ }
72
100
 
73
- /**
74
- * @description 测试模板查询方法
75
- */
76
- testTemplateMethods() {
77
- this.testCount++;
78
- try {
79
- // 1. 测试tplQuery方法 - 基于config.tpl.json配置
80
- console.log('=== 测试tplQuery方法 ===');
81
- const paramDt = {
82
- name: "张三",
83
- uid: 123
84
- };
85
- const sqlDt = {
86
- name: "`name` like '%{0}%'",
87
- uid: "`uid` = {0}"
88
- };
89
- const queryResult = this.sql.tplQuery(paramDt, sqlDt);
90
- console.log('tplQuery输入参数:', paramDt);
91
- console.log('tplQuery模板配置:', sqlDt);
92
- console.log('tplQuery输出结果:', queryResult);
93
- if (typeof queryResult !== 'string') {
94
- throw new Error('tplQuery方法应返回字符串');
95
- }
101
+ /**
102
+ * 测试基本tplBody方法
103
+ * @private
104
+ * @returns {boolean} 测试结果
105
+ */
106
+ _testBasicTplBody() {
107
+ console.log('\n=== 测试tplBody方法 ===');
108
+ const param2 = {
109
+ name: '李四',
110
+ phone: '13800138000'
111
+ };
112
+ const sql_tpl2 = {
113
+ name: '`name` = {0}'
114
+ };
115
+ const body = this.sql.tplBody(param2, sql_tpl2);
116
+ console.log('tplBody输入参数:', param2);
117
+ console.log('tplBody模板配置:', sql_tpl2);
118
+ console.log('tplBody输出结果:', body);
119
+ if (typeof body !== 'string') {
120
+ throw new Error('tplBody方法应返回字符串');
121
+ }
122
+ return true;
123
+ }
96
124
 
97
- // 2. 测试tplBody方法 - 基于config.tpl.json配置
98
- console.log('\n=== 测试tplBody方法 ===');
99
- const paramDt2 = {
100
- name: "李四",
101
- phone: "13800138000"
102
- };
103
- const sqlDt2 = {
104
- name: "`name` = {0}"
105
- };
106
- const bodyResult = this.sql.tplBody(paramDt2, sqlDt2);
107
- console.log('tplBody输入参数:', paramDt2);
108
- console.log('tplBody模板配置:', sqlDt2);
109
- console.log('tplBody输出结果:', bodyResult);
110
- if (typeof bodyResult !== 'string') {
111
- throw new Error('tplBody方法应返回字符串');
112
- }
125
+ /**
126
+ * 测试复杂tplQuery方法
127
+ * @private
128
+ * @returns {boolean} 测试结果
129
+ */
130
+ _testComplexTplQuery() {
131
+ console.log('\n=== 测试tplQuery方法(复杂条件)===');
132
+ const complex_param = {
133
+ name: '王五',
134
+ age: 30,
135
+ email: 'wangwu@example.com'
136
+ };
137
+ const complex_sql_tpl = {
138
+ name: "(`name` like '%{0}%' OR `nickname` like '%{0}%')",
139
+ age: '`age` >= {0}'
140
+ };
141
+ const complex_query = this.sql.tplQuery(complex_param, complex_sql_tpl);
142
+ console.log('复杂条件tplQuery输入参数:', complex_param);
143
+ console.log('复杂条件tplQuery模板配置:', complex_sql_tpl);
144
+ console.log('复杂条件tplQuery输出结果:', complex_query);
145
+ if (typeof complex_query !== 'string') {
146
+ throw new Error('tplQuery方法(复杂条件)应返回字符串');
147
+ }
148
+ return true;
149
+ }
113
150
 
114
- // 3. 测试tplQuery方法 - 使用更复杂的条件
115
- console.log('\n=== 测试tplQuery方法(复杂条件)===');
116
- const complexParamDt = {
117
- name: "王五",
118
- age: 30,
119
- email: "wangwu@example.com"
120
- };
121
- const complexSqlDt = {
122
- name: "(`name` like '%{0}%' OR `nickname` like '%{0}%')",
123
- age: "`age` >= {0}"
124
- };
125
- const complexQueryResult = this.sql.tplQuery(complexParamDt, complexSqlDt);
126
- console.log('复杂条件tplQuery输入参数:', complexParamDt);
127
- console.log('复杂条件tplQuery模板配置:', complexSqlDt);
128
- console.log('复杂条件tplQuery输出结果:', complexQueryResult);
129
- if (typeof complexQueryResult !== 'string') {
130
- throw new Error('tplQuery方法(复杂条件)应返回字符串');
131
- }
151
+ /**
152
+ * 测试复杂tplBody方法
153
+ * @private
154
+ * @returns {boolean} 测试结果
155
+ */
156
+ _testComplexTplBody() {
157
+ console.log('\n=== 测试tplBody方法(复杂更新)===');
158
+ const complex_param2 = {
159
+ name: '赵六',
160
+ age: 35,
161
+ score: 95
162
+ };
163
+ const complex_sql_tpl2 = {
164
+ age: '`age` = `age` + {0}',
165
+ score: '`score` = {0}'
166
+ };
167
+ const complex_body = this.sql.tplBody(complex_param2, complex_sql_tpl2);
168
+ console.log('复杂更新tplBody输入参数:', complex_param2);
169
+ console.log('复杂更新tplBody模板配置:', complex_sql_tpl2);
170
+ console.log('复杂更新tplBody输出结果:', complex_body);
171
+ if (typeof complex_body !== 'string') {
172
+ throw new Error('tplBody方法(复杂更新)应返回字符串');
173
+ }
174
+ return true;
175
+ }
132
176
 
133
- // 4. 测试tplBody方法 - 使用更复杂的更新语句
134
- console.log('\n=== 测试tplBody方法(复杂更新)===');
135
- const complexParamDt2 = {
136
- name: "赵六",
137
- age: 35,
138
- score: 95
139
- };
140
- const complexSqlDt2 = {
141
- age: "`age` = `age` + {0}",
142
- score: "`score` = {0}"
143
- };
144
- const complexBodyResult = this.sql.tplBody(complexParamDt2, complexSqlDt2);
145
- console.log('复杂更新tplBody输入参数:', complexParamDt2);
146
- console.log('复杂更新tplBody模板配置:', complexSqlDt2);
147
- console.log('复杂更新tplBody输出结果:', complexBodyResult);
148
- if (typeof complexBodyResult !== 'string') {
149
- throw new Error('tplBody方法(复杂更新)应返回字符串');
150
- }
177
+ /**
178
+ * 测试模板查询方法
179
+ * @returns {boolean} 测试结果
180
+ */
181
+ testTplQuery() {
182
+ this.count++;
183
+ try {
184
+ this._testBasicTplQuery();
185
+ this._testBasicTplBody();
186
+ this._testComplexTplQuery();
187
+ this._testComplexTplBody();
151
188
 
152
- console.log('\n模板查询方法测试成功');
153
- this.successCount++;
154
- return true;
155
- } catch (error) {
156
- console.error('模板查询方法测试失败:', error.message);
157
- return false;
158
- }
189
+ console.log('\n模板查询方法测试成功');
190
+ this.success++;
191
+ return true;
192
+ } catch (error) {
193
+ console.error('模板查询方法测试失败:', error.message);
194
+ return false;
159
195
  }
196
+ }
160
197
 
161
- /**
162
- * @description 测试核心方法(run、exec、db)
163
- */
164
- testCoreMethods() {
165
- this.testCount++;
166
- try {
167
- // 测试run方法存在
168
- if (typeof this.sql.run !== 'function') {
169
- throw new Error('run方法不存在');
170
- }
198
+ /**
199
+ * 测试数据库操作方法
200
+ * @private
201
+ * @param {object} db - 数据库实例
202
+ * @returns {Promise} 测试结果
203
+ */
204
+ async _testDbOperations(db) {
205
+ await db.createTable('user_account', {
206
+ user_id: 1,
207
+ username: '',
208
+ password: '',
209
+ gm: 1,
210
+ vip: 0
211
+ }, 'user_id');
212
+ console.log('创建表成功');
171
213
 
172
- // 测试exec方法存在
173
- if (typeof this.sql.exec !== 'function') {
174
- throw new Error('exec方法不存在');
175
- }
214
+ const fields = await db.fields('user_account');
215
+ console.log('查询字段:', fields);
176
216
 
177
- // 测试db方法存在
178
- if (typeof this.sql.db !== 'function') {
179
- throw new Error('db方法不存在');
180
- }
217
+ // 设置表名后执行查询
218
+ const db_inst = db;
219
+ db_inst.table = 'user_account';
220
+ const result = await db_inst.get({
221
+ user_id: '1'
222
+ });
223
+ console.log('查询结果:', result);
224
+ console.log('调试DB:查询方法测试完成后', db_inst.sql, db_inst.error);
225
+ }
181
226
 
182
- // 测试db方法返回值
183
- const dbInstance = this.sql.db();
184
- if (!dbInstance) {
185
- throw new Error('db方法返回值无效');
186
- }
187
- dbInstance.createTable("user_account", {
188
- user_id: 1,
189
- username: "",
190
- password: "",
191
- gm: 1,
192
- vip: 0
193
- }, "user_id").then(() => {
194
- console.log('创建表成功');
195
- }).catch((error) => {
196
- console.error('创建表失败:', error);
197
- });
198
- dbInstance.fields("user_account").then((result) => {
199
- console.log('查询字段:', result);
200
- });
201
- dbInstance.table = "user_account";
202
- dbInstance.get({
203
- user_id: "1"
204
- }).then((result) => {
205
- console.log('查询结果:', result);
206
- });
207
- console.log('调试DB:查询方法测试完成后', dbInstance.sql, dbInstance.error);
208
- console.log('核心方法测试成功');
209
- this.successCount++;
210
- return true;
211
- } catch (error) {
212
- console.error('核心方法测试失败:', error.message);
213
- return false;
214
- }
227
+ /**
228
+ * 测试核心方法(run、exec、db
229
+ * @returns {boolean} 测试结果
230
+ */
231
+ async testCoreMethods() {
232
+ this.count++;
233
+ try {
234
+ // 测试run方法存在
235
+ if (typeof this.sql.run !== 'function') {
236
+ throw new Error('run方法不存在');
237
+ }
238
+
239
+ // 测试exec方法存在
240
+ if (typeof this.sql.exec !== 'function') {
241
+ throw new Error('exec方法不存在');
242
+ }
243
+
244
+ // 测试db方法存在
245
+ if (typeof this.sql.db !== 'function') {
246
+ throw new Error('db方法不存在');
247
+ }
248
+
249
+ // 测试db方法返回值
250
+ const db = this.sql.db();
251
+ if (!db) {
252
+ throw new Error('db方法返回值无效');
253
+ }
254
+
255
+ await this._testDbOperations(db);
256
+ console.log('核心方法测试成功');
257
+ this.success++;
258
+ return true;
259
+ } catch (error) {
260
+ console.error('核心方法测试失败:', error.message);
261
+ return false;
215
262
  }
263
+ }
216
264
 
217
- /**
218
- * @description 运行所有测试
219
- */
220
- async runAllTests() {
221
- console.log('开始运行Sql类测试...');
222
- console.log('='.repeat(50));
223
- console.log('测试开始前');
265
+ /**
266
+ * 运行所有测试
267
+ * @returns {Promise<boolean>} 测试结果
268
+ */
269
+ async runAllTests() {
270
+ console.log('开始运行Sql类测试...');
271
+ console.log('='.repeat(50));
272
+ console.log('测试开始前');
224
273
 
225
- // 初始化测试
226
- if (!await this.init()) {
227
- return false;
228
- }
274
+ // 初始化测试
275
+ if (!await this.init()) {
276
+ return false;
277
+ }
229
278
 
230
- console.log('调试:初始化完成后');
279
+ console.log('调试:初始化完成后');
231
280
 
232
- // 运行所有测试方法
233
- this.testConfigMethods();
234
- console.log('调试:配置方法测试完成后');
235
- this.testSqlBuilderMethods();
236
- console.log('调试:SQL构建方法测试完成后');
237
- this.testTemplateMethods();
238
- console.log('调试:模板查询方法测试完成后');
239
- this.testCoreMethods();
240
- console.log('调试:核心方法测试完成后');
281
+ // 运行所有测试方法
282
+ this.testConfigMethods();
283
+ console.log('调试:配置方法测试完成后');
284
+ this.testSqlBuild();
285
+ console.log('调试:SQL构建方法测试完成后');
286
+ this.testTplQuery();
287
+ console.log('调试:模板查询方法测试完成后');
288
+ this.testCoreMethods();
289
+ console.log('调试:核心方法测试完成后');
241
290
 
242
- console.log('='.repeat(50));
243
- console.log(`测试完成: ${this.successCount}/${this.testCount} 个测试通过`);
291
+ console.log('='.repeat(50));
292
+ console.log(`测试完成: ${this.success}/${this.count} 个测试通过`);
244
293
 
245
- if (this.successCount === this.testCount) {
246
- console.log('所有测试通过!');
247
- return true;
248
- } else {
249
- console.log('部分测试失败!');
250
- return false;
251
- }
294
+ if (this.success === this.count) {
295
+ console.log('所有测试通过!');
296
+ return true;
297
+ } else {
298
+ console.log('部分测试失败!');
299
+ return false;
252
300
  }
301
+ }
253
302
  }
254
303
 
255
304
  // 运行测试
package/test2.js CHANGED
@@ -1,60 +1,64 @@
1
1
  const { Sql } = require('./index.js');
2
+ /**
3
+ * 测试函数
4
+ * @returns {Promise<void>}
5
+ */
2
6
  async function test() {
3
- var sql = new Sql({
4
- // 数据库类型 mysql, sqlite, postgres
5
- db_type: 'sqlite',
6
- dir: "/db/",
7
- user: 'root',
8
- password: 'Asd159357',
9
- database: 'mm'
10
- });
11
- await sql.open();
12
- // var result = await sql.run("SELECT * FROM user_account limit 10");
13
- // console.log("查询结果:", result);
7
+ const sql = new Sql({
8
+ // 数据库类型 mysql, sqlite, postgres
9
+ db_type: 'sqlite',
10
+ dir: '/db/',
11
+ user: 'root',
12
+ password: 'Asd159357',
13
+ database: 'mm'
14
+ });
15
+ await sql.open();
16
+ // const result = await sql.run("SELECT * FROM user_account limit 10");
17
+ // console.log("查询结果:", result);
14
18
 
15
- var db = sql.db();
16
- db.table = "user_account";
17
- // 添加表
18
- var res = await db.addTable('user_account', 'user_id');
19
- console.log("添加表结果:", res);
19
+ const db = sql.db();
20
+ db.table = 'user_account';
21
+ // 添加表
22
+ const res = await db.addTable('user_account', 'user_id');
23
+ console.log('添加表结果:', res);
20
24
 
21
- // 添加字段(不需要指定表名,因为已通过db.table设置)
22
- var res2 = await db.addField('age', 'INT', '0');
23
- var res3 = await db.addField('sex', 'INT', '0');
24
- console.log("添加字段结果:", res2, res3);
25
- db.key = "user_id";
26
- var user = await db.getObj({
27
- user_id: 1
28
- });
25
+ // 添加字段(不需要指定表名,因为已通过db.table设置)
26
+ const res2 = await db.addField('age', 'INT', '0');
27
+ const res3 = await db.addField('sex', 'INT', '0');
28
+ console.log('添加字段结果:', res2, res3);
29
+ db.key = 'user_id';
30
+ const user = await db.getObj({
31
+ user_id: 1
32
+ });
29
33
 
30
- if (!user) {
31
- // 如果用户不存在,创建一个新用户
32
- user = {
33
- user_id: 1,
34
- vip: 5,
35
- gm: 5
36
- };
37
- await db.add(user);
38
- } else {
39
- // 如果用户存在,更新其属性
40
- user.vip = 5;
41
- user.gm = 5;
42
- await db.set({ user_id: 1 }, user);
43
- }
44
- // 使用原生的setTimeout实现延迟
45
- await new Promise(resolve => setTimeout(resolve, 3000));
46
- db.size = 1;
47
- var list = await db.get({
48
- user_id: 1
49
- });
50
- console.log("查询结果:", list);
34
+ if (!user) {
35
+ // 如果用户不存在,创建一个新用户
36
+ user = {
37
+ user_id: 1,
38
+ vip: 5,
39
+ gm: 5
40
+ };
41
+ await db.add(user);
42
+ } else {
43
+ // 如果用户存在,更新其属性
44
+ user.vip = 5;
45
+ user.gm = 5;
46
+ await db.set({ user_id: 1 }, user);
47
+ }
48
+ // 使用原生的setTimeout实现延迟
49
+ await new Promise(resolve => setTimeout(resolve, 3000));
50
+ db.size = 1;
51
+ const list = await db.get({
52
+ user_id: 1
53
+ });
54
+ console.log('查询结果:', list);
51
55
  }
52
56
 
53
57
  // 调用test函数并处理异常
54
58
  test().catch(err => {
55
- console.error('测试过程中发生错误:', err);
56
- process.exit(1);
59
+ console.error('测试过程中发生错误:', err);
60
+ process.exit(1);
57
61
  }).finally(() => {
58
- // 确保程序以零退出码结束
59
- process.exit(0);
62
+ // 确保程序以零退出码结束
63
+ process.exit(0);
60
64
  });