@devbro/neko-sql 0.1.16 → 0.1.18
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/{Blueprint-mmlqFfF6.d.mts → Blueprint-DiSVtLdl.d.mts} +13 -8
- package/dist/Blueprint.d.mts +1 -1
- package/dist/Connection.d.mts +1 -1
- package/dist/Expression.d.mts +1 -1
- package/dist/Expression.mjs +3 -1
- package/dist/Expression.mjs.map +1 -1
- package/dist/Migration.d.mts +1 -1
- package/dist/Query.d.mts +1 -1
- package/dist/Query.mjs +15 -2
- package/dist/Query.mjs.map +1 -1
- package/dist/QueryGrammar.d.mts +1 -1
- package/dist/QueryGrammar.mjs +149 -72
- package/dist/QueryGrammar.mjs.map +1 -1
- package/dist/Schema.d.mts +1 -1
- package/dist/Schema.mjs +2 -2
- package/dist/Schema.mjs.map +1 -1
- package/dist/SchemaGrammar.d.mts +1 -1
- package/dist/SchemaGrammar.mjs +14 -6
- package/dist/SchemaGrammar.mjs.map +1 -1
- package/dist/databases/index.d.mts +1 -1
- package/dist/databases/postgresql/PostgresqlConnection.d.mts +1 -1
- package/dist/databases/postgresql/PostgresqlConnection.mjs +6 -1
- package/dist/databases/postgresql/PostgresqlConnection.mjs.map +1 -1
- package/dist/databases/postgresql/PostgresqlQueryGrammar.d.mts +1 -3
- package/dist/databases/postgresql/PostgresqlQueryGrammar.mjs +2 -12
- package/dist/databases/postgresql/PostgresqlQueryGrammar.mjs.map +1 -1
- package/dist/databases/postgresql/PostgresqlSchemaGrammar.d.mts +1 -1
- package/dist/databases/postgresql/index.d.mts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.js +191 -96
- package/dist/index.js.map +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +5 -4
package/dist/index.js
CHANGED
|
@@ -76,7 +76,8 @@ var Query = class _Query {
|
|
|
76
76
|
having: [],
|
|
77
77
|
orderBy: [],
|
|
78
78
|
limit: null,
|
|
79
|
-
offset: null
|
|
79
|
+
offset: null,
|
|
80
|
+
alias: null
|
|
80
81
|
};
|
|
81
82
|
table(tableName) {
|
|
82
83
|
this.parts.table = tableName;
|
|
@@ -166,7 +167,15 @@ var Query = class _Query {
|
|
|
166
167
|
return this.grammar.toSql(this);
|
|
167
168
|
}
|
|
168
169
|
async get() {
|
|
169
|
-
|
|
170
|
+
let sql = this.toSql();
|
|
171
|
+
return await this.connection?.runQuery(sql);
|
|
172
|
+
}
|
|
173
|
+
async first() {
|
|
174
|
+
let rc = await this.connection?.runQuery(this.toSql());
|
|
175
|
+
if (rc && Array.isArray(rc) && rc.length > 0) {
|
|
176
|
+
return rc[0];
|
|
177
|
+
}
|
|
178
|
+
return void 0;
|
|
170
179
|
}
|
|
171
180
|
async count() {
|
|
172
181
|
const csql = this.grammar.compileCount(this);
|
|
@@ -232,9 +241,14 @@ var Query = class _Query {
|
|
|
232
241
|
crossJoin(table, conditions) {
|
|
233
242
|
return this.join(table, "cross", conditions);
|
|
234
243
|
}
|
|
244
|
+
alias(alias) {
|
|
245
|
+
this.parts.alias = alias;
|
|
246
|
+
return this;
|
|
247
|
+
}
|
|
235
248
|
};
|
|
236
249
|
|
|
237
250
|
// src/QueryGrammar.mts
|
|
251
|
+
var import_sql_tokenizer = require("sql-tokenizer");
|
|
238
252
|
function toUpperFirst(str) {
|
|
239
253
|
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
|
240
254
|
}
|
|
@@ -255,79 +269,118 @@ var QueryGrammar = class {
|
|
|
255
269
|
"offset"
|
|
256
270
|
];
|
|
257
271
|
toSql(query) {
|
|
258
|
-
let
|
|
272
|
+
let rc = this.toSqlParts(query);
|
|
273
|
+
rc.sql = this.joinArray(rc.parts);
|
|
274
|
+
return rc;
|
|
275
|
+
}
|
|
276
|
+
toSqlParts(query) {
|
|
277
|
+
let parts = [];
|
|
259
278
|
let bindings = [];
|
|
260
279
|
for (const part of this.sqlParts) {
|
|
261
280
|
const funcName = "compile" + toUpperFirst(part);
|
|
262
281
|
const r = this[funcName](query.parts[part]);
|
|
263
|
-
if (!sql) {
|
|
264
|
-
sql = r.sql;
|
|
265
|
-
} else if (r.sql) {
|
|
266
|
-
sql += " " + r.sql;
|
|
267
|
-
}
|
|
268
282
|
bindings = [...bindings, ...r.bindings];
|
|
283
|
+
parts = [...parts, ...r.parts];
|
|
269
284
|
}
|
|
270
|
-
return {
|
|
285
|
+
return {
|
|
286
|
+
sql: "",
|
|
287
|
+
bindings,
|
|
288
|
+
parts
|
|
289
|
+
};
|
|
271
290
|
}
|
|
272
291
|
compileCount(query) {
|
|
273
292
|
let sql = "";
|
|
274
293
|
let bindings = [];
|
|
294
|
+
let parts = [];
|
|
275
295
|
for (const part of this.sqlParts) {
|
|
276
|
-
let
|
|
296
|
+
let parts2 = query.parts[part];
|
|
277
297
|
if (part === "select") {
|
|
278
|
-
|
|
298
|
+
parts2 = ["count(*) as count"];
|
|
279
299
|
}
|
|
280
300
|
const funcName = "compile" + toUpperFirst(part);
|
|
281
|
-
const r = this[funcName](
|
|
282
|
-
if (!sql) {
|
|
283
|
-
sql = r.sql;
|
|
284
|
-
} else if (r.sql) {
|
|
285
|
-
sql += " " + r.sql;
|
|
286
|
-
}
|
|
301
|
+
const r = this[funcName](parts2);
|
|
287
302
|
bindings = [...bindings, ...r.bindings];
|
|
303
|
+
parts = [...parts, ...r.parts];
|
|
288
304
|
}
|
|
289
|
-
return { sql, bindings };
|
|
305
|
+
return { sql, parts, bindings };
|
|
290
306
|
}
|
|
291
307
|
compileSelect(selects) {
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
308
|
+
const parts = ["select"];
|
|
309
|
+
selects.map((v) => {
|
|
310
|
+
parts.push(v);
|
|
311
|
+
parts.push(",");
|
|
312
|
+
});
|
|
313
|
+
parts.pop();
|
|
314
|
+
return { sql: this.joinArray(parts), parts, bindings: [] };
|
|
296
315
|
}
|
|
297
|
-
|
|
316
|
+
joinArray(arr) {
|
|
298
317
|
let rc = "";
|
|
318
|
+
let last = "";
|
|
319
|
+
for (const a of arr) {
|
|
320
|
+
if (a === ",") {
|
|
321
|
+
rc += a;
|
|
322
|
+
} else if (last === "(" || last === " " || a === ")") {
|
|
323
|
+
rc += a;
|
|
324
|
+
} else if (a === "") {
|
|
325
|
+
rc += "";
|
|
326
|
+
} else {
|
|
327
|
+
rc += " " + a;
|
|
328
|
+
}
|
|
329
|
+
last = a;
|
|
330
|
+
}
|
|
331
|
+
return rc.trim();
|
|
332
|
+
}
|
|
333
|
+
compileTable(tableName) {
|
|
334
|
+
let parts = [];
|
|
299
335
|
if (tableName.length) {
|
|
300
|
-
|
|
336
|
+
parts.push("from");
|
|
337
|
+
parts.push(tableName);
|
|
301
338
|
}
|
|
302
|
-
return { sql:
|
|
339
|
+
return { sql: parts.join(" "), parts, bindings: [] };
|
|
303
340
|
}
|
|
304
341
|
compileJoin(joins) {
|
|
305
342
|
let sql = "";
|
|
306
343
|
let bindings = [];
|
|
344
|
+
let parts = [];
|
|
307
345
|
for (const j of joins) {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
346
|
+
let table = "";
|
|
347
|
+
let table_bindings = [];
|
|
348
|
+
parts.push(j.type);
|
|
349
|
+
parts.push("join");
|
|
350
|
+
if (typeof j.table === "string") {
|
|
351
|
+
parts.push(j.table);
|
|
352
|
+
} else {
|
|
353
|
+
const subQuery = j.table;
|
|
354
|
+
const { parts: parts2, bindings: bindings2 } = subQuery.toSql();
|
|
355
|
+
parts = [...parts, "(", ...parts2, ")", "as", subQuery.parts.alias || "subquery"];
|
|
356
|
+
table_bindings = bindings2;
|
|
312
357
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
358
|
+
parts.push("on");
|
|
359
|
+
const where = this.compileWhere(j.conditions);
|
|
360
|
+
const where_parts = where.parts;
|
|
361
|
+
where_parts.shift();
|
|
362
|
+
parts.push("(");
|
|
363
|
+
parts = [...parts, ...where_parts];
|
|
364
|
+
parts.push(")");
|
|
365
|
+
bindings = [...bindings, ...table_bindings, ...where.bindings];
|
|
317
366
|
}
|
|
318
|
-
return { sql, bindings };
|
|
367
|
+
return { sql, parts, bindings };
|
|
319
368
|
}
|
|
320
369
|
compileWhere(wheres) {
|
|
321
370
|
let sql = "";
|
|
322
371
|
let bindings = [];
|
|
372
|
+
let parts = [];
|
|
323
373
|
for (const w of wheres) {
|
|
324
374
|
sql += " " + w.joinCondition + " ";
|
|
375
|
+
parts.push(w.joinCondition);
|
|
325
376
|
if (w.negateCondition) {
|
|
326
377
|
sql += "not ";
|
|
378
|
+
parts.push("not");
|
|
327
379
|
}
|
|
328
380
|
const funcName = "compileWhere" + toUpperFirst(w.type);
|
|
329
381
|
const wh = this[funcName](w);
|
|
330
382
|
sql += wh.sql;
|
|
383
|
+
parts = parts.concat(wh.parts);
|
|
331
384
|
bindings = [...bindings, ...wh.bindings];
|
|
332
385
|
}
|
|
333
386
|
if (sql.startsWith(" and ")) {
|
|
@@ -335,211 +388,239 @@ var QueryGrammar = class {
|
|
|
335
388
|
} else if (sql.startsWith(" or ")) {
|
|
336
389
|
sql = "where " + sql.substring(" or ".length);
|
|
337
390
|
}
|
|
338
|
-
|
|
391
|
+
if (parts.length > 0) {
|
|
392
|
+
parts[0] = "where";
|
|
393
|
+
}
|
|
394
|
+
return { sql, parts, bindings };
|
|
339
395
|
}
|
|
340
396
|
compileWhereNested(w) {
|
|
341
397
|
const subQuery = w.query;
|
|
342
|
-
|
|
398
|
+
let parts = [];
|
|
399
|
+
const { sql, parts: parts2, bindings } = subQuery.grammar.compileWhere(subQuery.parts.where);
|
|
343
400
|
let sql2 = sql.replace(/^where /, "");
|
|
401
|
+
parts2.shift();
|
|
402
|
+
parts.push("(");
|
|
403
|
+
parts = parts.concat(parts2);
|
|
404
|
+
parts.push(")");
|
|
344
405
|
return {
|
|
345
406
|
sql: `(${sql2})`,
|
|
407
|
+
parts,
|
|
346
408
|
bindings
|
|
347
409
|
};
|
|
348
410
|
}
|
|
349
411
|
compileWhereOperation(w) {
|
|
350
412
|
if (w.operation.toLowerCase() === "in" && Array.isArray(w.value)) {
|
|
351
413
|
return {
|
|
352
|
-
sql: `${w.column} = ANY(
|
|
414
|
+
sql: `${w.column} = ANY( ? )`,
|
|
415
|
+
parts: [w.column, " = ANY(", "?", ")"],
|
|
353
416
|
bindings: [w.value]
|
|
354
417
|
};
|
|
355
418
|
}
|
|
356
419
|
return {
|
|
357
|
-
sql: `${w.column} ${w.operation}
|
|
420
|
+
sql: `${w.column} ${w.operation} ?`,
|
|
421
|
+
parts: [w.column, w.operation, "?"],
|
|
358
422
|
bindings: [w.value]
|
|
359
423
|
};
|
|
360
424
|
}
|
|
361
425
|
compileWhereOperationColumn(w) {
|
|
362
426
|
return {
|
|
363
427
|
sql: `${w.column1} ${w.operation} ${w.column2}`,
|
|
428
|
+
parts: [w.column1, w.operation, w.column2],
|
|
364
429
|
bindings: []
|
|
365
430
|
};
|
|
366
431
|
}
|
|
367
432
|
compileWhereRaw(w) {
|
|
368
|
-
|
|
433
|
+
const tokenize = (0, import_sql_tokenizer.sqlTokenizer)();
|
|
369
434
|
return {
|
|
370
|
-
sql,
|
|
435
|
+
sql: w.sql,
|
|
436
|
+
parts: tokenize(w.sql).filter((t) => t !== " "),
|
|
371
437
|
bindings: w.bindings
|
|
372
438
|
};
|
|
373
439
|
}
|
|
374
440
|
compileOrderBy(orderBy) {
|
|
375
441
|
let rc = "";
|
|
442
|
+
let parts = [];
|
|
376
443
|
if (orderBy.length) {
|
|
377
444
|
rc = "order by " + orderBy.join(", ");
|
|
445
|
+
parts.push("order by");
|
|
446
|
+
parts = parts.concat(orderBy);
|
|
378
447
|
}
|
|
379
|
-
return { sql: rc, bindings: [] };
|
|
448
|
+
return { sql: rc, parts, bindings: [] };
|
|
380
449
|
}
|
|
381
450
|
compileLimit(limit) {
|
|
382
451
|
let rc = "";
|
|
452
|
+
let parts = [];
|
|
383
453
|
if (limit !== null) {
|
|
384
454
|
rc = "limit " + limit;
|
|
455
|
+
parts.push("limit");
|
|
456
|
+
parts.push(limit);
|
|
385
457
|
}
|
|
386
|
-
return { sql: rc, bindings: [] };
|
|
458
|
+
return { sql: rc, parts, bindings: [] };
|
|
387
459
|
}
|
|
388
460
|
compileOffset(offset) {
|
|
389
461
|
let rc = "";
|
|
462
|
+
let parts = [];
|
|
390
463
|
if (offset !== null) {
|
|
391
464
|
rc = "offset " + offset;
|
|
465
|
+
parts.push("offset");
|
|
466
|
+
parts.push(offset);
|
|
392
467
|
}
|
|
393
|
-
return { sql: rc, bindings: [] };
|
|
468
|
+
return { sql: rc, parts, bindings: [] };
|
|
394
469
|
}
|
|
395
470
|
compileWhereNull(w) {
|
|
396
471
|
return {
|
|
397
472
|
sql: `${w.column} is null`,
|
|
473
|
+
parts: [w.column, "is", "null"],
|
|
398
474
|
bindings: []
|
|
399
475
|
};
|
|
400
476
|
}
|
|
401
477
|
compileInsert(query, data) {
|
|
402
|
-
let
|
|
478
|
+
let parts = ["insert", "into", query.parts.table, "("];
|
|
403
479
|
const columns = [];
|
|
404
480
|
const bindings = [];
|
|
405
481
|
const values = [];
|
|
406
482
|
for (const [k, v] of Object.entries(data)) {
|
|
407
|
-
|
|
483
|
+
parts.push(k);
|
|
484
|
+
parts.push(",");
|
|
485
|
+
}
|
|
486
|
+
parts.pop();
|
|
487
|
+
parts = parts.concat([")", "values", "("]);
|
|
488
|
+
for (const [k, v] of Object.entries(data)) {
|
|
489
|
+
parts.push("?");
|
|
408
490
|
bindings.push(v);
|
|
409
|
-
|
|
491
|
+
parts.push(",");
|
|
410
492
|
}
|
|
411
|
-
|
|
412
|
-
|
|
493
|
+
parts.pop();
|
|
494
|
+
parts.push(")");
|
|
495
|
+
return { sql: parts.join(" "), parts, bindings };
|
|
413
496
|
}
|
|
414
497
|
compileUpdate(query, data) {
|
|
415
|
-
let sql = "update " + query.parts.table + " set ";
|
|
416
498
|
const bindings = [];
|
|
499
|
+
let parts = ["update", query.parts.table, "set"];
|
|
417
500
|
const setParts = [];
|
|
418
501
|
for (const [k, v] of Object.entries(data)) {
|
|
419
|
-
|
|
502
|
+
parts = parts.concat([k, "=", "?", ","]);
|
|
503
|
+
setParts.push(`${k} = ?`);
|
|
420
504
|
bindings.push(v);
|
|
421
505
|
}
|
|
422
|
-
|
|
506
|
+
parts.pop();
|
|
423
507
|
const where_csql = this.compileWhere(query.parts.where);
|
|
424
|
-
|
|
508
|
+
parts = parts.concat(where_csql.parts);
|
|
425
509
|
bindings.push(...where_csql.bindings);
|
|
426
|
-
return { sql, bindings };
|
|
510
|
+
return { sql: parts.join(" "), parts, bindings };
|
|
427
511
|
}
|
|
428
512
|
compileDelete(query) {
|
|
429
513
|
let sql = "delete from " + query.parts.table;
|
|
514
|
+
let parts = ["delete", "from", query.parts.table];
|
|
430
515
|
const where_csql = this.compileWhere(query.parts.where);
|
|
431
516
|
sql += " " + where_csql.sql;
|
|
432
|
-
|
|
517
|
+
parts = parts.concat(where_csql.parts);
|
|
518
|
+
return { sql, parts, bindings: where_csql.bindings };
|
|
433
519
|
}
|
|
434
520
|
compileUpsert(query, data, conflictFields, updateFields) {
|
|
435
|
-
let
|
|
436
|
-
const columns = [];
|
|
521
|
+
let parts = [];
|
|
437
522
|
const bindings = [];
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
values.push(this.getVariablePlaceholder());
|
|
443
|
-
}
|
|
444
|
-
sql += columns.join(", ") + ") values (" + values + ")";
|
|
445
|
-
sql += " on conflict (" + conflictFields.join(", ") + ") do update set ";
|
|
523
|
+
let isql = this.compileInsert(query, data);
|
|
524
|
+
parts = isql.parts;
|
|
525
|
+
bindings.push(...isql.bindings);
|
|
526
|
+
parts = parts.concat(["on", "conflict", "(", ...conflictFields, ")", "do", "update", "set"]);
|
|
446
527
|
const setParts = [];
|
|
447
528
|
for (const f of updateFields) {
|
|
448
529
|
setParts.push(`${f} = excluded.${f}`);
|
|
530
|
+
setParts.push(`,`);
|
|
449
531
|
}
|
|
450
|
-
|
|
532
|
+
setParts.pop();
|
|
533
|
+
parts = parts.concat(setParts);
|
|
451
534
|
const where_csql = this.compileWhere(query.parts.where);
|
|
452
|
-
|
|
535
|
+
parts = parts.concat(where_csql.parts);
|
|
453
536
|
bindings.push(...where_csql.bindings);
|
|
454
|
-
return { sql, bindings };
|
|
537
|
+
return { sql: parts.join(" "), parts, bindings };
|
|
455
538
|
}
|
|
456
539
|
compileGroupBy(groupBy) {
|
|
457
540
|
let rc = "";
|
|
541
|
+
let parts = [];
|
|
458
542
|
if (groupBy.length) {
|
|
459
543
|
rc = "group by " + groupBy.join(", ");
|
|
544
|
+
parts.push("group by");
|
|
545
|
+
parts = parts.concat(groupBy);
|
|
460
546
|
}
|
|
461
|
-
return { sql: rc, bindings: [] };
|
|
547
|
+
return { sql: rc, parts, bindings: [] };
|
|
462
548
|
}
|
|
463
549
|
compileHaving(having) {
|
|
464
550
|
let sql = "";
|
|
465
551
|
let bindings = [];
|
|
552
|
+
let parts = [];
|
|
466
553
|
for (const w of having) {
|
|
467
554
|
sql += " " + w.joinCondition + " ";
|
|
555
|
+
parts.push(w.joinCondition);
|
|
468
556
|
if (w.negateCondition) {
|
|
469
557
|
sql += "not ";
|
|
558
|
+
parts.push("not");
|
|
470
559
|
}
|
|
471
560
|
const funcName = "compileHaving" + toUpperFirst(w.type);
|
|
472
561
|
const wh = this[funcName](w);
|
|
562
|
+
parts = parts.concat(wh.parts);
|
|
473
563
|
sql += wh.sql;
|
|
474
564
|
bindings = [...bindings, ...wh.bindings];
|
|
475
565
|
}
|
|
476
|
-
if (
|
|
477
|
-
|
|
478
|
-
} else if (sql.startsWith(" or ")) {
|
|
479
|
-
sql = "having " + sql.substring(" or ".length);
|
|
566
|
+
if (parts.length > 0) {
|
|
567
|
+
parts[0] = "having";
|
|
480
568
|
}
|
|
481
|
-
return { sql, bindings };
|
|
569
|
+
return { sql: parts.join(" "), parts, bindings };
|
|
482
570
|
}
|
|
483
571
|
compileHavingOperation(w) {
|
|
484
572
|
return {
|
|
485
|
-
sql: `${w.column} ${w.operation}
|
|
573
|
+
sql: `${w.column} ${w.operation} ?`,
|
|
574
|
+
parts: [w.column, w.operation, "?"],
|
|
486
575
|
bindings: [w.value]
|
|
487
576
|
};
|
|
488
577
|
}
|
|
489
578
|
compileHavingRaw(w) {
|
|
490
579
|
return {
|
|
491
580
|
sql: w.sql,
|
|
581
|
+
parts: w.sql.split(" "),
|
|
492
582
|
bindings: w.bindings
|
|
493
583
|
};
|
|
494
584
|
}
|
|
495
585
|
};
|
|
496
586
|
|
|
497
587
|
// src/databases/postgresql/PostgresqlQueryGrammar.mts
|
|
588
|
+
var import_neko_helper = require("@devbro/neko-helper");
|
|
498
589
|
var PostgresqlQueryGrammar = class extends QueryGrammar {
|
|
499
590
|
static {
|
|
500
591
|
__name(this, "PostgresqlQueryGrammar");
|
|
501
592
|
}
|
|
502
|
-
parameterIndex;
|
|
503
593
|
constructor() {
|
|
504
594
|
super();
|
|
505
|
-
this.parameterIndex = 1;
|
|
506
595
|
}
|
|
507
596
|
toSql(query) {
|
|
508
|
-
this.parameterIndex = 1;
|
|
509
597
|
return super.toSql(query);
|
|
510
598
|
}
|
|
511
|
-
getVariablePlaceholder() {
|
|
512
|
-
return "$" + this.parameterIndex++;
|
|
513
|
-
}
|
|
514
599
|
compileInsert(query, data) {
|
|
515
|
-
this.parameterIndex = 1;
|
|
516
600
|
return super.compileInsert(query, data);
|
|
517
601
|
}
|
|
518
602
|
compileInsertGetId(query, data, options = { primaryKey: ["id"] }) {
|
|
519
|
-
this.parameterIndex = 1;
|
|
520
603
|
const rc = super.compileInsert(query, data);
|
|
521
604
|
rc.sql += ` RETURNING ${options.primaryKey.join(", ")}`;
|
|
605
|
+
rc.parts = rc.parts.concat(["RETURNING", ...(0, import_neko_helper.intersperse)(options.primaryKey, ",")]);
|
|
522
606
|
return rc;
|
|
523
607
|
}
|
|
524
608
|
compileUpdate(query, data) {
|
|
525
|
-
this.parameterIndex = 1;
|
|
526
609
|
return super.compileUpdate(query, data);
|
|
527
610
|
}
|
|
528
611
|
compileDelete(query) {
|
|
529
|
-
this.parameterIndex = 1;
|
|
530
612
|
return super.compileDelete(query);
|
|
531
613
|
}
|
|
532
614
|
compileUpsert(query, data, conflictFields, updateFields) {
|
|
533
|
-
this.parameterIndex = 1;
|
|
534
615
|
return super.compileUpsert(query, data, conflictFields, updateFields);
|
|
535
616
|
}
|
|
536
617
|
compileCount(query) {
|
|
537
|
-
this.parameterIndex = 1;
|
|
538
618
|
return super.compileCount(query);
|
|
539
619
|
}
|
|
540
620
|
};
|
|
541
621
|
|
|
542
622
|
// src/Expression.mts
|
|
623
|
+
var import_sql_tokenizer2 = require("sql-tokenizer");
|
|
543
624
|
var Expression = class {
|
|
544
625
|
constructor(sql = "", bindings = []) {
|
|
545
626
|
this.sql = sql;
|
|
@@ -549,7 +630,8 @@ var Expression = class {
|
|
|
549
630
|
__name(this, "Expression");
|
|
550
631
|
}
|
|
551
632
|
toCompiledSql() {
|
|
552
|
-
|
|
633
|
+
const tokenize = (0, import_sql_tokenizer2.sqlTokenizer)(this.sql);
|
|
634
|
+
return { sql: this.sql, bindings: this.bindings, parts: tokenize(this.sql) };
|
|
553
635
|
}
|
|
554
636
|
};
|
|
555
637
|
|
|
@@ -793,13 +875,14 @@ var SchemaGrammar = class {
|
|
|
793
875
|
});
|
|
794
876
|
}
|
|
795
877
|
sql += [columns, primaryKeys, ...foreignKeys].join(",") + ")";
|
|
796
|
-
const compiledSql = { sql, bindings: [] };
|
|
878
|
+
const compiledSql = { sql, parts: [], bindings: [] };
|
|
797
879
|
if (blueprint.indexes.length > 0) {
|
|
798
880
|
const indexSqls = blueprint.indexes.map((index) => {
|
|
799
881
|
return this.compileIndex(blueprint.tableName, index);
|
|
800
882
|
});
|
|
801
883
|
return {
|
|
802
884
|
sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join("; "),
|
|
885
|
+
parts: [],
|
|
803
886
|
bindings: compiledSql.bindings
|
|
804
887
|
};
|
|
805
888
|
}
|
|
@@ -819,9 +902,9 @@ var SchemaGrammar = class {
|
|
|
819
902
|
}
|
|
820
903
|
let compiledSql;
|
|
821
904
|
if (alterStatements.length > 0) {
|
|
822
|
-
compiledSql = { sql: sql.join(" "), bindings: [] };
|
|
905
|
+
compiledSql = { sql: sql.join(" "), parts: [], bindings: [] };
|
|
823
906
|
} else {
|
|
824
|
-
compiledSql = { sql: sql.join(" ") + " ", bindings: [] };
|
|
907
|
+
compiledSql = { sql: sql.join(" ") + " ", parts: [], bindings: [] };
|
|
825
908
|
}
|
|
826
909
|
if (blueprint.indexes.length > 0) {
|
|
827
910
|
const indexSqls = blueprint.indexes.map((index) => {
|
|
@@ -829,6 +912,7 @@ var SchemaGrammar = class {
|
|
|
829
912
|
});
|
|
830
913
|
return {
|
|
831
914
|
sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join("; "),
|
|
915
|
+
parts: [],
|
|
832
916
|
bindings: compiledSql.bindings
|
|
833
917
|
};
|
|
834
918
|
}
|
|
@@ -908,20 +992,26 @@ var SchemaGrammar = class {
|
|
|
908
992
|
compileTables(schema = void 0) {
|
|
909
993
|
return {
|
|
910
994
|
sql: "select c.relname as name, n.nspname as schema, pg_total_relation_size(c.oid) as size, obj_description(c.oid, 'pg_class') as comment from pg_class c, pg_namespace n where c.relkind in ('r', 'p') and n.oid = c.relnamespace and " + this.compileSchemaWhereClause(schema, "n.nspname") + " order by n.nspname, c.relname",
|
|
995
|
+
parts: [],
|
|
911
996
|
bindings: []
|
|
912
997
|
};
|
|
913
998
|
}
|
|
914
999
|
compileTableExists(tableName, schema = "") {
|
|
915
1000
|
return {
|
|
916
1001
|
sql: "select exists (select 1 from pg_class c, pg_namespace n where n.nspname = " + (schema ? this.escape(schema) : "current_schema()") + " and c.relname = $1 and c.relkind in ('r', 'p') and n.oid = c.relnamespace)",
|
|
1002
|
+
parts: [],
|
|
917
1003
|
bindings: [tableName]
|
|
918
1004
|
};
|
|
919
1005
|
}
|
|
920
1006
|
compileDropTable(tableName) {
|
|
921
|
-
return { sql: `drop table ${this.doubleQuoteString(tableName)}`, bindings: [] };
|
|
1007
|
+
return { sql: `drop table ${this.doubleQuoteString(tableName)}`, parts: [], bindings: [] };
|
|
922
1008
|
}
|
|
923
1009
|
compileDropTableIfExists(tableName) {
|
|
924
|
-
return {
|
|
1010
|
+
return {
|
|
1011
|
+
sql: `drop table if exists ${this.doubleQuoteString(tableName)}`,
|
|
1012
|
+
parts: [],
|
|
1013
|
+
bindings: []
|
|
1014
|
+
};
|
|
925
1015
|
}
|
|
926
1016
|
compileSchemaWhereClause(schema, column) {
|
|
927
1017
|
if (Array.isArray(schema) && schema.length > 0) {
|
|
@@ -960,7 +1050,7 @@ var SchemaGrammar = class {
|
|
|
960
1050
|
const uniqueKeyword = index.unique ? "unique " : "";
|
|
961
1051
|
const indexType = index._type ? ` using ${index._type}` : "";
|
|
962
1052
|
const sql = `create ${uniqueKeyword}index ${indexName} on ${tableName}${indexType} (${index.columns.join(", ")})`;
|
|
963
|
-
return { sql, bindings: [] };
|
|
1053
|
+
return { sql, parts: [], bindings: [] };
|
|
964
1054
|
}
|
|
965
1055
|
};
|
|
966
1056
|
|
|
@@ -979,7 +1069,7 @@ var Schema = class {
|
|
|
979
1069
|
structMethod(blueprint);
|
|
980
1070
|
const grammar = new SchemaGrammar();
|
|
981
1071
|
const sql = grammar.toSql(blueprint);
|
|
982
|
-
await this.connection?.runQuery({ sql, bindings: [] });
|
|
1072
|
+
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
983
1073
|
}
|
|
984
1074
|
async alterTable(tableName, structMethod) {
|
|
985
1075
|
const blueprint = new Blueprint();
|
|
@@ -987,7 +1077,7 @@ var Schema = class {
|
|
|
987
1077
|
structMethod(blueprint);
|
|
988
1078
|
const grammar = new SchemaGrammar();
|
|
989
1079
|
const sql = grammar.toSql(blueprint);
|
|
990
|
-
await this.connection?.runQuery({ sql, bindings: [] });
|
|
1080
|
+
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
991
1081
|
}
|
|
992
1082
|
async dropTable(tableName) {
|
|
993
1083
|
const grammar = new SchemaGrammar();
|
|
@@ -1043,7 +1133,12 @@ var PostgresqlConnection = class _PostgresqlConnection extends Connection {
|
|
|
1043
1133
|
return true;
|
|
1044
1134
|
}
|
|
1045
1135
|
async runQuery(sql) {
|
|
1046
|
-
|
|
1136
|
+
let counter = 1;
|
|
1137
|
+
let sql2 = sql.sql;
|
|
1138
|
+
if (sql.parts && sql.parts.length > 0) {
|
|
1139
|
+
sql2 = sql.parts.map((v) => v === "?" ? "$" + counter++ : v).join(" ");
|
|
1140
|
+
}
|
|
1141
|
+
const result = await this.connection?.query(sql2, sql.bindings);
|
|
1047
1142
|
return result?.rows;
|
|
1048
1143
|
}
|
|
1049
1144
|
async runCursor(sql) {
|