@type32/tauri-sqlite-orm 0.1.15 → 0.1.17
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/index.js +46 -30
- package/dist/index.mjs +46 -30
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -506,7 +506,7 @@ var desc = (column) => `${getQualifiedName(column)} DESC`;
|
|
|
506
506
|
// src/orm.ts
|
|
507
507
|
function getTableName(table) {
|
|
508
508
|
const anyTable = table;
|
|
509
|
-
return anyTable.
|
|
509
|
+
return anyTable.tableName || anyTable.name || "";
|
|
510
510
|
}
|
|
511
511
|
var SelectQueryBuilder = class {
|
|
512
512
|
_table = null;
|
|
@@ -558,7 +558,7 @@ var SelectQueryBuilder = class {
|
|
|
558
558
|
}
|
|
559
559
|
leftJoin(otherTable, on) {
|
|
560
560
|
const onSql = on.toSQL();
|
|
561
|
-
const joinClause = `LEFT JOIN ${otherTable.
|
|
561
|
+
const joinClause = `LEFT JOIN ${otherTable.tableName} ON ${onSql.clause}`;
|
|
562
562
|
this._joins.push(joinClause);
|
|
563
563
|
return this;
|
|
564
564
|
}
|
|
@@ -765,14 +765,30 @@ var TauriORM = class {
|
|
|
765
765
|
if (finalData[key] === void 0) {
|
|
766
766
|
if (col.defaultFn) {
|
|
767
767
|
finalData[key] = coerceValue2(col, col.defaultFn());
|
|
768
|
-
} else if (col.onUpdateFn) {
|
|
768
|
+
} else if (col.onUpdateFn && !this._rows.includes(data)) {
|
|
769
769
|
finalData[key] = coerceValue2(col, col.onUpdateFn());
|
|
770
770
|
}
|
|
771
771
|
}
|
|
772
772
|
}
|
|
773
|
-
const entries = Object.entries(finalData)
|
|
774
|
-
|
|
775
|
-
|
|
773
|
+
const entries = Object.entries(finalData).filter(
|
|
774
|
+
([_, value]) => value !== void 0
|
|
775
|
+
);
|
|
776
|
+
const keys = entries.map(([k]) => {
|
|
777
|
+
const col = schema[k];
|
|
778
|
+
return col?.name ?? k;
|
|
779
|
+
});
|
|
780
|
+
const values = entries.map(([k, v]) => {
|
|
781
|
+
const col = schema[k];
|
|
782
|
+
return coerceValue2(col, v);
|
|
783
|
+
});
|
|
784
|
+
if (keys.length === 0) {
|
|
785
|
+
let query2 = `INSERT INTO ${tableName} DEFAULT VALUES`;
|
|
786
|
+
const bindings2 = [];
|
|
787
|
+
query2 += this._buildConflictClause();
|
|
788
|
+
const ret2 = await this._executeWithReturning(db, query2, bindings2);
|
|
789
|
+
if (ret2 !== void 0) return ret2;
|
|
790
|
+
continue;
|
|
791
|
+
}
|
|
776
792
|
const placeholders = values.map(() => "?").join(", ");
|
|
777
793
|
let query = `INSERT INTO ${tableName} (${keys.join(
|
|
778
794
|
", "
|
|
@@ -913,7 +929,7 @@ var TauriORM = class {
|
|
|
913
929
|
}
|
|
914
930
|
}
|
|
915
931
|
let query = `UPDATE ${tableName} SET ${setParts.join(", ")}`;
|
|
916
|
-
if (this._from) query += ` FROM ${this._from.
|
|
932
|
+
if (this._from) query += ` FROM ${this._from.tableName}`;
|
|
917
933
|
if (this._where) {
|
|
918
934
|
if (typeof this._where.toSQL === "function") {
|
|
919
935
|
const sql2 = this._where.toSQL();
|
|
@@ -1149,7 +1165,7 @@ var TauriORM = class {
|
|
|
1149
1165
|
}
|
|
1150
1166
|
}
|
|
1151
1167
|
generateCreateIndexSqls(table) {
|
|
1152
|
-
const tableName = table.
|
|
1168
|
+
const tableName = table.tableName;
|
|
1153
1169
|
const indexes = table._indexes || [];
|
|
1154
1170
|
const stmts = [];
|
|
1155
1171
|
for (const idx of indexes) {
|
|
@@ -1196,7 +1212,7 @@ var TauriORM = class {
|
|
|
1196
1212
|
}
|
|
1197
1213
|
await this.forcePushForTables(tables, { preserveData: true });
|
|
1198
1214
|
if (track) {
|
|
1199
|
-
const name = options?.name ?? `init:${tables.map((t) => t.
|
|
1215
|
+
const name = options?.name ?? `init:${tables.map((t) => t.tableName).join(",")}`;
|
|
1200
1216
|
const already = await this.hasMigration(name);
|
|
1201
1217
|
if (!already) await this.recordMigration(name);
|
|
1202
1218
|
}
|
|
@@ -1339,7 +1355,7 @@ var TauriORM = class {
|
|
|
1339
1355
|
const cols = Object.values(
|
|
1340
1356
|
tbl._schema
|
|
1341
1357
|
).map((c) => this.normalizeColumn(c)).sort((a, b) => a.name.localeCompare(b.name));
|
|
1342
|
-
return { table: tbl.
|
|
1358
|
+
return { table: tbl.tableName, columns: cols };
|
|
1343
1359
|
});
|
|
1344
1360
|
entries.sort((a, b) => a.table.localeCompare(b.table));
|
|
1345
1361
|
return JSON.stringify(entries);
|
|
@@ -1377,7 +1393,7 @@ var TauriORM = class {
|
|
|
1377
1393
|
const dbi = await this.getDb();
|
|
1378
1394
|
const result = {};
|
|
1379
1395
|
for (const tbl of Object.values(this._tables)) {
|
|
1380
|
-
const name = tbl.
|
|
1396
|
+
const name = tbl.tableName;
|
|
1381
1397
|
const cols = await dbi.select(`PRAGMA table_info('${name}')`);
|
|
1382
1398
|
result[name] = cols.map((c) => ({
|
|
1383
1399
|
name: c.name,
|
|
@@ -1444,7 +1460,7 @@ var TauriORM = class {
|
|
|
1444
1460
|
const tmp = `_new_${tableName}`;
|
|
1445
1461
|
await this.run(this.buildCreateTableSQL(tbl));
|
|
1446
1462
|
await this.run(
|
|
1447
|
-
this.buildCreateTableSQL({ ...tbl,
|
|
1463
|
+
this.buildCreateTableSQL({ ...tbl, tableName: tmp })
|
|
1448
1464
|
);
|
|
1449
1465
|
const existingNames = existingCols.map((c) => c.name);
|
|
1450
1466
|
const modelNames = modelCols.map((c) => c.name);
|
|
@@ -1493,10 +1509,10 @@ function guessChildFk(child, base, rel) {
|
|
|
1493
1509
|
return rel.cfg.fields[0];
|
|
1494
1510
|
const basePk = getPrimaryKey(base);
|
|
1495
1511
|
const guessNames = [
|
|
1496
|
-
`${base.
|
|
1497
|
-
`${base.
|
|
1512
|
+
`${base.tableName}_id`,
|
|
1513
|
+
`${base.tableName}Id`,
|
|
1498
1514
|
`${basePk.name}`,
|
|
1499
|
-
`${base.
|
|
1515
|
+
`${base.tableName.slice(0, -1)}Id`
|
|
1500
1516
|
];
|
|
1501
1517
|
return childCols.find((c) => guessNames.includes(c.name)) || childCols.find((c) => /.*_id$/i.test(c.name)) || null;
|
|
1502
1518
|
}
|
|
@@ -1525,7 +1541,7 @@ function isFlatWith(spec) {
|
|
|
1525
1541
|
function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
1526
1542
|
const api = {};
|
|
1527
1543
|
const tableKeyByName = {};
|
|
1528
|
-
for (const [k, t] of Object.entries(tables)) tableKeyByName[t.
|
|
1544
|
+
for (const [k, t] of Object.entries(tables)) tableKeyByName[t.tableName] = k;
|
|
1529
1545
|
for (const [tblKey, tbl] of Object.entries(tables)) {
|
|
1530
1546
|
api[tblKey] = {
|
|
1531
1547
|
async findMany(opts) {
|
|
@@ -1546,7 +1562,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1546
1562
|
baseSelected2 = baseCols.map((c) => c.name);
|
|
1547
1563
|
}
|
|
1548
1564
|
for (const name of baseSelected2)
|
|
1549
|
-
selectParts.push(`${base.
|
|
1565
|
+
selectParts.push(`${base.tableName}.${name} AS __base_${name}`);
|
|
1550
1566
|
const joins = [];
|
|
1551
1567
|
const relColsMap = {};
|
|
1552
1568
|
const fkMap = {};
|
|
@@ -1560,15 +1576,15 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1560
1576
|
if (rel.kind === "one") {
|
|
1561
1577
|
const mapping = guessOneRelationJoin(base, rel);
|
|
1562
1578
|
if (!mapping) continue;
|
|
1563
|
-
if (mapping.lhsTable.
|
|
1579
|
+
if (mapping.lhsTable.tableName === child.tableName) {
|
|
1564
1580
|
fkMap[relName] = { childFk: mapping.lhsCol, childPk };
|
|
1565
1581
|
joins.push(
|
|
1566
|
-
`LEFT JOIN ${child.
|
|
1582
|
+
`LEFT JOIN ${child.tableName} ON ${mapping.lhsTable.tableName}.${mapping.lhsCol.name} = ${mapping.rhsTable.tableName}.${mapping.rhsCol.name}`
|
|
1567
1583
|
);
|
|
1568
1584
|
} else {
|
|
1569
1585
|
fkMap[relName] = { childFk: mapping.rhsCol, childPk };
|
|
1570
1586
|
joins.push(
|
|
1571
|
-
`LEFT JOIN ${child.
|
|
1587
|
+
`LEFT JOIN ${child.tableName} ON ${mapping.lhsTable.tableName}.${mapping.lhsCol.name} = ${mapping.rhsTable.tableName}.${mapping.rhsCol.name}`
|
|
1572
1588
|
);
|
|
1573
1589
|
}
|
|
1574
1590
|
} else {
|
|
@@ -1576,17 +1592,17 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1576
1592
|
if (!childFk) continue;
|
|
1577
1593
|
fkMap[relName] = { childFk, childPk };
|
|
1578
1594
|
joins.push(
|
|
1579
|
-
`LEFT JOIN ${child.
|
|
1595
|
+
`LEFT JOIN ${child.tableName} ON ${child.tableName}.${childFk.name} = ${base.tableName}.${basePk.name}`
|
|
1580
1596
|
);
|
|
1581
1597
|
}
|
|
1582
1598
|
const selected = typeof enabled === "object" && enabled.columns?.length ? enabled.columns : childCols.map((c) => c.name);
|
|
1583
1599
|
relColsMap[relName] = selected;
|
|
1584
1600
|
for (const name of selected)
|
|
1585
1601
|
selectParts.push(
|
|
1586
|
-
`${child.
|
|
1602
|
+
`${child.tableName}.${name} AS __rel_${relName}_${name}`
|
|
1587
1603
|
);
|
|
1588
1604
|
}
|
|
1589
|
-
let sqlText = `SELECT ${selectParts.join(", ")} FROM ${base.
|
|
1605
|
+
let sqlText = `SELECT ${selectParts.join(", ")} FROM ${base.tableName}${joins.length ? " " + joins.join(" ") : ""}`;
|
|
1590
1606
|
const bindings = [];
|
|
1591
1607
|
if (opts?.where) {
|
|
1592
1608
|
if (typeof opts.where === "function") {
|
|
@@ -1600,7 +1616,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1600
1616
|
} else {
|
|
1601
1617
|
const entries = Object.entries(opts.where);
|
|
1602
1618
|
if (entries.length > 0) {
|
|
1603
|
-
sqlText += ` WHERE ${entries.map(([k]) => `${base.
|
|
1619
|
+
sqlText += ` WHERE ${entries.map(([k]) => `${base.tableName}.${k} = ?`).join(" AND ")}`;
|
|
1604
1620
|
bindings.push(...entries.map(([, v]) => v));
|
|
1605
1621
|
}
|
|
1606
1622
|
}
|
|
@@ -1671,7 +1687,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1671
1687
|
(c) => c.name
|
|
1672
1688
|
);
|
|
1673
1689
|
}
|
|
1674
|
-
let baseSql = `SELECT ${baseSelected.join(", ")} FROM ${base.
|
|
1690
|
+
let baseSql = `SELECT ${baseSelected.join(", ")} FROM ${base.tableName}`;
|
|
1675
1691
|
const baseBindings = [];
|
|
1676
1692
|
if (opts?.where) {
|
|
1677
1693
|
if (typeof opts.where === "function") {
|
|
@@ -1702,7 +1718,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1702
1718
|
const parentPk = getPrimaryKey(parentTable);
|
|
1703
1719
|
const parentIds = parents.map((p) => p[parentPk.name]);
|
|
1704
1720
|
const relsMap = relDefs[Object.keys(tables).find(
|
|
1705
|
-
(k) => tables[k].
|
|
1721
|
+
(k) => tables[k].tableName === parentTable.tableName
|
|
1706
1722
|
)] || {};
|
|
1707
1723
|
for (const [relName, v] of Object.entries(spec)) {
|
|
1708
1724
|
const enabled = v;
|
|
@@ -1714,7 +1730,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1714
1730
|
if (rel.kind === "many") {
|
|
1715
1731
|
const fkCol = guessChildFk(child, parentTable, rel);
|
|
1716
1732
|
if (!fkCol) continue;
|
|
1717
|
-
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.
|
|
1733
|
+
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.tableName} WHERE ${fkCol.name} IN (${parentIds.map(() => "?").join(", ")})`;
|
|
1718
1734
|
const rows = await dbi.select(sql2, parentIds);
|
|
1719
1735
|
const buckets = /* @__PURE__ */ new Map();
|
|
1720
1736
|
for (const r of rows) {
|
|
@@ -1734,8 +1750,8 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1734
1750
|
} else {
|
|
1735
1751
|
const mapping = guessOneRelationJoin(parentTable, rel);
|
|
1736
1752
|
if (!mapping) continue;
|
|
1737
|
-
if (mapping.lhsTable.
|
|
1738
|
-
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.
|
|
1753
|
+
if (mapping.lhsTable.tableName === child.tableName) {
|
|
1754
|
+
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.tableName} WHERE ${mapping.lhsCol.name} IN (${parentIds.map(() => "?").join(", ")})`;
|
|
1739
1755
|
const rows = await dbi.select(sql2, parentIds);
|
|
1740
1756
|
const mapOne = /* @__PURE__ */ new Map();
|
|
1741
1757
|
for (const r of rows) mapOne.set(r[mapping.lhsCol.name], r);
|
|
@@ -1748,7 +1764,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1748
1764
|
if (childIds.length === 0) {
|
|
1749
1765
|
for (const p of parents) p[relName] = null;
|
|
1750
1766
|
} else {
|
|
1751
|
-
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.
|
|
1767
|
+
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.tableName} WHERE ${childPkName} IN (${childIds.map(() => "?").join(", ")})`;
|
|
1752
1768
|
const rows = await dbi.select(sql2, childIds);
|
|
1753
1769
|
const mapOne = /* @__PURE__ */ new Map();
|
|
1754
1770
|
for (const r of rows) mapOne.set(r[childPkName], r);
|
package/dist/index.mjs
CHANGED
|
@@ -428,7 +428,7 @@ var desc = (column) => `${getQualifiedName(column)} DESC`;
|
|
|
428
428
|
// src/orm.ts
|
|
429
429
|
function getTableName(table) {
|
|
430
430
|
const anyTable = table;
|
|
431
|
-
return anyTable.
|
|
431
|
+
return anyTable.tableName || anyTable.name || "";
|
|
432
432
|
}
|
|
433
433
|
var SelectQueryBuilder = class {
|
|
434
434
|
_table = null;
|
|
@@ -480,7 +480,7 @@ var SelectQueryBuilder = class {
|
|
|
480
480
|
}
|
|
481
481
|
leftJoin(otherTable, on) {
|
|
482
482
|
const onSql = on.toSQL();
|
|
483
|
-
const joinClause = `LEFT JOIN ${otherTable.
|
|
483
|
+
const joinClause = `LEFT JOIN ${otherTable.tableName} ON ${onSql.clause}`;
|
|
484
484
|
this._joins.push(joinClause);
|
|
485
485
|
return this;
|
|
486
486
|
}
|
|
@@ -687,14 +687,30 @@ var TauriORM = class {
|
|
|
687
687
|
if (finalData[key] === void 0) {
|
|
688
688
|
if (col.defaultFn) {
|
|
689
689
|
finalData[key] = coerceValue2(col, col.defaultFn());
|
|
690
|
-
} else if (col.onUpdateFn) {
|
|
690
|
+
} else if (col.onUpdateFn && !this._rows.includes(data)) {
|
|
691
691
|
finalData[key] = coerceValue2(col, col.onUpdateFn());
|
|
692
692
|
}
|
|
693
693
|
}
|
|
694
694
|
}
|
|
695
|
-
const entries = Object.entries(finalData)
|
|
696
|
-
|
|
697
|
-
|
|
695
|
+
const entries = Object.entries(finalData).filter(
|
|
696
|
+
([_, value]) => value !== void 0
|
|
697
|
+
);
|
|
698
|
+
const keys = entries.map(([k]) => {
|
|
699
|
+
const col = schema[k];
|
|
700
|
+
return col?.name ?? k;
|
|
701
|
+
});
|
|
702
|
+
const values = entries.map(([k, v]) => {
|
|
703
|
+
const col = schema[k];
|
|
704
|
+
return coerceValue2(col, v);
|
|
705
|
+
});
|
|
706
|
+
if (keys.length === 0) {
|
|
707
|
+
let query2 = `INSERT INTO ${tableName} DEFAULT VALUES`;
|
|
708
|
+
const bindings2 = [];
|
|
709
|
+
query2 += this._buildConflictClause();
|
|
710
|
+
const ret2 = await this._executeWithReturning(db, query2, bindings2);
|
|
711
|
+
if (ret2 !== void 0) return ret2;
|
|
712
|
+
continue;
|
|
713
|
+
}
|
|
698
714
|
const placeholders = values.map(() => "?").join(", ");
|
|
699
715
|
let query = `INSERT INTO ${tableName} (${keys.join(
|
|
700
716
|
", "
|
|
@@ -835,7 +851,7 @@ var TauriORM = class {
|
|
|
835
851
|
}
|
|
836
852
|
}
|
|
837
853
|
let query = `UPDATE ${tableName} SET ${setParts.join(", ")}`;
|
|
838
|
-
if (this._from) query += ` FROM ${this._from.
|
|
854
|
+
if (this._from) query += ` FROM ${this._from.tableName}`;
|
|
839
855
|
if (this._where) {
|
|
840
856
|
if (typeof this._where.toSQL === "function") {
|
|
841
857
|
const sql2 = this._where.toSQL();
|
|
@@ -1071,7 +1087,7 @@ var TauriORM = class {
|
|
|
1071
1087
|
}
|
|
1072
1088
|
}
|
|
1073
1089
|
generateCreateIndexSqls(table) {
|
|
1074
|
-
const tableName = table.
|
|
1090
|
+
const tableName = table.tableName;
|
|
1075
1091
|
const indexes = table._indexes || [];
|
|
1076
1092
|
const stmts = [];
|
|
1077
1093
|
for (const idx of indexes) {
|
|
@@ -1118,7 +1134,7 @@ var TauriORM = class {
|
|
|
1118
1134
|
}
|
|
1119
1135
|
await this.forcePushForTables(tables, { preserveData: true });
|
|
1120
1136
|
if (track) {
|
|
1121
|
-
const name = options?.name ?? `init:${tables.map((t) => t.
|
|
1137
|
+
const name = options?.name ?? `init:${tables.map((t) => t.tableName).join(",")}`;
|
|
1122
1138
|
const already = await this.hasMigration(name);
|
|
1123
1139
|
if (!already) await this.recordMigration(name);
|
|
1124
1140
|
}
|
|
@@ -1261,7 +1277,7 @@ var TauriORM = class {
|
|
|
1261
1277
|
const cols = Object.values(
|
|
1262
1278
|
tbl._schema
|
|
1263
1279
|
).map((c) => this.normalizeColumn(c)).sort((a, b) => a.name.localeCompare(b.name));
|
|
1264
|
-
return { table: tbl.
|
|
1280
|
+
return { table: tbl.tableName, columns: cols };
|
|
1265
1281
|
});
|
|
1266
1282
|
entries.sort((a, b) => a.table.localeCompare(b.table));
|
|
1267
1283
|
return JSON.stringify(entries);
|
|
@@ -1299,7 +1315,7 @@ var TauriORM = class {
|
|
|
1299
1315
|
const dbi = await this.getDb();
|
|
1300
1316
|
const result = {};
|
|
1301
1317
|
for (const tbl of Object.values(this._tables)) {
|
|
1302
|
-
const name = tbl.
|
|
1318
|
+
const name = tbl.tableName;
|
|
1303
1319
|
const cols = await dbi.select(`PRAGMA table_info('${name}')`);
|
|
1304
1320
|
result[name] = cols.map((c) => ({
|
|
1305
1321
|
name: c.name,
|
|
@@ -1366,7 +1382,7 @@ var TauriORM = class {
|
|
|
1366
1382
|
const tmp = `_new_${tableName}`;
|
|
1367
1383
|
await this.run(this.buildCreateTableSQL(tbl));
|
|
1368
1384
|
await this.run(
|
|
1369
|
-
this.buildCreateTableSQL({ ...tbl,
|
|
1385
|
+
this.buildCreateTableSQL({ ...tbl, tableName: tmp })
|
|
1370
1386
|
);
|
|
1371
1387
|
const existingNames = existingCols.map((c) => c.name);
|
|
1372
1388
|
const modelNames = modelCols.map((c) => c.name);
|
|
@@ -1415,10 +1431,10 @@ function guessChildFk(child, base, rel) {
|
|
|
1415
1431
|
return rel.cfg.fields[0];
|
|
1416
1432
|
const basePk = getPrimaryKey(base);
|
|
1417
1433
|
const guessNames = [
|
|
1418
|
-
`${base.
|
|
1419
|
-
`${base.
|
|
1434
|
+
`${base.tableName}_id`,
|
|
1435
|
+
`${base.tableName}Id`,
|
|
1420
1436
|
`${basePk.name}`,
|
|
1421
|
-
`${base.
|
|
1437
|
+
`${base.tableName.slice(0, -1)}Id`
|
|
1422
1438
|
];
|
|
1423
1439
|
return childCols.find((c) => guessNames.includes(c.name)) || childCols.find((c) => /.*_id$/i.test(c.name)) || null;
|
|
1424
1440
|
}
|
|
@@ -1447,7 +1463,7 @@ function isFlatWith(spec) {
|
|
|
1447
1463
|
function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
1448
1464
|
const api = {};
|
|
1449
1465
|
const tableKeyByName = {};
|
|
1450
|
-
for (const [k, t] of Object.entries(tables)) tableKeyByName[t.
|
|
1466
|
+
for (const [k, t] of Object.entries(tables)) tableKeyByName[t.tableName] = k;
|
|
1451
1467
|
for (const [tblKey, tbl] of Object.entries(tables)) {
|
|
1452
1468
|
api[tblKey] = {
|
|
1453
1469
|
async findMany(opts) {
|
|
@@ -1468,7 +1484,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1468
1484
|
baseSelected2 = baseCols.map((c) => c.name);
|
|
1469
1485
|
}
|
|
1470
1486
|
for (const name of baseSelected2)
|
|
1471
|
-
selectParts.push(`${base.
|
|
1487
|
+
selectParts.push(`${base.tableName}.${name} AS __base_${name}`);
|
|
1472
1488
|
const joins = [];
|
|
1473
1489
|
const relColsMap = {};
|
|
1474
1490
|
const fkMap = {};
|
|
@@ -1482,15 +1498,15 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1482
1498
|
if (rel.kind === "one") {
|
|
1483
1499
|
const mapping = guessOneRelationJoin(base, rel);
|
|
1484
1500
|
if (!mapping) continue;
|
|
1485
|
-
if (mapping.lhsTable.
|
|
1501
|
+
if (mapping.lhsTable.tableName === child.tableName) {
|
|
1486
1502
|
fkMap[relName] = { childFk: mapping.lhsCol, childPk };
|
|
1487
1503
|
joins.push(
|
|
1488
|
-
`LEFT JOIN ${child.
|
|
1504
|
+
`LEFT JOIN ${child.tableName} ON ${mapping.lhsTable.tableName}.${mapping.lhsCol.name} = ${mapping.rhsTable.tableName}.${mapping.rhsCol.name}`
|
|
1489
1505
|
);
|
|
1490
1506
|
} else {
|
|
1491
1507
|
fkMap[relName] = { childFk: mapping.rhsCol, childPk };
|
|
1492
1508
|
joins.push(
|
|
1493
|
-
`LEFT JOIN ${child.
|
|
1509
|
+
`LEFT JOIN ${child.tableName} ON ${mapping.lhsTable.tableName}.${mapping.lhsCol.name} = ${mapping.rhsTable.tableName}.${mapping.rhsCol.name}`
|
|
1494
1510
|
);
|
|
1495
1511
|
}
|
|
1496
1512
|
} else {
|
|
@@ -1498,17 +1514,17 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1498
1514
|
if (!childFk) continue;
|
|
1499
1515
|
fkMap[relName] = { childFk, childPk };
|
|
1500
1516
|
joins.push(
|
|
1501
|
-
`LEFT JOIN ${child.
|
|
1517
|
+
`LEFT JOIN ${child.tableName} ON ${child.tableName}.${childFk.name} = ${base.tableName}.${basePk.name}`
|
|
1502
1518
|
);
|
|
1503
1519
|
}
|
|
1504
1520
|
const selected = typeof enabled === "object" && enabled.columns?.length ? enabled.columns : childCols.map((c) => c.name);
|
|
1505
1521
|
relColsMap[relName] = selected;
|
|
1506
1522
|
for (const name of selected)
|
|
1507
1523
|
selectParts.push(
|
|
1508
|
-
`${child.
|
|
1524
|
+
`${child.tableName}.${name} AS __rel_${relName}_${name}`
|
|
1509
1525
|
);
|
|
1510
1526
|
}
|
|
1511
|
-
let sqlText = `SELECT ${selectParts.join(", ")} FROM ${base.
|
|
1527
|
+
let sqlText = `SELECT ${selectParts.join(", ")} FROM ${base.tableName}${joins.length ? " " + joins.join(" ") : ""}`;
|
|
1512
1528
|
const bindings = [];
|
|
1513
1529
|
if (opts?.where) {
|
|
1514
1530
|
if (typeof opts.where === "function") {
|
|
@@ -1522,7 +1538,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1522
1538
|
} else {
|
|
1523
1539
|
const entries = Object.entries(opts.where);
|
|
1524
1540
|
if (entries.length > 0) {
|
|
1525
|
-
sqlText += ` WHERE ${entries.map(([k]) => `${base.
|
|
1541
|
+
sqlText += ` WHERE ${entries.map(([k]) => `${base.tableName}.${k} = ?`).join(" AND ")}`;
|
|
1526
1542
|
bindings.push(...entries.map(([, v]) => v));
|
|
1527
1543
|
}
|
|
1528
1544
|
}
|
|
@@ -1593,7 +1609,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1593
1609
|
(c) => c.name
|
|
1594
1610
|
);
|
|
1595
1611
|
}
|
|
1596
|
-
let baseSql = `SELECT ${baseSelected.join(", ")} FROM ${base.
|
|
1612
|
+
let baseSql = `SELECT ${baseSelected.join(", ")} FROM ${base.tableName}`;
|
|
1597
1613
|
const baseBindings = [];
|
|
1598
1614
|
if (opts?.where) {
|
|
1599
1615
|
if (typeof opts.where === "function") {
|
|
@@ -1624,7 +1640,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1624
1640
|
const parentPk = getPrimaryKey(parentTable);
|
|
1625
1641
|
const parentIds = parents.map((p) => p[parentPk.name]);
|
|
1626
1642
|
const relsMap = relDefs[Object.keys(tables).find(
|
|
1627
|
-
(k) => tables[k].
|
|
1643
|
+
(k) => tables[k].tableName === parentTable.tableName
|
|
1628
1644
|
)] || {};
|
|
1629
1645
|
for (const [relName, v] of Object.entries(spec)) {
|
|
1630
1646
|
const enabled = v;
|
|
@@ -1636,7 +1652,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1636
1652
|
if (rel.kind === "many") {
|
|
1637
1653
|
const fkCol = guessChildFk(child, parentTable, rel);
|
|
1638
1654
|
if (!fkCol) continue;
|
|
1639
|
-
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.
|
|
1655
|
+
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.tableName} WHERE ${fkCol.name} IN (${parentIds.map(() => "?").join(", ")})`;
|
|
1640
1656
|
const rows = await dbi.select(sql2, parentIds);
|
|
1641
1657
|
const buckets = /* @__PURE__ */ new Map();
|
|
1642
1658
|
for (const r of rows) {
|
|
@@ -1656,8 +1672,8 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1656
1672
|
} else {
|
|
1657
1673
|
const mapping = guessOneRelationJoin(parentTable, rel);
|
|
1658
1674
|
if (!mapping) continue;
|
|
1659
|
-
if (mapping.lhsTable.
|
|
1660
|
-
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.
|
|
1675
|
+
if (mapping.lhsTable.tableName === child.tableName) {
|
|
1676
|
+
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.tableName} WHERE ${mapping.lhsCol.name} IN (${parentIds.map(() => "?").join(", ")})`;
|
|
1661
1677
|
const rows = await dbi.select(sql2, parentIds);
|
|
1662
1678
|
const mapOne = /* @__PURE__ */ new Map();
|
|
1663
1679
|
for (const r of rows) mapOne.set(r[mapping.lhsCol.name], r);
|
|
@@ -1670,7 +1686,7 @@ function makeQueryAPI(tables, relDefs, dbProvider) {
|
|
|
1670
1686
|
if (childIds.length === 0) {
|
|
1671
1687
|
for (const p of parents) p[relName] = null;
|
|
1672
1688
|
} else {
|
|
1673
|
-
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.
|
|
1689
|
+
const sql2 = `SELECT ${selectCols.join(", ")} FROM ${child.tableName} WHERE ${childPkName} IN (${childIds.map(() => "?").join(", ")})`;
|
|
1674
1690
|
const rows = await dbi.select(sql2, childIds);
|
|
1675
1691
|
const mapOne = /* @__PURE__ */ new Map();
|
|
1676
1692
|
for (const r of rows) mapOne.set(r[childPkName], r);
|