Skip to content

Commit 12674e7

Browse files
authored
Merge pull request #168 from TheNumberOne/fix/lateral-join
fix sticky parent tables
2 parents f254155 + 6e64759 commit 12674e7

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/db/core.ts

+22
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,28 @@ export class SQLFragment<RunResult = pg.QueryResult['rows'], Constraint = never>
244244

245245
constructor(protected literals: string[], protected expressions: SQL[]) { }
246246

247+
/**
248+
* Performs a shallow copy of this SQLFragment, optionally overriding some of its properties.
249+
* @param override The properties to override
250+
*/
251+
copy(override?: {
252+
literals?: string[];
253+
expressions?: SQL[];
254+
parentTable?: string;
255+
preparedName?: string;
256+
noop?: boolean;
257+
noopResult?: any;
258+
}): SQLFragment<RunResult, Constraint> {
259+
const { literals = this.literals, expressions = this.expressions, ...overrideRest } = override ?? {};
260+
const copy = new SQLFragment<RunResult, Constraint>(literals, expressions);
261+
return Object.assign(copy, {
262+
parentTable: this.parentTable,
263+
preparedName: this.preparedName,
264+
noop: this.noop,
265+
noopResult: this.noopResult
266+
}, overrideRest);
267+
}
268+
247269
/**
248270
* Instruct Postgres to treat this as a prepared statement: see
249271
* https://node-postgres.com/features/queries#prepared-statements

src/db/shortcuts.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -542,12 +542,11 @@ export const select: SelectSignatures = function (
542542
}),
543543
lateralSQL = lateral === undefined ? [] :
544544
lateral instanceof SQLFragment ? (() => {
545-
lateral.parentTable = alias;
546-
return sql` LEFT JOIN LATERAL (${lateral}) AS "lateral_passthru" ON true`;
545+
return sql` LEFT JOIN LATERAL (${lateral.copy({ parentTable: alias })}) AS "lateral_passthru" ON true`;
547546
})() :
548547
Object.keys(lateral).sort().map(k => {
549-
const subQ = lateral[k];
550-
subQ.parentTable = alias; // enables `parent('column')` in subquery's Whereables
548+
/// enables `parent('column')` in subquery's Whereables
549+
const subQ = lateral[k].copy({ parentTable: alias });
551550
return sql` LEFT JOIN LATERAL (${subQ}) AS "lateral_${raw(k)}" ON true`;
552551
});
553552

0 commit comments

Comments
 (0)