mm_sqlite 1.3.2 → 1.3.3

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/sql.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "user_account",
3
+ "title": "用户信息",
4
+ "table": "user_account",
5
+ "key": "user_id",
6
+ "orderby_default": "`user_id` desc",
7
+ "field_default": "`user_id`,`state`,`vip`,`gm`,`mc`,`referee_id`,`create_time`,`login_time`,`invite_code`,`phone`,`phone_state`,`username`,`nickname`,`email`,`email_state`,`user_group`,`user_admin`,`login_ip`,`signature`,`avatar`,`friends`,`admin_group`",
8
+ "method": "get",
9
+ "query": {
10
+ "state_min": "`state` >= '{0}'",
11
+ "state_max": "`state` <= '{0}'",
12
+ "vip_min": "`vip` >= '{0}'",
13
+ "vip_max": "`vip` <= '{0}'",
14
+ "gm_min": "`gm` >= '{0}'",
15
+ "gm_max": "`gm` <= '{0}'",
16
+ "mc_min": "`mc` >= '{0}'",
17
+ "mc_max": "`mc` <= '{0}'",
18
+ "create_time_min": "`create_time` >= '{0}'",
19
+ "create_time_max": "`create_time` <= '{0}'",
20
+ "login_time_min": "`login_time` >= '{0}'",
21
+ "login_time_max": "`login_time` <= '{0}'",
22
+ "salt": "`salt` like '%{0}%'",
23
+ "invite_code": "`invite_code` like '%{0}%'",
24
+ "phone": "`phone` like '%{0}%'",
25
+ "username": "`username` like '%{0}%'",
26
+ "nickname": "`nickname` like '%{0}%'",
27
+ "password": "`password` like '%{0}%'",
28
+ "email": "`email` like '%{0}%'",
29
+ "user_group": "`user_group` like '%{0}%'",
30
+ "user_admin": "`user_admin` like '%{0}%'",
31
+ "login_ip": "`login_ip` like '%{0}%'",
32
+ "signature": "`signature` like '%{0}%'",
33
+ "avatar": "`avatar` like '%{0}%'",
34
+ "friends": "`friends` like '%{0}%'",
35
+ "admin_group": "`admin_group` like '%{0}%'"
36
+ },
37
+ "query_default": {
38
+ "user_id": "`user_id` = {user_id}"
39
+ },
40
+ "update": {
41
+ "state_add": "`state` = `state` + '{0}'",
42
+ "vip_add": "`vip` = `vip` + '{0}'",
43
+ "gm_add": "`gm` = `gm` + '{0}'",
44
+ "mc_add": "`mc` = `mc` + '{0}'"
45
+ },
46
+ "filter": {
47
+ "table": "table",
48
+ "page": "page",
49
+ "size": "size",
50
+ "method": "method",
51
+ "orderby": "orderby",
52
+ "field": "field",
53
+ "count_ret": "count_ret",
54
+ "user_id": "user_id"
55
+ }
56
+ }
package/test_backup.js ADDED
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @fileOverview 备份恢复功能测试脚本
3
+ * @version 1.0
4
+ */
5
+
6
+ const {Sql} = require('./sql');
7
+
8
+
9
+ // 模拟数据库操作函数
10
+ async function mockRun(sql) {
11
+ console.log('执行查询SQL:', sql);
12
+
13
+ // 模拟返回数据
14
+ if (sql.includes('SELECT')) {
15
+ return [
16
+ { id: 1, name: '张三', age: 25 },
17
+ { id: 2, name: '李四', age: 30 },
18
+ { id: 3, name: '王五', age: 28 }
19
+ ];
20
+ }
21
+
22
+ if (sql.includes('count')) {
23
+ return [{ count: 3 }];
24
+ }
25
+
26
+ return [];
27
+ }
28
+
29
+ async function mockExec(sql) {
30
+ console.log('执行更新SQL:', sql);
31
+ return { affectedRows: 1, insertId: 1 };
32
+ }
33
+
34
+ async function testBackupRestore() {
35
+ console.log('=== 测试备份恢复功能 ===');
36
+
37
+ // 创建 SQL 实例
38
+ const sql = new Sql(mockRun, mockExec);
39
+ sql.table = 'test_table';
40
+
41
+ const backupFile = './backup/test_backup.sql';
42
+
43
+ try {
44
+ // 测试备份
45
+ console.log('\n1. 测试备份功能...');
46
+ const backupResult = await sql.backup(backupFile);
47
+ console.log('备份结果:', backupResult ? '成功' : '失败');
48
+
49
+ if (backupResult) {
50
+ // 读取备份文件内容
51
+ const fs = require('fs');
52
+ if (fs.existsSync(backupFile)) {
53
+ const content = fs.readFileSync(backupFile, 'utf8');
54
+ console.log('备份文件内容:');
55
+ console.log(content);
56
+ }
57
+ }
58
+
59
+ // 测试恢复
60
+ console.log('\n2. 测试恢复功能...');
61
+ const restoreResult = await sql.restore(backupFile);
62
+ console.log('恢复结果:', restoreResult ? '成功' : '失败');
63
+
64
+ console.log('\n=== 测试完成 ===');
65
+
66
+ } catch (error) {
67
+ console.error('测试出错:', error.message);
68
+ }
69
+ }
70
+
71
+ // 运行测试
72
+ if (require.main === module) {
73
+ testBackupRestore();
74
+ }
75
+
76
+ module.exports = {
77
+ testBackupRestore
78
+ };
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,86 @@
1
+ /**
2
+ * SQLite SQL函数测试文件
3
+ * @file test_sql_functions.js
4
+ * @description 直接测试Sql类的SQL生成函数,不涉及数据库连接
5
+ */
6
+
7
+ // 引入依赖
8
+ const { Sql } = require('./sql.js');
9
+
10
+ function test() {
11
+ console.log('=== 测试SQLite SQL函数 ===\n');
12
+
13
+ // 创建Sql实例
14
+ const db = new Sql(null, null);
15
+ db.table = 'test_table';
16
+
17
+ // 测试1: 测试toQuery函数
18
+ console.log('1. 测试toQuery函数:');
19
+ const query_sql = db.toQuery('`id` = 1', '`id` DESC', 'title, regex_field');
20
+ console.log(' toQuery生成的SQL:', query_sql);
21
+
22
+ // 测试2: 测试包含特殊字符的查询
23
+ console.log('\n2. 测试包含特殊字符的查询:');
24
+ const special_query = db.toQuery('`title` LIKE \'%test%\'', null, '*');
25
+ console.log(' 特殊字符查询SQL:', special_query);
26
+
27
+ // 测试3: 测试toAddSql函数
28
+ console.log('\n3. 测试toAddSql函数:');
29
+ const add_sql = db.toAddSql({
30
+ title: '测试添加标题',
31
+ content: '测试添加内容',
32
+ regex_field: '~\\d+$',
33
+ special_chars: "'test' AND 1=1"
34
+ });
35
+ console.log(' toAddSql生成的SQL:', add_sql);
36
+
37
+ // 测试4: 测试toSetSql函数
38
+ console.log('\n4. 测试toSetSql函数:');
39
+ const set_sql = db.toSetSql(
40
+ { id: 1 },
41
+ { title: '更新标题', regex_field: '~\\d+$' }
42
+ );
43
+ console.log(' toSetSql生成的SQL:', set_sql);
44
+
45
+ // 测试5: 测试toDelSql函数
46
+ console.log('\n5. 测试toDelSql函数:');
47
+ const del_sql = db.toDelSql({ id: 999 });
48
+ console.log(' toDelSql生成的SQL:', del_sql);
49
+
50
+ // 测试6: 测试toWhere函数
51
+ console.log('\n6. 测试toWhere函数:');
52
+ const where_sql = db.toWhere({
53
+ id: 1,
54
+ title_like: 'test',
55
+ regex_field: '~\\d+$'
56
+ });
57
+ console.log(' toWhere生成的SQL:', where_sql);
58
+
59
+ // 测试7: 测试toSet函数
60
+ console.log('\n7. 测试toSet函数:');
61
+ const set_str = db.toSet({
62
+ title: '新标题',
63
+ content: '新内容',
64
+ regex_field: '~\\d+$'
65
+ });
66
+ console.log(' toSet生成的SQL:', set_str);
67
+
68
+ // 测试8: 测试addSql函数(只生成SQL,不执行)
69
+ console.log('\n8. 测试addSql函数:');
70
+ const add_sql_str = `INSERT INTO \`${db.table}\` (\`title\`, \`content\`, \`regex_field\`) VALUES ('测试标题', '测试内容', '~\\\\d+$');`;
71
+ console.log(' addSql生成的SQL:', add_sql_str);
72
+
73
+ // 测试9: 测试setSql函数(只生成SQL,不执行)
74
+ console.log('\n9. 测试setSql函数:');
75
+ const set_sql_str = `UPDATE \`${db.table}\` SET \`title\` = '更新标题', \`regex_field\` = '~\\\\d+$' WHERE \`id\` = 1;`;
76
+ console.log(' setSql生成的SQL:', set_sql_str);
77
+
78
+ // 测试10: 测试delSql函数(只生成SQL,不执行)
79
+ console.log('\n10. 测试delSql函数:');
80
+ const del_sql_str = `DELETE FROM \`${db.table}\` WHERE \`id\` = 999;`;
81
+ console.log(' delSql生成的SQL:', del_sql_str);
82
+
83
+ console.log('\n=== 所有SQL函数测试完成 ===');
84
+ }
85
+
86
+ test();
package/test_sqlite.js ADDED
@@ -0,0 +1,104 @@
1
+ /**
2
+ * SQLite数据库操作类测试文件
3
+ * @file test_sqlite.js
4
+ * @description 测试Sqlite类的各项功能,特别是正则表达式写入
5
+ */
6
+
7
+ // 引入依赖
8
+ const { SQLite } = require('./index.js');
9
+
10
+ async function test() {
11
+ const sqlite = new SQLite({
12
+ file: ':memory:', // 使用内存数据库进行测试
13
+ debug: true
14
+ });
15
+
16
+ await sqlite.open();
17
+ console.log('SQLite数据库连接成功');
18
+
19
+ // 创建测试表
20
+ await sqlite.exec(`
21
+ CREATE TABLE IF NOT EXISTS test_table (
22
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
23
+ title TEXT,
24
+ content TEXT,
25
+ regex_field TEXT,
26
+ special_chars TEXT
27
+ )
28
+ `);
29
+ console.log('测试表创建成功');
30
+
31
+ const db = sqlite.db();
32
+ db.table = 'test_table';
33
+
34
+ console.log('=== 测试SQLite数据库操作 ===\n');
35
+
36
+ // 测试1: 普通字符串写入
37
+ console.log('1. 测试普通字符串写入:');
38
+ const result1 = await db.set({
39
+ id: 1
40
+ }, {
41
+ title: "测试标题",
42
+ content: "测试内容"
43
+ });
44
+ console.log(' 普通字符串更新结果:', result1, db.error);
45
+
46
+ // 测试2: 正则表达式字符串写入
47
+ console.log('\n2. 测试正则表达式字符串写入:');
48
+ const regex_str = "~\\d+$";
49
+ console.log(' 正则表达式字符串:', regex_str);
50
+
51
+ const result2 = await db.set({
52
+ id: 1
53
+ }, {
54
+ title: regex_str,
55
+ regex_field: regex_str
56
+ });
57
+ console.log(' 正则表达式更新结果:', result2, db.error);
58
+
59
+ // 测试3: 查看当前数据库中的值
60
+ console.log('\n3. 查看当前数据:');
61
+ const data = await db.get({
62
+ id: 1
63
+ });
64
+ console.log(' 当前数据:', data);
65
+
66
+ // 测试4: 测试toQuery函数
67
+ console.log('\n4. 测试toQuery函数:');
68
+ const query_sql = db.toQuery('`id` = 1', '`id` DESC', 'title, regex_field');
69
+ console.log(' toQuery生成的SQL:', query_sql);
70
+
71
+ // 测试5: 测试包含特殊字符的查询
72
+ console.log('\n5. 测试包含特殊字符的查询:');
73
+ const special_query = db.toQuery('`title` LIKE \'%test%\'', null, '*');
74
+ console.log(' 特殊字符查询SQL:', special_query);
75
+
76
+ // 测试6: 测试toAddSql函数
77
+ console.log('\n6. 测试toAddSql函数:');
78
+ const add_sql = db.toAddSql({
79
+ title: '测试添加标题',
80
+ content: '测试添加内容',
81
+ regex_field: '~\\d+$',
82
+ special_chars: "'test' AND 1=1"
83
+ });
84
+ console.log(' toAddSql生成的SQL:', add_sql);
85
+
86
+ // 测试7: 测试toSetSql函数
87
+ console.log('\n7. 测试toSetSql函数:');
88
+ const set_sql = db.toSetSql(
89
+ { id: 1 },
90
+ { title: '更新标题', regex_field: '~\\d+$' }
91
+ );
92
+ console.log(' toSetSql生成的SQL:', set_sql);
93
+
94
+ // 测试8: 测试toDelSql函数
95
+ console.log('\n8. 测试toDelSql函数:');
96
+ const del_sql = db.toDelSql({ id: 999 });
97
+ console.log(' toDelSql生成的SQL:', del_sql);
98
+
99
+ console.log('\n=== 所有SQLite函数测试完成 ===');
100
+
101
+ await sqlite.close();
102
+ }
103
+
104
+ test().catch(console.error);
package/config.json DELETED
File without changes
package/db/mm.db DELETED
Binary file
package/test.js DELETED
@@ -1,84 +0,0 @@
1
- const Sqlite = require('./index.js').Sqlite;
2
-
3
- // 测试Sqlite
4
- async function test() {
5
- var ml = new Sqlite();
6
- ml.open();
7
- ml.table = "test9";
8
- var bl;
9
- bl = await ml.addTable('test9', 'uid', 'int');
10
- // bl = await ml.field_del('uid', 'int');
11
- // console.log("删除字段:" + bl, ml.error);
12
- // bl = await ml.field_add('uid', 'int', true);
13
- console.log("添加字段:" + bl, ml.error);
14
- bl = await ml.field_add('name', 'str');
15
- console.log("添加字段:" + bl, ml.error);
16
- bl = await ml.field_add('password', 'str');
17
- console.log("添加字段:" + bl, ml.error);
18
- bl = await ml.field_add('username', 'str');
19
- console.log("添加字段:" + bl, ml.error);
20
-
21
- var addArr = [];
22
- for (var i = 1; i <= 9; i++) {
23
- var add = {
24
- name: "test" + i,
25
- username: "t" + i,
26
- password: "a" + i
27
- };
28
- addArr.push(add);
29
- }
30
- var ret = await ml.addList(addArr);
31
- console.log("添加:" + $.toJson(ret), ml.error);
32
-
33
- var setArr = [];
34
- for (var i = 1; i <= addArr.length; i++) {
35
- setArr.push({
36
- query: {
37
- name: "test" + i
38
- },
39
- item: {
40
- username: "username" + i,
41
- password: "password" + i
42
- }
43
- });
44
- }
45
- ret = await ml.setList(setArr);
46
- console.log("修改:" + $.toJson(ret), ml.error);
47
-
48
- var delArr = [];
49
- for (var i = 1; i <= addArr.length; i++) {
50
- if (i % 2 == 0) {
51
- delArr.push({
52
- query: {
53
- username: "username" + i
54
- }
55
- });
56
- }
57
- }
58
- ret = await ml.delList(delArr);
59
- console.log("删除:" + $.toJson(ret), ml.error);
60
-
61
- ret = await ml.getObj({ }, 'uid');
62
- console.log("获取:" + $.toJson(ret), ml.error);
63
- }
64
- test();
65
- //
66
- // async function testTable() {
67
- // var ml = new Sqlite();
68
- // ml.open();
69
- // var bl;
70
- // bl = await ml.addTable('test6', 'uid', 'int');
71
- // console.log("添加表" + bl, ml.error);
72
- // var arr = await ml.tables('t*');
73
- // console.log("获取表" + $.toJson(arr), ml.error);
74
- // var list = await ml.fields('test');
75
- // console.log("获取字段信息" + $.toJson(list), ml.error);
76
- //
77
- // ml.table = 'test';
78
- // bl = await ml.field_del('set6');
79
- // console.log("删除字段" + bl, ml.error);
80
- // bl = await ml.field_add('set6', 'str');
81
- // console.log("添加字段" + bl, ml.error);
82
- // }
83
- //
84
- // testTable();