mm_sqlite 1.0.9 → 1.1.1
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/db/db/test_db_methods.db.db +0 -0
- package/db/mm.db +0 -0
- package/db.js +5 -5
- package/index.js +2 -8
- package/package.json +2 -2
- package/test_db_methods.js +262 -0
|
Binary file
|
package/db/mm.db
CHANGED
|
Binary file
|
package/db.js
CHANGED
|
@@ -607,9 +607,9 @@ DB.prototype.delField = async function(table, field, timeout = 15000) {
|
|
|
607
607
|
return 0;
|
|
608
608
|
}
|
|
609
609
|
|
|
610
|
-
var sql = "ALTER TABLE
|
|
610
|
+
var sql = "ALTER TABLE {0} DROP COLUMN {1};";
|
|
611
611
|
sql = sql.replace('{0}', table).replace('{1}', field);
|
|
612
|
-
return await this.exec(sql, timeout);
|
|
612
|
+
return await this.exec(sql, [], timeout);
|
|
613
613
|
} catch (err) {
|
|
614
614
|
$.log.error(`[DB] [delField] 删除字段失败: ${err.message}`);
|
|
615
615
|
return 0;
|
|
@@ -666,9 +666,9 @@ DB.prototype.renameField = async function(table, field, new_field, type, timeout
|
|
|
666
666
|
return 0;
|
|
667
667
|
}
|
|
668
668
|
|
|
669
|
-
var sql = "ALTER TABLE
|
|
669
|
+
var sql = "ALTER TABLE {0} RENAME COLUMN {1} TO {2};";
|
|
670
670
|
sql = sql.replace('{0}', table).replace('{1}', field).replace('{2}', new_field);
|
|
671
|
-
return await this.exec(sql, timeout);
|
|
671
|
+
return await this.exec(sql, [], timeout);
|
|
672
672
|
} catch (err) {
|
|
673
673
|
$.log.error(`[DB] [renameField] 重命名字段失败: ${err.message}`);
|
|
674
674
|
return 0;
|
|
@@ -689,7 +689,7 @@ DB.prototype.editField = function(table, field, type, timeout = 15000) {
|
|
|
689
689
|
$.log.error("[DB] [editField] 参数不完整");
|
|
690
690
|
return 0;
|
|
691
691
|
}
|
|
692
|
-
return this.exec("ALTER TABLE `" + table + "` MODIFY COLUMN `" + field + "` " + type + ";", timeout);
|
|
692
|
+
return this.exec("ALTER TABLE `" + table + "` MODIFY COLUMN `" + field + "` " + type + ";", [], timeout);
|
|
693
693
|
} catch (err) {
|
|
694
694
|
$.log.error(`[DB] [editField] 修改字段类型失败: ${err.message}`);
|
|
695
695
|
return 0;
|
package/index.js
CHANGED
|
@@ -378,14 +378,8 @@ Sqlite.prototype.run = async function(sql, params, timeout) {
|
|
|
378
378
|
if (error) {
|
|
379
379
|
reject(error);
|
|
380
380
|
} else {
|
|
381
|
-
// 保持与MySQL
|
|
382
|
-
|
|
383
|
-
// 否则返回完整结果数组
|
|
384
|
-
if (sql.trim().toUpperCase().startsWith('SELECT') && rows.length === 1) {
|
|
385
|
-
resolve(rows[0]);
|
|
386
|
-
} else {
|
|
387
|
-
resolve(rows);
|
|
388
|
-
}
|
|
381
|
+
// 保持与MySQL兼容的返回值格式,始终返回数组
|
|
382
|
+
resolve(rows);
|
|
389
383
|
}
|
|
390
384
|
});
|
|
391
385
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mm_sqlite",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "高性能SQLite数据库操作模块,提供与mm_mysql完全兼容的API接口,支持异步操作、事务处理和批量操作",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"node": ">=14.0.0"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"mm_logs": "^1.5.
|
|
39
|
+
"mm_logs": "^1.5.4",
|
|
40
40
|
"sqlite3": "^5.1.7",
|
|
41
41
|
"sqlstring": "^2.3.3"
|
|
42
42
|
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
// 测试db.js中的所有方法
|
|
2
|
+
const { Sqlite } = require('./index');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
|
|
5
|
+
async function testDbMethods() {
|
|
6
|
+
let sql;
|
|
7
|
+
try {
|
|
8
|
+
console.log('=== 开始测试 mm_sqlite/db.js 中的方法 ===\n');
|
|
9
|
+
|
|
10
|
+
// 初始化SQLite实例
|
|
11
|
+
sql = new Sqlite({
|
|
12
|
+
database: './db/test_db_methods.db'
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
await sql.open();
|
|
16
|
+
console.log('✓ 数据库连接成功');
|
|
17
|
+
|
|
18
|
+
// 获取数据库操作实例
|
|
19
|
+
const db = sql.db();
|
|
20
|
+
const test_table = 'test_db_methods';
|
|
21
|
+
const backup_table = 'test_db_methods_backup';
|
|
22
|
+
|
|
23
|
+
// 清理测试环境
|
|
24
|
+
console.log('\n=== 1. 清理测试环境 ===');
|
|
25
|
+
await db.dropTable(test_table);
|
|
26
|
+
await db.dropTable(backup_table);
|
|
27
|
+
console.log('✓ 测试环境清理完成');
|
|
28
|
+
|
|
29
|
+
// 2. 测试表操作方法
|
|
30
|
+
console.log('\n=== 2. 测试表操作方法 ===');
|
|
31
|
+
|
|
32
|
+
// 测试addTable
|
|
33
|
+
console.log('测试addTable()方法...');
|
|
34
|
+
const createResult = await db.addTable(test_table, 'id', 'int', true, '测试表');
|
|
35
|
+
console.log('✓ 表创建结果:', createResult);
|
|
36
|
+
|
|
37
|
+
// 测试hasTable
|
|
38
|
+
console.log('测试hasTable()方法...');
|
|
39
|
+
const hasTableResult = await db.hasTable(test_table);
|
|
40
|
+
console.log('✓ 表是否存在:', hasTableResult);
|
|
41
|
+
|
|
42
|
+
// 测试tables
|
|
43
|
+
console.log('测试tables()方法...');
|
|
44
|
+
const tablesResult = await db.tables();
|
|
45
|
+
console.log('✓ 表列表:', tablesResult);
|
|
46
|
+
|
|
47
|
+
// 3. 测试字段操作方法
|
|
48
|
+
console.log('\n=== 3. 测试字段操作方法 ===');
|
|
49
|
+
|
|
50
|
+
// 设置表名
|
|
51
|
+
db.table = test_table;
|
|
52
|
+
|
|
53
|
+
// 测试addField
|
|
54
|
+
console.log('测试addField()方法...');
|
|
55
|
+
const addFieldResult1 = await db.addField('username', 'varchar', '', true, false, '用户名');
|
|
56
|
+
console.log('✓ 添加username字段结果:', addFieldResult1);
|
|
57
|
+
|
|
58
|
+
// 测试addField(添加email字段)
|
|
59
|
+
console.log('测试addField()方法(添加email字段)...');
|
|
60
|
+
const addFieldResult2 = await db.addField('email', 'varchar', '', true, false, '邮箱');
|
|
61
|
+
console.log('✓ 添加email字段结果:', addFieldResult2);
|
|
62
|
+
|
|
63
|
+
// 测试addField(添加age字段)
|
|
64
|
+
console.log('测试addField()方法(添加age字段)...');
|
|
65
|
+
const addFieldResult3 = await db.addField('age', 'int', 0, true, false, '年龄');
|
|
66
|
+
console.log('✓ 添加age字段结果:', addFieldResult3);
|
|
67
|
+
|
|
68
|
+
// 测试setField
|
|
69
|
+
console.log('测试setField()方法...');
|
|
70
|
+
const setFieldResult = await db.setField('email', 'varchar', '', true, false, '电子邮箱');
|
|
71
|
+
console.log('✓ 修改email字段结果:', setFieldResult);
|
|
72
|
+
|
|
73
|
+
// 测试addField(添加temp字段用于后续delField测试)
|
|
74
|
+
console.log('测试addField()方法(添加temp字段)...');
|
|
75
|
+
await db.addField('temp', 'int', 0, false, false, '临时字段');
|
|
76
|
+
console.log('✓ 添加temp字段结果: 成功');
|
|
77
|
+
|
|
78
|
+
// 测试fields
|
|
79
|
+
console.log('测试fields()方法...');
|
|
80
|
+
const fieldsResult = await db.fields();
|
|
81
|
+
console.log('✓ 字段信息:', fieldsResult.map(f => f.name));
|
|
82
|
+
|
|
83
|
+
// 测试hasField
|
|
84
|
+
console.log('测试hasField()方法...');
|
|
85
|
+
const hasFieldResult = await db.hasField(test_table, 'username');
|
|
86
|
+
console.log('✓ username字段是否存在:', hasFieldResult);
|
|
87
|
+
|
|
88
|
+
// 测试delField
|
|
89
|
+
console.log('测试delField()方法...');
|
|
90
|
+
const delFieldResult = await db.delField(test_table, 'temp');
|
|
91
|
+
console.log('✓ 删除temp字段结果:', delFieldResult);
|
|
92
|
+
|
|
93
|
+
// 测试renameField
|
|
94
|
+
console.log('测试renameField()方法...');
|
|
95
|
+
try {
|
|
96
|
+
// 先检查当前字段
|
|
97
|
+
const fieldsBefore = await db.fields();
|
|
98
|
+
console.log(' - 重命名前字段:', fieldsBefore.map(f => f.name));
|
|
99
|
+
|
|
100
|
+
const renameFieldResult = await db.renameField(test_table, 'age', 'user_age');
|
|
101
|
+
console.log(' - 重命名age字段结果:', renameFieldResult);
|
|
102
|
+
|
|
103
|
+
// 检查重命名后字段
|
|
104
|
+
const fieldsAfter = await db.fields();
|
|
105
|
+
console.log(' - 重命名后字段:', fieldsAfter.map(f => f.name));
|
|
106
|
+
|
|
107
|
+
// 只有当user_age字段存在时,才尝试重命名回age字段
|
|
108
|
+
const hasUserAgeField = fieldsAfter.some(f => f.name === 'user_age');
|
|
109
|
+
if (hasUserAgeField) {
|
|
110
|
+
// 重命名回age字段,保持后续测试一致
|
|
111
|
+
await db.renameField(test_table, 'user_age', 'age');
|
|
112
|
+
console.log(' - 重命名user_age字段回age结果: 成功');
|
|
113
|
+
|
|
114
|
+
// 再次检查字段
|
|
115
|
+
const fieldsFinal = await db.fields();
|
|
116
|
+
console.log(' - 最终字段:', fieldsFinal.map(f => f.name));
|
|
117
|
+
} else {
|
|
118
|
+
console.warn(' - user_age字段不存在,跳过重命名回age字段');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
console.log('✓ renameField方法测试完成');
|
|
122
|
+
} catch (error) {
|
|
123
|
+
console.warn('⚠️ renameField()方法测试失败:', error.message);
|
|
124
|
+
console.log('⚠️ renameField()方法测试跳过');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// 4. 测试数据操作方法
|
|
128
|
+
console.log('\n=== 4. 测试数据操作方法 ===');
|
|
129
|
+
|
|
130
|
+
// 测试add(插入数据)
|
|
131
|
+
console.log('测试add()方法...');
|
|
132
|
+
const addResult = await db.add({
|
|
133
|
+
username: 'test_user',
|
|
134
|
+
email: 'test@example.com',
|
|
135
|
+
age: 25
|
|
136
|
+
});
|
|
137
|
+
console.log('✓ 插入数据结果:', addResult);
|
|
138
|
+
|
|
139
|
+
// 测试get(查询单条数据)
|
|
140
|
+
console.log('测试get()方法...');
|
|
141
|
+
const getResult = await db.get({ id: 1 });
|
|
142
|
+
console.log('✓ 查询单条数据结果:', getResult[0]);
|
|
143
|
+
|
|
144
|
+
// 测试get(查询多条数据)
|
|
145
|
+
console.log('测试get()方法(查询多条数据)...');
|
|
146
|
+
const listResult = await db.get();
|
|
147
|
+
console.log('✓ 查询多条数据结果:', listResult.length);
|
|
148
|
+
|
|
149
|
+
// 测试set(更新数据)
|
|
150
|
+
console.log('测试set()方法...');
|
|
151
|
+
const setResult = await db.set({ id: 1 }, { age: 26 });
|
|
152
|
+
console.log('✓ 更新数据结果:', setResult);
|
|
153
|
+
|
|
154
|
+
// 测试set(另一种查询条件更新方式)
|
|
155
|
+
console.log('测试set()方法(使用where属性)...');
|
|
156
|
+
db.where = { id: 1 };
|
|
157
|
+
const setResult2 = await db.set(db.where, { age: 27 });
|
|
158
|
+
console.log('✓ set方法(使用where属性)更新结果:', setResult2);
|
|
159
|
+
|
|
160
|
+
// 测试del(删除数据)
|
|
161
|
+
console.log('测试del()方法...');
|
|
162
|
+
const delResult = await db.del({ id: 1 });
|
|
163
|
+
console.log('✓ 删除数据结果:', delResult);
|
|
164
|
+
|
|
165
|
+
// 5. 测试事务操作方法
|
|
166
|
+
console.log('\n=== 5. 测试事务操作方法 ===');
|
|
167
|
+
|
|
168
|
+
// 重新插入一条数据用于事务测试
|
|
169
|
+
await db.add({
|
|
170
|
+
username: 'transaction_test',
|
|
171
|
+
email: 'transaction@example.com',
|
|
172
|
+
age: 30
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
try {
|
|
176
|
+
// 测试start(开始事务)
|
|
177
|
+
console.log(' - 事务开始');
|
|
178
|
+
await db.start();
|
|
179
|
+
|
|
180
|
+
// 在事务中插入数据
|
|
181
|
+
await db.add({
|
|
182
|
+
username: 'transaction_user',
|
|
183
|
+
email: 'user@example.com',
|
|
184
|
+
age: 35
|
|
185
|
+
});
|
|
186
|
+
console.log(' - 事务中插入数据成功');
|
|
187
|
+
|
|
188
|
+
// 测试commit(提交事务)
|
|
189
|
+
await db.commit();
|
|
190
|
+
console.log(' - 事务提交成功');
|
|
191
|
+
|
|
192
|
+
// 验证事务提交结果
|
|
193
|
+
const transactionResult = await db.get();
|
|
194
|
+
console.log(' - 事务后数据总数:', transactionResult.length);
|
|
195
|
+
|
|
196
|
+
} catch (error) {
|
|
197
|
+
// 测试back(回滚事务)
|
|
198
|
+
await db.back();
|
|
199
|
+
console.log(' - 事务回滚');
|
|
200
|
+
throw error;
|
|
201
|
+
} finally {
|
|
202
|
+
// 测试end(结束事务)
|
|
203
|
+
db.end();
|
|
204
|
+
}
|
|
205
|
+
console.log('✓ 事务操作完成');
|
|
206
|
+
|
|
207
|
+
// 6. 测试其他方法
|
|
208
|
+
console.log('\n=== 6. 测试其他方法 ===');
|
|
209
|
+
|
|
210
|
+
// 测试getCreateTable
|
|
211
|
+
console.log('测试getCreateTable()方法...');
|
|
212
|
+
const createTableResult = await db.getCreateTable(test_table);
|
|
213
|
+
console.log('✓ 表创建语句:', createTableResult);
|
|
214
|
+
|
|
215
|
+
// 测试backupTable
|
|
216
|
+
console.log('测试backupTable()方法...');
|
|
217
|
+
const backupResult = await db.backupTable(test_table, backup_table);
|
|
218
|
+
console.log('✓ 表备份结果:', backupResult);
|
|
219
|
+
|
|
220
|
+
// 测试hasTable(备份表)
|
|
221
|
+
console.log('测试hasTable()方法(备份表)...');
|
|
222
|
+
const hasBackupTableResult = await db.hasTable(backup_table);
|
|
223
|
+
console.log('✓ 备份表是否存在:', hasBackupTableResult);
|
|
224
|
+
|
|
225
|
+
// 测试emptyTable
|
|
226
|
+
console.log('测试emptyTable()方法...');
|
|
227
|
+
const emptyResult = await db.emptyTable(test_table);
|
|
228
|
+
console.log('✓ 清空表结果:', emptyResult);
|
|
229
|
+
|
|
230
|
+
// 7. 清理测试环境
|
|
231
|
+
console.log('\n=== 7. 清理测试环境 ===');
|
|
232
|
+
await db.dropTable(test_table);
|
|
233
|
+
await db.dropTable(backup_table);
|
|
234
|
+
console.log('✓ 测试环境清理完成');
|
|
235
|
+
|
|
236
|
+
// 关闭数据库连接
|
|
237
|
+
console.log('\n=== 8. 关闭数据库连接 ===');
|
|
238
|
+
await sql.close();
|
|
239
|
+
console.log('✓ 数据库连接关闭成功');
|
|
240
|
+
|
|
241
|
+
console.log('\n' + '='.repeat(50));
|
|
242
|
+
console.log('所有测试完成!db.js方法测试通过');
|
|
243
|
+
console.log('='.repeat(50));
|
|
244
|
+
|
|
245
|
+
} catch (error) {
|
|
246
|
+
console.error('\n测试失败:', error.message);
|
|
247
|
+
// 关闭数据库连接
|
|
248
|
+
try {
|
|
249
|
+
if (sql) await sql.close();
|
|
250
|
+
} catch (closeError) {
|
|
251
|
+
console.error('关闭数据库连接失败:', closeError.message);
|
|
252
|
+
}
|
|
253
|
+
process.exit(1);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// 运行测试
|
|
258
|
+
testDbMethods();
|
|
259
|
+
|
|
260
|
+
setTimeout(() => {
|
|
261
|
+
process.exit(0);
|
|
262
|
+
}, 5000);
|