@carbonorm/carbonnode 3.3.10 → 3.4.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.
- package/dist/api/C6Constants.d.ts +2 -0
- package/dist/api/executors/SqlExecutor.d.ts +12 -28
- package/dist/api/orm/builders/ConditionBuilder.d.ts +4 -2
- package/dist/api/orm/builders/JoinBuilder.d.ts +1 -1
- package/dist/api/orm/builders/PaginationBuilder.d.ts +1 -1
- package/dist/api/orm/queries/DeleteQueryBuilder.d.ts +3 -3
- package/dist/api/orm/queries/PostQueryBuilder.d.ts +8 -0
- package/dist/api/orm/queries/SelectQueryBuilder.d.ts +1 -1
- package/dist/api/orm/queries/UpdateQueryBuilder.d.ts +1 -1
- package/dist/api/types/ormInterfaces.d.ts +1 -1
- package/dist/index.cjs.js +170 -214
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +170 -215
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/api/C6Constants.ts +1 -0
- package/src/api/executors/SqlExecutor.ts +61 -91
- package/src/api/handlers/ExpressHandler.ts +23 -3
- package/src/api/orm/builders/ConditionBuilder.ts +6 -3
- package/src/api/orm/builders/JoinBuilder.ts +1 -1
- package/src/api/orm/builders/PaginationBuilder.ts +1 -1
- package/src/api/orm/queries/DeleteQueryBuilder.ts +13 -18
- package/src/api/orm/queries/PostQueryBuilder.ts +29 -0
- package/src/api/orm/queries/SelectQueryBuilder.ts +2 -4
- package/src/api/orm/queries/UpdateQueryBuilder.ts +7 -12
- package/src/api/types/ormInterfaces.ts +3 -1
- package/src/index.ts +1 -0
package/dist/index.esm.js
CHANGED
|
@@ -151,6 +151,7 @@ var C6Constants = {
|
|
|
151
151
|
DEPENDANT_ON_ENTITY: 'DEPENDANT_ON_ENTITY',
|
|
152
152
|
// PHP validation
|
|
153
153
|
OPTIONS: 'OPTIONS',
|
|
154
|
+
INSERT: 'INSERT',
|
|
154
155
|
GET: 'GET',
|
|
155
156
|
POST: 'POST',
|
|
156
157
|
PUT: 'PUT',
|
|
@@ -1365,6 +1366,52 @@ var JoinBuilder = /** @class */ (function (_super) {
|
|
|
1365
1366
|
return JoinBuilder;
|
|
1366
1367
|
}(ConditionBuilder));
|
|
1367
1368
|
|
|
1369
|
+
var DeleteQueryBuilder = /** @class */ (function (_super) {
|
|
1370
|
+
__extends(DeleteQueryBuilder, _super);
|
|
1371
|
+
function DeleteQueryBuilder() {
|
|
1372
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1373
|
+
}
|
|
1374
|
+
DeleteQueryBuilder.prototype.build = function (table) {
|
|
1375
|
+
var params = this.useNamedParams ? {} : [];
|
|
1376
|
+
var sql = "DELETE `".concat(table, "` FROM `").concat(table, "`");
|
|
1377
|
+
if (this.request.JOIN) {
|
|
1378
|
+
sql += this.buildJoinClauses(this.request.JOIN, params);
|
|
1379
|
+
}
|
|
1380
|
+
if (this.request.WHERE) {
|
|
1381
|
+
sql += this.buildWhereClause(this.request.WHERE, params);
|
|
1382
|
+
}
|
|
1383
|
+
return { sql: sql, params: params };
|
|
1384
|
+
};
|
|
1385
|
+
return DeleteQueryBuilder;
|
|
1386
|
+
}(JoinBuilder));
|
|
1387
|
+
|
|
1388
|
+
var PostQueryBuilder = /** @class */ (function (_super) {
|
|
1389
|
+
__extends(PostQueryBuilder, _super);
|
|
1390
|
+
function PostQueryBuilder() {
|
|
1391
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1392
|
+
}
|
|
1393
|
+
PostQueryBuilder.prototype.build = function (table) {
|
|
1394
|
+
var verb = C6C.REPLACE in this.request ? C6C.REPLACE : C6C.INSERT;
|
|
1395
|
+
var keys = Object.keys(verb in this.request ? this.request[verb] : this.request);
|
|
1396
|
+
var params = [];
|
|
1397
|
+
var placeholders = [];
|
|
1398
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
1399
|
+
var key = keys_1[_i];
|
|
1400
|
+
var value = this.request[key];
|
|
1401
|
+
var placeholder = this.addParam(params, key, value);
|
|
1402
|
+
placeholders.push(placeholder);
|
|
1403
|
+
}
|
|
1404
|
+
var sql = "".concat(verb, " INTO `").concat(table, "` (").concat(keys.map(function (k) { return "`".concat(k, "`"); }).join(', '), ")\nVALUES (").concat(placeholders.join(', '), ")");
|
|
1405
|
+
if (C6C.UPDATE in this.request) {
|
|
1406
|
+
var updateData = this.request[C6C.UPDATE];
|
|
1407
|
+
var updateClause = updateData.map(function (k) { return "`".concat(k, "` = VALUES(`").concat(k, "`)"); }).join(', ');
|
|
1408
|
+
sql += " ON DUPLICATE KEY UPDATE ".concat(updateClause);
|
|
1409
|
+
}
|
|
1410
|
+
return { sql: sql, params: params };
|
|
1411
|
+
};
|
|
1412
|
+
return PostQueryBuilder;
|
|
1413
|
+
}(ConditionBuilder));
|
|
1414
|
+
|
|
1368
1415
|
var PaginationBuilder = /** @class */ (function (_super) {
|
|
1369
1416
|
__extends(PaginationBuilder, _super);
|
|
1370
1417
|
function PaginationBuilder() {
|
|
@@ -1425,10 +1472,11 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1425
1472
|
function SelectQueryBuilder() {
|
|
1426
1473
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
1427
1474
|
}
|
|
1428
|
-
SelectQueryBuilder.prototype.build = function (table,
|
|
1475
|
+
SelectQueryBuilder.prototype.build = function (table, isSubSelect) {
|
|
1429
1476
|
var _this = this;
|
|
1430
1477
|
var _a;
|
|
1431
1478
|
if (isSubSelect === void 0) { isSubSelect = false; }
|
|
1479
|
+
var args = this.request;
|
|
1432
1480
|
var params = this.useNamedParams ? {} : [];
|
|
1433
1481
|
var selectList = (_a = args.SELECT) !== null && _a !== void 0 ? _a : ['*'];
|
|
1434
1482
|
var selectFields = selectList
|
|
@@ -1454,13 +1502,45 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
|
|
|
1454
1502
|
sql += this.buildPaginationClause(args.PAGINATION);
|
|
1455
1503
|
}
|
|
1456
1504
|
else if (!isSubSelect) {
|
|
1457
|
-
sql +=
|
|
1505
|
+
sql += " LIMIT 100";
|
|
1458
1506
|
}
|
|
1459
1507
|
return { sql: sql, params: params };
|
|
1460
1508
|
};
|
|
1461
1509
|
return SelectQueryBuilder;
|
|
1462
1510
|
}(PaginationBuilder));
|
|
1463
1511
|
|
|
1512
|
+
var UpdateQueryBuilder = /** @class */ (function (_super) {
|
|
1513
|
+
__extends(UpdateQueryBuilder, _super);
|
|
1514
|
+
function UpdateQueryBuilder() {
|
|
1515
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
1516
|
+
}
|
|
1517
|
+
UpdateQueryBuilder.prototype.build = function (table) {
|
|
1518
|
+
var _this = this;
|
|
1519
|
+
var args = this.request;
|
|
1520
|
+
var params = this.useNamedParams ? {} : [];
|
|
1521
|
+
var sql = "UPDATE `".concat(table, "`");
|
|
1522
|
+
if (args.JOIN) {
|
|
1523
|
+
sql += this.buildJoinClauses(args.JOIN, params);
|
|
1524
|
+
}
|
|
1525
|
+
if (!(C6C.UPDATE in this.request)) {
|
|
1526
|
+
throw new Error("No update data provided in the request.");
|
|
1527
|
+
}
|
|
1528
|
+
var setClauses = Object.entries(this.request[C6C.UPDATE]).map(function (_a) {
|
|
1529
|
+
var col = _a[0], val = _a[1];
|
|
1530
|
+
return _this.addParam(params, col, val);
|
|
1531
|
+
});
|
|
1532
|
+
sql += " SET ".concat(setClauses.join(', '));
|
|
1533
|
+
if (args.WHERE) {
|
|
1534
|
+
sql += this.buildWhereClause(args.WHERE, params);
|
|
1535
|
+
}
|
|
1536
|
+
if (args.PAGINATION) {
|
|
1537
|
+
sql += this.buildPaginationClause(args.PAGINATION);
|
|
1538
|
+
}
|
|
1539
|
+
return { sql: sql, params: params };
|
|
1540
|
+
};
|
|
1541
|
+
return UpdateQueryBuilder;
|
|
1542
|
+
}(PaginationBuilder));
|
|
1543
|
+
|
|
1464
1544
|
var SqlExecutor = /** @class */ (function (_super) {
|
|
1465
1545
|
__extends(SqlExecutor, _super);
|
|
1466
1546
|
function SqlExecutor() {
|
|
@@ -1489,24 +1569,23 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1489
1569
|
case 'DELETE': return [3 /*break*/, 7];
|
|
1490
1570
|
}
|
|
1491
1571
|
return [3 /*break*/, 9];
|
|
1492
|
-
case 1: return [4 /*yield*/, this.
|
|
1572
|
+
case 1: return [4 /*yield*/, this.runQuery()];
|
|
1493
1573
|
case 2:
|
|
1494
1574
|
rest = _b.sent();
|
|
1495
1575
|
console.log("[SQL EXECUTOR] \u2705 GET result:", rest);
|
|
1496
1576
|
return [2 /*return*/, rest];
|
|
1497
|
-
case 3: return [4 /*yield*/, this.
|
|
1577
|
+
case 3: return [4 /*yield*/, this.runQuery()];
|
|
1498
1578
|
case 4:
|
|
1499
1579
|
result = _b.sent();
|
|
1500
1580
|
console.log("[SQL EXECUTOR] \u2705 POST result:", result);
|
|
1501
1581
|
created = { rest: result, created: true };
|
|
1502
1582
|
return [2 /*return*/, created];
|
|
1503
|
-
case 5: return [4 /*yield*/, this.
|
|
1583
|
+
case 5: return [4 /*yield*/, this.runQuery()];
|
|
1504
1584
|
case 6:
|
|
1505
1585
|
result = _b.sent();
|
|
1506
|
-
console.log("[SQL EXECUTOR] \u2705 PUT result:", result);
|
|
1507
1586
|
updated = __assign(__assign({}, result), { updated: true, rowCount: result.rest.affectedRows });
|
|
1508
1587
|
return [2 /*return*/, updated];
|
|
1509
|
-
case 7: return [4 /*yield*/, this.
|
|
1588
|
+
case 7: return [4 /*yield*/, this.runQuery()];
|
|
1510
1589
|
case 8:
|
|
1511
1590
|
result = _b.sent();
|
|
1512
1591
|
console.log("[SQL EXECUTOR] \u2705 DELETE result:", result);
|
|
@@ -1546,150 +1625,6 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1546
1625
|
});
|
|
1547
1626
|
});
|
|
1548
1627
|
};
|
|
1549
|
-
SqlExecutor.prototype.select = function (table, primary, args) {
|
|
1550
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1551
|
-
var QueryResult, formatted, toUnnamed, _a, sql, values;
|
|
1552
|
-
var _this = this;
|
|
1553
|
-
return __generator(this, function (_b) {
|
|
1554
|
-
switch (_b.label) {
|
|
1555
|
-
case 0:
|
|
1556
|
-
QueryResult = (new SelectQueryBuilder(this.config, this.request)).build(table, args, primary);
|
|
1557
|
-
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated SELECT SQL:", QueryResult);
|
|
1558
|
-
formatted = this.formatSQLWithParams(QueryResult.sql, QueryResult.params);
|
|
1559
|
-
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Formatted SELECT SQL:", formatted);
|
|
1560
|
-
toUnnamed = namedPlaceholders();
|
|
1561
|
-
_a = toUnnamed(QueryResult.sql, QueryResult.params), sql = _a[0], values = _a[1];
|
|
1562
|
-
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1563
|
-
var rows;
|
|
1564
|
-
return __generator(this, function (_a) {
|
|
1565
|
-
switch (_a.label) {
|
|
1566
|
-
case 0: return [4 /*yield*/, conn.query(sql, values)];
|
|
1567
|
-
case 1:
|
|
1568
|
-
rows = (_a.sent())[0];
|
|
1569
|
-
console.log("[SQL EXECUTOR] \uD83D\uDCE6 Rows fetched:", rows);
|
|
1570
|
-
return [2 /*return*/, {
|
|
1571
|
-
rest: rows.map(this.serialize),
|
|
1572
|
-
sql: {
|
|
1573
|
-
sql: sql,
|
|
1574
|
-
values: values
|
|
1575
|
-
}
|
|
1576
|
-
}];
|
|
1577
|
-
}
|
|
1578
|
-
});
|
|
1579
|
-
}); })];
|
|
1580
|
-
case 1: return [2 /*return*/, _b.sent()];
|
|
1581
|
-
}
|
|
1582
|
-
});
|
|
1583
|
-
});
|
|
1584
|
-
};
|
|
1585
|
-
SqlExecutor.prototype.insert = function (table, data) {
|
|
1586
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1587
|
-
var keys, values, placeholders, sql;
|
|
1588
|
-
var _this = this;
|
|
1589
|
-
return __generator(this, function (_a) {
|
|
1590
|
-
switch (_a.label) {
|
|
1591
|
-
case 0:
|
|
1592
|
-
keys = Object.keys(data);
|
|
1593
|
-
values = keys.map(function (k) { return data[k]; });
|
|
1594
|
-
placeholders = keys.map(function () { return '?'; }).join(', ');
|
|
1595
|
-
sql = "INSERT INTO `".concat(table, "` (").concat(keys.join(', '), ")\n VALUES (").concat(placeholders, ")");
|
|
1596
|
-
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated INSERT SQL:", sql);
|
|
1597
|
-
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
1598
|
-
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1599
|
-
var result;
|
|
1600
|
-
return __generator(this, function (_a) {
|
|
1601
|
-
switch (_a.label) {
|
|
1602
|
-
case 0: return [4 /*yield*/, conn.execute(sql, values)];
|
|
1603
|
-
case 1:
|
|
1604
|
-
result = (_a.sent())[0];
|
|
1605
|
-
return [2 /*return*/, {
|
|
1606
|
-
rest: result,
|
|
1607
|
-
sql: {
|
|
1608
|
-
sql: sql,
|
|
1609
|
-
placeholders: placeholders
|
|
1610
|
-
}
|
|
1611
|
-
}];
|
|
1612
|
-
}
|
|
1613
|
-
});
|
|
1614
|
-
}); })];
|
|
1615
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
1616
|
-
}
|
|
1617
|
-
});
|
|
1618
|
-
});
|
|
1619
|
-
};
|
|
1620
|
-
SqlExecutor.prototype.update = function (table, primary, data) {
|
|
1621
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1622
|
-
var keys, values, updates, sql;
|
|
1623
|
-
var _this = this;
|
|
1624
|
-
return __generator(this, function (_a) {
|
|
1625
|
-
switch (_a.label) {
|
|
1626
|
-
case 0:
|
|
1627
|
-
if (!(primary === null || primary === void 0 ? void 0 : primary.length))
|
|
1628
|
-
throw new Error('Primary key is required for update');
|
|
1629
|
-
keys = Object.keys(data);
|
|
1630
|
-
values = keys.map(function (k) { return data[k]; });
|
|
1631
|
-
updates = keys.map(function (k) { return "`".concat(k, "` = ?"); }).join(', ');
|
|
1632
|
-
sql = "UPDATE `".concat(table, "`\n SET ").concat(updates, "\n WHERE `").concat(primary[0], "` = ?");
|
|
1633
|
-
values.push(data[primary[0]]);
|
|
1634
|
-
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated UPDATE SQL:", sql);
|
|
1635
|
-
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
1636
|
-
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1637
|
-
var result;
|
|
1638
|
-
return __generator(this, function (_a) {
|
|
1639
|
-
switch (_a.label) {
|
|
1640
|
-
case 0: return [4 /*yield*/, conn.execute(sql, values)];
|
|
1641
|
-
case 1:
|
|
1642
|
-
result = (_a.sent())[0];
|
|
1643
|
-
return [2 /*return*/, {
|
|
1644
|
-
rest: result,
|
|
1645
|
-
sql: {
|
|
1646
|
-
sql: sql,
|
|
1647
|
-
values: values
|
|
1648
|
-
}
|
|
1649
|
-
}];
|
|
1650
|
-
}
|
|
1651
|
-
});
|
|
1652
|
-
}); })];
|
|
1653
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
1654
|
-
}
|
|
1655
|
-
});
|
|
1656
|
-
});
|
|
1657
|
-
};
|
|
1658
|
-
SqlExecutor.prototype.delete = function (table, primary, args) {
|
|
1659
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1660
|
-
var key, sql;
|
|
1661
|
-
var _this = this;
|
|
1662
|
-
return __generator(this, function (_a) {
|
|
1663
|
-
switch (_a.label) {
|
|
1664
|
-
case 0:
|
|
1665
|
-
key = primary === null || primary === void 0 ? void 0 : primary[0];
|
|
1666
|
-
if (!key || !(args === null || args === void 0 ? void 0 : args[key]))
|
|
1667
|
-
throw new Error('Primary key and value required for delete');
|
|
1668
|
-
sql = "DELETE\n FROM `".concat(table, "`\n WHERE `").concat(key, "` = ?");
|
|
1669
|
-
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated DELETE SQL:", sql);
|
|
1670
|
-
console.log("[SQL EXECUTOR] \uD83D\uDD22 Value:", args[key]);
|
|
1671
|
-
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1672
|
-
var result;
|
|
1673
|
-
return __generator(this, function (_a) {
|
|
1674
|
-
switch (_a.label) {
|
|
1675
|
-
case 0: return [4 /*yield*/, conn.execute(sql, [args[key]])];
|
|
1676
|
-
case 1:
|
|
1677
|
-
result = (_a.sent())[0];
|
|
1678
|
-
return [2 /*return*/, {
|
|
1679
|
-
rest: result,
|
|
1680
|
-
sql: {
|
|
1681
|
-
sql: sql,
|
|
1682
|
-
args: args
|
|
1683
|
-
}
|
|
1684
|
-
}];
|
|
1685
|
-
}
|
|
1686
|
-
});
|
|
1687
|
-
}); })];
|
|
1688
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
1689
|
-
}
|
|
1690
|
-
});
|
|
1691
|
-
});
|
|
1692
|
-
};
|
|
1693
1628
|
SqlExecutor.prototype.formatSQLWithParams = function (sql, params) {
|
|
1694
1629
|
var _this = this;
|
|
1695
1630
|
if (Array.isArray(params)) {
|
|
@@ -1721,6 +1656,67 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1721
1656
|
return "'".concat(val.toISOString().slice(0, 19).replace('T', ' '), "'");
|
|
1722
1657
|
return "'".concat(JSON.stringify(val), "'");
|
|
1723
1658
|
};
|
|
1659
|
+
SqlExecutor.prototype.runQuery = function () {
|
|
1660
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
1661
|
+
var TABLE_NAME, method, builder, QueryResult, formatted, toUnnamed, _a, sql, values;
|
|
1662
|
+
var _this = this;
|
|
1663
|
+
return __generator(this, function (_b) {
|
|
1664
|
+
switch (_b.label) {
|
|
1665
|
+
case 0:
|
|
1666
|
+
TABLE_NAME = this.config.restModel.TABLE_NAME;
|
|
1667
|
+
method = this.config.requestMethod;
|
|
1668
|
+
switch (method) {
|
|
1669
|
+
case 'GET':
|
|
1670
|
+
builder = new SelectQueryBuilder(this.config, this.request);
|
|
1671
|
+
break;
|
|
1672
|
+
case 'PUT':
|
|
1673
|
+
builder = new UpdateQueryBuilder(this.config, this.request);
|
|
1674
|
+
break;
|
|
1675
|
+
case 'DELETE':
|
|
1676
|
+
builder = new DeleteQueryBuilder(this.config, this.request);
|
|
1677
|
+
break;
|
|
1678
|
+
case 'POST':
|
|
1679
|
+
builder = new PostQueryBuilder(this.config, this.request);
|
|
1680
|
+
break;
|
|
1681
|
+
default:
|
|
1682
|
+
throw new Error("Unsupported query method: ".concat(method));
|
|
1683
|
+
}
|
|
1684
|
+
QueryResult = builder.build(TABLE_NAME);
|
|
1685
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated ".concat(method.toUpperCase(), " SQL:"), QueryResult);
|
|
1686
|
+
formatted = this.formatSQLWithParams(QueryResult.sql, QueryResult.params);
|
|
1687
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Formatted ".concat(method.toUpperCase(), " SQL:"), formatted);
|
|
1688
|
+
toUnnamed = namedPlaceholders();
|
|
1689
|
+
_a = toUnnamed(QueryResult.sql, QueryResult.params), sql = _a[0], values = _a[1];
|
|
1690
|
+
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1691
|
+
var result;
|
|
1692
|
+
return __generator(this, function (_a) {
|
|
1693
|
+
switch (_a.label) {
|
|
1694
|
+
case 0: return [4 /*yield*/, conn.query(sql, values)];
|
|
1695
|
+
case 1:
|
|
1696
|
+
result = (_a.sent())[0];
|
|
1697
|
+
if (method === 'GET') {
|
|
1698
|
+
console.log("[SQL EXECUTOR] \uD83D\uDCE6 Rows fetched:", result);
|
|
1699
|
+
return [2 /*return*/, {
|
|
1700
|
+
rest: result.map(this.serialize),
|
|
1701
|
+
sql: { sql: sql, values: values }
|
|
1702
|
+
}];
|
|
1703
|
+
}
|
|
1704
|
+
else {
|
|
1705
|
+
console.log("[SQL EXECUTOR] \u270F\uFE0F Rows affected:", result.affectedRows);
|
|
1706
|
+
return [2 /*return*/, {
|
|
1707
|
+
affected: result.affectedRows,
|
|
1708
|
+
rest: [],
|
|
1709
|
+
sql: { sql: sql, values: values }
|
|
1710
|
+
}];
|
|
1711
|
+
}
|
|
1712
|
+
}
|
|
1713
|
+
});
|
|
1714
|
+
}); })];
|
|
1715
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
1716
|
+
}
|
|
1717
|
+
});
|
|
1718
|
+
});
|
|
1719
|
+
};
|
|
1724
1720
|
return SqlExecutor;
|
|
1725
1721
|
}(Executor));
|
|
1726
1722
|
|
|
@@ -1735,7 +1731,7 @@ function ExpressHandler(_a) {
|
|
|
1735
1731
|
var _this = this;
|
|
1736
1732
|
var C6 = _a.C6, mysqlPool = _a.mysqlPool;
|
|
1737
1733
|
return function (req, res, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
1738
|
-
var method, table, primary, payload, response, err_1;
|
|
1734
|
+
var method, table, primary, payload, primaryKeys, primaryKeyName, response, err_1;
|
|
1739
1735
|
return __generator(this, function (_a) {
|
|
1740
1736
|
switch (_a.label) {
|
|
1741
1737
|
case 0:
|
|
@@ -1748,18 +1744,36 @@ function ExpressHandler(_a) {
|
|
|
1748
1744
|
res.status(400).json({ error: "Invalid table: ".concat(table) });
|
|
1749
1745
|
return [2 /*return*/];
|
|
1750
1746
|
}
|
|
1747
|
+
primaryKeys = C6.TABLES[table].PRIMARY;
|
|
1748
|
+
if (primary && primaryKeys.length !== 1) {
|
|
1749
|
+
if (primaryKeys.length > 1) {
|
|
1750
|
+
res.status(400).json({ error: "Table ".concat(table, " has multiple primary keys. Cannot implicitly determine key.") });
|
|
1751
|
+
return [2 /*return*/];
|
|
1752
|
+
}
|
|
1753
|
+
res.status(400).json({
|
|
1754
|
+
error: "Table ".concat(table, " has no primary keys. Please specify one.")
|
|
1755
|
+
});
|
|
1756
|
+
return [2 /*return*/];
|
|
1757
|
+
}
|
|
1758
|
+
primaryKeyName = primaryKeys[0];
|
|
1751
1759
|
// 👇 Call restRequest for the resolved method
|
|
1752
1760
|
// TODO - add primary conditionally based on method signature
|
|
1753
1761
|
switch (method) {
|
|
1754
1762
|
case 'GET':
|
|
1755
1763
|
if (primary) {
|
|
1756
|
-
payload[
|
|
1764
|
+
payload[C6C.WHERE][primaryKeyName] = primary;
|
|
1757
1765
|
}
|
|
1758
1766
|
break;
|
|
1759
|
-
case 'POST':
|
|
1760
1767
|
case 'PUT':
|
|
1761
1768
|
case 'DELETE':
|
|
1762
|
-
|
|
1769
|
+
if (primary) {
|
|
1770
|
+
payload[C6C.WHERE][primaryKeyName] = primary;
|
|
1771
|
+
}
|
|
1772
|
+
else {
|
|
1773
|
+
res.status(400).json({ error: "Invalid request: ".concat(method, " requires a primary key.") });
|
|
1774
|
+
}
|
|
1775
|
+
break;
|
|
1776
|
+
case 'POST':
|
|
1763
1777
|
break;
|
|
1764
1778
|
default:
|
|
1765
1779
|
res.status(405).json({ error: "Method ".concat(method, " not allowed") });
|
|
@@ -1806,65 +1820,6 @@ var distSphere = function (fromCol, toCol, fromAlias, toAlias) {
|
|
|
1806
1820
|
return [C6C.ST_DISTANCE_SPHERE, F(fromCol, fromAlias), F(toCol, toAlias)];
|
|
1807
1821
|
};
|
|
1808
1822
|
|
|
1809
|
-
var DeleteQueryBuilder = /** @class */ (function (_super) {
|
|
1810
|
-
__extends(DeleteQueryBuilder, _super);
|
|
1811
|
-
function DeleteQueryBuilder() {
|
|
1812
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
1813
|
-
}
|
|
1814
|
-
DeleteQueryBuilder.prototype.build = function (table, args) {
|
|
1815
|
-
if (args === void 0) { args = {}; }
|
|
1816
|
-
var params = this.useNamedParams ? {} : [];
|
|
1817
|
-
var sql = args.JOIN ? "DELETE ".concat(table, "\n FROM `").concat(table, "`") : "DELETE\n FROM `".concat(table, "`");
|
|
1818
|
-
if (args.JOIN) {
|
|
1819
|
-
sql += this.buildJoinClauses(args.JOIN, params);
|
|
1820
|
-
}
|
|
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 DeleteQueryBuilder;
|
|
1830
|
-
}(PaginationBuilder));
|
|
1831
|
-
|
|
1832
|
-
var UpdateQueryBuilder = /** @class */ (function (_super) {
|
|
1833
|
-
__extends(UpdateQueryBuilder, _super);
|
|
1834
|
-
function UpdateQueryBuilder() {
|
|
1835
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
1836
|
-
}
|
|
1837
|
-
UpdateQueryBuilder.prototype.build = function (table, data, args) {
|
|
1838
|
-
if (args === void 0) { args = {}; }
|
|
1839
|
-
var params = this.useNamedParams ? {} : [];
|
|
1840
|
-
var sql = "UPDATE `".concat(table, "`");
|
|
1841
|
-
if (args.JOIN) {
|
|
1842
|
-
sql += this.buildJoinClauses(args.JOIN, params);
|
|
1843
|
-
}
|
|
1844
|
-
var setClauses = Object.entries(data).map(function (_a) {
|
|
1845
|
-
var col = _a[0], val = _a[1];
|
|
1846
|
-
if (Array.isArray(params)) {
|
|
1847
|
-
params.push(val);
|
|
1848
|
-
return "`".concat(col, "` = ?");
|
|
1849
|
-
}
|
|
1850
|
-
else {
|
|
1851
|
-
var key = "param".concat(Object.keys(params).length);
|
|
1852
|
-
params[key] = val;
|
|
1853
|
-
return "`".concat(col, "` = :").concat(key);
|
|
1854
|
-
}
|
|
1855
|
-
});
|
|
1856
|
-
sql += " SET ".concat(setClauses.join(', '));
|
|
1857
|
-
if (args.WHERE) {
|
|
1858
|
-
sql += this.buildWhereClause(args.WHERE, params);
|
|
1859
|
-
}
|
|
1860
|
-
if (args.PAGINATION) {
|
|
1861
|
-
sql += this.buildPaginationClause(args.PAGINATION);
|
|
1862
|
-
}
|
|
1863
|
-
return { sql: sql, params: params };
|
|
1864
|
-
};
|
|
1865
|
-
return UpdateQueryBuilder;
|
|
1866
|
-
}(PaginationBuilder));
|
|
1867
|
-
|
|
1868
1823
|
function determineRuntimeJsType(mysqlType) {
|
|
1869
1824
|
var base = mysqlType.toLowerCase().split('(')[0];
|
|
1870
1825
|
if ([
|
|
@@ -1963,5 +1918,5 @@ function onError(message) {
|
|
|
1963
1918
|
toast.error(message, isLocal() ? toastOptionsDevs : toastOptions);
|
|
1964
1919
|
}
|
|
1965
1920
|
|
|
1966
|
-
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 };
|
|
1921
|
+
export { A, AggregateBuilder, C6C, C6Constants, ConditionBuilder, DELETE, DeleteQueryBuilder, Executor, ExpressHandler, F, GET, HttpExecutor, JoinBuilder, POST, PUT, PaginationBuilder, PostQueryBuilder, 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 };
|
|
1967
1922
|
//# sourceMappingURL=index.esm.js.map
|