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.
@@ -1,6 +1,6 @@
1
- const { MultiDbORM } = require("multi-db-orm");
2
- const { Metrics } = require("multi-db-orm/engines/metrics");
3
- const { Sync } = require("multi-db-orm/sync");
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 {
@@ -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) return [];
106
- this.metrics.get(modelname, filter, options);
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
- that.metrics.getOne(modelname, filter, options);
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.getOne(modelname, filter, options);
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.create(modelname, sampleObject);
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.insert(modelname, object, id);
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
- return await docref.set(object);
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
- return await docref.set(JSON.parse(JSON.stringify(object)));
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.update(modelname, filter, object, id);
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
- let that = this;
181
- snaps.forEach(async function (element) {
182
- that.metrics.getOne(modelname, filter, id);
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.delete(modelname, filter, id);
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
- let that = this;
216
- snaps.forEach(async function (element) {
217
- that.metrics.getOne(modelname, filter, id);
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.get(modelname, filter, options);
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
- return (await this.run(query)) || [];
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.getOne(modelname, filter);
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.create(modelname, sampleObject);
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
- return await this.run(query);
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.insert(modelname, object);
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
- return await this.run(query);
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
- return await this.run(query);
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.update(modelname, filter, object);
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
- return await this.run(query);
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
- return await this.run(query);
236
+ const res = await this.run(query);
237
+ this.metrics.delete(modelname, filter, span);
238
+ return res;
224
239
  }
225
240
 
226
241
  closePool() {
@@ -1,5 +1,6 @@
1
1
  export class Metrics {
2
2
  constructor(loglevel: number);
3
+ setLogLevel(level: number): void;
3
4
  get(modelname: string, filter: any, options: any): void;
4
5
  getOne(modelname: string, filter: any): void;
5
6
  create(modelname: string, sampleObject: any): void;
@@ -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
  }
@@ -53,7 +53,7 @@ class MongoDB extends MultiDbORM {
53
53
  }
54
54
  }
55
55
  async get(modelname, filter, options) {
56
- this.metrics.get(modelname, filter, options);
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.getOne(modelname, filter, options);
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.create(modelname, sampleObject);
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.insert(modelname, object)
120
+ const span = this.metrics.insertSpan();
118
121
 
119
122
  const collref = this.getdb().collection(modelname)
120
123
  try {
121
- return await collref.insertOne(object);
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.update(modelname, filter, object)
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.delete(modelname, filter)
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
  }
@@ -9,6 +9,8 @@ export class MultiDbORM {
9
9
 
10
10
  constructor(db: any);
11
11
 
12
+ setLogLevel(level: number): void;
13
+
12
14
  connect(): Promise<void>;
13
15
 
14
16
  setdb(db: any): void;
@@ -16,6 +16,11 @@ class MultiDbORM {
16
16
  this.metrics = new Metrics(this.loglevel)
17
17
  }
18
18
 
19
+ setLogLevel(level) {
20
+ this.loglevel = level;
21
+ this.metrics.setLogLevel(level);
22
+ }
23
+
19
24
  async connect() {
20
25
 
21
26
  }
@@ -64,7 +64,7 @@ class MySQLDB extends MultiDbORM {
64
64
  }
65
65
 
66
66
  async get(modelname, filter, options) {
67
- this.metrics.get(modelname, filter, options);
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
- return (await this.run(query)) || [];
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.getOne(modelname, filter);
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.create(modelname, sampleObject);
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
- return await this.run(query);
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.insert(modelname, object);
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
- return await this.run(query);
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
- return await this.run(query);
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.update(modelname, filter, object);
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
- return await this.run(query);
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.delete(modelname, filter);
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
- return await this.run(query);
243
+ const res = await this.run(query);
244
+ this.metrics.delete(modelname, filter, span);
245
+ return res;
233
246
  }
234
247
 
235
248
  closePool() {
@@ -110,7 +110,7 @@ class OracleDB extends MultiDbORM {
110
110
  }
111
111
 
112
112
  async get(modelname, filter, options) {
113
- this.metrics.get(modelname, filter, options)
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.getOne(modelname, filter)
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.create(modelname, sampleObject)
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
- return await this.run(query)
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.insert(modelname, object)
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
- return await this.run(query)
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
- return await this.run(query)
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
- return await this.run(query)
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
- return await this.run(query)
257
+ const res = await this.run(query)
258
+ this.metrics.delete(modelname, filter, span)
259
+ return res
244
260
  }
245
261
  }
246
262
 
@@ -39,7 +39,7 @@ class SQLiteDB extends MultiDbORM {
39
39
  }
40
40
 
41
41
  async get(modelname, filter, options) {
42
- this.metrics.get(modelname, filter, options);
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
- return (await this.run(query)) || [];
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.getOne(modelname, filter);
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.create(modelname, sampleObject);
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
- return await this.run(query);
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.insert(modelname, object);
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
- return await this.run(query);
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
- return await this.run(query);
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.update(modelname, filter, object);
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
- return await this.run(query);
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.delete(modelname, filter);
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
- return await this.run(query);
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.0",
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
- // testSqlite();
430
- // testFireStore();
431
- // testMongo();
432
- // testOracleDb()
433
- // testMysqlDb();
434
- testHanaDb();
430
+ // run only sqlite tests for validation
431
+ testSqlite();