multi-db-orm 3.1.0 → 3.1.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/engines/bigquerydb.js +3 -3
- package/engines/firestoredb.js +35 -20
- package/engines/hanadb.js +26 -11
- package/engines/metrics.d.ts +1 -0
- package/engines/metrics.js +82 -2
- package/engines/mongodb.js +14 -7
- package/engines/multidb.d.ts +2 -0
- package/engines/multidb.js +5 -0
- package/engines/mysqldb.js +25 -12
- package/engines/oracledb.js +25 -9
- package/engines/sqlitedb.js +25 -12
- package/package.json +3 -3
- package/test/test.js +3 -6
package/engines/bigquerydb.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const { MultiDbORM } = require("
|
|
2
|
-
const { Metrics } = require("
|
|
3
|
-
const { Sync } = require("
|
|
1
|
+
const { MultiDbORM } = require("./multidb");
|
|
2
|
+
const { Metrics } = require("./metrics");
|
|
3
|
+
const { Sync } = require("../sync");
|
|
4
4
|
// const { MultiDbORM } = require('./multidb');
|
|
5
5
|
|
|
6
6
|
class BigQueryDB {
|
package/engines/firestoredb.js
CHANGED
|
@@ -101,13 +101,18 @@ class FireStoreDB extends MultiDbORM {
|
|
|
101
101
|
|
|
102
102
|
async get(modelname, filter, options) {
|
|
103
103
|
var result = [];
|
|
104
|
+
const span = this.metrics.getSpan();
|
|
104
105
|
var snapshot = await this._get(modelname, filter, options);
|
|
105
|
-
if (snapshot == undefined)
|
|
106
|
-
|
|
106
|
+
if (snapshot == undefined) {
|
|
107
|
+
this.metrics.get(modelname, filter, options, span);
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
this.metrics.get(modelname, filter, options, span);
|
|
107
111
|
let that = this;
|
|
108
112
|
snapshot.forEach((doc) => {
|
|
109
|
-
|
|
113
|
+
const docSpan = this.metrics.getOneSpan();
|
|
110
114
|
result.push(doc.data());
|
|
115
|
+
that.metrics.getOne(modelname, filter, options, docSpan);
|
|
111
116
|
});
|
|
112
117
|
if (this.loglevel > 2) console.log("Retrieved ", result);
|
|
113
118
|
|
|
@@ -117,9 +122,10 @@ class FireStoreDB extends MultiDbORM {
|
|
|
117
122
|
async getOne(modelname, filter, id, options) {
|
|
118
123
|
var idx = id || filter.id;
|
|
119
124
|
if (idx) {
|
|
120
|
-
this.metrics.
|
|
125
|
+
const span = this.metrics.getOneSpan();
|
|
121
126
|
const modelref = this.getdb().collection(modelname).doc(idx);
|
|
122
127
|
const doc = await modelref.get();
|
|
128
|
+
this.metrics.getOne(modelname, filter, options, span);
|
|
123
129
|
if (this.loglevel > 2) console.log("Retrieved ", doc.data());
|
|
124
130
|
return doc.data();
|
|
125
131
|
} else {
|
|
@@ -135,7 +141,8 @@ class FireStoreDB extends MultiDbORM {
|
|
|
135
141
|
|
|
136
142
|
async create(modelname, sampleObject) {
|
|
137
143
|
this.sync.create(modelname, sampleObject);
|
|
138
|
-
this.metrics.
|
|
144
|
+
const span = this.metrics.createSpan();
|
|
145
|
+
this.metrics.create(modelname, sampleObject, span);
|
|
139
146
|
|
|
140
147
|
if (this.loglevel > 3)
|
|
141
148
|
console.log("CREATE : Not required in DB Type", this.dbType);
|
|
@@ -144,21 +151,25 @@ class FireStoreDB extends MultiDbORM {
|
|
|
144
151
|
async insert(modelname, object, id) {
|
|
145
152
|
replaceUndefinedWithNull(object);
|
|
146
153
|
this.sync.insert(modelname, object, id);
|
|
147
|
-
this.metrics.
|
|
154
|
+
const span = this.metrics.insertSpan();
|
|
148
155
|
|
|
149
156
|
var db = this.getdb();
|
|
150
157
|
var idx = id || object.id || Date.now();
|
|
151
158
|
const docref = db.collection(modelname).doc("" + idx);
|
|
152
159
|
try {
|
|
153
160
|
replaceUndefinedWithNull(object);
|
|
154
|
-
|
|
161
|
+
const res = await docref.set(object);
|
|
162
|
+
this.metrics.insert(modelname, object, id, span);
|
|
163
|
+
return res;
|
|
155
164
|
} catch (e) {
|
|
156
165
|
if (
|
|
157
166
|
e.message.indexOf(
|
|
158
167
|
"Firestore doesn't support JavaScript objects with custom prototypes"
|
|
159
168
|
) > -1
|
|
160
169
|
) {
|
|
161
|
-
|
|
170
|
+
const res = await docref.set(JSON.parse(JSON.stringify(object)));
|
|
171
|
+
this.metrics.insert(modelname, object, id, span);
|
|
172
|
+
return res;
|
|
162
173
|
} else {
|
|
163
174
|
throw e;
|
|
164
175
|
}
|
|
@@ -173,16 +184,18 @@ class FireStoreDB extends MultiDbORM {
|
|
|
173
184
|
try {
|
|
174
185
|
replaceUndefinedWithNull(object);
|
|
175
186
|
if (idx) {
|
|
176
|
-
this.metrics.
|
|
187
|
+
const span = this.metrics.updateSpan();
|
|
177
188
|
await this.getdb().collection(modelname).doc(idx).update(object);
|
|
189
|
+
this.metrics.update(modelname, filter, object, id, span);
|
|
178
190
|
} else {
|
|
179
191
|
var snaps = (await this._get(modelname, filter)) || [];
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
that.metrics.update(modelname, filter, object, id);
|
|
192
|
+
const list = snaps.docs || snaps;
|
|
193
|
+
for (const element of list) {
|
|
194
|
+
const span = this.metrics.updateSpan();
|
|
184
195
|
await element.ref.update(object);
|
|
185
|
-
|
|
196
|
+
this.metrics.getOne(modelname, filter, id, span);
|
|
197
|
+
this.metrics.update(modelname, filter, object, id, span);
|
|
198
|
+
}
|
|
186
199
|
}
|
|
187
200
|
} catch (e) {
|
|
188
201
|
if (
|
|
@@ -208,16 +221,18 @@ class FireStoreDB extends MultiDbORM {
|
|
|
208
221
|
var idx = id || filter.id;
|
|
209
222
|
|
|
210
223
|
if (idx) {
|
|
211
|
-
this.metrics.
|
|
224
|
+
const span = this.metrics.deleteSpan();
|
|
212
225
|
await this.getdb().collection(modelname).doc(idx).delete();
|
|
226
|
+
this.metrics.delete(modelname, filter, id, span);
|
|
213
227
|
} else {
|
|
214
228
|
var snaps = (await this._get(modelname, filter)) || [];
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
that.metrics.delete(modelname, filter, id);
|
|
229
|
+
const list = snaps.docs || snaps;
|
|
230
|
+
for (const element of list) {
|
|
231
|
+
const span = this.metrics.deleteSpan();
|
|
219
232
|
await element.ref.delete();
|
|
220
|
-
|
|
233
|
+
this.metrics.getOne(modelname, filter, id, span);
|
|
234
|
+
this.metrics.delete(modelname, filter, id, span);
|
|
235
|
+
}
|
|
221
236
|
}
|
|
222
237
|
}
|
|
223
238
|
}
|
package/engines/hanadb.js
CHANGED
|
@@ -61,7 +61,7 @@ class HanaDB extends MultiDbORM {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
async get(modelname, filter, options) {
|
|
64
|
-
this.metrics.
|
|
64
|
+
const span = this.metrics.getSpan();
|
|
65
65
|
let where = "";
|
|
66
66
|
for (const key in filter) {
|
|
67
67
|
where += `"${key}" = '${filter[key]}' AND `;
|
|
@@ -89,7 +89,9 @@ class HanaDB extends MultiDbORM {
|
|
|
89
89
|
const limit = options?.limit ? `LIMIT ${options.limit}` : "";
|
|
90
90
|
const offset = options?.offset ? `OFFSET ${options.offset}` : "";
|
|
91
91
|
const query = `SELECT * FROM ${modelname} WHERE ${where} ${sort} ${limit} ${offset};`;
|
|
92
|
-
|
|
92
|
+
const res = (await this.run(query)) || [];
|
|
93
|
+
this.metrics.get(modelname, filter, options, span);
|
|
94
|
+
return res;
|
|
93
95
|
}
|
|
94
96
|
escapeSQLValue(value) {
|
|
95
97
|
if (typeof value === "string") {
|
|
@@ -100,7 +102,7 @@ class HanaDB extends MultiDbORM {
|
|
|
100
102
|
return value;
|
|
101
103
|
}
|
|
102
104
|
async getOne(modelname, filter) {
|
|
103
|
-
this.metrics.
|
|
105
|
+
const span = this.metrics.getOneSpan();
|
|
104
106
|
let where = "";
|
|
105
107
|
for (const key in filter) {
|
|
106
108
|
where += `"${key}" = '${filter[key]}' AND `;
|
|
@@ -108,12 +110,13 @@ class HanaDB extends MultiDbORM {
|
|
|
108
110
|
where += "1 = 1";
|
|
109
111
|
const query = `SELECT * FROM ${modelname} WHERE ${where} LIMIT 1;`;
|
|
110
112
|
const row = await this.run(query);
|
|
113
|
+
this.metrics.getOne(modelname, filter, span);
|
|
111
114
|
return row[0];
|
|
112
115
|
}
|
|
113
116
|
|
|
114
117
|
async create(modelname, sampleObject) {
|
|
115
118
|
this.sync.create(modelname, sampleObject);
|
|
116
|
-
this.metrics.
|
|
119
|
+
const span = this.metrics.createSpan();
|
|
117
120
|
|
|
118
121
|
let cols = "";
|
|
119
122
|
for (const key in sampleObject) {
|
|
@@ -141,7 +144,9 @@ class HanaDB extends MultiDbORM {
|
|
|
141
144
|
cols = cols.substring(0, cols.length - 1);
|
|
142
145
|
const query = `CREATE COLUMN TABLE ${modelname} (${cols});`;
|
|
143
146
|
try {
|
|
144
|
-
|
|
147
|
+
const res = await this.run(query);
|
|
148
|
+
this.metrics.create(modelname, sampleObject, span);
|
|
149
|
+
return res;
|
|
145
150
|
} catch (err) {
|
|
146
151
|
if (this.loglevel > 0) console.log(err);
|
|
147
152
|
throw err;
|
|
@@ -150,7 +155,7 @@ class HanaDB extends MultiDbORM {
|
|
|
150
155
|
|
|
151
156
|
async insert(modelname, object) {
|
|
152
157
|
this.sync.insert(modelname, object);
|
|
153
|
-
this.metrics.
|
|
158
|
+
const span = this.metrics.insertSpan();
|
|
154
159
|
let cols = "";
|
|
155
160
|
let vals = "";
|
|
156
161
|
for (const key in object) {
|
|
@@ -169,12 +174,16 @@ class HanaDB extends MultiDbORM {
|
|
|
169
174
|
const query = `INSERT INTO ${modelname} (${cols}) VALUES (${vals});`;
|
|
170
175
|
|
|
171
176
|
try {
|
|
172
|
-
|
|
177
|
+
const res = await this.run(query);
|
|
178
|
+
this.metrics.insert(modelname, object, span);
|
|
179
|
+
return res;
|
|
173
180
|
} catch (err) {
|
|
174
181
|
if (err.code && err.code === "259") {
|
|
175
182
|
// Table does not exist
|
|
176
183
|
await this.create(modelname, object);
|
|
177
|
-
|
|
184
|
+
const res = await this.run(query);
|
|
185
|
+
this.metrics.insert(modelname, object, span);
|
|
186
|
+
return res;
|
|
178
187
|
} else {
|
|
179
188
|
throw err;
|
|
180
189
|
}
|
|
@@ -183,7 +192,7 @@ class HanaDB extends MultiDbORM {
|
|
|
183
192
|
|
|
184
193
|
async update(modelname, filter, object) {
|
|
185
194
|
this.sync.update(modelname, filter, object);
|
|
186
|
-
this.metrics.
|
|
195
|
+
const span = this.metrics.updateSpan();
|
|
187
196
|
|
|
188
197
|
let where = "";
|
|
189
198
|
let vals = "";
|
|
@@ -203,7 +212,9 @@ class HanaDB extends MultiDbORM {
|
|
|
203
212
|
|
|
204
213
|
const query = `UPDATE ${modelname} SET ${vals} WHERE ${where};`;
|
|
205
214
|
try {
|
|
206
|
-
|
|
215
|
+
const res = await this.run(query);
|
|
216
|
+
this.metrics.update(modelname, filter, object, span);
|
|
217
|
+
return res;
|
|
207
218
|
} catch (e) {
|
|
208
219
|
if (this.loglevel > 4) console.log("Error in update", e);
|
|
209
220
|
throw e;
|
|
@@ -212,6 +223,8 @@ class HanaDB extends MultiDbORM {
|
|
|
212
223
|
|
|
213
224
|
async delete(modelname, filter) {
|
|
214
225
|
this.sync.delete(modelname, filter);
|
|
226
|
+
const span = this.metrics.deleteSpan();
|
|
227
|
+
|
|
215
228
|
this.metrics.delete(modelname, filter);
|
|
216
229
|
|
|
217
230
|
let where = "";
|
|
@@ -220,7 +233,9 @@ class HanaDB extends MultiDbORM {
|
|
|
220
233
|
}
|
|
221
234
|
where += "1 = 1";
|
|
222
235
|
const query = `DELETE FROM ${modelname} WHERE ${where};`;
|
|
223
|
-
|
|
236
|
+
const res = await this.run(query);
|
|
237
|
+
this.metrics.delete(modelname, filter, span);
|
|
238
|
+
return res;
|
|
224
239
|
}
|
|
225
240
|
|
|
226
241
|
closePool() {
|
package/engines/metrics.d.ts
CHANGED
package/engines/metrics.js
CHANGED
|
@@ -13,9 +13,12 @@ class Metrics {
|
|
|
13
13
|
deletes: 0
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
setLogLevel(level) {
|
|
17
|
+
this.loglevel = level;
|
|
18
|
+
}
|
|
16
19
|
|
|
17
20
|
printStatus() {
|
|
18
|
-
console.log(dbstats)
|
|
21
|
+
console.log(this.dbstats)
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
reset() {
|
|
@@ -34,39 +37,116 @@ class Metrics {
|
|
|
34
37
|
}
|
|
35
38
|
|
|
36
39
|
async get(modelname, filter) {
|
|
40
|
+
const args = Array.from(arguments)
|
|
41
|
+
const last = args[args.length - 1]
|
|
42
|
+
const start = last && typeof last === 'object' && last.startTime ? last.startTime : process.hrtime.bigint()
|
|
37
43
|
this.dbstats.batchReads++;
|
|
38
44
|
if (this.loglevel > 4)
|
|
39
45
|
this.printStatus()
|
|
46
|
+
this._logOperation(modelname, 'get', start, { filter })
|
|
40
47
|
}
|
|
41
48
|
|
|
42
49
|
async getOne(modelname, filter) {
|
|
50
|
+
const args = Array.from(arguments)
|
|
51
|
+
const last = args[args.length - 1]
|
|
52
|
+
const start = last && typeof last === 'object' && last.startTime ? last.startTime : process.hrtime.bigint()
|
|
43
53
|
this.dbstats.reads++;
|
|
44
54
|
if (this.loglevel > 4)
|
|
45
55
|
this.printStatus()
|
|
56
|
+
this._logOperation(modelname, 'getOne', start, { filter })
|
|
46
57
|
}
|
|
47
58
|
|
|
48
59
|
async create(modelname, object) {
|
|
60
|
+
const args = Array.from(arguments)
|
|
61
|
+
const last = args[args.length - 1]
|
|
62
|
+
const start = last && typeof last === 'object' && last.startTime ? last.startTime : process.hrtime.bigint()
|
|
49
63
|
this.dbstats.inserts++;
|
|
50
64
|
if (this.loglevel > 4)
|
|
51
65
|
this.printStatus()
|
|
66
|
+
this._logOperation(modelname, 'create', start, { object })
|
|
52
67
|
}
|
|
53
68
|
|
|
54
69
|
async insert(modelname, object) {
|
|
70
|
+
const args = Array.from(arguments)
|
|
71
|
+
const last = args[args.length - 1]
|
|
72
|
+
const start = last && typeof last === 'object' && last.startTime ? last.startTime : process.hrtime.bigint()
|
|
55
73
|
this.dbstats.inserts++;
|
|
56
74
|
if (this.loglevel > 4)
|
|
57
|
-
printStatus()
|
|
75
|
+
this.printStatus()
|
|
76
|
+
this._logOperation(modelname, 'insert', start, { object })
|
|
58
77
|
}
|
|
59
78
|
|
|
60
79
|
async update(modelname, filter, object) {
|
|
80
|
+
const args = Array.from(arguments)
|
|
81
|
+
const last = args[args.length - 1]
|
|
82
|
+
const start = last && typeof last === 'object' && last.startTime ? last.startTime : process.hrtime.bigint()
|
|
61
83
|
this.dbstats.updates++;
|
|
62
84
|
if (this.loglevel > 4)
|
|
63
85
|
this.printStatus()
|
|
86
|
+
this._logOperation(modelname, 'update', start, { filter, object })
|
|
64
87
|
}
|
|
65
88
|
|
|
66
89
|
async delete(modelname, filter) {
|
|
90
|
+
const args = Array.from(arguments)
|
|
91
|
+
const last = args[args.length - 1]
|
|
92
|
+
const start = last && typeof last === 'object' && last.startTime ? last.startTime : process.hrtime.bigint()
|
|
67
93
|
this.dbstats.deletes++;
|
|
68
94
|
if (this.loglevel > 4)
|
|
69
95
|
this.printStatus()
|
|
96
|
+
this._logOperation(modelname, 'delete', start, { filter })
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
_safeStringify(v) {
|
|
100
|
+
try {
|
|
101
|
+
return JSON.stringify(v)
|
|
102
|
+
} catch (e) {
|
|
103
|
+
return String(v)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
startSpan(operation) {
|
|
108
|
+
return { startTime: process.hrtime.bigint(), operation }
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
updateSpan() {
|
|
112
|
+
return this.startSpan('update')
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
insertSpan() {
|
|
116
|
+
return this.startSpan('insert')
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
getSpan() {
|
|
120
|
+
return this.startSpan('get')
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
getOneSpan() {
|
|
124
|
+
return this.startSpan('getOne')
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
createSpan() {
|
|
128
|
+
return this.startSpan('create')
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
deleteSpan() {
|
|
132
|
+
return this.startSpan('delete')
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
_logOperation(modelname, operation, startTime, details) {
|
|
136
|
+
if (!(this.loglevel > 3)) return
|
|
137
|
+
const elapsedMs = Number(process.hrtime.bigint() - startTime) / 1e6
|
|
138
|
+
if (this.loglevel > 4) {
|
|
139
|
+
const parts = []
|
|
140
|
+
if (details) {
|
|
141
|
+
if (details.filter !== undefined) parts.push(`filter=${this._safeStringify(details.filter)}`)
|
|
142
|
+
if (details.object !== undefined) parts.push(`object=${this._safeStringify(details.object)}`)
|
|
143
|
+
if (details.sort !== undefined) parts.push(`sort=${this._safeStringify(details.sort)}`)
|
|
144
|
+
}
|
|
145
|
+
const detailStr = parts.length ? parts.join(' ') : ''
|
|
146
|
+
console.log(`${operation} ${modelname} in ${elapsedMs.toFixed(3)}ms`, detailStr)
|
|
147
|
+
} else {
|
|
148
|
+
console.log(`${operation} ${modelname} in ${elapsedMs.toFixed(3)}ms`)
|
|
149
|
+
}
|
|
70
150
|
}
|
|
71
151
|
|
|
72
152
|
}
|
package/engines/mongodb.js
CHANGED
|
@@ -53,7 +53,7 @@ class MongoDB extends MultiDbORM {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
async get(modelname, filter, options) {
|
|
56
|
-
this.metrics.
|
|
56
|
+
const span = this.metrics.getSpan();
|
|
57
57
|
if (options && options.apply && options.apply.ineq) {
|
|
58
58
|
filter[`${options.apply.field}`] = {};
|
|
59
59
|
filter[`${options.apply.field}`][`${this._inq2mongop(options.apply.ineq.op)}`] = options.apply.ineq.value
|
|
@@ -94,19 +94,22 @@ class MongoDB extends MultiDbORM {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
var snapshot = await crs.toArray()
|
|
97
|
+
this.metrics.get(modelname, filter, options, span);
|
|
97
98
|
return snapshot;
|
|
98
99
|
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
async getOne(modelname, filter, options) {
|
|
102
|
-
this.metrics.
|
|
103
|
+
const span = this.metrics.getOneSpan();
|
|
103
104
|
var snapshot = await this.getdb().collection(modelname).findOne(filter)
|
|
105
|
+
this.metrics.getOne(modelname, filter, options, span);
|
|
104
106
|
return snapshot;
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
async create(modelname, sampleObject) {
|
|
108
110
|
this.sync.create(modelname, sampleObject)
|
|
109
|
-
this.metrics.
|
|
111
|
+
const span = this.metrics.createSpan();
|
|
112
|
+
this.metrics.create(modelname, sampleObject, span);
|
|
110
113
|
|
|
111
114
|
if (this.loglevel > 3)
|
|
112
115
|
console.log('CREATE : Not required in DB Type', this.dbType)
|
|
@@ -114,11 +117,13 @@ class MongoDB extends MultiDbORM {
|
|
|
114
117
|
|
|
115
118
|
async insert(modelname, object) {
|
|
116
119
|
this.sync.insert(modelname, object)
|
|
117
|
-
this.metrics.
|
|
120
|
+
const span = this.metrics.insertSpan();
|
|
118
121
|
|
|
119
122
|
const collref = this.getdb().collection(modelname)
|
|
120
123
|
try {
|
|
121
|
-
|
|
124
|
+
const res = await collref.insertOne(object);
|
|
125
|
+
this.metrics.insert(modelname, object, span);
|
|
126
|
+
return res;
|
|
122
127
|
} catch (e) {
|
|
123
128
|
|
|
124
129
|
throw e;
|
|
@@ -129,15 +134,17 @@ class MongoDB extends MultiDbORM {
|
|
|
129
134
|
|
|
130
135
|
async update(modelname, filter, object) {
|
|
131
136
|
this.sync.update(modelname, filter, object)
|
|
132
|
-
this.metrics.
|
|
137
|
+
const span = this.metrics.updateSpan();
|
|
133
138
|
var resp = await this.getdb().collection(modelname).updateMany(filter, { $set: object })
|
|
139
|
+
this.metrics.update(modelname, filter, object, span)
|
|
134
140
|
return resp;
|
|
135
141
|
}
|
|
136
142
|
|
|
137
143
|
async delete(modelname, filter) {
|
|
138
144
|
this.sync.delete(modelname, filter)
|
|
139
|
-
this.metrics.
|
|
145
|
+
const span = this.metrics.deleteSpan();
|
|
140
146
|
var resp = await this.getdb().collection(modelname).deleteMany(filter)
|
|
147
|
+
this.metrics.delete(modelname, filter, span)
|
|
141
148
|
return resp;
|
|
142
149
|
}
|
|
143
150
|
}
|
package/engines/multidb.d.ts
CHANGED
package/engines/multidb.js
CHANGED
package/engines/mysqldb.js
CHANGED
|
@@ -64,7 +64,7 @@ class MySQLDB extends MultiDbORM {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
async get(modelname, filter, options) {
|
|
67
|
-
this.metrics.
|
|
67
|
+
const span = this.metrics.getSpan();
|
|
68
68
|
var where = "";
|
|
69
69
|
for (var key in filter) {
|
|
70
70
|
where = where + `${key} = '${filter[key]}' AND `;
|
|
@@ -100,11 +100,13 @@ class MySQLDB extends MultiDbORM {
|
|
|
100
100
|
offset = `OFFSET ${options.offset}`;
|
|
101
101
|
}
|
|
102
102
|
var query = `SELECT * FROM ${modelname} WHERE ${where} ${sort} ${limit} ${offset};`;
|
|
103
|
-
|
|
103
|
+
const res = (await this.run(query)) || [];
|
|
104
|
+
this.metrics.get(modelname, filter, options, span);
|
|
105
|
+
return res;
|
|
104
106
|
}
|
|
105
107
|
|
|
106
108
|
async getOne(modelname, filter) {
|
|
107
|
-
this.metrics.
|
|
109
|
+
const span = this.metrics.getOneSpan();
|
|
108
110
|
var where = "";
|
|
109
111
|
for (var key in filter) {
|
|
110
112
|
where = where + `${key} = '${filter[key]}' AND `;
|
|
@@ -112,11 +114,12 @@ class MySQLDB extends MultiDbORM {
|
|
|
112
114
|
where = where + " 1 ";
|
|
113
115
|
var query = `SELECT * FROM ${modelname} WHERE ${where} LIMIT 1;`;
|
|
114
116
|
var row = await this.run(query);
|
|
117
|
+
this.metrics.getOne(modelname, filter, span);
|
|
115
118
|
return row[0];
|
|
116
119
|
}
|
|
117
120
|
async create(modelname, sampleObject) {
|
|
118
121
|
this.sync.create(modelname, sampleObject);
|
|
119
|
-
this.metrics.
|
|
122
|
+
const span = this.metrics.createSpan();
|
|
120
123
|
|
|
121
124
|
var cols = "";
|
|
122
125
|
for (var key in sampleObject) {
|
|
@@ -144,7 +147,9 @@ class MySQLDB extends MultiDbORM {
|
|
|
144
147
|
cols = cols.substring(0, cols.length - 1);
|
|
145
148
|
var query = `CREATE TABLE IF NOT EXISTS ${modelname} (${cols});`;
|
|
146
149
|
try {
|
|
147
|
-
|
|
150
|
+
const res = await this.run(query);
|
|
151
|
+
this.metrics.create(modelname, sampleObject, span);
|
|
152
|
+
return res;
|
|
148
153
|
} catch (err) {
|
|
149
154
|
if (this.loglevel > 0) console.log(err);
|
|
150
155
|
throw err;
|
|
@@ -153,7 +158,7 @@ class MySQLDB extends MultiDbORM {
|
|
|
153
158
|
|
|
154
159
|
async insert(modelname, object) {
|
|
155
160
|
this.sync.insert(modelname, object);
|
|
156
|
-
this.metrics.
|
|
161
|
+
const span = this.metrics.insertSpan();
|
|
157
162
|
var cols = "";
|
|
158
163
|
var vals = "";
|
|
159
164
|
for (var key in object) {
|
|
@@ -171,11 +176,15 @@ class MySQLDB extends MultiDbORM {
|
|
|
171
176
|
var query = `INSERT INTO ${modelname} (${cols}) VALUES(${vals});`;
|
|
172
177
|
|
|
173
178
|
try {
|
|
174
|
-
|
|
179
|
+
const res = await this.run(query);
|
|
180
|
+
this.metrics.insert(modelname, object, span);
|
|
181
|
+
return res;
|
|
175
182
|
} catch (err) {
|
|
176
183
|
if (err.code && err.code === "ER_NO_SUCH_TABLE") {
|
|
177
184
|
await this.create(modelname, object);
|
|
178
|
-
|
|
185
|
+
const res = await this.run(query);
|
|
186
|
+
this.metrics.insert(modelname, object, span);
|
|
187
|
+
return res;
|
|
179
188
|
} else {
|
|
180
189
|
throw err;
|
|
181
190
|
}
|
|
@@ -184,7 +193,7 @@ class MySQLDB extends MultiDbORM {
|
|
|
184
193
|
|
|
185
194
|
async update(modelname, filter, object) {
|
|
186
195
|
this.sync.update(modelname, filter, object);
|
|
187
|
-
this.metrics.
|
|
196
|
+
const span = this.metrics.updateSpan();
|
|
188
197
|
|
|
189
198
|
var where = "";
|
|
190
199
|
var vals = "";
|
|
@@ -212,7 +221,9 @@ class MySQLDB extends MultiDbORM {
|
|
|
212
221
|
|
|
213
222
|
var query = `UPDATE ${modelname} SET ${vals} WHERE ${where};`;
|
|
214
223
|
try {
|
|
215
|
-
|
|
224
|
+
const res = await this.run(query);
|
|
225
|
+
this.metrics.update(modelname, filter, object, span);
|
|
226
|
+
return res;
|
|
216
227
|
} catch (e) {
|
|
217
228
|
if (this.loglevel > 4) console.log("Error in update", e);
|
|
218
229
|
throw e;
|
|
@@ -221,7 +232,7 @@ class MySQLDB extends MultiDbORM {
|
|
|
221
232
|
|
|
222
233
|
async delete(modelname, filter) {
|
|
223
234
|
this.sync.delete(modelname, filter);
|
|
224
|
-
this.metrics.
|
|
235
|
+
const span = this.metrics.deleteSpan();
|
|
225
236
|
|
|
226
237
|
var where = "";
|
|
227
238
|
for (var key in filter) {
|
|
@@ -229,7 +240,9 @@ class MySQLDB extends MultiDbORM {
|
|
|
229
240
|
}
|
|
230
241
|
where = where + " 1 ";
|
|
231
242
|
var query = `DELETE FROM ${modelname} WHERE ${where};`;
|
|
232
|
-
|
|
243
|
+
const res = await this.run(query);
|
|
244
|
+
this.metrics.delete(modelname, filter, span);
|
|
245
|
+
return res;
|
|
233
246
|
}
|
|
234
247
|
|
|
235
248
|
closePool() {
|
package/engines/oracledb.js
CHANGED
|
@@ -110,7 +110,7 @@ class OracleDB extends MultiDbORM {
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
async get(modelname, filter, options) {
|
|
113
|
-
this.metrics.
|
|
113
|
+
const span = this.metrics.getSpan()
|
|
114
114
|
var where = ''
|
|
115
115
|
for (var key in filter) {
|
|
116
116
|
where = where + `"${key}" = '${filter[key]}' AND `
|
|
@@ -139,12 +139,13 @@ class OracleDB extends MultiDbORM {
|
|
|
139
139
|
}
|
|
140
140
|
var query = `SELECT * FROM ${modelname} WHERE ${where} ${sort} `
|
|
141
141
|
var row = await this.run(query)
|
|
142
|
+
this.metrics.get(modelname, filter, options, span)
|
|
142
143
|
|
|
143
144
|
return row.rows
|
|
144
145
|
}
|
|
145
146
|
|
|
146
147
|
async getOne(modelname, filter) {
|
|
147
|
-
this.metrics.
|
|
148
|
+
const span = this.metrics.getOneSpan()
|
|
148
149
|
var where = ''
|
|
149
150
|
for (var key in filter) {
|
|
150
151
|
where = where + `"${key}" = '${filter[key]}' AND `
|
|
@@ -152,12 +153,13 @@ class OracleDB extends MultiDbORM {
|
|
|
152
153
|
where = where + " 1 = 1 ";
|
|
153
154
|
var query = `SELECT * FROM ${modelname} WHERE ${where} AND rownum < 2`
|
|
154
155
|
var row = await this.run(query)
|
|
156
|
+
this.metrics.getOne(modelname, filter, span)
|
|
155
157
|
return row.rows[0];
|
|
156
158
|
}
|
|
157
159
|
|
|
158
160
|
async create(modelname, sampleObject) {
|
|
159
161
|
this.sync.create(modelname, sampleObject)
|
|
160
|
-
this.metrics.
|
|
162
|
+
const span = this.metrics.createSpan()
|
|
161
163
|
|
|
162
164
|
var cols = ''
|
|
163
165
|
for (var key in sampleObject) {
|
|
@@ -173,7 +175,9 @@ class OracleDB extends MultiDbORM {
|
|
|
173
175
|
cols = cols.substring(0, cols.length - 2)
|
|
174
176
|
var query = `CREATE TABLE ${modelname} (${cols})`
|
|
175
177
|
try {
|
|
176
|
-
|
|
178
|
+
const res = await this.run(query)
|
|
179
|
+
this.metrics.create(modelname, sampleObject, span)
|
|
180
|
+
return res
|
|
177
181
|
} catch (err) {
|
|
178
182
|
if (!err.message.indexOf("name is already used")) {
|
|
179
183
|
console.log(err)
|
|
@@ -184,7 +188,7 @@ class OracleDB extends MultiDbORM {
|
|
|
184
188
|
|
|
185
189
|
async insert(modelname, object) {
|
|
186
190
|
this.sync.insert(modelname, object)
|
|
187
|
-
this.metrics.
|
|
191
|
+
const span = this.metrics.insertSpan()
|
|
188
192
|
var cols = ''
|
|
189
193
|
var vals = ''
|
|
190
194
|
for (var key in object) {
|
|
@@ -200,11 +204,15 @@ class OracleDB extends MultiDbORM {
|
|
|
200
204
|
var query = `INSERT INTO ${modelname} (${cols}) VALUES(${vals})`
|
|
201
205
|
|
|
202
206
|
try {
|
|
203
|
-
|
|
207
|
+
const res = await this.run(query)
|
|
208
|
+
this.metrics.insert(modelname, object, span)
|
|
209
|
+
return res
|
|
204
210
|
} catch (err) {
|
|
205
211
|
if (err.message && err.message.indexOf('SQLITE_ERROR: no such table: ') > -1) {
|
|
206
212
|
await this.create(modelname, object);
|
|
207
|
-
|
|
213
|
+
const res = await this.run(query)
|
|
214
|
+
this.metrics.insert(modelname, object, span)
|
|
215
|
+
return res
|
|
208
216
|
}
|
|
209
217
|
else
|
|
210
218
|
throw err;
|
|
@@ -213,6 +221,8 @@ class OracleDB extends MultiDbORM {
|
|
|
213
221
|
|
|
214
222
|
async update(modelname, filter, object) {
|
|
215
223
|
this.sync.update(modelname, filter, object)
|
|
224
|
+
const span = this.metrics.updateSpan()
|
|
225
|
+
|
|
216
226
|
this.metrics.update(modelname, filter, object)
|
|
217
227
|
|
|
218
228
|
var where = ''
|
|
@@ -227,11 +237,15 @@ class OracleDB extends MultiDbORM {
|
|
|
227
237
|
vals = vals.substring(0, vals.length - 1)
|
|
228
238
|
|
|
229
239
|
var query = `UPDATE ${modelname} SET ${vals} WHERE ${where}`
|
|
230
|
-
|
|
240
|
+
const res = await this.run(query)
|
|
241
|
+
this.metrics.update(modelname, filter, object, span)
|
|
242
|
+
return res
|
|
231
243
|
}
|
|
232
244
|
|
|
233
245
|
async delete(modelname, filter) {
|
|
234
246
|
this.sync.delete(modelname, filter)
|
|
247
|
+
const span = this.metrics.deleteSpan()
|
|
248
|
+
|
|
235
249
|
this.metrics.delete(modelname, filter)
|
|
236
250
|
|
|
237
251
|
var where = ''
|
|
@@ -240,7 +254,9 @@ class OracleDB extends MultiDbORM {
|
|
|
240
254
|
}
|
|
241
255
|
where = where + " 1 = 1";
|
|
242
256
|
var query = `DELETE FROM ${modelname} WHERE ${where}`
|
|
243
|
-
|
|
257
|
+
const res = await this.run(query)
|
|
258
|
+
this.metrics.delete(modelname, filter, span)
|
|
259
|
+
return res
|
|
244
260
|
}
|
|
245
261
|
}
|
|
246
262
|
|
package/engines/sqlitedb.js
CHANGED
|
@@ -39,7 +39,7 @@ class SQLiteDB extends MultiDbORM {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
async get(modelname, filter, options) {
|
|
42
|
-
this.metrics.
|
|
42
|
+
const span = this.metrics.getSpan();
|
|
43
43
|
var where = "";
|
|
44
44
|
for (var key in filter) {
|
|
45
45
|
where = where + `${key} = '${filter[key]}' AND `;
|
|
@@ -67,11 +67,13 @@ class SQLiteDB extends MultiDbORM {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
var query = `SELECT * FROM ${modelname} WHERE ${where} ${sort} ;`;
|
|
70
|
-
|
|
70
|
+
const res = (await this.run(query)) || [];
|
|
71
|
+
this.metrics.get(modelname, filter, options, span);
|
|
72
|
+
return res;
|
|
71
73
|
}
|
|
72
74
|
|
|
73
75
|
async getOne(modelname, filter) {
|
|
74
|
-
this.metrics.
|
|
76
|
+
const span = this.metrics.getOneSpan();
|
|
75
77
|
var where = "";
|
|
76
78
|
for (var key in filter) {
|
|
77
79
|
where = where + `${key} = '${filter[key]}' AND `;
|
|
@@ -79,12 +81,13 @@ class SQLiteDB extends MultiDbORM {
|
|
|
79
81
|
where = where + " 1 ";
|
|
80
82
|
var query = `SELECT * FROM ${modelname} WHERE ${where} LIMIT 1;`;
|
|
81
83
|
var row = await this.run(query);
|
|
84
|
+
this.metrics.getOne(modelname, filter, span);
|
|
82
85
|
return row[0];
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
async create(modelname, sampleObject) {
|
|
86
89
|
this.sync.create(modelname, sampleObject);
|
|
87
|
-
this.metrics.
|
|
90
|
+
const span = this.metrics.createSpan();
|
|
88
91
|
|
|
89
92
|
var cols = "";
|
|
90
93
|
for (var key in sampleObject) {
|
|
@@ -94,7 +97,9 @@ class SQLiteDB extends MultiDbORM {
|
|
|
94
97
|
cols = cols.substring(0, cols.length - 1);
|
|
95
98
|
var query = `CREATE TABLE IF NOT EXISTS ${modelname} (${cols});`;
|
|
96
99
|
try {
|
|
97
|
-
|
|
100
|
+
const res = await this.run(query);
|
|
101
|
+
this.metrics.create(modelname, sampleObject, span);
|
|
102
|
+
return res;
|
|
98
103
|
} catch (err) {
|
|
99
104
|
console.log(err);
|
|
100
105
|
return undefined;
|
|
@@ -103,7 +108,7 @@ class SQLiteDB extends MultiDbORM {
|
|
|
103
108
|
|
|
104
109
|
async insert(modelname, object) {
|
|
105
110
|
this.sync.insert(modelname, object);
|
|
106
|
-
this.metrics.
|
|
111
|
+
const span = this.metrics.insertSpan();
|
|
107
112
|
var cols = "";
|
|
108
113
|
var vals = "";
|
|
109
114
|
for (var key in object) {
|
|
@@ -116,21 +121,25 @@ class SQLiteDB extends MultiDbORM {
|
|
|
116
121
|
var query = `INSERT INTO ${modelname} (${cols}) VALUES(${vals});`;
|
|
117
122
|
|
|
118
123
|
try {
|
|
119
|
-
|
|
124
|
+
const res = await this.run(query);
|
|
125
|
+
this.metrics.insert(modelname, object, span);
|
|
126
|
+
return res;
|
|
120
127
|
} catch (err) {
|
|
121
128
|
if (
|
|
122
129
|
err.message &&
|
|
123
130
|
err.message.indexOf("SQLITE_ERROR: no such table: ") > -1
|
|
124
131
|
) {
|
|
125
132
|
await this.create(modelname, object);
|
|
126
|
-
|
|
133
|
+
const res = await this.run(query);
|
|
134
|
+
this.metrics.insert(modelname, object, span);
|
|
135
|
+
return res;
|
|
127
136
|
} else throw err;
|
|
128
137
|
}
|
|
129
138
|
}
|
|
130
139
|
|
|
131
140
|
async update(modelname, filter, object) {
|
|
132
141
|
this.sync.update(modelname, filter, object);
|
|
133
|
-
this.metrics.
|
|
142
|
+
const span = this.metrics.updateSpan();
|
|
134
143
|
|
|
135
144
|
var where = "";
|
|
136
145
|
var vals = "";
|
|
@@ -144,12 +153,14 @@ class SQLiteDB extends MultiDbORM {
|
|
|
144
153
|
vals = vals.substring(0, vals.length - 1);
|
|
145
154
|
|
|
146
155
|
var query = `UPDATE ${modelname} SET ${vals} WHERE ${where};`;
|
|
147
|
-
|
|
156
|
+
const res = await this.run(query);
|
|
157
|
+
this.metrics.update(modelname, filter, object, span);
|
|
158
|
+
return res;
|
|
148
159
|
}
|
|
149
160
|
|
|
150
161
|
async delete(modelname, filter) {
|
|
151
162
|
this.sync.delete(modelname, filter);
|
|
152
|
-
this.metrics.
|
|
163
|
+
const span = this.metrics.deleteSpan();
|
|
153
164
|
|
|
154
165
|
var where = "";
|
|
155
166
|
for (var key in filter) {
|
|
@@ -157,7 +168,9 @@ class SQLiteDB extends MultiDbORM {
|
|
|
157
168
|
}
|
|
158
169
|
where = where + " 1 ";
|
|
159
170
|
var query = `DELETE FROM ${modelname} WHERE ${where};`;
|
|
160
|
-
|
|
171
|
+
const res = await this.run(query);
|
|
172
|
+
this.metrics.delete(modelname, filter, span);
|
|
173
|
+
return res;
|
|
161
174
|
}
|
|
162
175
|
}
|
|
163
176
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "multi-db-orm",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.2",
|
|
4
4
|
"description": "CRUD , Backup , Restore and Migration library for multiple databases",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"dependencies": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"sqlite3": "^5.0.0"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
|
-
"release": "git add -A && git commit -m Update-Files & npm version patch && git add -A && git commit -m Update-Version & npm publish && git push",
|
|
19
|
+
"release": "git add -A && git commit -m Update-Files & npm version patch && git add -A && git commit -m Update-Version & npm login && npm publish && git push",
|
|
20
20
|
"postinstall": "node postinstall.js",
|
|
21
21
|
"test": "node test/test.js"
|
|
22
22
|
},
|
|
@@ -47,4 +47,4 @@
|
|
|
47
47
|
"url": "https://github.com/shiveshnavin/multi-db-orm/issues"
|
|
48
48
|
},
|
|
49
49
|
"homepage": "https://github.com/shiveshnavin/multi-db-orm#readme"
|
|
50
|
-
}
|
|
50
|
+
}
|
package/test/test.js
CHANGED
|
@@ -20,6 +20,7 @@ function checkTestsCompleted() {
|
|
|
20
20
|
|
|
21
21
|
async function testSqlite() {
|
|
22
22
|
var sqlitedb = new SQLiteDB();
|
|
23
|
+
sqlitedb.setLogLevel(10);
|
|
23
24
|
console.log(sqlitedb.metrics.getStatus());
|
|
24
25
|
var gm = new Game("IndVSPak", Date.now(), "Dhoni", 67.33, "paid");
|
|
25
26
|
sqlitedb.loglevel = 1;
|
|
@@ -426,9 +427,5 @@ async function test(db) {
|
|
|
426
427
|
checkTestsCompleted();
|
|
427
428
|
}
|
|
428
429
|
|
|
429
|
-
//
|
|
430
|
-
|
|
431
|
-
// testMongo();
|
|
432
|
-
// testOracleDb()
|
|
433
|
-
// testMysqlDb();
|
|
434
|
-
testHanaDb();
|
|
430
|
+
// run only sqlite tests for validation
|
|
431
|
+
testSqlite();
|