pqb 0.9.25 → 0.9.26
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.d.ts +2 -2
- package/dist/index.js +35 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +35 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -467,7 +467,7 @@ declare type JoinItem = {
|
|
|
467
467
|
type: string;
|
|
468
468
|
args: [relation: string] | [
|
|
469
469
|
arg: string | QueryWithTable,
|
|
470
|
-
conditions: Record<string, string | RawExpression> | RawExpression | ((q: unknown) => QueryBase)
|
|
470
|
+
conditions: Record<string, string | RawExpression> | RawExpression | ((q: unknown) => QueryBase) | true
|
|
471
471
|
] | [
|
|
472
472
|
arg: string | QueryWithTable,
|
|
473
473
|
leftColumn: string | RawExpression,
|
|
@@ -792,7 +792,7 @@ declare type JoinArgs<T extends QueryBase, Q extends Query = Query, R extends ke
|
|
|
792
792
|
leftColumn: WithSelectable<T, W> | RawExpression,
|
|
793
793
|
op: string,
|
|
794
794
|
rightColumn: Selectable<T> | RawExpression
|
|
795
|
-
];
|
|
795
|
+
] | [query: Q, conditions: true];
|
|
796
796
|
declare type JoinResult<T extends Query, Args extends JoinArgs<T>, A extends Query | keyof T['relations'] = Args[0]> = AddQueryJoinedTable<T, A extends Query ? A : T['relations'] extends Record<string, Relation> ? A extends keyof T['relations'] ? T['relations'][A]['table'] : A extends keyof T['withData'] ? T['withData'][A] extends WithDataItem ? {
|
|
797
797
|
table: T['withData'][A]['table'];
|
|
798
798
|
result: T['withData'][A]['shape'];
|
package/dist/index.js
CHANGED
|
@@ -285,13 +285,17 @@ const processJoinItem = (ctx, table, args, quotedAs) => {
|
|
|
285
285
|
const query = first.query;
|
|
286
286
|
const quotedFrom = typeof query.from === "string" ? q(query.from) : void 0;
|
|
287
287
|
target = quotedFrom || quoteSchemaAndTable(query.schema, first.table);
|
|
288
|
+
const subQuery = first.toSql({
|
|
289
|
+
values: ctx.values
|
|
290
|
+
});
|
|
288
291
|
let joinAs = quotedFrom || q(first.table);
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
292
|
+
const qAs = query.as ? q(query.as) : void 0;
|
|
293
|
+
const addAs = qAs && qAs !== joinAs;
|
|
294
|
+
if (subQuery.text !== `SELECT * FROM ${target}${addAs ? ` AS ${qAs}` : ""}`) {
|
|
295
|
+
target = `(${subQuery.text}) ${qAs || joinAs}`;
|
|
296
|
+
} else if (addAs) {
|
|
297
|
+
joinAs = qAs;
|
|
298
|
+
target += ` AS ${qAs}`;
|
|
295
299
|
}
|
|
296
300
|
conditions = processArgs(args, ctx, table, first, joinAs, quotedAs);
|
|
297
301
|
const whereSql = whereToSql(ctx, table, query, joinAs);
|
|
@@ -340,7 +344,9 @@ const getConditionsFor3Or4LengthItem = (target, values, quotedAs, args) => {
|
|
|
340
344
|
return `${typeof leftColumn === "string" ? quoteFullColumn(leftColumn, target) : getRaw(leftColumn, values)} ${op} ${typeof rightColumn === "string" ? quoteFullColumn(rightColumn, quotedAs) : getRaw(rightColumn, values)}`;
|
|
341
345
|
};
|
|
342
346
|
const getObjectOrRawConditions = (data, values, quotedAs, joinAs) => {
|
|
343
|
-
if (
|
|
347
|
+
if (data === true) {
|
|
348
|
+
return "true";
|
|
349
|
+
} else if (isRaw(data)) {
|
|
344
350
|
return getRaw(data, values);
|
|
345
351
|
} else {
|
|
346
352
|
const pairs = [];
|
|
@@ -395,6 +401,7 @@ const processAnds = (and, ctx, table, quotedAs, not) => {
|
|
|
395
401
|
return ands.join(" AND ");
|
|
396
402
|
};
|
|
397
403
|
const processWhere = (ands, ctx, table, data, quotedAs, not) => {
|
|
404
|
+
var _a, _b;
|
|
398
405
|
const prefix = not ? "NOT " : "";
|
|
399
406
|
if (typeof data === "function") {
|
|
400
407
|
const qb = data(new ctx.whereQueryBuilder(table, table.query.shape));
|
|
@@ -489,9 +496,23 @@ const processWhere = (ands, ctx, table, data, quotedAs, not) => {
|
|
|
489
496
|
)}`
|
|
490
497
|
);
|
|
491
498
|
} else {
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
499
|
+
let column = table.query.shape[key];
|
|
500
|
+
let quotedColumn;
|
|
501
|
+
if (column) {
|
|
502
|
+
quotedColumn = qc(key, quotedAs);
|
|
503
|
+
} else if (!column) {
|
|
504
|
+
const index = key.indexOf(".");
|
|
505
|
+
if (index !== -1) {
|
|
506
|
+
const joinedTable = key.slice(0, index);
|
|
507
|
+
const joinedColumn = key.slice(index + 1);
|
|
508
|
+
column = (_b = (_a = table.query.joinedShapes) == null ? void 0 : _a[joinedTable]) == null ? void 0 : _b[joinedColumn];
|
|
509
|
+
quotedColumn = qc(joinedColumn, q(joinedTable));
|
|
510
|
+
} else {
|
|
511
|
+
quotedColumn = void 0;
|
|
512
|
+
}
|
|
513
|
+
if (!column || !quotedColumn) {
|
|
514
|
+
throw new Error(`Unknown column ${key} provided to condition`);
|
|
515
|
+
}
|
|
495
516
|
}
|
|
496
517
|
for (const op in value) {
|
|
497
518
|
const operator = column.operators[op];
|
|
@@ -500,7 +521,7 @@ const processWhere = (ands, ctx, table, data, quotedAs, not) => {
|
|
|
500
521
|
}
|
|
501
522
|
ands.push(
|
|
502
523
|
`${prefix}${operator(
|
|
503
|
-
|
|
524
|
+
quotedColumn,
|
|
504
525
|
value[op],
|
|
505
526
|
ctx.values
|
|
506
527
|
)}`
|
|
@@ -5878,6 +5899,9 @@ class OnQueryBuilder extends WhereQueryBuilder {
|
|
|
5878
5899
|
constructor(q, shape, joinTo) {
|
|
5879
5900
|
super(q, shape);
|
|
5880
5901
|
this.joinTo = joinTo;
|
|
5902
|
+
this.query.joinedShapes = {
|
|
5903
|
+
[joinTo.query.as || joinTo.table]: joinTo.shape
|
|
5904
|
+
};
|
|
5881
5905
|
}
|
|
5882
5906
|
on(...args) {
|
|
5883
5907
|
return this.clone()._on(...args);
|