joist-core 2.3.0-next.94 → 2.3.0-next.95
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/build/Tables.cjs +14 -5
- package/build/Tables.cjs.map +1 -1
- package/build/Tables.d.cts +19 -9
- package/build/Tables.d.cts.map +1 -1
- package/build/Tables.d.mts +19 -9
- package/build/Tables.d.mts.map +1 -1
- package/build/Tables.js +14 -6
- package/build/Tables.js.map +1 -1
- package/build/query.cjs +24 -2
- package/build/query.cjs.map +1 -1
- package/build/query.d.cts +15 -3
- package/build/query.d.cts.map +1 -1
- package/build/query.d.mts +15 -3
- package/build/query.d.mts.map +1 -1
- package/build/query.js +25 -3
- package/build/query.js.map +1 -1
- package/package.json +2 -2
package/build/query.d.cts
CHANGED
|
@@ -4,7 +4,7 @@ import { EntityMetadata } from "./EntityMetadata.cjs";
|
|
|
4
4
|
import { CheckInput, ExprFromInput, ExprInput, ExpressionSources, ExpressionValue } from "./expressions/types.cjs";
|
|
5
5
|
import "./expressions/expression.cjs";
|
|
6
6
|
import { BaseExpr, Expr, ExprContext, ExprLike, InnerJoin, LeftJoin, SqlFragment } from "./Expr.cjs";
|
|
7
|
-
import { Table, TableBrand, tableMgmt } from "./Tables.cjs";
|
|
7
|
+
import { Table, TableBrand, referenceJoinSource, tableMgmt } from "./Tables.cjs";
|
|
8
8
|
import { Entity } from "./Entity.cjs";
|
|
9
9
|
import { ColumnCondition } from "./QueryParser.cjs";
|
|
10
10
|
import { AliasAssigner } from "./AliasAssigner.cjs";
|
|
@@ -356,12 +356,24 @@ type NameOf<A> = A extends {
|
|
|
356
356
|
} ? N : never;
|
|
357
357
|
/** The names of every alias that was LEFT JOINed; `X` is a naked type parameter so this distributes. */
|
|
358
358
|
type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
|
|
359
|
+
/** Adds default reference targets whose source is already nullable; explicit INNER joins do not inherit. */
|
|
360
|
+
type InheritedLeft<X, Left> = X extends {
|
|
361
|
+
readonly [referenceJoinSource]: infer Src;
|
|
362
|
+
readonly inner: infer A;
|
|
363
|
+
} ? [Extract<Src, Left>] extends [never] ? never : NameOf<A> : never;
|
|
364
|
+
/**
|
|
365
|
+
* Finds all aliases that can be NULL through LEFT joins and subsequent reference joins.
|
|
366
|
+
* I.e. LEFT Book adds Author via Book.author.as(a), then further required references inherit Author's NULL.
|
|
367
|
+
* Alias-name collisions are conservative, as they are for explicit LEFT joins; runtime uses exact handles.
|
|
368
|
+
*/
|
|
369
|
+
type NullableSources<X, Left = LeftJoined<X>> = [Exclude<InheritedLeft<X, Left>, Left>] extends [never] ? Left : NullableSources<X, Left | InheritedLeft<X, Left>>;
|
|
359
370
|
/**
|
|
360
371
|
* Asks: is this expression's source key among the LEFT-joined sources in this query's join list? If
|
|
361
372
|
* yes, the value can be `null`, so `R` becomes `R | null`; if no, `R` is unchanged.
|
|
362
373
|
*
|
|
363
374
|
* I.e. `MaybeNull<number, "book_stats", [LeftJoin<typeof bookStats>]>` is `number | null`,
|
|
364
|
-
* because `book_stats` is in `
|
|
375
|
+
* because `book_stats` is in `NullableSources<J[number]>`; with an inner join it stays `number`.
|
|
376
|
+
* Default references from nullable sources are included transitively.
|
|
365
377
|
*
|
|
366
378
|
* Source-less expressions (`Src` is `never`, i.e. `b.id.count()`) are never nullified. Untracked ones
|
|
367
379
|
* (`Src` is `string`, i.e. a `sql.ref` on an unknown table) might come from any left-joined table,
|
|
@@ -371,7 +383,7 @@ type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
|
|
|
371
383
|
* table named `string` would nullify every column in the query. That is why anonymous subqueries
|
|
372
384
|
* share the literal sentinel `"?"` instead.
|
|
373
385
|
*/
|
|
374
|
-
type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [
|
|
386
|
+
type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [NullableSources<J[number]>] extends [never] ? R : R | null : [Extract<Src, NullableSources<J[number]>>] extends [never] ? R : R | null;
|
|
375
387
|
/**
|
|
376
388
|
* The result row for a query with select `S` and joins `J`.
|
|
377
389
|
*
|
package/build/query.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.cts","names":[],"sources":["../src/query.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"query.d.cts","names":[],"sources":["../src/query.ts"],"mappings":"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"}
|
package/build/query.d.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { EntityMetadata } from "./EntityMetadata.mjs";
|
|
|
4
4
|
import { CheckInput, ExprFromInput, ExprInput, ExpressionSources, ExpressionValue } from "./expressions/types.mjs";
|
|
5
5
|
import "./expressions/expression.mjs";
|
|
6
6
|
import { BaseExpr, Expr, ExprContext, ExprLike, InnerJoin, LeftJoin, SqlFragment } from "./Expr.mjs";
|
|
7
|
-
import { Table, TableBrand, tableMgmt } from "./Tables.mjs";
|
|
7
|
+
import { Table, TableBrand, referenceJoinSource, tableMgmt } from "./Tables.mjs";
|
|
8
8
|
import { Entity } from "./Entity.mjs";
|
|
9
9
|
import { ColumnCondition } from "./QueryParser.mjs";
|
|
10
10
|
import { AliasAssigner } from "./AliasAssigner.mjs";
|
|
@@ -356,12 +356,24 @@ type NameOf<A> = A extends {
|
|
|
356
356
|
} ? N : never;
|
|
357
357
|
/** The names of every alias that was LEFT JOINed; `X` is a naked type parameter so this distributes. */
|
|
358
358
|
type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
|
|
359
|
+
/** Adds default reference targets whose source is already nullable; explicit INNER joins do not inherit. */
|
|
360
|
+
type InheritedLeft<X, Left> = X extends {
|
|
361
|
+
readonly [referenceJoinSource]: infer Src;
|
|
362
|
+
readonly inner: infer A;
|
|
363
|
+
} ? [Extract<Src, Left>] extends [never] ? never : NameOf<A> : never;
|
|
364
|
+
/**
|
|
365
|
+
* Finds all aliases that can be NULL through LEFT joins and subsequent reference joins.
|
|
366
|
+
* I.e. LEFT Book adds Author via Book.author.as(a), then further required references inherit Author's NULL.
|
|
367
|
+
* Alias-name collisions are conservative, as they are for explicit LEFT joins; runtime uses exact handles.
|
|
368
|
+
*/
|
|
369
|
+
type NullableSources<X, Left = LeftJoined<X>> = [Exclude<InheritedLeft<X, Left>, Left>] extends [never] ? Left : NullableSources<X, Left | InheritedLeft<X, Left>>;
|
|
359
370
|
/**
|
|
360
371
|
* Asks: is this expression's source key among the LEFT-joined sources in this query's join list? If
|
|
361
372
|
* yes, the value can be `null`, so `R` becomes `R | null`; if no, `R` is unchanged.
|
|
362
373
|
*
|
|
363
374
|
* I.e. `MaybeNull<number, "book_stats", [LeftJoin<typeof bookStats>]>` is `number | null`,
|
|
364
|
-
* because `book_stats` is in `
|
|
375
|
+
* because `book_stats` is in `NullableSources<J[number]>`; with an inner join it stays `number`.
|
|
376
|
+
* Default references from nullable sources are included transitively.
|
|
365
377
|
*
|
|
366
378
|
* Source-less expressions (`Src` is `never`, i.e. `b.id.count()`) are never nullified. Untracked ones
|
|
367
379
|
* (`Src` is `string`, i.e. a `sql.ref` on an unknown table) might come from any left-joined table,
|
|
@@ -371,7 +383,7 @@ type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
|
|
|
371
383
|
* table named `string` would nullify every column in the query. That is why anonymous subqueries
|
|
372
384
|
* share the literal sentinel `"?"` instead.
|
|
373
385
|
*/
|
|
374
|
-
type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [
|
|
386
|
+
type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [NullableSources<J[number]>] extends [never] ? R : R | null : [Extract<Src, NullableSources<J[number]>>] extends [never] ? R : R | null;
|
|
375
387
|
/**
|
|
376
388
|
* The result row for a query with select `S` and joins `J`.
|
|
377
389
|
*
|
package/build/query.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.mts","names":[],"sources":["../src/query.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"query.d.mts","names":[],"sources":["../src/query.ts"],"mappings":"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"}
|
package/build/query.js
CHANGED
|
@@ -5,7 +5,7 @@ import { fail } from "./utils.js";
|
|
|
5
5
|
import { buildWhereClause } from "./drivers/buildUtils.js";
|
|
6
6
|
import { skipCondition } from "./skipCondition.js";
|
|
7
7
|
import { BaseExpr, RefExpr, TemplateExpr, asNode, deferredCondition, deferredSym, isExpr, orderByToSql, resolveDeferredConditions } from "./Expr.js";
|
|
8
|
-
import { JoinTableHandle, collectionJoin, getTableMetadata, getTableMgmt, isTable, m2mJoinTable } from "./Tables.js";
|
|
8
|
+
import { JoinTableHandle, collectionJoin, getTableMetadata, getTableMgmt, isTable, m2mJoinTable, referenceJoinSource } from "./Tables.js";
|
|
9
9
|
import { ConditionBuilder } from "./ConditionBuilder.js";
|
|
10
10
|
import { buildExpr } from "./expressions/expression.js";
|
|
11
11
|
import { deepFindConditions } from "./QueryParser.pruning.js";
|
|
@@ -524,7 +524,7 @@ function projectionOutput(select) {
|
|
|
524
524
|
function joinedOutput(output, joins) {
|
|
525
525
|
if (!joins?.some((join) => join?.left)) return output;
|
|
526
526
|
const left = /* @__PURE__ */ new Set();
|
|
527
|
-
for (const join of joins) if (join
|
|
527
|
+
for (const join of resolveReferenceJoins(joins)) if (join.left) left.add(handleOf(join.left));
|
|
528
528
|
return {
|
|
529
529
|
kind: output.kind,
|
|
530
530
|
columns: output.columns.map((column) => {
|
|
@@ -533,6 +533,28 @@ function joinedOutput(output, joins) {
|
|
|
533
533
|
})
|
|
534
534
|
};
|
|
535
535
|
}
|
|
536
|
+
/**
|
|
537
|
+
* Resolves reference joins in declaration order without changing reusable join entries.
|
|
538
|
+
* Only .as() carries a source handle; explicit INNER joins retain their filtering semantics.
|
|
539
|
+
* I.e. LEFT Book followed by Book.author.as(a) adds Author to the set of nullable handles.
|
|
540
|
+
*/
|
|
541
|
+
function resolveReferenceJoins(joins) {
|
|
542
|
+
const left = /* @__PURE__ */ new Set();
|
|
543
|
+
return (joins ?? []).filter(isDefined).map((join) => {
|
|
544
|
+
const source = join[referenceJoinSource];
|
|
545
|
+
if (join.inner && source && left.has(source)) {
|
|
546
|
+
const { inner, ...rest } = join;
|
|
547
|
+
const resolved = {
|
|
548
|
+
...rest,
|
|
549
|
+
left: inner
|
|
550
|
+
};
|
|
551
|
+
left.add(handleOf(inner));
|
|
552
|
+
return resolved;
|
|
553
|
+
}
|
|
554
|
+
if (join.left) left.add(handleOf(join.left));
|
|
555
|
+
return join;
|
|
556
|
+
});
|
|
557
|
+
}
|
|
536
558
|
/** An output-only nullability adjustment that preserves the selected expression's SQL and conversions. */
|
|
537
559
|
var OutputExpr = class extends BaseExpr {
|
|
538
560
|
inner;
|
|
@@ -744,7 +766,7 @@ function parseQuery(q, parent, assigner, recursiveSelf) {
|
|
|
744
766
|
if (isSetQuery(q)) return parseSetQuery(q, parent, assigner, recursiveSelf);
|
|
745
767
|
const ctx = new Ctx(assigner, parent);
|
|
746
768
|
if (recursiveSelf) ctx.setRecursiveSelf(recursiveSelf);
|
|
747
|
-
const joinEntries =
|
|
769
|
+
const joinEntries = resolveReferenceJoins(q.join);
|
|
748
770
|
const ctes = registerCtes(q, ctx, assigner);
|
|
749
771
|
const parseFrom = registerSource(q.from, ctx, assigner);
|
|
750
772
|
const pendingJoins = joinEntries.flatMap((j) => {
|