db-crud-api 0.2.1 → 0.3.0

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