@carbonorm/carbonnode 3.0.13 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/C6Constants.d.ts +184 -0
- package/dist/api/builders/queryHelpers.d.ts +4 -0
- package/dist/api/builders/sqlBuilder.d.ts +17 -5
- package/dist/api/executors/Executor.d.ts +9 -15
- package/dist/api/executors/HttpExecutor.d.ts +7 -14
- package/dist/api/executors/SqlExecutor.d.ts +43 -14
- package/dist/api/orm/SqlBuilder.d.ts +17 -0
- package/dist/api/orm/builders/AggregateBuilder.d.ts +5 -0
- package/dist/api/orm/builders/ConditionBuilder.d.ts +11 -0
- package/dist/api/orm/builders/JoinBuilder.d.ts +5 -0
- package/dist/api/orm/builders/PaginationBuilder.d.ts +5 -0
- package/dist/api/orm/queries/DeleteQueryBuilder.d.ts +6 -0
- package/dist/api/orm/queries/SelectQueryBuilder.d.ts +6 -0
- package/dist/api/orm/queries/UpdateQueryBuilder.d.ts +6 -0
- package/dist/api/orm/queryHelpers.d.ts +4 -0
- package/dist/api/orm/utils/sqlUtils.d.ts +7 -0
- package/dist/api/restOrm.d.ts +3 -10
- package/dist/api/restRequest.d.ts +3 -10
- package/dist/api/types/ormGenerics.d.ts +13 -0
- package/dist/api/types/ormInterfaces.d.ts +23 -40
- package/dist/index.cjs.js +444 -249
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.esm.js +432 -249
- package/dist/index.esm.js.map +1 -1
- package/package.json +7 -2
- package/scripts/assets/handlebars/C6.ts.handlebars +2 -4
- package/scripts/generateRestBindings.cjs +1 -1
- package/scripts/generateRestBindings.ts +1 -1
- package/src/api/C6Constants.ts +38 -2
- package/src/api/executors/Executor.ts +18 -36
- package/src/api/executors/HttpExecutor.ts +46 -59
- package/src/api/executors/SqlExecutor.ts +89 -58
- package/src/api/handlers/ExpressHandler.ts +3 -2
- package/src/api/orm/builders/AggregateBuilder.ts +38 -0
- package/src/api/orm/builders/ConditionBuilder.ts +113 -0
- package/src/api/orm/builders/JoinBuilder.ts +25 -0
- package/src/api/orm/builders/PaginationBuilder.ts +28 -0
- package/src/api/orm/queries/DeleteQueryBuilder.ts +28 -0
- package/src/api/orm/queries/SelectQueryBuilder.ts +49 -0
- package/src/api/orm/queries/UpdateQueryBuilder.ts +42 -0
- package/src/api/orm/queryHelpers.ts +18 -0
- package/src/api/orm/utils/sqlUtils.ts +24 -0
- package/src/api/restOrm.ts +4 -14
- package/src/api/restRequest.ts +16 -34
- package/src/api/types/ormGenerics.ts +18 -0
- package/src/api/types/ormInterfaces.ts +28 -43
- package/src/index.ts +10 -1
- package/src/api/builders/sqlBuilder.ts +0 -223
package/dist/index.esm.js
CHANGED
|
@@ -2,6 +2,8 @@ import axios from 'axios';
|
|
|
2
2
|
import Qs from 'qs';
|
|
3
3
|
import { __assign, __awaiter, __generator, __extends, __spreadArray } from 'tslib';
|
|
4
4
|
import { toast } from 'react-toastify';
|
|
5
|
+
import namedPlaceholders from 'named-placeholders';
|
|
6
|
+
import { Buffer as Buffer$1 } from 'buffer';
|
|
5
7
|
|
|
6
8
|
var C6Constants = {
|
|
7
9
|
// try to 1=1 match the Rest abstract class
|
|
@@ -66,6 +68,7 @@ var C6Constants = {
|
|
|
66
68
|
LOCALTIMESTAMP: 'LOCALTIMESTAMP',
|
|
67
69
|
MAKEDATE: 'MAKEDATE',
|
|
68
70
|
MAKETIME: 'MAKETIME',
|
|
71
|
+
MATCH_AGAINST: 'MATCH_AGAINST',
|
|
69
72
|
MONTHNAME: 'MONTHNAME',
|
|
70
73
|
MICROSECOND: 'MICROSECOND',
|
|
71
74
|
MINUTE: 'MINUTE',
|
|
@@ -86,6 +89,37 @@ var C6Constants = {
|
|
|
86
89
|
SECOND: 'SECOND',
|
|
87
90
|
SECOND_MICROSECOND: 'SECOND_MICROSECOND',
|
|
88
91
|
SELECT: 'SELECT',
|
|
92
|
+
// MySQL Spatial Functions
|
|
93
|
+
ST_AREA: 'ST_Area',
|
|
94
|
+
ST_ASBINARY: 'ST_AsBinary',
|
|
95
|
+
ST_ASTEXT: 'ST_AsText',
|
|
96
|
+
ST_BUFFER: 'ST_Buffer',
|
|
97
|
+
ST_CONTAINS: 'ST_Contains',
|
|
98
|
+
ST_CROSSES: 'ST_Crosses',
|
|
99
|
+
ST_DIFFERENCE: 'ST_Difference',
|
|
100
|
+
ST_DIMENSION: 'ST_Dimension',
|
|
101
|
+
ST_DISJOINT: 'ST_Disjoint',
|
|
102
|
+
ST_DISTANCE: 'ST_Distance',
|
|
103
|
+
ST_DISTANCE_SPHERE: 'ST_Distance_Sphere',
|
|
104
|
+
ST_ENDPOINT: 'ST_EndPoint',
|
|
105
|
+
ST_ENVELOPE: 'ST_Envelope',
|
|
106
|
+
ST_EQUALS: 'ST_Equals',
|
|
107
|
+
ST_GEOMFROMGEOJSON: 'ST_GeomFromGeoJSON',
|
|
108
|
+
ST_GEOMFROMTEXT: 'ST_GeomFromText',
|
|
109
|
+
ST_GEOMFROMWKB: 'ST_GeomFromWKB',
|
|
110
|
+
ST_INTERSECTS: 'ST_Intersects',
|
|
111
|
+
ST_LENGTH: 'ST_Length',
|
|
112
|
+
ST_OVERLAPS: 'ST_Overlaps',
|
|
113
|
+
ST_POINT: 'ST_Point',
|
|
114
|
+
ST_SETSRID: 'ST_SetSRID',
|
|
115
|
+
ST_SRID: 'ST_SRID',
|
|
116
|
+
ST_STARTPOINT: 'ST_StartPoint',
|
|
117
|
+
ST_SYMDIFFERENCE: 'ST_SymDifference',
|
|
118
|
+
ST_TOUCHES: 'ST_Touches',
|
|
119
|
+
ST_UNION: 'ST_Union',
|
|
120
|
+
ST_WITHIN: 'ST_Within',
|
|
121
|
+
ST_X: 'ST_X',
|
|
122
|
+
ST_Y: 'ST_Y',
|
|
89
123
|
STR_TO_DATE: 'STR_TO_DATE',
|
|
90
124
|
SUBDATE: 'SUBDATE',
|
|
91
125
|
SUBTIME: 'SUBTIME',
|
|
@@ -128,6 +162,7 @@ var C6Constants = {
|
|
|
128
162
|
FINISH: 'FINISH',
|
|
129
163
|
VALIDATE_C6_ENTITY_ID_REGEX: '#^([a-fA-F0-9]{20,35})$#',
|
|
130
164
|
};
|
|
165
|
+
var C6C = C6Constants;
|
|
131
166
|
|
|
132
167
|
// @link https://www.npmjs.com/package/axios-cache-adapter
|
|
133
168
|
// updating these values
|
|
@@ -386,9 +421,11 @@ function isVerbose () {
|
|
|
386
421
|
}
|
|
387
422
|
|
|
388
423
|
var Executor = /** @class */ (function () {
|
|
389
|
-
function Executor(config, request) {
|
|
424
|
+
function Executor(config, request, useNamedParams) {
|
|
425
|
+
if (useNamedParams === void 0) { useNamedParams = false; }
|
|
390
426
|
this.config = config;
|
|
391
427
|
this.request = request;
|
|
428
|
+
this.useNamedParams = useNamedParams;
|
|
392
429
|
}
|
|
393
430
|
Executor.prototype.runLifecycleHooks = function (phase, args) {
|
|
394
431
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -418,8 +455,10 @@ var Executor = /** @class */ (function () {
|
|
|
418
455
|
_d.label = 2;
|
|
419
456
|
case 2:
|
|
420
457
|
_d.trys.push([2, 4, , 5]);
|
|
458
|
+
// todo - this
|
|
421
459
|
return [4 /*yield*/, fn(args)];
|
|
422
460
|
case 3:
|
|
461
|
+
// todo - this
|
|
423
462
|
_d.sent();
|
|
424
463
|
return [3 /*break*/, 5];
|
|
425
464
|
case 4:
|
|
@@ -437,211 +476,6 @@ var Executor = /** @class */ (function () {
|
|
|
437
476
|
return Executor;
|
|
438
477
|
}());
|
|
439
478
|
|
|
440
|
-
var SqlBuilder = /** @class */ (function (_super) {
|
|
441
|
-
__extends(SqlBuilder, _super);
|
|
442
|
-
function SqlBuilder() {
|
|
443
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
444
|
-
}
|
|
445
|
-
/** Generate nested WHERE/JOIN conditions with parameter binding */
|
|
446
|
-
SqlBuilder.prototype.buildBooleanJoinedConditions = function (set, andMode, params) {
|
|
447
|
-
if (andMode === void 0) { andMode = true; }
|
|
448
|
-
if (params === void 0) { params = []; }
|
|
449
|
-
var booleanOperator = andMode ? 'AND' : 'OR';
|
|
450
|
-
var OPERATORS = ['=', '!=', '<', '<=', '>', '>=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'IS', 'IS NOT'];
|
|
451
|
-
var isAggregateArray = function (value) {
|
|
452
|
-
return Array.isArray(value) && typeof value[0] === 'string' && OPERATORS.includes(value[0]);
|
|
453
|
-
};
|
|
454
|
-
var isNumericKeyed = function (obj) {
|
|
455
|
-
return Array.isArray(obj) && Object.keys(obj).every(function (k) { return /^\d+$/.test(k); });
|
|
456
|
-
};
|
|
457
|
-
var addCondition = function (column, op, value) {
|
|
458
|
-
var clause;
|
|
459
|
-
/*if (Buffer.isBuffer(value)) { // TODO - I want this as a parameterized option, for now default to faster
|
|
460
|
-
params.push(value.toString('hex')); // Or use UNHEX(?) in SQL
|
|
461
|
-
clause = `(${column} = UNHEX(?))`;
|
|
462
|
-
} else {*/
|
|
463
|
-
params.push(value);
|
|
464
|
-
clause = "( ".concat(column, " ").concat(op, " ? )");
|
|
465
|
-
//}
|
|
466
|
-
isVerbose() && console.log("[WHERE] \u2795 ".concat(clause, " ->"), value);
|
|
467
|
-
return clause;
|
|
468
|
-
};
|
|
469
|
-
var sql;
|
|
470
|
-
if (isNumericKeyed(set)) {
|
|
471
|
-
isVerbose() && console.log("[WHERE] Numeric keyed condition:", set);
|
|
472
|
-
switch (set.length) {
|
|
473
|
-
case 2:
|
|
474
|
-
sql = addCondition(set[0], '=', set[1]);
|
|
475
|
-
break;
|
|
476
|
-
case 3:
|
|
477
|
-
if (!OPERATORS.includes(set[1]))
|
|
478
|
-
throw new Error("Invalid operator: ".concat(set[1]));
|
|
479
|
-
sql = addCondition(set[0], set[1], set[2]);
|
|
480
|
-
break;
|
|
481
|
-
default:
|
|
482
|
-
throw new Error("Invalid array condition: ".concat(JSON.stringify(set)));
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
else {
|
|
486
|
-
var parts = [];
|
|
487
|
-
for (var _i = 0, _a = Object.entries(set); _i < _a.length; _i++) {
|
|
488
|
-
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
489
|
-
if (/^\d+$/.test(key)) {
|
|
490
|
-
parts.push(this.buildBooleanJoinedConditions(value, !andMode, params));
|
|
491
|
-
}
|
|
492
|
-
else if (!Array.isArray(value) || isAggregateArray(value)) {
|
|
493
|
-
parts.push(addCondition(key, '=', value));
|
|
494
|
-
}
|
|
495
|
-
else if (value.length === 2 && OPERATORS.includes(value[0])) {
|
|
496
|
-
parts.push(addCondition(key, value[0], value[1]));
|
|
497
|
-
}
|
|
498
|
-
else {
|
|
499
|
-
throw new Error("Invalid condition for ".concat(key, ": ").concat(JSON.stringify(value)));
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
sql = parts.join(" ".concat(booleanOperator, " "));
|
|
503
|
-
}
|
|
504
|
-
isVerbose() && console.log("[WHERE] Final: (".concat(sql, ")"));
|
|
505
|
-
return "(".concat(sql, ")");
|
|
506
|
-
};
|
|
507
|
-
/** Translate array or function calls into SQL expressions */
|
|
508
|
-
SqlBuilder.prototype.buildAggregateField = function (field) {
|
|
509
|
-
if (typeof field === 'string')
|
|
510
|
-
return field;
|
|
511
|
-
if (!Array.isArray(field))
|
|
512
|
-
throw new Error('Invalid SELECT entry');
|
|
513
|
-
var fn = field[0], args = field.slice(1);
|
|
514
|
-
var alias;
|
|
515
|
-
if (args.length >= 2 && args[args.length - 2] === 'AS') {
|
|
516
|
-
alias = String(args.pop());
|
|
517
|
-
args.pop();
|
|
518
|
-
}
|
|
519
|
-
var F = String(fn).toUpperCase();
|
|
520
|
-
var p = args.join(', ');
|
|
521
|
-
isVerbose() && console.log("[SELECT] ".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : ''));
|
|
522
|
-
switch (F) {
|
|
523
|
-
case 'DATE_ADD':
|
|
524
|
-
return "DATE_ADD(".concat(args[0], ", ").concat(args[1], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
525
|
-
case 'DATE_SUB':
|
|
526
|
-
return "DATE_SUB(".concat(args[0], ", ").concat(args[1], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
527
|
-
case 'YEAR':
|
|
528
|
-
return "YEAR(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
529
|
-
case 'MONTH':
|
|
530
|
-
return "MONTH(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
531
|
-
case 'DAY':
|
|
532
|
-
return "DAY(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
533
|
-
case 'ROUND':
|
|
534
|
-
case 'CEIL':
|
|
535
|
-
case 'FLOOR':
|
|
536
|
-
case 'ABS':
|
|
537
|
-
case 'SQRT':
|
|
538
|
-
return "".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
539
|
-
case 'ST_DISTANCE':
|
|
540
|
-
return "ST_Distance(".concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
541
|
-
default:
|
|
542
|
-
if (/^[A-Z_]+$/.test(F))
|
|
543
|
-
return "".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
544
|
-
throw new Error("Unsupported function: ".concat(F));
|
|
545
|
-
}
|
|
546
|
-
};
|
|
547
|
-
/** Compose a parameterized SELECT query with optional JOIN/WHERE/GROUP/HAVING/PAGINATION */
|
|
548
|
-
SqlBuilder.prototype.buildSelectQuery = function (table, primary, args, isSubSelect) {
|
|
549
|
-
var _this = this;
|
|
550
|
-
var _a, _b, _c, _d;
|
|
551
|
-
if (isSubSelect === void 0) { isSubSelect = false; }
|
|
552
|
-
var model = this.config.C6.TABLES[table];
|
|
553
|
-
var params = [];
|
|
554
|
-
// SELECT
|
|
555
|
-
var selectList = (_a = args === null || args === void 0 ? void 0 : args[C6Constants.SELECT]) !== null && _a !== void 0 ? _a : ['*'];
|
|
556
|
-
var selectFields = Array.isArray(selectList)
|
|
557
|
-
? selectList.map(function (f) { return _this.buildAggregateField(f); }).join(', ')
|
|
558
|
-
: '*';
|
|
559
|
-
var sql = "SELECT ".concat(selectFields, " FROM ").concat(table);
|
|
560
|
-
isVerbose() && console.log("[SELECT]", selectFields);
|
|
561
|
-
// JOIN
|
|
562
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.JOIN]) {
|
|
563
|
-
for (var jt in args[C6Constants.JOIN]) {
|
|
564
|
-
var jk = jt.replace('_', ' ').toUpperCase();
|
|
565
|
-
for (var jn in args[C6Constants.JOIN][jt]) {
|
|
566
|
-
var on = this.buildBooleanJoinedConditions(args[C6Constants.JOIN][jt][jn], true, params);
|
|
567
|
-
sql += " ".concat(jk, " JOIN `").concat(jn, "` ON ").concat(on);
|
|
568
|
-
isVerbose() && console.log("[JOIN]", jk, jn, on);
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
// WHERE
|
|
573
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.WHERE]) {
|
|
574
|
-
var wc = this.buildBooleanJoinedConditions(args[C6Constants.WHERE], true, params);
|
|
575
|
-
// Trim leading and trailing parentheses if they fully wrap the condition
|
|
576
|
-
while (wc.startsWith('(') && wc.endsWith(')')) {
|
|
577
|
-
wc = wc.slice(1, -1).trim();
|
|
578
|
-
}
|
|
579
|
-
sql += " WHERE ".concat(wc);
|
|
580
|
-
}
|
|
581
|
-
// GROUP BY
|
|
582
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.GROUP_BY]) {
|
|
583
|
-
var gb = Array.isArray(args[C6Constants.GROUP_BY])
|
|
584
|
-
? args[C6Constants.GROUP_BY].join(', ')
|
|
585
|
-
: args[C6Constants.GROUP_BY];
|
|
586
|
-
sql += " GROUP BY ".concat(gb);
|
|
587
|
-
isVerbose() && console.log("[GROUP BY]", gb);
|
|
588
|
-
}
|
|
589
|
-
// HAVING
|
|
590
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.HAVING]) {
|
|
591
|
-
var hc = this.buildBooleanJoinedConditions(args[C6Constants.HAVING], true, params);
|
|
592
|
-
sql += " HAVING ".concat(hc);
|
|
593
|
-
}
|
|
594
|
-
// PAGINATION
|
|
595
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.PAGINATION]) {
|
|
596
|
-
var p = args[C6Constants.PAGINATION];
|
|
597
|
-
if (p[C6Constants.ORDER]) {
|
|
598
|
-
var ord = Object.entries(p[C6Constants.ORDER]).map(function (_a) {
|
|
599
|
-
var c = _a[0], d = _a[1];
|
|
600
|
-
return "".concat(c, " ").concat(String(d).toUpperCase());
|
|
601
|
-
});
|
|
602
|
-
sql += " ORDER BY ".concat(ord.join(', '));
|
|
603
|
-
isVerbose() && console.log("[ORDER BY]", ord);
|
|
604
|
-
}
|
|
605
|
-
if (p[C6Constants.LIMIT] != null) {
|
|
606
|
-
var lim = parseInt(p[C6Constants.LIMIT], 10);
|
|
607
|
-
var pg = parseInt((_b = p[C6Constants.PAGE]) !== null && _b !== void 0 ? _b : 1, 10);
|
|
608
|
-
var off = (pg - 1) * lim;
|
|
609
|
-
sql += " LIMIT ".concat(off, ", ").concat(lim);
|
|
610
|
-
isVerbose() && console.log("[LIMIT]", off, lim);
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
// Fallback ORDER/LIMIT
|
|
614
|
-
else if (!isSubSelect) {
|
|
615
|
-
var ok = void 0;
|
|
616
|
-
if (primary)
|
|
617
|
-
ok = primary;
|
|
618
|
-
else if ((_c = model === null || model === void 0 ? void 0 : model.PRIMARY_SHORT) === null || _c === void 0 ? void 0 : _c[0])
|
|
619
|
-
ok = model.PRIMARY_SHORT[0];
|
|
620
|
-
else
|
|
621
|
-
for (var _i = 0, _e = ['created_at', 'updated_at']; _i < _e.length; _i++) {
|
|
622
|
-
var ts = _e[_i];
|
|
623
|
-
if ((_d = model === null || model === void 0 ? void 0 : model.COLUMNS) === null || _d === void 0 ? void 0 : _d["".concat(table, ".").concat(ts)]) {
|
|
624
|
-
ok = ts;
|
|
625
|
-
break;
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
|
-
if (ok) {
|
|
629
|
-
var dir = primary ? 'ASC' : 'DESC';
|
|
630
|
-
var lim = primary ? 1 : 100;
|
|
631
|
-
sql += " ORDER BY ".concat(ok, " ").concat(dir, " LIMIT ").concat(lim);
|
|
632
|
-
isVerbose() && console.log("[ORDER]", ok, dir, lim);
|
|
633
|
-
}
|
|
634
|
-
else {
|
|
635
|
-
sql += " LIMIT 100";
|
|
636
|
-
isVerbose() && console.warn("[ORDER] fallback LIMIT 100");
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
isVerbose() && console.log("[SQL]", sql, params);
|
|
640
|
-
return { sql: sql, params: params };
|
|
641
|
-
};
|
|
642
|
-
return SqlBuilder;
|
|
643
|
-
}(Executor));
|
|
644
|
-
|
|
645
479
|
function isLocal () {
|
|
646
480
|
return getEnvVar('NODE_ENV', '') === 'development';
|
|
647
481
|
}
|
|
@@ -1360,10 +1194,246 @@ var HttpExecutor$1 = /*#__PURE__*/Object.freeze({
|
|
|
1360
1194
|
HttpExecutor: HttpExecutor
|
|
1361
1195
|
});
|
|
1362
1196
|
|
|
1197
|
+
function convertHexIfBinary(_col, val, columnDef) {
|
|
1198
|
+
if (typeof val === 'string' &&
|
|
1199
|
+
/^[0-9a-fA-F]{32}$/.test(val) &&
|
|
1200
|
+
typeof columnDef === 'object' &&
|
|
1201
|
+
columnDef.MYSQL_TYPE.toUpperCase().includes('BINARY')) {
|
|
1202
|
+
return Buffer.from(val, 'hex');
|
|
1203
|
+
}
|
|
1204
|
+
return val;
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
var AggregateBuilder = /** @class */ (function (_super) {
|
|
1208
|
+
__extends(AggregateBuilder, _super);
|
|
1209
|
+
function AggregateBuilder() {
|
|
1210
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1211
|
+
}
|
|
1212
|
+
AggregateBuilder.prototype.buildAggregateField = function (field) {
|
|
1213
|
+
var _this = this;
|
|
1214
|
+
if (typeof field === 'string') {
|
|
1215
|
+
return field;
|
|
1216
|
+
}
|
|
1217
|
+
if (!Array.isArray(field) || field.length === 0) {
|
|
1218
|
+
throw new Error('Invalid SELECT field entry');
|
|
1219
|
+
}
|
|
1220
|
+
var fn = field[0], args = field.slice(1);
|
|
1221
|
+
var alias;
|
|
1222
|
+
if (args.length >= 2 && String(args[args.length - 2]).toUpperCase() === 'AS') {
|
|
1223
|
+
alias = String(args.pop());
|
|
1224
|
+
args.pop();
|
|
1225
|
+
}
|
|
1226
|
+
var F = String(fn).toUpperCase();
|
|
1227
|
+
var argList = args.map(function (arg) {
|
|
1228
|
+
return Array.isArray(arg) ? _this.buildAggregateField(arg) : arg;
|
|
1229
|
+
}).join(', ');
|
|
1230
|
+
var expr = "".concat(F, "(").concat(argList, ")");
|
|
1231
|
+
if (alias) {
|
|
1232
|
+
expr += " AS ".concat(alias);
|
|
1233
|
+
}
|
|
1234
|
+
isVerbose() && console.log("[SELECT] ".concat(expr));
|
|
1235
|
+
return expr;
|
|
1236
|
+
};
|
|
1237
|
+
return AggregateBuilder;
|
|
1238
|
+
}(Executor));
|
|
1239
|
+
|
|
1240
|
+
var ConditionBuilder = /** @class */ (function (_super) {
|
|
1241
|
+
__extends(ConditionBuilder, _super);
|
|
1242
|
+
function ConditionBuilder() {
|
|
1243
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
1244
|
+
_this.OPERATORS = new Set([
|
|
1245
|
+
'=', '!=', '<', '<=', '>', '>=',
|
|
1246
|
+
'LIKE', 'NOT LIKE', 'IN', 'NOT IN',
|
|
1247
|
+
'IS', 'IS NOT', 'BETWEEN', 'NOT BETWEEN',
|
|
1248
|
+
C6Constants.MATCH_AGAINST
|
|
1249
|
+
]);
|
|
1250
|
+
return _this;
|
|
1251
|
+
}
|
|
1252
|
+
ConditionBuilder.prototype.execute = function () {
|
|
1253
|
+
throw new Error("Method not implemented.");
|
|
1254
|
+
};
|
|
1255
|
+
ConditionBuilder.prototype.validateOperator = function (op) {
|
|
1256
|
+
if (!this.OPERATORS.has(op)) {
|
|
1257
|
+
throw new Error("Invalid or unsupported SQL operator detected: '".concat(op, "'"));
|
|
1258
|
+
}
|
|
1259
|
+
};
|
|
1260
|
+
ConditionBuilder.prototype.addParam = function (params, column, value) {
|
|
1261
|
+
var _a, _b;
|
|
1262
|
+
var columnDef = (_b = (_a = this.config.C6[column.split('.')[0]]) === null || _a === void 0 ? void 0 : _a.TYPE_VALIDATION) === null || _b === void 0 ? void 0 : _b[column];
|
|
1263
|
+
var val = convertHexIfBinary(column, value, columnDef);
|
|
1264
|
+
if (this.useNamedParams) {
|
|
1265
|
+
var key = "param".concat(Object.keys(params).length);
|
|
1266
|
+
params[key] = val;
|
|
1267
|
+
return ":".concat(key);
|
|
1268
|
+
}
|
|
1269
|
+
else {
|
|
1270
|
+
params.push(val);
|
|
1271
|
+
return '?';
|
|
1272
|
+
}
|
|
1273
|
+
};
|
|
1274
|
+
ConditionBuilder.prototype.buildBooleanJoinedConditions = function (set, andMode, params) {
|
|
1275
|
+
var _this = this;
|
|
1276
|
+
if (andMode === void 0) { andMode = true; }
|
|
1277
|
+
if (params === void 0) { params = []; }
|
|
1278
|
+
var booleanOperator = andMode ? 'AND' : 'OR';
|
|
1279
|
+
var addCondition = function (column, op, value) {
|
|
1280
|
+
_this.validateOperator(op);
|
|
1281
|
+
if (op === C6Constants.MATCH_AGAINST && Array.isArray(value)) {
|
|
1282
|
+
var search = value[0], mode = value[1];
|
|
1283
|
+
var paramName = _this.useNamedParams ? "param".concat(Object.keys(params).length) : null;
|
|
1284
|
+
if (_this.useNamedParams) {
|
|
1285
|
+
params[paramName] = search;
|
|
1286
|
+
}
|
|
1287
|
+
else {
|
|
1288
|
+
params.push(search);
|
|
1289
|
+
}
|
|
1290
|
+
var againstClause = void 0;
|
|
1291
|
+
switch ((mode || '').toUpperCase()) {
|
|
1292
|
+
case 'BOOLEAN':
|
|
1293
|
+
againstClause = _this.useNamedParams ? "AGAINST(:".concat(paramName, " IN BOOLEAN MODE)") : "AGAINST(? IN BOOLEAN MODE)";
|
|
1294
|
+
break;
|
|
1295
|
+
case 'WITH QUERY EXPANSION':
|
|
1296
|
+
againstClause = _this.useNamedParams ? "AGAINST(:".concat(paramName, " WITH QUERY EXPANSION)") : "AGAINST(? WITH QUERY EXPANSION)";
|
|
1297
|
+
break;
|
|
1298
|
+
default: // NATURAL or undefined
|
|
1299
|
+
againstClause = _this.useNamedParams ? "AGAINST(:".concat(paramName, ")") : "AGAINST(?)";
|
|
1300
|
+
break;
|
|
1301
|
+
}
|
|
1302
|
+
var matchClause = "(MATCH(".concat(column, ") ").concat(againstClause, ")");
|
|
1303
|
+
isVerbose() && console.log("[MATCH_AGAINST] ".concat(matchClause));
|
|
1304
|
+
return matchClause;
|
|
1305
|
+
}
|
|
1306
|
+
// handle other operators
|
|
1307
|
+
return "( ".concat(column, " ").concat(op, " ").concat(_this.addParam(params, column, value), " )");
|
|
1308
|
+
};
|
|
1309
|
+
var parts = [];
|
|
1310
|
+
if (typeof set === 'object' && !Array.isArray(set)) {
|
|
1311
|
+
for (var _i = 0, _a = Object.entries(set); _i < _a.length; _i++) {
|
|
1312
|
+
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
1313
|
+
if (typeof value === 'object' && value !== null && Object.keys(value).length === 1) {
|
|
1314
|
+
var _c = Object.entries(value)[0], op = _c[0], val = _c[1];
|
|
1315
|
+
parts.push(addCondition(key, op, val));
|
|
1316
|
+
}
|
|
1317
|
+
else {
|
|
1318
|
+
parts.push(addCondition(key, '=', value));
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
var clause = parts.join(" ".concat(booleanOperator, " "));
|
|
1323
|
+
return clause ? "(".concat(clause, ")") : '';
|
|
1324
|
+
};
|
|
1325
|
+
ConditionBuilder.prototype.buildWhereClause = function (whereArg, params) {
|
|
1326
|
+
var clause = this.buildBooleanJoinedConditions(whereArg, true, params);
|
|
1327
|
+
if (!clause)
|
|
1328
|
+
return '';
|
|
1329
|
+
var trimmed = clause.replace(/^\((.*)\)$/, '$1');
|
|
1330
|
+
isVerbose() && console.log("[WHERE] ".concat(trimmed));
|
|
1331
|
+
return " WHERE ".concat(trimmed);
|
|
1332
|
+
};
|
|
1333
|
+
return ConditionBuilder;
|
|
1334
|
+
}(AggregateBuilder));
|
|
1335
|
+
|
|
1336
|
+
var JoinBuilder = /** @class */ (function (_super) {
|
|
1337
|
+
__extends(JoinBuilder, _super);
|
|
1338
|
+
function JoinBuilder() {
|
|
1339
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1340
|
+
}
|
|
1341
|
+
JoinBuilder.prototype.buildJoinClauses = function (joinArgs, params) {
|
|
1342
|
+
var sql = '';
|
|
1343
|
+
for (var joinType in joinArgs) {
|
|
1344
|
+
var joinKind = joinType.replace('_', ' ').toUpperCase();
|
|
1345
|
+
for (var raw in joinArgs[joinType]) {
|
|
1346
|
+
var _a = raw.split(' '), table = _a[0], alias = _a[1];
|
|
1347
|
+
var onClause = this.buildBooleanJoinedConditions(joinArgs[joinType][raw], true, params);
|
|
1348
|
+
var joinSql = alias ? "`".concat(table, "` AS `").concat(alias, "`") : "`".concat(table, "`");
|
|
1349
|
+
sql += " ".concat(joinKind, " JOIN ").concat(joinSql, " ON ").concat(onClause);
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
isVerbose() && console.log("[JOIN] ".concat(sql.trim()));
|
|
1353
|
+
return sql;
|
|
1354
|
+
};
|
|
1355
|
+
return JoinBuilder;
|
|
1356
|
+
}(ConditionBuilder));
|
|
1357
|
+
|
|
1358
|
+
var PaginationBuilder = /** @class */ (function (_super) {
|
|
1359
|
+
__extends(PaginationBuilder, _super);
|
|
1360
|
+
function PaginationBuilder() {
|
|
1361
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1362
|
+
}
|
|
1363
|
+
PaginationBuilder.prototype.buildPaginationClause = function (pagination) {
|
|
1364
|
+
var _this = this;
|
|
1365
|
+
var _a;
|
|
1366
|
+
var sql = '';
|
|
1367
|
+
if (pagination === null || pagination === void 0 ? void 0 : pagination[C6Constants.ORDER]) {
|
|
1368
|
+
var orderParts = Object.entries(pagination[C6Constants.ORDER])
|
|
1369
|
+
.map(function (_a) {
|
|
1370
|
+
var col = _a[0], dir = _a[1];
|
|
1371
|
+
return "".concat(Array.isArray(col) ? _this.buildAggregateField(col) : col, " ").concat(String(dir).toUpperCase());
|
|
1372
|
+
});
|
|
1373
|
+
sql += " ORDER BY ".concat(orderParts.join(', '));
|
|
1374
|
+
}
|
|
1375
|
+
if ((pagination === null || pagination === void 0 ? void 0 : pagination[C6Constants.LIMIT]) != null) {
|
|
1376
|
+
var lim = parseInt(pagination[C6Constants.LIMIT], 10);
|
|
1377
|
+
var page = parseInt((_a = pagination[C6Constants.PAGE]) !== null && _a !== void 0 ? _a : 1, 10);
|
|
1378
|
+
var offset = (page - 1) * lim;
|
|
1379
|
+
sql += " LIMIT ".concat(offset, ", ").concat(lim);
|
|
1380
|
+
}
|
|
1381
|
+
isVerbose() && console.log("[PAGINATION] ".concat(sql.trim()));
|
|
1382
|
+
return sql;
|
|
1383
|
+
};
|
|
1384
|
+
return PaginationBuilder;
|
|
1385
|
+
}(JoinBuilder));
|
|
1386
|
+
|
|
1387
|
+
var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
1388
|
+
__extends(SelectQueryBuilder, _super);
|
|
1389
|
+
function SelectQueryBuilder() {
|
|
1390
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1391
|
+
}
|
|
1392
|
+
SelectQueryBuilder.prototype.build = function (table, args, primary, isSubSelect) {
|
|
1393
|
+
var _this = this;
|
|
1394
|
+
var _a;
|
|
1395
|
+
if (isSubSelect === void 0) { isSubSelect = false; }
|
|
1396
|
+
var params = this.useNamedParams ? {} : [];
|
|
1397
|
+
var selectList = (_a = args.SELECT) !== null && _a !== void 0 ? _a : ['*'];
|
|
1398
|
+
var selectFields = selectList
|
|
1399
|
+
.map(function (f) { return _this.buildAggregateField(f); })
|
|
1400
|
+
.join(', ');
|
|
1401
|
+
var sql = "SELECT ".concat(selectFields, " FROM `").concat(table, "`");
|
|
1402
|
+
if (args.JOIN) {
|
|
1403
|
+
sql += this.buildJoinClauses(args.JOIN, params);
|
|
1404
|
+
}
|
|
1405
|
+
if (args.WHERE) {
|
|
1406
|
+
sql += this.buildWhereClause(args.WHERE, params);
|
|
1407
|
+
}
|
|
1408
|
+
if (args.GROUP_BY) {
|
|
1409
|
+
var groupBy = Array.isArray(args.GROUP_BY)
|
|
1410
|
+
? args.GROUP_BY.join(', ')
|
|
1411
|
+
: args.GROUP_BY;
|
|
1412
|
+
sql += " GROUP BY ".concat(groupBy);
|
|
1413
|
+
}
|
|
1414
|
+
if (args.HAVING) {
|
|
1415
|
+
sql += " HAVING ".concat(this.buildBooleanJoinedConditions(args.HAVING, true, params));
|
|
1416
|
+
}
|
|
1417
|
+
if (args.PAGINATION) {
|
|
1418
|
+
sql += this.buildPaginationClause(args.PAGINATION);
|
|
1419
|
+
}
|
|
1420
|
+
else if (!isSubSelect) {
|
|
1421
|
+
sql += primary ? " ORDER BY ".concat(primary, " ASC LIMIT 1") : " LIMIT 100";
|
|
1422
|
+
}
|
|
1423
|
+
return { sql: sql, params: params };
|
|
1424
|
+
};
|
|
1425
|
+
return SelectQueryBuilder;
|
|
1426
|
+
}(PaginationBuilder));
|
|
1427
|
+
|
|
1363
1428
|
var SqlExecutor = /** @class */ (function (_super) {
|
|
1364
1429
|
__extends(SqlExecutor, _super);
|
|
1365
1430
|
function SqlExecutor() {
|
|
1366
|
-
|
|
1431
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
1432
|
+
_this.serialize = function (row) { return Object.fromEntries(Object.entries(row).map(function (_a) {
|
|
1433
|
+
var k = _a[0], v = _a[1];
|
|
1434
|
+
return [k, Buffer$1.isBuffer(v) ? v.toString('hex').toUpperCase() : v];
|
|
1435
|
+
})); };
|
|
1436
|
+
return _this;
|
|
1367
1437
|
}
|
|
1368
1438
|
SqlExecutor.prototype.execute = function () {
|
|
1369
1439
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -1387,7 +1457,7 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1387
1457
|
case 2:
|
|
1388
1458
|
rest = _b.sent();
|
|
1389
1459
|
console.log("[SQL EXECUTOR] \u2705 GET result:", rest);
|
|
1390
|
-
return [2 /*return*/,
|
|
1460
|
+
return [2 /*return*/, rest];
|
|
1391
1461
|
case 3: return [4 /*yield*/, this.insert(TABLE_NAME, this.request)];
|
|
1392
1462
|
case 4:
|
|
1393
1463
|
result = _b.sent();
|
|
@@ -1398,11 +1468,7 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1398
1468
|
case 6:
|
|
1399
1469
|
result = _b.sent();
|
|
1400
1470
|
console.log("[SQL EXECUTOR] \u2705 PUT result:", result);
|
|
1401
|
-
updated = {
|
|
1402
|
-
rest: result,
|
|
1403
|
-
updated: true,
|
|
1404
|
-
rowCount: result.affectedRows
|
|
1405
|
-
};
|
|
1471
|
+
updated = __assign(__assign({}, result), { updated: true, rowCount: result.rest.affectedRows });
|
|
1406
1472
|
return [2 /*return*/, updated];
|
|
1407
1473
|
case 7: return [4 /*yield*/, this.delete(TABLE_NAME, [], this.request)];
|
|
1408
1474
|
case 8:
|
|
@@ -1411,7 +1477,7 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1411
1477
|
deleted = {
|
|
1412
1478
|
rest: result,
|
|
1413
1479
|
deleted: true,
|
|
1414
|
-
rowCount: result.affectedRows
|
|
1480
|
+
rowCount: result.rest.affectedRows
|
|
1415
1481
|
};
|
|
1416
1482
|
return [2 /*return*/, deleted];
|
|
1417
1483
|
case 9: throw new Error("Unsupported request method: ".concat(method));
|
|
@@ -1446,28 +1512,36 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1446
1512
|
};
|
|
1447
1513
|
SqlExecutor.prototype.select = function (table, primary, args) {
|
|
1448
1514
|
return __awaiter(this, void 0, void 0, function () {
|
|
1449
|
-
var sql,
|
|
1515
|
+
var QueryResult, formatted, toUnnamed, _a, sql, values;
|
|
1450
1516
|
var _this = this;
|
|
1451
|
-
return __generator(this, function (
|
|
1452
|
-
switch (
|
|
1517
|
+
return __generator(this, function (_b) {
|
|
1518
|
+
switch (_b.label) {
|
|
1453
1519
|
case 0:
|
|
1454
|
-
|
|
1455
|
-
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated SELECT SQL:",
|
|
1456
|
-
formatted = this.formatSQLWithParams(
|
|
1520
|
+
QueryResult = (new SelectQueryBuilder(this.config, this.request)).build(table, args, primary);
|
|
1521
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated SELECT SQL:", QueryResult);
|
|
1522
|
+
formatted = this.formatSQLWithParams(QueryResult.sql, QueryResult.params);
|
|
1457
1523
|
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Formatted SELECT SQL:", formatted);
|
|
1524
|
+
toUnnamed = namedPlaceholders();
|
|
1525
|
+
_a = toUnnamed(QueryResult.sql, QueryResult.params), sql = _a[0], values = _a[1];
|
|
1458
1526
|
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1459
1527
|
var rows;
|
|
1460
1528
|
return __generator(this, function (_a) {
|
|
1461
1529
|
switch (_a.label) {
|
|
1462
|
-
case 0: return [4 /*yield*/, conn.query(sql
|
|
1530
|
+
case 0: return [4 /*yield*/, conn.query(sql, values)];
|
|
1463
1531
|
case 1:
|
|
1464
1532
|
rows = (_a.sent())[0];
|
|
1465
1533
|
console.log("[SQL EXECUTOR] \uD83D\uDCE6 Rows fetched:", rows);
|
|
1466
|
-
return [2 /*return*/,
|
|
1534
|
+
return [2 /*return*/, {
|
|
1535
|
+
rest: rows.map(this.serialize),
|
|
1536
|
+
sql: {
|
|
1537
|
+
sql: sql,
|
|
1538
|
+
values: values
|
|
1539
|
+
}
|
|
1540
|
+
}];
|
|
1467
1541
|
}
|
|
1468
1542
|
});
|
|
1469
1543
|
}); })];
|
|
1470
|
-
case 1: return [2 /*return*/,
|
|
1544
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
1471
1545
|
}
|
|
1472
1546
|
});
|
|
1473
1547
|
});
|
|
@@ -1482,7 +1556,7 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1482
1556
|
keys = Object.keys(data);
|
|
1483
1557
|
values = keys.map(function (k) { return data[k]; });
|
|
1484
1558
|
placeholders = keys.map(function () { return '?'; }).join(', ');
|
|
1485
|
-
sql = "INSERT INTO `".concat(table, "` (").concat(keys.join(', '), ")
|
|
1559
|
+
sql = "INSERT INTO `".concat(table, "` (").concat(keys.join(', '), ")\n VALUES (").concat(placeholders, ")");
|
|
1486
1560
|
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated INSERT SQL:", sql);
|
|
1487
1561
|
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
1488
1562
|
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -1492,7 +1566,13 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1492
1566
|
case 0: return [4 /*yield*/, conn.execute(sql, values)];
|
|
1493
1567
|
case 1:
|
|
1494
1568
|
result = (_a.sent())[0];
|
|
1495
|
-
return [2 /*return*/,
|
|
1569
|
+
return [2 /*return*/, {
|
|
1570
|
+
rest: result,
|
|
1571
|
+
sql: {
|
|
1572
|
+
sql: sql,
|
|
1573
|
+
placeholders: placeholders
|
|
1574
|
+
}
|
|
1575
|
+
}];
|
|
1496
1576
|
}
|
|
1497
1577
|
});
|
|
1498
1578
|
}); })];
|
|
@@ -1513,7 +1593,7 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1513
1593
|
keys = Object.keys(data);
|
|
1514
1594
|
values = keys.map(function (k) { return data[k]; });
|
|
1515
1595
|
updates = keys.map(function (k) { return "`".concat(k, "` = ?"); }).join(', ');
|
|
1516
|
-
sql = "UPDATE `".concat(table, "
|
|
1596
|
+
sql = "UPDATE `".concat(table, "`\n SET ").concat(updates, "\n WHERE `").concat(primary[0], "` = ?");
|
|
1517
1597
|
values.push(data[primary[0]]);
|
|
1518
1598
|
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated UPDATE SQL:", sql);
|
|
1519
1599
|
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
@@ -1524,7 +1604,13 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1524
1604
|
case 0: return [4 /*yield*/, conn.execute(sql, values)];
|
|
1525
1605
|
case 1:
|
|
1526
1606
|
result = (_a.sent())[0];
|
|
1527
|
-
return [2 /*return*/,
|
|
1607
|
+
return [2 /*return*/, {
|
|
1608
|
+
rest: result,
|
|
1609
|
+
sql: {
|
|
1610
|
+
sql: sql,
|
|
1611
|
+
values: values
|
|
1612
|
+
}
|
|
1613
|
+
}];
|
|
1528
1614
|
}
|
|
1529
1615
|
});
|
|
1530
1616
|
}); })];
|
|
@@ -1543,7 +1629,7 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1543
1629
|
key = primary === null || primary === void 0 ? void 0 : primary[0];
|
|
1544
1630
|
if (!key || !(args === null || args === void 0 ? void 0 : args[key]))
|
|
1545
1631
|
throw new Error('Primary key and value required for delete');
|
|
1546
|
-
sql = "DELETE
|
|
1632
|
+
sql = "DELETE\n FROM `".concat(table, "`\n WHERE `").concat(key, "` = ?");
|
|
1547
1633
|
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated DELETE SQL:", sql);
|
|
1548
1634
|
console.log("[SQL EXECUTOR] \uD83D\uDD22 Value:", args[key]);
|
|
1549
1635
|
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -1553,7 +1639,13 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1553
1639
|
case 0: return [4 /*yield*/, conn.execute(sql, [args[key]])];
|
|
1554
1640
|
case 1:
|
|
1555
1641
|
result = (_a.sent())[0];
|
|
1556
|
-
return [2 /*return*/,
|
|
1642
|
+
return [2 /*return*/, {
|
|
1643
|
+
rest: result,
|
|
1644
|
+
sql: {
|
|
1645
|
+
sql: sql,
|
|
1646
|
+
args: args
|
|
1647
|
+
}
|
|
1648
|
+
}];
|
|
1557
1649
|
}
|
|
1558
1650
|
});
|
|
1559
1651
|
}); })];
|
|
@@ -1563,26 +1655,38 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1563
1655
|
});
|
|
1564
1656
|
};
|
|
1565
1657
|
SqlExecutor.prototype.formatSQLWithParams = function (sql, params) {
|
|
1566
|
-
var
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1658
|
+
var _this = this;
|
|
1659
|
+
if (Array.isArray(params)) {
|
|
1660
|
+
var index_1 = 0;
|
|
1661
|
+
return sql.replace(/\?/g, function () {
|
|
1662
|
+
if (index_1 >= params.length)
|
|
1663
|
+
return '?';
|
|
1664
|
+
var val = params[index_1++];
|
|
1665
|
+
return _this.formatValue(val);
|
|
1666
|
+
});
|
|
1667
|
+
}
|
|
1668
|
+
else {
|
|
1669
|
+
return sql.replace(/:([a-zA-Z0-9_]+)/g, function (_, key) {
|
|
1670
|
+
var val = params[key];
|
|
1671
|
+
return _this.formatValue(val);
|
|
1672
|
+
});
|
|
1673
|
+
}
|
|
1674
|
+
};
|
|
1675
|
+
SqlExecutor.prototype.formatValue = function (val) {
|
|
1676
|
+
if (val === null || val === undefined)
|
|
1677
|
+
return 'NULL';
|
|
1678
|
+
if (Buffer$1.isBuffer(val))
|
|
1679
|
+
return "UNHEX('".concat(val.toString('hex'), "')");
|
|
1680
|
+
if (typeof val === 'string')
|
|
1681
|
+
return "'".concat(val.replace(/'/g, "''"), "'");
|
|
1682
|
+
if (typeof val === 'number')
|
|
1683
|
+
return val.toString();
|
|
1684
|
+
if (val instanceof Date)
|
|
1685
|
+
return "'".concat(val.toISOString().slice(0, 19).replace('T', ' '), "'");
|
|
1686
|
+
return "'".concat(JSON.stringify(val), "'");
|
|
1583
1687
|
};
|
|
1584
1688
|
return SqlExecutor;
|
|
1585
|
-
}(
|
|
1689
|
+
}(Executor));
|
|
1586
1690
|
|
|
1587
1691
|
var SqlExecutor$1 = /*#__PURE__*/Object.freeze({
|
|
1588
1692
|
__proto__: null,
|
|
@@ -1633,11 +1737,11 @@ function ExpressHandler(_a) {
|
|
|
1633
1737
|
})(payload)];
|
|
1634
1738
|
case 1:
|
|
1635
1739
|
response = _a.sent();
|
|
1636
|
-
console.log('response', JSON.stringify(response));
|
|
1637
1740
|
res.status(200).json(__assign({ success: true }, response));
|
|
1638
1741
|
return [3 /*break*/, 3];
|
|
1639
1742
|
case 2:
|
|
1640
1743
|
err_1 = _a.sent();
|
|
1744
|
+
res.status(500).json({ success: false, error: err_1 });
|
|
1641
1745
|
next(err_1);
|
|
1642
1746
|
return [3 /*break*/, 3];
|
|
1643
1747
|
case 3: return [2 /*return*/];
|
|
@@ -1646,6 +1750,85 @@ function ExpressHandler(_a) {
|
|
|
1646
1750
|
}); };
|
|
1647
1751
|
}
|
|
1648
1752
|
|
|
1753
|
+
// Alias a table name with a given alias
|
|
1754
|
+
var A = function (tableName, alias) {
|
|
1755
|
+
return "".concat(tableName, " ").concat(alias);
|
|
1756
|
+
};
|
|
1757
|
+
// Qualify a column constant (e.g. 'property_units.parcel_id') to an alias
|
|
1758
|
+
var F = function (qualifiedCol, alias) {
|
|
1759
|
+
return "".concat(alias, ".").concat(qualifiedCol.split('.').pop());
|
|
1760
|
+
};
|
|
1761
|
+
// Equal join condition using full-qualified column constants
|
|
1762
|
+
var fieldEq = function (leftCol, rightCol, leftAlias, rightAlias) {
|
|
1763
|
+
var _a;
|
|
1764
|
+
return (_a = {},
|
|
1765
|
+
_a[F(leftCol, leftAlias)] = F(rightCol, rightAlias),
|
|
1766
|
+
_a);
|
|
1767
|
+
};
|
|
1768
|
+
// ST_Distance_Sphere for aliased fields
|
|
1769
|
+
var distSphere = function (fromCol, toCol, fromAlias, toAlias) {
|
|
1770
|
+
return [C6C.ST_DISTANCE_SPHERE, F(fromCol, fromAlias), F(toCol, toAlias)];
|
|
1771
|
+
};
|
|
1772
|
+
|
|
1773
|
+
var DeleteQueryBuilder = /** @class */ (function (_super) {
|
|
1774
|
+
__extends(DeleteQueryBuilder, _super);
|
|
1775
|
+
function DeleteQueryBuilder() {
|
|
1776
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1777
|
+
}
|
|
1778
|
+
DeleteQueryBuilder.prototype.build = function (table, args) {
|
|
1779
|
+
if (args === void 0) { args = {}; }
|
|
1780
|
+
var params = this.useNamedParams ? {} : [];
|
|
1781
|
+
var sql = args.JOIN ? "DELETE ".concat(table, "\n FROM `").concat(table, "`") : "DELETE\n FROM `".concat(table, "`");
|
|
1782
|
+
if (args.JOIN) {
|
|
1783
|
+
sql += this.buildJoinClauses(args.JOIN, params);
|
|
1784
|
+
}
|
|
1785
|
+
if (args.WHERE) {
|
|
1786
|
+
sql += this.buildWhereClause(args.WHERE, params);
|
|
1787
|
+
}
|
|
1788
|
+
if (args.PAGINATION) {
|
|
1789
|
+
sql += this.buildPaginationClause(args.PAGINATION);
|
|
1790
|
+
}
|
|
1791
|
+
return { sql: sql, params: params };
|
|
1792
|
+
};
|
|
1793
|
+
return DeleteQueryBuilder;
|
|
1794
|
+
}(PaginationBuilder));
|
|
1795
|
+
|
|
1796
|
+
var UpdateQueryBuilder = /** @class */ (function (_super) {
|
|
1797
|
+
__extends(UpdateQueryBuilder, _super);
|
|
1798
|
+
function UpdateQueryBuilder() {
|
|
1799
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1800
|
+
}
|
|
1801
|
+
UpdateQueryBuilder.prototype.build = function (table, data, args) {
|
|
1802
|
+
if (args === void 0) { args = {}; }
|
|
1803
|
+
var params = this.useNamedParams ? {} : [];
|
|
1804
|
+
var sql = "UPDATE `".concat(table, "`");
|
|
1805
|
+
if (args.JOIN) {
|
|
1806
|
+
sql += this.buildJoinClauses(args.JOIN, params);
|
|
1807
|
+
}
|
|
1808
|
+
var setClauses = Object.entries(data).map(function (_a) {
|
|
1809
|
+
var col = _a[0], val = _a[1];
|
|
1810
|
+
if (Array.isArray(params)) {
|
|
1811
|
+
params.push(val);
|
|
1812
|
+
return "`".concat(col, "` = ?");
|
|
1813
|
+
}
|
|
1814
|
+
else {
|
|
1815
|
+
var key = "param".concat(Object.keys(params).length);
|
|
1816
|
+
params[key] = val;
|
|
1817
|
+
return "`".concat(col, "` = :").concat(key);
|
|
1818
|
+
}
|
|
1819
|
+
});
|
|
1820
|
+
sql += " SET ".concat(setClauses.join(', '));
|
|
1821
|
+
if (args.WHERE) {
|
|
1822
|
+
sql += this.buildWhereClause(args.WHERE, params);
|
|
1823
|
+
}
|
|
1824
|
+
if (args.PAGINATION) {
|
|
1825
|
+
sql += this.buildPaginationClause(args.PAGINATION);
|
|
1826
|
+
}
|
|
1827
|
+
return { sql: sql, params: params };
|
|
1828
|
+
};
|
|
1829
|
+
return UpdateQueryBuilder;
|
|
1830
|
+
}(PaginationBuilder));
|
|
1831
|
+
|
|
1649
1832
|
function determineRuntimeJsType(mysqlType) {
|
|
1650
1833
|
var base = mysqlType.toLowerCase().split('(')[0];
|
|
1651
1834
|
if ([
|
|
@@ -1744,5 +1927,5 @@ function onError(message) {
|
|
|
1744
1927
|
toast.error(message, isLocal() ? toastOptionsDevs : toastOptions);
|
|
1745
1928
|
}
|
|
1746
1929
|
|
|
1747
|
-
export { C6Constants, DELETE, Executor, ExpressHandler, GET, HttpExecutor, POST, PUT,
|
|
1930
|
+
export { A, AggregateBuilder, C6C, C6Constants, ConditionBuilder, DELETE, DeleteQueryBuilder, Executor, ExpressHandler, F, GET, HttpExecutor, JoinBuilder, POST, PUT, PaginationBuilder, SelectQueryBuilder, SqlExecutor, TestRestfulResponse, UpdateQueryBuilder, apiRequestCache, axiosInstance, checkAllRequestsComplete, checkCache, clearCache, convertForRequestBody, convertHexIfBinary, determineRuntimeJsType, distSphere, eFetchDependencies, error, fieldEq, getEnvVar, getPrimaryKeyTypes, group, info, isLocal, isNode, isTest, isVerbose, onError, onSuccess, removeInvalidKeys, removePrefixIfExists, restOrm, restRequest, sortAndSerializeQueryObject, timeout, toastOptions, toastOptionsDevs, userCustomClearCache, warn };
|
|
1748
1931
|
//# sourceMappingURL=index.esm.js.map
|