@egi/smart-db 2.3.1 → 2.3.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.
Files changed (74) hide show
  1. package/.eslintrc.json +212 -0
  2. package/README.md +2 -0
  3. package/bin/copy-assets +6 -0
  4. package/package.json +1 -1
  5. package/src/drivers/smart-db-better-sqlite3.ts +284 -0
  6. package/src/drivers/smart-db-mysql.ts +159 -0
  7. package/src/drivers/smart-db-mysql2.ts +159 -0
  8. package/src/drivers/smart-db-sqlite3.ts +198 -0
  9. package/src/helpers/extract-db-api.ts +465 -0
  10. package/src/helpers/terser-tree.ts +39 -0
  11. package/src/models/abstract-model.ts +209 -0
  12. package/src/models/smart-db-core-table-model.ts +161 -0
  13. package/src/models/smart-db-dictionary.ts +28 -0
  14. package/src/models/smart-db-log-model.ts +316 -0
  15. package/src/models/smart-db-version-model.ts +316 -0
  16. package/src/models/smart-db-version-view-model.ts +347 -0
  17. package/src/models/sqlite-master-model.ts +140 -0
  18. package/src/models/sqlite-sequence-model.ts +91 -0
  19. package/{smart-db-api.d.ts → src/smart-db-api.ts} +3 -0
  20. package/src/smart-db-globals.ts +136 -0
  21. package/{smart-db-interfaces.d.ts → src/smart-db-interfaces.ts} +82 -34
  22. package/src/smart-db-log.ts +262 -0
  23. package/src/smart-db-sql-build-data.ts +28 -0
  24. package/src/smart-db-upgrade-manager.ts +171 -0
  25. package/src/smart-db.ts +854 -0
  26. package/test/data/sql-engine-tests.json +232 -0
  27. package/test/db/mysql/database-init.sql +11 -0
  28. package/test/db/sqlite3/database-init.sql +11 -0
  29. package/test/exer.js +28 -0
  30. package/test/model/smart-db-dictionary.ts +19 -0
  31. package/test/model/test-table-model.ts +214 -0
  32. package/test/test.js +273 -0
  33. package/test/test2.js +252 -0
  34. package/tsconfig.json +32 -0
  35. package/tsconfig.pro.json +32 -0
  36. package/tsconfig.test-model.json +23 -0
  37. package/drivers/smart-db-better-sqlite3.d.ts +0 -36
  38. package/drivers/smart-db-better-sqlite3.js +0 -1
  39. package/drivers/smart-db-mysql.d.ts +0 -26
  40. package/drivers/smart-db-mysql.js +0 -1
  41. package/drivers/smart-db-mysql2.d.ts +0 -26
  42. package/drivers/smart-db-mysql2.js +0 -1
  43. package/drivers/smart-db-sqlite3.d.ts +0 -30
  44. package/drivers/smart-db-sqlite3.js +0 -1
  45. package/helpers/extract-db-api.d.ts +0 -1
  46. package/helpers/extract-db-api.js +0 -1
  47. package/models/abstract-model.d.ts +0 -22
  48. package/models/abstract-model.js +0 -1
  49. package/models/smart-db-core-table-model.d.ts +0 -35
  50. package/models/smart-db-core-table-model.js +0 -1
  51. package/models/smart-db-dictionary.d.ts +0 -13
  52. package/models/smart-db-dictionary.js +0 -1
  53. package/models/smart-db-log-model.d.ts +0 -65
  54. package/models/smart-db-log-model.js +0 -1
  55. package/models/smart-db-version-model.d.ts +0 -65
  56. package/models/smart-db-version-model.js +0 -1
  57. package/models/smart-db-version-view-model.d.ts +0 -71
  58. package/models/smart-db-version-view-model.js +0 -1
  59. package/models/sqlite-master-model.d.ts +0 -36
  60. package/models/sqlite-master-model.js +0 -1
  61. package/models/sqlite-sequence-model.d.ts +0 -24
  62. package/models/sqlite-sequence-model.js +0 -1
  63. package/smart-db-api.js +0 -1
  64. package/smart-db-globals.d.ts +0 -22
  65. package/smart-db-globals.js +0 -1
  66. package/smart-db-interfaces.js +0 -1
  67. package/smart-db-log.d.ts +0 -58
  68. package/smart-db-log.js +0 -1
  69. package/smart-db-sql-build-data.d.ts +0 -9
  70. package/smart-db-sql-build-data.js +0 -1
  71. package/smart-db-upgrade-manager.d.ts +0 -13
  72. package/smart-db-upgrade-manager.js +0 -1
  73. package/smart-db.d.ts +0 -67
  74. package/smart-db.js +0 -1
@@ -0,0 +1,232 @@
1
+ {
2
+ "tests": {
3
+ "Simple Full Table Select": {
4
+ "table": "TestTableModel",
5
+ "query": {}
6
+ },
7
+ "Order By": {
8
+ "table": "TestTableModel",
9
+ "query": {
10
+ "orderBy": [
11
+ "number",
12
+ "string desc"
13
+ ]
14
+ }
15
+ },
16
+ "Nested Expression Braces": {
17
+ "table": "TestTableModel",
18
+ "query": {
19
+ "where": {
20
+ "number": 2,
21
+ "or": [
22
+ {
23
+ "string": {
24
+ "operation": "IS NULL"
25
+ }
26
+ },
27
+ {
28
+ "string": "Ranco_Antonio_Vercelli"
29
+ }
30
+ ]
31
+ }
32
+ }
33
+ },
34
+ "Constant Values": {
35
+ "table": "TestTableModel",
36
+ "query": {
37
+ "fields": [
38
+ "number",
39
+ 1,
40
+ "'bla'",
41
+ {
42
+ "operation": "VALUE",
43
+ "value": "ss",
44
+ "alias": "test"
45
+ }
46
+ ],
47
+ "where": {
48
+ "number": 5,
49
+ "expression": [
50
+ {
51
+ "compare": "number",
52
+ "operation": "GT",
53
+ "with": 6
54
+ },
55
+ {
56
+ "compare": "number",
57
+ "operation": "LT",
58
+ "with": 10
59
+ }
60
+ ]
61
+ }
62
+ }
63
+ },
64
+ "Complex Mixed Query": {
65
+ "table": "TestTableModel",
66
+ "query": {
67
+ "where": {
68
+ "expression": [
69
+ {
70
+ "compare": "number",
71
+ "with": 42
72
+ },
73
+ {
74
+ "compare": "number",
75
+ "with": 21
76
+ }
77
+ ],
78
+ "or": {
79
+ "number": 22,
80
+ "expression": [
81
+ {
82
+ "compare": "number",
83
+ "with": 43
84
+ },
85
+ {
86
+ "compare": "string",
87
+ "with": {
88
+ "operation": "VALUE",
89
+ "value": "ss"
90
+ }
91
+ }
92
+ ]
93
+ }
94
+ },
95
+ "fields": [
96
+ "number",
97
+ {
98
+ "operation": "FIELD",
99
+ "value": "boolean",
100
+ "alias": "t1"
101
+ },
102
+ {
103
+ "operation": "VALUE",
104
+ "value": "ss",
105
+ "alias": "test"
106
+ },
107
+ {
108
+ "operation": "COUNT",
109
+ "value": "*",
110
+ "alias": "bla"
111
+ },
112
+ {
113
+ "operation": "COALESCE",
114
+ "value": [
115
+ "number",
116
+ 44
117
+ ],
118
+ "alias": "xset"
119
+ }
120
+ ]
121
+ }
122
+ }
123
+ },
124
+ "results": {
125
+ "Simple Full Table Select": {
126
+ "sqlite3": {
127
+ "sql": "SELECT * FROM test_table",
128
+ "values": []
129
+ },
130
+ "better-sqlite3": {
131
+ "sql": "SELECT * FROM test_table",
132
+ "values": []
133
+ },
134
+ "mysql": {
135
+ "sql": "SELECT * FROM test_table",
136
+ "values": []
137
+ }
138
+ },
139
+ "Order By": {
140
+ "sqlite3": {
141
+ "sql": "SELECT * FROM test_table ORDER BY tst_number, tst_string DESC",
142
+ "values": []
143
+ },
144
+ "better-sqlite3": {
145
+ "sql": "SELECT * FROM test_table ORDER BY tst_number, tst_string DESC",
146
+ "values": []
147
+ },
148
+ "mysql": {
149
+ "sql": "SELECT * FROM test_table ORDER BY tst_number, tst_string DESC",
150
+ "values": []
151
+ }
152
+ },
153
+ "Constant Values": {
154
+ "sqlite3": {
155
+ "sql": "SELECT tst_number, 1, 'bla', 'ss' as \"test\" FROM test_table WHERE tst_number = ? AND tst_number > ? AND tst_number < ?",
156
+ "values": [
157
+ 5,
158
+ 6,
159
+ 10
160
+ ]
161
+ },
162
+ "better-sqlite3": {
163
+ "sql": "SELECT tst_number, 1, 'bla', 'ss' as \"test\" FROM test_table WHERE tst_number = ? AND tst_number > ? AND tst_number < ?",
164
+ "values": [
165
+ 5,
166
+ 6,
167
+ 10
168
+ ]
169
+ },
170
+ "mysql": {
171
+ "sql": "SELECT tst_number, 1, 'bla', 'ss' as `test` FROM test_table WHERE tst_number = ? AND tst_number > ? AND tst_number < ?",
172
+ "values": [
173
+ 5,
174
+ 6,
175
+ 10
176
+ ]
177
+ }
178
+ },
179
+ "Complex Mixed Query": {
180
+ "sqlite3": {
181
+ "sql": "SELECT tst_number, tst_boolean as \"t1\", 'ss' as \"test\", COUNT(*) as \"bla\", COALESCE(tst_number,44) as \"xset\" FROM test_table WHERE tst_number = ? AND tst_number = ? AND (tst_number = ? OR tst_number = ? OR tst_string = 'ss')",
182
+ "values": [
183
+ 42,
184
+ 21,
185
+ 22,
186
+ 43
187
+ ]
188
+ },
189
+ "better-sqlite3": {
190
+ "sql": "SELECT tst_number, tst_boolean as \"t1\", 'ss' as \"test\", COUNT(*) as \"bla\", COALESCE(tst_number,44) as \"xset\" FROM test_table WHERE tst_number = ? AND tst_number = ? AND (tst_number = ? OR tst_number = ? OR tst_string = 'ss')",
191
+ "values": [
192
+ 42,
193
+ 21,
194
+ 22,
195
+ 43
196
+ ]
197
+ },
198
+ "mysql": {
199
+ "sql": "SELECT tst_number, tst_boolean as `t1`, 'ss' as `test`, COUNT(*) as `bla`, COALESCE(tst_number,44) as `xset` FROM test_table WHERE tst_number = ? AND tst_number = ? AND (tst_number = ? OR tst_number = ? OR tst_string = 'ss')",
200
+ "values": [
201
+ 42,
202
+ 21,
203
+ 22,
204
+ 43
205
+ ]
206
+ }
207
+ },
208
+ "Nested Expression Braces": {
209
+ "sqlite3": {
210
+ "sql": "SELECT * FROM test_table WHERE tst_number = ? AND (tst_string IS NULL OR tst_string LIKE ?)",
211
+ "values": [
212
+ 2,
213
+ "Ranco_Antonio_Vercelli"
214
+ ]
215
+ },
216
+ "better-sqlite3": {
217
+ "sql": "SELECT * FROM test_table WHERE tst_number = ? AND (tst_string IS NULL OR tst_string LIKE ?)",
218
+ "values": [
219
+ 2,
220
+ "Ranco_Antonio_Vercelli"
221
+ ]
222
+ },
223
+ "mysql": {
224
+ "sql": "SELECT * FROM test_table WHERE tst_number = ? AND (tst_string IS NULL OR tst_string LIKE ?)",
225
+ "values": [
226
+ 2,
227
+ "Ranco_Antonio_Vercelli"
228
+ ]
229
+ }
230
+ }
231
+ }
232
+ }
@@ -0,0 +1,11 @@
1
+ create table test_table
2
+ (
3
+ tst_id integer primary key auto_increment,
4
+ tst_string varchar(50),
5
+ tst_number integer,
6
+ tst_date date,
7
+ tst_boolean integer(1)
8
+ );
9
+
10
+ insert into smart_db_version (ver_sequence, ver_module, ver_version, ver_sub_version, ver_revision, ver_release_type)
11
+ values (0, 'smart-db-test', '1', '0', '0', null);
@@ -0,0 +1,11 @@
1
+ create table test_table
2
+ (
3
+ tst_id integer primary key autoincrement,
4
+ tst_string varchar(50),
5
+ tst_number integer,
6
+ tst_date date,
7
+ tst_boolean integer(1)
8
+ );
9
+
10
+ insert into smart_db_version (ver_sequence, ver_module, ver_version, ver_sub_version, ver_revision, ver_release_type)
11
+ values (0, 'smart-db-test', '1', '0', '0', null);
package/test/exer.js ADDED
@@ -0,0 +1,28 @@
1
+ console.log(BetterSqlite3, BetterSqlite3a);
2
+
3
+ const {describe, it, done, before} = require("mocha");
4
+
5
+ describe("Promise Tests", () => {
6
+ let result = false;
7
+
8
+ it("simple resolve 1", () => {
9
+ return new Promise((resolve, reject) => {
10
+ setTimeout(() => {
11
+ result = true;
12
+ resolve();
13
+ });
14
+ });
15
+ });
16
+ it("simple resolve 2", () => {
17
+ return new Promise((resolve, reject) => {
18
+ console.log(result);
19
+ resolve();
20
+ });
21
+ });
22
+ it("simple resolve 3", () => {
23
+ return new Promise((resolve, reject) => {
24
+ console.log(result);
25
+ resolve();
26
+ });
27
+ });
28
+ });
@@ -0,0 +1,19 @@
1
+ import {AbstractModel} from "../../src/models/abstract-model";
2
+ import {TestTableModel, TestTableModelData} from "./test-table-model";
3
+
4
+ interface SmartDbDictionaryEntry {
5
+ cls: typeof TestTableModel;
6
+ }
7
+
8
+ export class SmartDbDictionary {
9
+ static models: { [relation: string]: SmartDbDictionaryEntry; } = {
10
+ TestTableModel: {
11
+ cls: TestTableModel
12
+ }
13
+ };
14
+
15
+ static createModel(relationName: string): AbstractModel<TestTableModel, TestTableModelData> {
16
+ const entry = SmartDbDictionary.models[relationName];
17
+ return entry && entry.cls && new (entry.cls)();
18
+ }
19
+ }
@@ -0,0 +1,214 @@
1
+ /* eslint-disable @typescript-eslint/member-ordering */
2
+ import {AbstractModel} from "../../src/models/abstract-model";
3
+ import {GenericModelData, ModelAttributeMap} from "../../src/smart-db-interfaces";
4
+
5
+ export interface TestTableModelData extends Record<string, any> {
6
+ id?: number;
7
+ string?: string;
8
+ number?: number;
9
+ date?: Date;
10
+ boolean?: boolean;
11
+ }
12
+
13
+ export class TestTableModel extends AbstractModel<TestTableModel, TestTableModelData> {
14
+ private _id?: number;
15
+ private _string?: string;
16
+ private _number?: number;
17
+ private _date?: Date;
18
+ private _boolean?: boolean;
19
+
20
+ static readonly attributeMap: ModelAttributeMap = {
21
+ id: {
22
+ alias: "tst_id",
23
+ typeScriptStyle: true,
24
+ type: "number",
25
+ attribute: "_id"
26
+ },
27
+ tst_id: {
28
+ physical: true,
29
+ type: "number",
30
+ attribute: "_id"
31
+ },
32
+ string: {
33
+ alias: "tst_string",
34
+ typeScriptStyle: true,
35
+ type: "string",
36
+ attribute: "_string"
37
+ },
38
+ tst_string: {
39
+ physical: true,
40
+ type: "string",
41
+ attribute: "_string"
42
+ },
43
+ number: {
44
+ alias: "tst_number",
45
+ typeScriptStyle: true,
46
+ type: "number",
47
+ attribute: "_number"
48
+ },
49
+ tst_number: {
50
+ physical: true,
51
+ type: "number",
52
+ attribute: "_number"
53
+ },
54
+ date: {
55
+ alias: "tst_date",
56
+ typeScriptStyle: true,
57
+ type: "Date",
58
+ attribute: "_date"
59
+ },
60
+ tst_date: {
61
+ physical: true,
62
+ type: "Date",
63
+ attribute: "_date"
64
+ },
65
+ boolean: {
66
+ alias: "tst_boolean",
67
+ typeScriptStyle: true,
68
+ type: "boolean",
69
+ attribute: "_boolean"
70
+ },
71
+ tst_boolean: {
72
+ physical: true,
73
+ type: "boolean",
74
+ attribute: "_boolean"
75
+ }
76
+ };
77
+
78
+ static getClassName(): string {
79
+ return "TestTableModel";
80
+ }
81
+
82
+ static getTableName(): string {
83
+ return "test_table";
84
+ }
85
+
86
+ static getPrimaryKey(): string {
87
+ return "tst_id";
88
+ }
89
+
90
+ static from(other: AbstractModel<TestTableModel, TestTableModelData> | GenericModelData): TestTableModel {
91
+ let value: TestTableModel = null;
92
+ if (other) {
93
+ value = new TestTableModel();
94
+ if (other.getClassName && (<AbstractModel<TestTableModel, TestTableModelData>>other).getClassName() == "TestTableModel") {
95
+ Object.assign(value, other);
96
+ } else {
97
+ value.assign(other as GenericModelData);
98
+ }
99
+ }
100
+ return value;
101
+ }
102
+
103
+ public clone(): TestTableModel {
104
+ return TestTableModel.from(this);
105
+ }
106
+
107
+ public getClassName(): string {
108
+ return "TestTableModel";
109
+ }
110
+
111
+ public getTableName(): string {
112
+ return "test_table";
113
+ }
114
+
115
+ public getPrimaryKey(): string {
116
+ return "tst_id";
117
+ }
118
+
119
+ public getAttributeMap(): ModelAttributeMap {
120
+ return TestTableModel.attributeMap;
121
+ }
122
+
123
+ get boolean(): boolean {
124
+ return this._boolean;
125
+ }
126
+
127
+ set boolean(boolean: boolean) {
128
+ this._boolean = boolean;
129
+ }
130
+
131
+ get date(): Date {
132
+ return this._date;
133
+ }
134
+
135
+ set date(date: Date) {
136
+ this._date = date;
137
+ }
138
+
139
+ // noinspection FunctionNamingConventionJS
140
+ get id(): number {
141
+ return this._id;
142
+ }
143
+
144
+ // noinspection FunctionNamingConventionJS
145
+ set id(id: number) {
146
+ this._id = id;
147
+ }
148
+
149
+ get number(): number {
150
+ return this._number;
151
+ }
152
+
153
+ set number(number: number) {
154
+ this._number = number;
155
+ }
156
+
157
+ get string(): string {
158
+ return this._string;
159
+ }
160
+
161
+ set string(string: string) {
162
+ this._string = string;
163
+ }
164
+
165
+ // noinspection FunctionNamingConventionJS
166
+ get tst_boolean(): boolean {
167
+ return this._boolean;
168
+ }
169
+
170
+ // noinspection FunctionNamingConventionJS
171
+ set tst_boolean(boolean: boolean) {
172
+ this._boolean = boolean;
173
+ }
174
+
175
+ // noinspection FunctionNamingConventionJS
176
+ get tst_date(): Date {
177
+ return this._date;
178
+ }
179
+
180
+ // noinspection FunctionNamingConventionJS
181
+ set tst_date(date: Date) {
182
+ this._date = date;
183
+ }
184
+
185
+ // noinspection FunctionNamingConventionJS
186
+ get tst_id(): number {
187
+ return this._id;
188
+ }
189
+
190
+ // noinspection FunctionNamingConventionJS
191
+ set tst_id(id: number) {
192
+ this._id = id;
193
+ }
194
+
195
+ // noinspection FunctionNamingConventionJS
196
+ get tst_number(): number {
197
+ return this._number;
198
+ }
199
+
200
+ // noinspection FunctionNamingConventionJS
201
+ set tst_number(number: number) {
202
+ this._number = number;
203
+ }
204
+
205
+ // noinspection FunctionNamingConventionJS
206
+ get tst_string(): string {
207
+ return this._string;
208
+ }
209
+
210
+ // noinspection FunctionNamingConventionJS
211
+ set tst_string(string: string) {
212
+ this._string = string;
213
+ }
214
+ }