db-crud-api 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,404 +1,417 @@
1
- 'use strict';
2
-
3
- // import modules
4
- import schema from './schema.js'
5
- import * as mssql from './mssql.js';
6
-
7
- // Common
8
- const defautlFields = ['*'];
9
- export const serverType = Object.freeze({ mssql: 'ms-sql', mysql: 'my-sql', mongodb: 'mongo-db' });
10
- export const objectType = Object.freeze({ table: 'T', procedure: 'P' });
11
-
12
- // Exported functions
13
- export function idField(tSchema) {
14
- return tSchema.table?.idField ?? 'id';
15
- }
16
-
17
- export async function runQuery(dbOpes) {
18
-
19
- // all connections must have same id
20
- const _connection = Array.isArray(dbOpes) ? dbOpes[0].connection : dbOpes.connection;
21
- if (Array.isArray(dbOpes)) {
22
- for (let i = 1; i < dbOpes.length; i++) {
23
- if (dbOpes[i].connection?.id !== _connection.id) throw new TypeError('runQuery: for multiple operations, connection must be the same');
24
- }
25
- }
26
-
27
- // MSSQL
28
- if (_connection.serverType === serverType.mssql) {
29
- const sqlresult = await mssql.query(_connection, dbOpes);
30
- ////mssql.closeConnection(connection);
31
- if (sqlresult.recordsets.length === 0) return;
32
- if (sqlresult.recordsets.length === 1) return sqlresult.recordsets[0];
33
- else return sqlresult.recordsets;
34
- }
35
-
36
- // server type not supported
37
- else throw new TypeError('server type not supported');
38
-
39
- }
40
-
41
- export function prepareConnection(schema) {
42
- if (!schema.server.type || schema.server.type === serverType.mssql) { // mssql is also the default
43
- const _return = mssql.prepareConnection(schema);
44
- _return.serverType = serverType.mssql; // append 'serverType' to connection
45
- return _return;
46
- }
47
- throw new TypeError('server type not supported');
48
- }
49
-
50
- export function closeConnection(connection) {
51
- if (connection.serverType === serverType.mssql) { return mssql.closeConnection(connection); }
52
- }
53
-
54
- export function closeAllConnections() {
55
- return mssql.closeAllConnections();
56
- }
57
-
58
- export function toStringValue(value) {
59
- if (!value) return 'null';
60
- if (value.trimStart().charAt(0) === '\'') return value;
61
- return `\'${value}\'`;
62
- }
63
-
64
- export function prepareSchema(obj, objType) {
65
- // eg. obj = 'systemName.dbName.tableName' or 'dbName.tableName' or 'tablename' or 'systemNme..tableName'
66
- // obj = 'systemName.dbName.spName @param1, @param2 ' or 'dbName.spName @param1' or 'spName' or 'systemNme..spName'
67
- // objType = 'objectType.' (Table or StoreProcedure)
68
-
69
- if (obj == undefined || typeof obj !== 'string') throw new TypeError('prepareSchema: wrong obj');
70
- if (objType !== undefined && objType !== objectType.table && objType !== objectType.procedure) throw new TypeError(`prepareSchema: wrong objType, must be ${objectType.join(', ')}`);
71
- const objPath = obj.trimStart().split(' ')[0];
72
-
73
- // split objPath to serverName,dbName,objName
74
- let serverName = undefined;
75
- let dbName = undefined;
76
- let objName = undefined;
77
- const objPathArray = objPath.split('.');
78
- if (objPathArray.length > 2) {
79
- serverName = objPathArray[0]
80
- dbName = objPathArray[1]
81
- objName = objPathArray[2]
82
- }
83
- else if (objPathArray.length > 1) {
84
- dbName = objPathArray[0]
85
- objName = objPathArray[1]
86
- }
87
- else if (objPathArray.length > 0) {
88
- objName = objPathArray[0]
89
- }
90
-
91
- // server
92
- if (!serverName || serverName.length == 0) {
93
- if (!schema.servers || !Object.keys(schema.servers)[0]) throw new TypeError('missing default server in dbSchema');
94
- serverName = Object.keys(schema.servers)[0];
95
- }
96
- else { // add server to schema
97
- if (!schema.servers) { schema.servers = {} };
98
- if (!schema.servers[serverName]) { schema.servers[serverName] = {} };
99
- }
100
- if (!schema.servers[serverName].realName) { schema.servers[serverName].realName = serverName } // add realName
101
-
102
- // database
103
- if (!dbName || dbName.length == 0) {
104
- if (!schema.servers[serverName].databases || !Object.keys(schema.servers[serverName].databases)[0]) throw new TypeError('missing default database in dbSchema');
105
- dbName = Object.keys(schema.servers[serverName].databases)[0];
106
- }
107
- else { // add db to schema
108
- if (!schema.servers[serverName].databases) { schema.servers[serverName].databases = {} };
109
- if (!schema.servers[serverName].databases[dbName]) { schema.servers[serverName].databases[dbName] = {} };
110
- }
111
- if (!schema.servers[serverName].databases[dbName].realName) { schema.servers[serverName].databases[dbName].realName = dbName } // add realName
112
-
113
- // table
114
- if (objType === objectType.table || objType == undefined) {
115
- if (!objName || objName.length == 0) {
116
- if (!schema.servers[serverName].databases[dbName] || !Object.keys(schema.servers[serverName].databases[dbName].tables)[0]) throw new TypeError('missing default table in dbSchema');
117
- objName = Object.keys(schema.servers[serverName].databases[dbName].tables)[0];
118
- }
119
- else { // add table to schema
120
- if (!schema.servers[serverName].databases[dbName].tables) { schema.servers[serverName].databases[dbName].tables = {} };
121
- if (!schema.servers[serverName].databases[dbName].tables[objName]) { schema.servers[serverName].databases[dbName].tables[objName] = {} }
122
- }
123
- if (!schema.servers[serverName].databases[dbName].tables[objName].realName) { schema.servers[serverName].databases[dbName].tables[objName].realName = objName } // add realName
124
- }
125
-
126
- // store procedure
127
- if (objType === objectType.procedure) {
128
- if (!objName || objName.length == 0) {
129
- if (!schema.servers[serverName].databases[dbName] || !Object.keys(schema.servers[serverName].databases[dbName].procedures)[0]) throw new TypeError('missing default procedure in dbSchema');
130
- objName = Object.keys(schema.servers[serverName].databases[dbName].procedures)[0];
131
- }
132
- else { // add storeprocedure to schema
133
- if (!schema.servers[serverName].databases[dbName].procedures) { schema.servers[serverName].databases[dbName].procedures = {} };
134
- if (!schema.servers[serverName].databases[dbName].procedures[objName]) { schema.servers[serverName].databases[dbName].procedures[objName] = {command: obj} }
135
- }
136
- if (!schema.servers[serverName].databases[dbName].procedures[objName].realName) { schema.servers[serverName].databases[dbName].procedures[objName].realName = objName } // add realName
137
- }
138
-
139
- // return Schema
140
- return {
141
- table: (objType == undefined || objType === objectType.table) ? schema.servers[serverName].databases[dbName].tables[objName] : undefined,
142
- procedure: (objType === objectType.procedure) ? schema.servers[serverName].databases[dbName].procedures[objName] : undefined,
143
- database: schema.servers[serverName].databases[dbName],
144
- server: schema.servers[serverName]
145
- }
146
-
147
- }
148
-
149
- //export function prepareTableSchema(tablePath) {
150
- // alias for prepareSchema (will be removed soon)
151
- // return prepareSchema(tablePath, objectType.table)
152
- //}
153
-
154
- export function prepareRun(tSchema, connection, reqOpe) {
155
- const _reqOpe = [];
156
- const _result = [];
157
- if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
158
- else _reqOpe.push(reqOpe);
159
- _reqOpe.forEach(function (_ope) {
160
- if (_ope?.get) _result.push(prepareGet(tSchema, connection, _ope));
161
- else if (_ope?.patch) _result.push(preparePatch(tSchema, connection, _ope));
162
- else if (_ope?.put) _result.push(preparePut(tSchema, connection, _ope));
163
- else if (_ope?.delete) _result.push(prepareDelete(tSchema, connection, _ope));
164
- else if (_ope?.execute) _result.push(prepareExecute(connection, _ope));
165
- else if (_ope?.begin) _result.push(prepareBegin(connection, _ope));
166
- else if (_ope?.commit) _result.push(prepareCommit(connection, _ope));
167
- else if (_ope?.rollback) _result.push(prepareRollback(connection, _ope));
168
- else if (_ope?.passthrough) _result.push(preparePassthrough(connection, _ope));
169
- else throw new Error('Request sintax error, missing property get/patch/put/delete/...');
170
- });
171
- if (_result.length > 1) return _result;
172
- if (_result.length = 1) return _result[0];
173
- return undefined;
174
- }
175
-
176
- export function prepareRunById(tSchema, connection, reqOpe, idValue) {
177
- if (reqOpe?.get) return prepareGetById(tSchema, connection, reqOpe, idValue);
178
- if (reqOpe?.patch) return preparePatchById(tSchema, connection, reqOpe, idValue);
179
- if (reqOpe?.put) return preparePutById(tSchema, connection, reqOpe, idValue);
180
- if (reqOpe?.delete) return prepareDeleteById(tSchema, connection, reqOpe, idValue);
181
- else throw new Error('Request sintax error, missing property get/patch/put/delete...');
182
- }
183
-
184
- export function prepareGet(tSchema, connection, reqOpe) {
185
- const _reqOpe = [];
186
- const _result = [];
187
- if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
188
- else _reqOpe.push(reqOpe);
189
- _reqOpe.forEach(function (_ope) {
190
- // if ( !_ope?.get) { _ope = { get: { options: 'top 1000' } } }
191
- _result.push({
192
- get: {
193
- schema: tSchema,
194
- options: _ope?.get?.options,
195
- fields: _ope?.get?.fields ?? defautlFields,
196
- filters: _ope?.get?.filters,
197
- groups: _ope?.get?.groups,
198
- groupsFilters: _ope?.get?.groupsFilters,
199
- orderBy: _ope?.get?.orderBy,
200
- params: _ope?.get?.params
201
- },
202
- connection: connection
203
- });
204
- });
205
- if (_result.length > 1) return _result;
206
- if (_result.length = 1) return _result[0];
207
- return undefined;
208
- };
209
-
210
- export function prepareGetById(tSchema, connection, reqOpe, idValue) {
211
- const _filters = [idField(tSchema) + ' = ' + toStringValue(idValue)];
212
- if (reqOpe?.get?.filters && reqOpe?.get?.filters.length > 0) {
213
- _filters.push('and');
214
- Array.isArray(reqOpe.get.filters) ? _filters.push(...reqOpe.get.filters) : _filters.push(reqOpe.get.filters);
215
- }
216
- return {
217
- get: {
218
- schema: tSchema,
219
- options: reqOpe?.get?.options,
220
- fields: reqOpe?.get?.fields ?? defautlFields,
221
- filters: _filters
222
- },
223
- connection: connection
224
- }
225
- };
226
-
227
- export function preparePatch(tSchema, connection, reqOpe) {
228
- const _reqOpe = [];
229
- const _result = [];
230
- if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
231
- else _reqOpe.push(reqOpe);
232
- _reqOpe.forEach(function (_ope) {
233
- if (_ope?.patch) {
234
- if (!_ope.patch.sets) throw new Error('Request sintax error, missing "patch.sets" property.')
235
- _result.push({
236
- patch: {
237
- schema: tSchema,
238
- sets: _ope.patch.sets,
239
- filters: _ope.patch.filters,
240
- params: _ope?.patch.params
241
- },
242
- connection: connection
243
- });
244
- }
245
- else throw new Error('Request sintax error, missing "patch" property.');
246
- });
247
- if (_result.length > 1) return _result;
248
- if (_result.length = 1) return _result[0];
249
- return undefined;
250
- };
251
-
252
- export function preparePatchById(tSchema, connection, reqOpe, idValue) {
253
- if (!reqOpe?.patch) throw new Error('Request sintax error, missing "patch" property.')
254
- if (!reqOpe.patch.sets) throw new Error('Missing "patch.sets" in operation.')
255
- const _filters = [idField(tSchema) + ' = ' + toStringValue(idValue)];
256
- if (reqOpe?.patch?.filters && reqOpe?.patch?.filters.length > 0) {
257
- _filters.push('and');
258
- Array.isArray(reqOpe.patch.filters) ? _filters.push(...reqOpe.patch.filters) : _filters.push(reqOpe.patch.filters);
259
- }
260
- return {
261
- patch: {
262
- schema: tSchema,
263
- sets: reqOpe.patch.sets,
264
- filters: _filters
265
- },
266
- connection: connection
267
- }
268
- };
269
-
270
- export function preparePut(tSchema, connection, reqOpe) {
271
- const _reqOpe = [];
272
- const _result = [];
273
- if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
274
- else _reqOpe.push(reqOpe);
275
- _reqOpe.forEach(function (_ope) {
276
- if (_ope?.put) {
277
- if (!_ope.put.sets) throw new Error('Request sintax error, missing "put.sets" property.')
278
- _result.push({
279
- put: {
280
- schema: tSchema,
281
- sets: reqOpe.put.sets,
282
- params: reqOpe?.put.params
283
- },
284
- connection: connection
285
- });
286
- }
287
- else throw new Error('Request sintax error, missing "put" property.');
288
- });
289
- if (_result.length > 1) return _result;
290
- if (_result.length = 1) return _result[0];
291
- return undefined;
292
- };
293
-
294
- export function preparePutById(tSchema, connection, reqOpe, idValue) {
295
- if (!reqOpe?.put) throw new Error('Request sintax error, missing "put" property.')
296
- if (!reqOpe.put.sets) throw new Error('Missing "put.sets" in operation.')
297
- reqOpe.put.sets[idField(tSchema)] = idValue;
298
- return {
299
- put: {
300
- schema: tSchema,
301
- sets: reqOpe.put.sets,
302
- params: reqOpe?.put?.params
303
- },
304
- connection: connection
305
- }
306
- };
307
-
308
- export function prepareDelete(tSchema, connection, reqOpe) {
309
- const _reqOpe = [];
310
- const _result = [];
311
- if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
312
- else _reqOpe.push(reqOpe);
313
- _reqOpe.forEach(function (_ope) {
314
- if (_ope?.delete) {
315
- if (!_ope.delete.sets) throw new Error('Request sintax error, missing "delete.sets" property.')
316
- _result.push({
317
- delete: {
318
- schema: tSchema,
319
- filters: _ope.delete.filters,
320
- params: _ope.delete.params
321
- },
322
- connection: connection
323
- });
324
- }
325
- else throw new Error('Request sintax error, missing "delete" property.');
326
- });
327
- if (_result.length > 1) return _result;
328
- if (_result.length = 1) return _result[0];
329
- return undefined;
330
- };
331
-
332
- export function prepareDeleteById(tSchema, connection, idValue) {
333
- return {
334
- delete: {
335
- schema: tSchema,
336
- filters: [idField(tSchema) + ' = ' + toStringValue(idValue)]
337
- },
338
- connection: connection
339
- }
340
- };
341
-
342
- export function prepareExecute(pSchema, connection, reqOpe) {
343
- const _reqOpe = [];
344
- const _result = [];
345
- if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
346
- else _reqOpe.push(reqOpe);
347
- _reqOpe.forEach(function (_ope) {
348
- _result.push({
349
- execute: {
350
- schema: pSchema,
351
- command: pSchema.command,
352
- params: _ope.params
353
- },
354
- connection: connection
355
- });
356
- });
357
- if (_result.length > 1) return _result;
358
- if (_result.length = 1) return _result[0];
359
- return undefined;
360
- };
361
-
362
- export function preparePassthrough(connection, reqOpe) {
363
- const _reqOpe = [];
364
- const _result = [];
365
- if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
366
- else _reqOpe.push(reqOpe);
367
- _reqOpe.forEach(function (_ope) {
368
- if (_ope?.passthrough) {
369
- if (!_ope.passthrough.command) throw new Error('Request sintax error, missing "passthrough.command" property.')
370
- _result.push({
371
- passthrough: {
372
- command: _ope.passthrough.command,
373
- params: _ope.passthrough.params
374
- },
375
- connection: connection
376
- });
377
- }
378
- else throw new Error('Request sintax error, missing "passthrough" property.');
379
- });
380
- if (_result.length > 1) return _result;
381
- if (_result.length = 1) return _result[0];
382
- return undefined;
383
- };
384
-
385
- export function prepareBegin(connection, reqOpe) {
386
- return {
387
- begin: {},
388
- connection: connection
389
- }
390
- };
391
-
392
- export function prepareCommit(connection, reqOpe) {
393
- return {
394
- commit: {},
395
- connection: connection
396
- }
397
- };
398
-
399
- export function prepareRollback(connection, reqOpe) {
400
- return {
401
- rollback: {},
402
- connection: connection
403
- }
404
- };
1
+ 'use strict';
2
+
3
+ // import modules
4
+ import schema from './schema.js'
5
+ import * as mssql from './mssql.js';
6
+ import * as mysql from './mysql.js';
7
+
8
+ // Common
9
+ const defautlFields = ['*'];
10
+ export const serverType = Object.freeze({ mssql: 'ms-sql', mysql: 'my-sql', mongodb: 'mongo-db' });
11
+ export const objectType = Object.freeze({ table: 'T', procedure: 'P' });
12
+
13
+ // Exported functions
14
+ export function idField(tSchema) {
15
+ return tSchema.table?.idField ?? 'id';
16
+ }
17
+
18
+ export function autoId(tSchema) {
19
+ return tSchema.table?.autoId;
20
+ }
21
+
22
+ export async function runQuery(dbOpes) {
23
+
24
+ // all connections must have same id
25
+ const _connection = Array.isArray(dbOpes) ? dbOpes[0].connection : dbOpes.connection;
26
+ if (Array.isArray(dbOpes)) {
27
+ for (let i = 1; i < dbOpes.length; i++) {
28
+ if (dbOpes[i].connection?.id !== _connection.id) throw new TypeError('runQuery: for multiple operations, connection must be the same');
29
+ }
30
+ }
31
+
32
+ // MSSQL
33
+ if (_connection.serverType === serverType.mssql) {
34
+ return await mssql.query(_connection, dbOpes);
35
+ }
36
+
37
+ // MySQL
38
+ else if (_connection.serverType === serverType.mysql) {
39
+ return await mysql.query(_connection, dbOpes);
40
+ }
41
+
42
+ // server type not supported
43
+ else throw new TypeError('server type not supported');
44
+
45
+ }
46
+
47
+ export function prepareConnection(schema) {
48
+ // MySQL
49
+ if (schema.server.type === serverType.mysql) {
50
+ const _return = mysql.prepareConnection(schema);
51
+ _return.serverType = serverType.mysql; // append 'serverType' to connection
52
+ return _return;
53
+ }
54
+ // MSSQL is also the default
55
+ if (!schema.server.type || schema.server.type === serverType.mssql) {
56
+ const _return = mssql.prepareConnection(schema);
57
+ _return.serverType = serverType.mssql; // append 'serverType' to connection
58
+ return _return;
59
+ }
60
+ throw new TypeError('server type not supported');
61
+ }
62
+
63
+ export function closeConnection(connection) {
64
+ // MSSQL
65
+ if (connection.serverType === serverType.mssql) { return mssql.closeConnection(connection); }
66
+ // MySQL
67
+ if (connection.serverType === serverType.mysql) { return mysql.closeConnection(connection); }
68
+ }
69
+
70
+ export function closeAllConnections() {
71
+ // MSSQL
72
+ mssql.closeAllConnections();
73
+ // MySQL
74
+ mysql.closeAllConnections();
75
+
76
+ return;
77
+ }
78
+
79
+ export function toStringValue(value) {
80
+ if (!value) return 'null';
81
+ if (value.trimStart().charAt(0) === '\'') return value;
82
+ return `\'${value}\'`;
83
+ }
84
+
85
+ export function prepareSchema(obj, objType) {
86
+ // objType = 'objectType.' (Table or StoreProcedure)
87
+ // obj = 'systemName.dbName.objName' or 'dbName.objName' or 'objName' or 'systemNme..objName'
88
+
89
+ if (obj == undefined || typeof obj !== 'string') throw new TypeError('prepareSchema: wrong obj');
90
+ if (objType !== undefined && objType !== objectType.table && objType !== objectType.procedure) throw new TypeError(`prepareSchema: wrong objType, must be ${objectType.join(', ')}`);
91
+ const objPath = obj.trimStart().split(' ')[0];
92
+
93
+ // split objPath to serverName,dbName,objName
94
+ let serverName = undefined;
95
+ let dbName = undefined;
96
+ let objName = undefined;
97
+ const objPathArray = objPath.split('.');
98
+ if (objPathArray.length > 2) {
99
+ serverName = objPathArray[0]
100
+ dbName = objPathArray[1]
101
+ objName = objPathArray[2]
102
+ }
103
+ else if (objPathArray.length > 1) {
104
+ dbName = objPathArray[0]
105
+ objName = objPathArray[1]
106
+ }
107
+ else if (objPathArray.length > 0) {
108
+ objName = objPathArray[0]
109
+ }
110
+
111
+ // server
112
+ if (!serverName || serverName.length == 0) {
113
+ if (!schema.servers || !Object.keys(schema.servers)[0]) throw new TypeError('missing default server in dbSchema');
114
+ serverName = Object.keys(schema.servers)[0];
115
+ }
116
+ else { // add server to schema
117
+ if (!schema.servers) { schema.servers = {} };
118
+ if (!schema.servers[serverName]) { schema.servers[serverName] = {} };
119
+ }
120
+ if (!schema.servers[serverName].realName) { schema.servers[serverName].realName = serverName } // add realName
121
+
122
+ // database
123
+ if (!dbName || dbName.length == 0) {
124
+ if (!schema.servers[serverName].databases || !Object.keys(schema.servers[serverName].databases)[0]) throw new TypeError('missing default database in dbSchema');
125
+ dbName = Object.keys(schema.servers[serverName].databases)[0];
126
+ }
127
+ else { // add db to schema
128
+ if (!schema.servers[serverName].databases) { schema.servers[serverName].databases = {} };
129
+ if (!schema.servers[serverName].databases[dbName]) { schema.servers[serverName].databases[dbName] = {} };
130
+ }
131
+ if (!schema.servers[serverName].databases[dbName].realName) { schema.servers[serverName].databases[dbName].realName = dbName } // add realName
132
+
133
+ // table
134
+ if (objType === objectType.table || objType == undefined) {
135
+ if (!objName || objName.length == 0) {
136
+ if (!schema.servers[serverName].databases[dbName] || !Object.keys(schema.servers[serverName].databases[dbName].tables)[0]) throw new TypeError('missing default table in dbSchema');
137
+ objName = Object.keys(schema.servers[serverName].databases[dbName].tables)[0];
138
+ }
139
+ else { // add table to schema
140
+ if (!schema.servers[serverName].databases[dbName].tables) { schema.servers[serverName].databases[dbName].tables = {} };
141
+ if (!schema.servers[serverName].databases[dbName].tables[objName]) { schema.servers[serverName].databases[dbName].tables[objName] = {} }
142
+ }
143
+ if (!schema.servers[serverName].databases[dbName].tables[objName].realName) { schema.servers[serverName].databases[dbName].tables[objName].realName = objName } // add realName
144
+ }
145
+
146
+ // store procedure
147
+ if (objType === objectType.procedure) {
148
+ if (!objName || objName.length == 0) {
149
+ if (!schema.servers[serverName].databases[dbName] || !Object.keys(schema.servers[serverName].databases[dbName].procedures)[0]) throw new TypeError('missing default procedure in dbSchema');
150
+ objName = Object.keys(schema.servers[serverName].databases[dbName].procedures)[0];
151
+ }
152
+ else { // add storeprocedure to schema
153
+ if (!schema.servers[serverName].databases[dbName].procedures) { schema.servers[serverName].databases[dbName].procedures = {} };
154
+ if (!schema.servers[serverName].databases[dbName].procedures[objName]) { schema.servers[serverName].databases[dbName].procedures[objName] = {command: obj} }
155
+ }
156
+ if (!schema.servers[serverName].databases[dbName].procedures[objName].realName) { schema.servers[serverName].databases[dbName].procedures[objName].realName = objName } // add realName
157
+ }
158
+
159
+ // return Schema
160
+ return {
161
+ table: (objType == undefined || objType === objectType.table) ? schema.servers[serverName].databases[dbName].tables[objName] : undefined,
162
+ procedure: (objType === objectType.procedure) ? schema.servers[serverName].databases[dbName].procedures[objName] : undefined,
163
+ database: schema.servers[serverName].databases[dbName],
164
+ server: schema.servers[serverName]
165
+ }
166
+
167
+ }
168
+
169
+ export function prepareRun(tSchema, connection, reqOpe) {
170
+ const _reqOpe = [];
171
+ const _result = [];
172
+ if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
173
+ else _reqOpe.push(reqOpe);
174
+ _reqOpe.forEach(function (_ope) {
175
+ if (_ope?.get) _result.push(prepareGet(tSchema, connection, _ope));
176
+ else if (_ope?.patch) _result.push(preparePatch(tSchema, connection, _ope));
177
+ else if (_ope?.put) _result.push(preparePut(tSchema, connection, _ope));
178
+ else if (_ope?.delete) _result.push(prepareDelete(tSchema, connection, _ope));
179
+ else if (_ope?.execute) _result.push(prepareExecute(connection, _ope));
180
+ else if (_ope?.begin) _result.push(prepareBegin(connection, _ope));
181
+ else if (_ope?.commit) _result.push(prepareCommit(connection, _ope));
182
+ else if (_ope?.rollback) _result.push(prepareRollback(connection, _ope));
183
+ else if (_ope?.passthrough) _result.push(preparePassthrough(connection, _ope));
184
+ else throw new Error('Request sintax error, missing property get/patch/put/delete/...');
185
+ });
186
+ if (_result.length > 1) return _result;
187
+ if (_result.length = 1) return _result[0];
188
+ return undefined;
189
+ }
190
+
191
+ export function prepareRunById(tSchema, connection, reqOpe, idValue) {
192
+ if (reqOpe?.get) return prepareGetById(tSchema, connection, reqOpe, idValue);
193
+ if (reqOpe?.patch) return preparePatchById(tSchema, connection, reqOpe, idValue);
194
+ if (reqOpe?.put) return preparePutById(tSchema, connection, reqOpe, idValue);
195
+ if (reqOpe?.delete) return prepareDeleteById(tSchema, connection, reqOpe, idValue);
196
+ else throw new Error('Request sintax error, missing property get/patch/put/delete...');
197
+ }
198
+
199
+ export function prepareGet(tSchema, connection, reqOpe) {
200
+ const _reqOpe = [];
201
+ const _result = [];
202
+ if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
203
+ else _reqOpe.push(reqOpe);
204
+ _reqOpe.forEach(function (_ope) {
205
+ _result.push({
206
+ get: {
207
+ schema: tSchema,
208
+ options: _ope?.get?.options,
209
+ fields: _ope?.get?.fields ?? defautlFields,
210
+ filters: _ope?.get?.filters,
211
+ groups: _ope?.get?.groups,
212
+ groupsFilters: _ope?.get?.groupsFilters,
213
+ orderBy: _ope?.get?.orderBy,
214
+ params: _ope?.get?.params
215
+ },
216
+ connection: connection
217
+ });
218
+ });
219
+ if (_result.length > 1) return _result;
220
+ if (_result.length = 1) return _result[0];
221
+ return undefined;
222
+ };
223
+
224
+ export function prepareGetById(tSchema, connection, reqOpe, idValue) {
225
+ const _filters = [idField(tSchema) + ' = ' + toStringValue(idValue)];
226
+ if (reqOpe?.get?.filters && reqOpe?.get?.filters.length > 0) {
227
+ _filters.push('and');
228
+ Array.isArray(reqOpe.get.filters) ? _filters.push(...reqOpe.get.filters) : _filters.push(reqOpe.get.filters);
229
+ }
230
+ return {
231
+ get: {
232
+ schema: tSchema,
233
+ options: reqOpe?.get?.options,
234
+ fields: reqOpe?.get?.fields ?? defautlFields,
235
+ filters: _filters
236
+ },
237
+ connection: connection
238
+ }
239
+ };
240
+
241
+ export function preparePatch(tSchema, connection, reqOpe) {
242
+ const _reqOpe = [];
243
+ const _result = [];
244
+ if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
245
+ else _reqOpe.push(reqOpe);
246
+ _reqOpe.forEach(function (_ope) {
247
+ if (_ope?.patch) {
248
+ if (!_ope.patch.sets) throw new Error('Request sintax error, missing "patch.sets" property.')
249
+ _result.push({
250
+ patch: {
251
+ schema: tSchema,
252
+ sets: _ope.patch.sets,
253
+ filters: _ope.patch.filters,
254
+ params: _ope.patch.params
255
+ },
256
+ connection: connection
257
+ });
258
+ }
259
+ else throw new Error('Request sintax error, missing "patch" property.');
260
+ });
261
+ if (_result.length > 1) return _result;
262
+ if (_result.length = 1) return _result[0];
263
+ return undefined;
264
+ };
265
+
266
+ export function preparePatchById(tSchema, connection, reqOpe, idValue) {
267
+ if (!reqOpe?.patch) throw new Error('Request sintax error, missing "patch" property.')
268
+ if (!reqOpe.patch.sets) throw new Error('Missing "patch.sets" in operation.')
269
+ const _filters = [idField(tSchema) + ' = ' + toStringValue(idValue)];
270
+ if (reqOpe?.patch?.filters && reqOpe?.patch?.filters.length > 0) {
271
+ _filters.push('and');
272
+ Array.isArray(reqOpe.patch.filters) ? _filters.push(...reqOpe.patch.filters) : _filters.push(reqOpe.patch.filters);
273
+ }
274
+ return {
275
+ patch: {
276
+ schema: tSchema,
277
+ sets: reqOpe.patch.sets,
278
+ filters: _filters
279
+ },
280
+ connection: connection
281
+ }
282
+ };
283
+
284
+ export function preparePut(tSchema, connection, reqOpe) {
285
+ const _reqOpe = [];
286
+ const _result = [];
287
+ if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
288
+ else _reqOpe.push(reqOpe);
289
+ _reqOpe.forEach(function (_ope) {
290
+ if (_ope?.put) {
291
+ if (!_ope.put.sets) throw new Error('Request sintax error, missing "put.sets" property.')
292
+ _result.push({
293
+ put: {
294
+ schema: tSchema,
295
+ sets: _ope.put.sets,
296
+ params: _ope.put.params
297
+ },
298
+ connection: connection
299
+ });
300
+ }
301
+ else throw new Error('Request sintax error, missing "put" property.');
302
+ });
303
+ if (_result.length > 1) return _result;
304
+ if (_result.length = 1) return _result[0];
305
+ return undefined;
306
+ };
307
+
308
+ export function preparePutById(tSchema, connection, reqOpe, idValue) {
309
+ if (!reqOpe?.put) throw new Error('Request sintax error, missing "put" property.')
310
+ if (!reqOpe.put.sets) throw new Error('Missing "put.sets" in operation.')
311
+ reqOpe.put.sets[idField(tSchema)] = idValue;
312
+ return {
313
+ put: {
314
+ schema: tSchema,
315
+ sets: reqOpe.put.sets,
316
+ params: reqOpe.put.params
317
+ },
318
+ connection: connection
319
+ }
320
+ };
321
+
322
+ export function prepareDelete(tSchema, connection, reqOpe) {
323
+ const _reqOpe = [];
324
+ const _result = [];
325
+ if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
326
+ else _reqOpe.push(reqOpe);
327
+ _reqOpe.forEach(function (_ope) {
328
+ if (_ope?.delete) {
329
+ _result.push({
330
+ delete: {
331
+ schema: tSchema,
332
+ filters: _ope.delete.filters,
333
+ params: _ope.delete.params
334
+ },
335
+ connection: connection
336
+ });
337
+ }
338
+ else throw new Error('Request sintax error, missing "delete" property.');
339
+ });
340
+ if (_result.length > 1) return _result;
341
+ if (_result.length = 1) return _result[0];
342
+ return undefined;
343
+ };
344
+
345
+ export function prepareDeleteById(tSchema, connection, idValue) {
346
+ return {
347
+ delete: {
348
+ schema: tSchema,
349
+ filters: [idField(tSchema) + ' = ' + toStringValue(idValue)]
350
+ },
351
+ connection: connection
352
+ }
353
+ };
354
+
355
+ export function prepareExecute(pSchema, connection, reqOpe) {
356
+ const _reqOpe = [];
357
+ const _result = [];
358
+ if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
359
+ else _reqOpe.push(reqOpe);
360
+ _reqOpe.forEach(function (_ope) {
361
+ _result.push({
362
+ execute: {
363
+ schema: pSchema,
364
+ arguments: _ope.execute?.arguments,
365
+ params: _ope.execute?.params
366
+ },
367
+ connection: connection
368
+ });
369
+ });
370
+ if (_result.length > 1) return _result;
371
+ if (_result.length = 1) return _result[0];
372
+ return undefined;
373
+ };
374
+
375
+ export function preparePassthrough(connection, reqOpe) {
376
+ const _reqOpe = [];
377
+ const _result = [];
378
+ if (Array.isArray(reqOpe)) _reqOpe.push(...reqOpe);
379
+ else _reqOpe.push(reqOpe);
380
+ _reqOpe.forEach(function (_ope) {
381
+ if (_ope?.passthrough) {
382
+ if (!_ope.passthrough.command) throw new Error('Request sintax error, missing "passthrough.command" property.')
383
+ _result.push({
384
+ passthrough: {
385
+ command: _ope.passthrough.command,
386
+ params: _ope.passthrough.params
387
+ },
388
+ connection: connection
389
+ });
390
+ }
391
+ else throw new Error('Request sintax error, missing "passthrough" property.');
392
+ });
393
+ if (_result.length > 1) return _result;
394
+ if (_result.length = 1) return _result[0];
395
+ return undefined;
396
+ };
397
+
398
+ export function prepareBegin(connection, reqOpe) {
399
+ return {
400
+ begin: {},
401
+ connection: connection
402
+ }
403
+ };
404
+
405
+ export function prepareCommit(connection, reqOpe) {
406
+ return {
407
+ commit: {},
408
+ connection: connection
409
+ }
410
+ };
411
+
412
+ export function prepareRollback(connection, reqOpe) {
413
+ return {
414
+ rollback: {},
415
+ connection: connection
416
+ }
417
+ };