@quereus/quereus 1.2.0 → 1.3.1
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/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +2 -2
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +2 -2
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.js +2 -2
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +2 -2
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +1 -0
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +39 -5
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.js +7 -7
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +20 -74
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +2 -0
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts +2 -6
- package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.js +2 -14
- package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +2 -6
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +2 -14
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -8
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +4 -70
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -6
- package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.js +2 -14
- package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +4 -10
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +3 -27
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -6
- package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.js +2 -14
- package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +5 -99
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +31 -0
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -0
- package/dist/src/planner/nodes/join-utils.js +86 -0
- package/dist/src/planner/nodes/join-utils.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts +1 -1
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +4 -70
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts +2 -0
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +5 -4
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/scopes/global.d.ts.map +1 -1
- package/dist/src/planner/scopes/global.js +7 -10
- package/dist/src/planner/scopes/global.js.map +1 -1
- package/dist/src/planner/scopes/registered.d.ts +0 -1
- package/dist/src/planner/scopes/registered.d.ts.map +1 -1
- package/dist/src/planner/scopes/registered.js +0 -7
- package/dist/src/planner/scopes/registered.js.map +1 -1
- package/dist/src/planner/stats/histogram.d.ts.map +1 -1
- package/dist/src/planner/stats/histogram.js +2 -1
- package/dist/src/planner/stats/histogram.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +4 -12
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/join-output.d.ts +13 -0
- package/dist/src/runtime/emit/join-output.d.ts.map +1 -0
- package/dist/src/runtime/emit/join-output.js +22 -0
- package/dist/src/runtime/emit/join-output.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +4 -16
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +4 -11
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js +43 -82
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +2 -2
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +4 -36
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts +8 -0
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -0
- package/dist/src/vtab/memory/layer/plan-filter.js +46 -0
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -0
- package/dist/src/vtab/memory/layer/scan-layer.d.ts +9 -0
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -0
- package/dist/src/vtab/memory/layer/{base-cursor.js → scan-layer.js} +35 -77
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -0
- package/package.json +3 -3
- package/dist/src/vtab/memory/layer/base-cursor.d.ts +0 -5
- package/dist/src/vtab/memory/layer/base-cursor.d.ts.map +0 -1
- package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction-cursor.d.ts +0 -5
- package/dist/src/vtab/memory/layer/transaction-cursor.d.ts.map +0 -1
- package/dist/src/vtab/memory/layer/transaction-cursor.js +0 -247
- package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import type { Scope } from '../scopes/scope.js';
|
|
2
|
-
import {
|
|
2
|
+
import { VoidNode, type PhysicalProperties } from './plan-node.js';
|
|
3
3
|
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
-
import type { VoidType } from '../../common/datatype.js';
|
|
5
4
|
import type * as AST from '../../parser/ast.js';
|
|
6
5
|
/**
|
|
7
6
|
* Represents creating a global integrity assertion.
|
|
8
7
|
* This is a DDL operation that adds an assertion to the schema.
|
|
9
8
|
*/
|
|
10
|
-
export declare class CreateAssertionNode extends
|
|
9
|
+
export declare class CreateAssertionNode extends VoidNode {
|
|
11
10
|
readonly name: string;
|
|
12
11
|
readonly checkExpression: AST.Expression;
|
|
13
12
|
readonly nodeType = PlanNodeType.CreateAssertion;
|
|
14
13
|
constructor(scope: Scope, name: string, checkExpression: AST.Expression);
|
|
15
|
-
getType(): VoidType;
|
|
16
|
-
getChildren(): readonly PlanNode[];
|
|
17
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
18
14
|
toString(): string;
|
|
19
15
|
getLogicalAttributes(): Record<string, unknown>;
|
|
20
16
|
computePhysical(_children: readonly PhysicalProperties[]): Partial<PhysicalProperties>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-assertion-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"create-assertion-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;aAK7B,IAAI,EAAE,MAAM;aACZ,eAAe,EAAE,GAAG,CAAC,UAAU;IALjD,SAAkB,QAAQ,gCAAgC;gBAGxD,KAAK,EAAE,KAAK,EACI,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,GAAG,CAAC,UAAU;IAKxC,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAO/C,eAAe,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGhG"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { VoidNode } from './plan-node.js';
|
|
2
2
|
import { PlanNodeType } from './plan-node-type.js';
|
|
3
3
|
/**
|
|
4
4
|
* Represents creating a global integrity assertion.
|
|
5
5
|
* This is a DDL operation that adds an assertion to the schema.
|
|
6
6
|
*/
|
|
7
|
-
export class CreateAssertionNode extends
|
|
7
|
+
export class CreateAssertionNode extends VoidNode {
|
|
8
8
|
name;
|
|
9
9
|
checkExpression;
|
|
10
10
|
nodeType = PlanNodeType.CreateAssertion;
|
|
@@ -13,18 +13,6 @@ export class CreateAssertionNode extends PlanNode {
|
|
|
13
13
|
this.name = name;
|
|
14
14
|
this.checkExpression = checkExpression;
|
|
15
15
|
}
|
|
16
|
-
getType() {
|
|
17
|
-
return { typeClass: 'void' };
|
|
18
|
-
}
|
|
19
|
-
getChildren() {
|
|
20
|
-
return [];
|
|
21
|
-
}
|
|
22
|
-
withChildren(newChildren) {
|
|
23
|
-
if (newChildren.length !== 0) {
|
|
24
|
-
throw new Error(`CreateAssertionNode expects 0 children, got ${newChildren.length}`);
|
|
25
|
-
}
|
|
26
|
-
return this; // No children, so no change
|
|
27
|
-
}
|
|
28
16
|
toString() {
|
|
29
17
|
return `CREATE ASSERTION ${this.name}`;
|
|
30
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"create-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA2B,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAK7B;IACA;IALA,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC;IAE1D,YACE,KAAY,EACI,IAAY,EACZ,eAA+B;QAE/C,KAAK,CAAC,KAAK,CAAC,CAAC;QAHG,SAAI,GAAJ,IAAI,CAAQ;QACZ,oBAAe,GAAf,eAAe,CAAgB;IAGjD,CAAC;IAEQ,QAAQ;QACf,OAAO,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAEQ,oBAAoB;QAC3B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,oBAAoB;SAC3E,CAAC;IACJ,CAAC;IAEQ,eAAe,CAAC,SAAwC;QAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import { PlanNode,
|
|
1
|
+
import { PlanNode, VoidNode, type RelationalPlanNode, Attribute } from './plan-node.js';
|
|
2
2
|
import { PlanNodeType } from './plan-node-type.js';
|
|
3
3
|
import type { Scope } from '../scopes/scope.js';
|
|
4
4
|
import type * as AST from '../../parser/ast.js';
|
|
5
|
-
import { RelationType
|
|
5
|
+
import { RelationType } from '../../common/datatype.js';
|
|
6
6
|
/**
|
|
7
7
|
* DECLARE SCHEMA statement plan node
|
|
8
8
|
*/
|
|
9
|
-
export declare class DeclareSchemaNode extends
|
|
9
|
+
export declare class DeclareSchemaNode extends VoidNode {
|
|
10
10
|
readonly statementAst: AST.DeclareSchemaStmt;
|
|
11
11
|
readonly nodeType = PlanNodeType.DeclareSchema;
|
|
12
12
|
constructor(scope: Scope, statementAst: AST.DeclareSchemaStmt);
|
|
13
|
-
getType(): VoidType;
|
|
14
|
-
getChildren(): PlanNode[];
|
|
15
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
16
13
|
toString(): string;
|
|
17
14
|
getLogicalAttributes(): Record<string, unknown>;
|
|
18
15
|
}
|
|
@@ -36,13 +33,10 @@ export declare class DiffSchemaNode extends PlanNode implements RelationalPlanNo
|
|
|
36
33
|
/**
|
|
37
34
|
* APPLY SCHEMA statement plan node
|
|
38
35
|
*/
|
|
39
|
-
export declare class ApplySchemaNode extends
|
|
36
|
+
export declare class ApplySchemaNode extends VoidNode {
|
|
40
37
|
readonly statementAst: AST.ApplySchemaStmt;
|
|
41
38
|
readonly nodeType = PlanNodeType.ApplySchema;
|
|
42
39
|
constructor(scope: Scope, statementAst: AST.ApplySchemaStmt);
|
|
43
|
-
getType(): VoidType;
|
|
44
|
-
getChildren(): PlanNode[];
|
|
45
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
46
40
|
toString(): string;
|
|
47
41
|
getLogicalAttributes(): Record<string, unknown>;
|
|
48
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarative-schema.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/declarative-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"declarative-schema.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/declarative-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIxD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;aAK7B,YAAY,EAAE,GAAG,CAAC,iBAAiB;IAJpD,SAAkB,QAAQ,8BAA8B;gBAGvD,KAAK,EAAE,KAAK,EACI,YAAY,EAAE,GAAG,CAAC,iBAAiB;IAK3C,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOxD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAS,YAAW,kBAAkB;aAOxD,YAAY,EAAE,GAAG,CAAC,cAAc;IANjD,SAAkB,QAAQ,2BAA2B;IAErD,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK,EACI,YAAY,EAAE,GAAG,CAAC,cAAc;IAMjD,OAAO,IAAI,YAAY;IAsBvB,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,OAAO,CAAC,eAAe;IASvB,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,QAAQ,EAAE;IAIzB,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAO/C,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMxD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;aAK3B,YAAY,EAAE,GAAG,CAAC,eAAe;IAJlD,SAAkB,QAAQ,4BAA4B;gBAGrD,KAAK,EAAE,KAAK,EACI,YAAY,EAAE,GAAG,CAAC,eAAe;IAKzC,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOxD;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,QAAS,YAAW,kBAAkB;aAO3D,YAAY,EAAE,GAAG,CAAC,iBAAiB;IANpD,SAAkB,QAAQ,8BAA8B;IAExD,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK,EACI,YAAY,EAAE,GAAG,CAAC,iBAAiB;IAMpD,OAAO,IAAI,YAAY;IAsBvB,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,OAAO,CAAC,eAAe;IASvB,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,QAAQ,EAAE;IAIzB,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAO/C,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOxD"}
|
|
@@ -1,29 +1,17 @@
|
|
|
1
|
-
import { PlanNode } from './plan-node.js';
|
|
1
|
+
import { PlanNode, VoidNode } from './plan-node.js';
|
|
2
2
|
import { PlanNodeType } from './plan-node-type.js';
|
|
3
3
|
import { TEXT_TYPE } from '../../types/builtin-types.js';
|
|
4
4
|
import { Cached } from '../../util/cached.js';
|
|
5
5
|
/**
|
|
6
6
|
* DECLARE SCHEMA statement plan node
|
|
7
7
|
*/
|
|
8
|
-
export class DeclareSchemaNode extends
|
|
8
|
+
export class DeclareSchemaNode extends VoidNode {
|
|
9
9
|
statementAst;
|
|
10
10
|
nodeType = PlanNodeType.DeclareSchema;
|
|
11
11
|
constructor(scope, statementAst) {
|
|
12
12
|
super(scope, 1);
|
|
13
13
|
this.statementAst = statementAst;
|
|
14
14
|
}
|
|
15
|
-
getType() {
|
|
16
|
-
return { typeClass: 'void' };
|
|
17
|
-
}
|
|
18
|
-
getChildren() {
|
|
19
|
-
return [];
|
|
20
|
-
}
|
|
21
|
-
withChildren(newChildren) {
|
|
22
|
-
if (newChildren.length !== 0) {
|
|
23
|
-
throw new Error(`DeclareSchemaNode expects 0 children, got ${newChildren.length}`);
|
|
24
|
-
}
|
|
25
|
-
return this;
|
|
26
|
-
}
|
|
27
15
|
toString() {
|
|
28
16
|
return `DECLARE SCHEMA ${this.statementAst.schemaName || 'main'}`;
|
|
29
17
|
}
|
|
@@ -104,25 +92,13 @@ export class DiffSchemaNode extends PlanNode {
|
|
|
104
92
|
/**
|
|
105
93
|
* APPLY SCHEMA statement plan node
|
|
106
94
|
*/
|
|
107
|
-
export class ApplySchemaNode extends
|
|
95
|
+
export class ApplySchemaNode extends VoidNode {
|
|
108
96
|
statementAst;
|
|
109
97
|
nodeType = PlanNodeType.ApplySchema;
|
|
110
98
|
constructor(scope, statementAst) {
|
|
111
99
|
super(scope, 1);
|
|
112
100
|
this.statementAst = statementAst;
|
|
113
101
|
}
|
|
114
|
-
getType() {
|
|
115
|
-
return { typeClass: 'void' };
|
|
116
|
-
}
|
|
117
|
-
getChildren() {
|
|
118
|
-
return [];
|
|
119
|
-
}
|
|
120
|
-
withChildren(newChildren) {
|
|
121
|
-
if (newChildren.length !== 0) {
|
|
122
|
-
throw new Error(`ApplySchemaNode expects 0 children, got ${newChildren.length}`);
|
|
123
|
-
}
|
|
124
|
-
return this;
|
|
125
|
-
}
|
|
126
102
|
toString() {
|
|
127
103
|
return `APPLY SCHEMA ${this.statementAst.schemaName || 'main'}${this.statementAst.withSeed ? ' WITH SEED' : ''}`;
|
|
128
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarative-schema.js","sourceRoot":"","sources":["../../../../src/planner/nodes/declarative-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"declarative-schema.js","sourceRoot":"","sources":["../../../../src/planner/nodes/declarative-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import type { Scope } from '../scopes/scope.js';
|
|
2
|
-
import {
|
|
2
|
+
import { VoidNode, type PhysicalProperties } from './plan-node.js';
|
|
3
3
|
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
-
import type { VoidType } from '../../common/datatype.js';
|
|
5
4
|
/**
|
|
6
5
|
* Represents dropping a global integrity assertion.
|
|
7
6
|
* This is a DDL operation that removes an assertion from the schema.
|
|
8
7
|
*/
|
|
9
|
-
export declare class DropAssertionNode extends
|
|
8
|
+
export declare class DropAssertionNode extends VoidNode {
|
|
10
9
|
readonly name: string;
|
|
11
10
|
readonly ifExists: boolean;
|
|
12
11
|
readonly nodeType = PlanNodeType.DropAssertion;
|
|
13
12
|
constructor(scope: Scope, name: string, ifExists: boolean);
|
|
14
|
-
getType(): VoidType;
|
|
15
|
-
getChildren(): readonly PlanNode[];
|
|
16
|
-
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
17
13
|
toString(): string;
|
|
18
14
|
getLogicalAttributes(): Record<string, unknown>;
|
|
19
15
|
computePhysical(_children: readonly PhysicalProperties[]): Partial<PhysicalProperties>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop-assertion-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/drop-assertion-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"drop-assertion-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/drop-assertion-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;aAK3B,IAAI,EAAE,MAAM;aACZ,QAAQ,EAAE,OAAO;IALnC,SAAkB,QAAQ,8BAA8B;gBAGtD,KAAK,EAAE,KAAK,EACI,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO;IAK1B,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAO/C,eAAe,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGhG"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { VoidNode } from './plan-node.js';
|
|
2
2
|
import { PlanNodeType } from './plan-node-type.js';
|
|
3
3
|
/**
|
|
4
4
|
* Represents dropping a global integrity assertion.
|
|
5
5
|
* This is a DDL operation that removes an assertion from the schema.
|
|
6
6
|
*/
|
|
7
|
-
export class DropAssertionNode extends
|
|
7
|
+
export class DropAssertionNode extends VoidNode {
|
|
8
8
|
name;
|
|
9
9
|
ifExists;
|
|
10
10
|
nodeType = PlanNodeType.DropAssertion;
|
|
@@ -13,18 +13,6 @@ export class DropAssertionNode extends PlanNode {
|
|
|
13
13
|
this.name = name;
|
|
14
14
|
this.ifExists = ifExists;
|
|
15
15
|
}
|
|
16
|
-
getType() {
|
|
17
|
-
return { typeClass: 'void' };
|
|
18
|
-
}
|
|
19
|
-
getChildren() {
|
|
20
|
-
return [];
|
|
21
|
-
}
|
|
22
|
-
withChildren(newChildren) {
|
|
23
|
-
if (newChildren.length !== 0) {
|
|
24
|
-
throw new Error(`DropAssertionNode expects 0 children, got ${newChildren.length}`);
|
|
25
|
-
}
|
|
26
|
-
return this; // No children, so no change
|
|
27
|
-
}
|
|
28
16
|
toString() {
|
|
29
17
|
return `DROP ASSERTION ${this.name}`;
|
|
30
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/drop-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"drop-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/drop-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA2B,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAK3B;IACA;IALA,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC;IAExD,YACE,KAAY,EACI,IAAY,EACZ,QAAiB;QAEjC,KAAK,CAAC,KAAK,CAAC,CAAC;QAHG,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAS;IAGnC,CAAC;IAEQ,QAAQ;QACf,OAAO,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAEQ,oBAAoB;QAC3B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAEQ,eAAe,CAAC,SAAwC;QAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAO3F,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,cAAc,GAAG,SAAS,EACrC,SAAS,EAAE,SAAS,SAAS,EAAE,EAC/B,UAAU,EAAE,SAAS,SAAS,EAAE,GAC9B,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCxC;AAED;;;GAGG;AACH,qBAAa,QAAS,SAAQ,QAAS,YAAW,oBAAoB,EAAE,WAAW,EAAE,sBAAsB;aAMzF,IAAI,EAAE,kBAAkB;aACxB,KAAK,EAAE,kBAAkB;aACzB,QAAQ,EAAE,QAAQ;aAClB,SAAS,CAAC,EAAE,cAAc;aAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE;IATjD,QAAQ,CAAC,QAAQ,qBAAqB;IACtC,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK,EACI,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,cAAc,YAAA,EAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,YAAA;IAejD,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuBpF,OAAO,CAAC,eAAe;IAIvB,aAAa,IAAI,SAAS,EAAE;IAI5B,OAAO,IAAI,YAAY;IAOvB,WAAW,IAAI,SAAS,QAAQ,EAAE;IAIlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAIjE,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAuCxD,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAEQ,QAAQ,IAAI,MAAM;IAWlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAejD,WAAW,IAAI,QAAQ;IAIvB,gBAAgB,IAAI,cAAc,GAAG,SAAS;IAI9C,aAAa,IAAI,kBAAkB;IAInC,cAAc,IAAI,kBAAkB;IAIpC,eAAe,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS;IAKvD,aAAa,IAAI,SAAS,cAAc,EAAE;CAG1C"}
|
|
@@ -7,6 +7,7 @@ import { normalizePredicate } from '../analysis/predicate-normalizer.js';
|
|
|
7
7
|
import { combineJoinKeys, analyzeJoinKeyCoverage } from '../util/key-utils.js';
|
|
8
8
|
import { BinaryOpNode } from './scalar.js';
|
|
9
9
|
import { ColumnReferenceNode } from './reference.js';
|
|
10
|
+
import { buildJoinAttributes, buildJoinRelationType, estimateJoinRows } from './join-utils.js';
|
|
10
11
|
/**
|
|
11
12
|
* Extract equi-join column index pairs from a join condition (AND-of-equalities).
|
|
12
13
|
* Returns pairs of {left, right} column indices.
|
|
@@ -91,82 +92,16 @@ export class JoinNode extends PlanNode {
|
|
|
91
92
|
};
|
|
92
93
|
}
|
|
93
94
|
buildAttributes() {
|
|
94
|
-
|
|
95
|
-
// Semi/anti joins produce only left-side attributes
|
|
96
|
-
if (this.joinType === 'semi' || this.joinType === 'anti') {
|
|
97
|
-
return leftAttrs.slice();
|
|
98
|
-
}
|
|
99
|
-
const rightAttrs = this.right.getAttributes();
|
|
100
|
-
// For JOINs, concatenate left and right attributes
|
|
101
|
-
// For OUTER joins, mark attributes from the nullable side as nullable
|
|
102
|
-
const attributes = [];
|
|
103
|
-
// Add left attributes
|
|
104
|
-
for (const attr of leftAttrs) {
|
|
105
|
-
const isNullable = this.joinType === 'right' || this.joinType === 'full';
|
|
106
|
-
attributes.push({
|
|
107
|
-
...attr,
|
|
108
|
-
// For right/full outer joins, left side can be null
|
|
109
|
-
type: isNullable ? { ...attr.type, nullable: true } : attr.type
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
// Add right attributes
|
|
113
|
-
for (const attr of rightAttrs) {
|
|
114
|
-
const isNullable = this.joinType === 'left' || this.joinType === 'full';
|
|
115
|
-
attributes.push({
|
|
116
|
-
...attr,
|
|
117
|
-
// For left/full outer joins, right side can be null
|
|
118
|
-
type: isNullable ? { ...attr.type, nullable: true } : attr.type
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
return attributes;
|
|
95
|
+
return buildJoinAttributes(this.left.getAttributes(), this.right.getAttributes(), this.joinType);
|
|
122
96
|
}
|
|
123
97
|
getAttributes() {
|
|
124
98
|
return this.attributesCache.value;
|
|
125
99
|
}
|
|
126
100
|
getType() {
|
|
127
101
|
const leftType = this.left.getType();
|
|
128
|
-
// Semi/anti joins produce only left-side columns and preserve left keys
|
|
129
|
-
if (this.joinType === 'semi' || this.joinType === 'anti') {
|
|
130
|
-
return {
|
|
131
|
-
typeClass: 'relation',
|
|
132
|
-
columns: leftType.columns,
|
|
133
|
-
isSet: leftType.isSet,
|
|
134
|
-
isReadOnly: leftType.isReadOnly,
|
|
135
|
-
keys: leftType.keys,
|
|
136
|
-
rowConstraints: leftType.rowConstraints
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
102
|
const rightType = this.right.getType();
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const rightColumns = rightType.columns;
|
|
143
|
-
// For outer joins, mark columns as nullable appropriately
|
|
144
|
-
const combinedColumns = [
|
|
145
|
-
...leftColumns.map(col => {
|
|
146
|
-
const isNullable = this.joinType === 'right' || this.joinType === 'full';
|
|
147
|
-
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
148
|
-
}),
|
|
149
|
-
...rightColumns.map(col => {
|
|
150
|
-
const isNullable = this.joinType === 'left' || this.joinType === 'full';
|
|
151
|
-
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
152
|
-
})
|
|
153
|
-
];
|
|
154
|
-
// Join result is a set only if both inputs are sets and it's an inner/cross join
|
|
155
|
-
// Outer joins can introduce duplicates due to null padding
|
|
156
|
-
const isSet = (this.joinType === 'inner' || this.joinType === 'cross') &&
|
|
157
|
-
leftType.isSet && rightType.isSet;
|
|
158
|
-
// Combine keys conservatively
|
|
159
|
-
const combinedKeys = combineJoinKeys(leftType.keys, rightType.keys, this.joinType, leftType.columns.length);
|
|
160
|
-
// Combine row constraints from both sides
|
|
161
|
-
const combinedRowConstraints = [...leftType.rowConstraints, ...rightType.rowConstraints];
|
|
162
|
-
return {
|
|
163
|
-
typeClass: 'relation',
|
|
164
|
-
columns: combinedColumns,
|
|
165
|
-
isSet,
|
|
166
|
-
isReadOnly: leftType.isReadOnly && rightType.isReadOnly,
|
|
167
|
-
keys: combinedKeys,
|
|
168
|
-
rowConstraints: combinedRowConstraints
|
|
169
|
-
};
|
|
103
|
+
const keys = combineJoinKeys(leftType.keys, rightType.keys, this.joinType, leftType.columns.length);
|
|
104
|
+
return buildJoinRelationType(leftType, rightType, this.joinType, keys);
|
|
170
105
|
}
|
|
171
106
|
getChildren() {
|
|
172
107
|
return this.condition ? [this.left, this.right, this.condition] : [this.left, this.right];
|
|
@@ -201,36 +136,7 @@ export class JoinNode extends PlanNode {
|
|
|
201
136
|
return new JoinNode(this.scope, newLeft, newRight, this.joinType, newCondition, this.usingColumns);
|
|
202
137
|
}
|
|
203
138
|
get estimatedRows() {
|
|
204
|
-
|
|
205
|
-
const rightRows = this.right.estimatedRows;
|
|
206
|
-
if (leftRows === undefined || rightRows === undefined) {
|
|
207
|
-
return undefined;
|
|
208
|
-
}
|
|
209
|
-
// Simple heuristics for different join types
|
|
210
|
-
switch (this.joinType) {
|
|
211
|
-
case 'cross':
|
|
212
|
-
return leftRows * rightRows;
|
|
213
|
-
case 'inner':
|
|
214
|
-
// Assume 10% selectivity for inner joins
|
|
215
|
-
return Math.max(1, leftRows * rightRows * 0.1);
|
|
216
|
-
case 'left':
|
|
217
|
-
// Left joins preserve all left rows
|
|
218
|
-
return leftRows;
|
|
219
|
-
case 'right':
|
|
220
|
-
// Right joins preserve all right rows
|
|
221
|
-
return rightRows;
|
|
222
|
-
case 'full':
|
|
223
|
-
// Full outer joins can have at most left + right rows
|
|
224
|
-
return leftRows + rightRows;
|
|
225
|
-
case 'semi':
|
|
226
|
-
// Semi joins produce at most left rows (assume 50% match)
|
|
227
|
-
return Math.max(1, Math.floor(leftRows * 0.5));
|
|
228
|
-
case 'anti':
|
|
229
|
-
// Anti joins produce at most left rows (assume 50% don't match)
|
|
230
|
-
return Math.max(1, Math.floor(leftRows * 0.5));
|
|
231
|
-
default:
|
|
232
|
-
return leftRows * rightRows * 0.1;
|
|
233
|
-
}
|
|
139
|
+
return estimateJoinRows(this.left.estimatedRows, this.right.estimatedRows, this.joinType);
|
|
234
140
|
}
|
|
235
141
|
toString() {
|
|
236
142
|
const joinTypeDisplay = this.joinType.toUpperCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Attribute } from './plan-node.js';
|
|
2
|
+
import type { JoinType } from './join-node.js';
|
|
3
|
+
import type { RelationType, ColRef } from '../../common/datatype.js';
|
|
4
|
+
/**
|
|
5
|
+
* An equi-join pair: left attribute = right attribute.
|
|
6
|
+
* Attribute IDs are stable across plan transformations.
|
|
7
|
+
*/
|
|
8
|
+
export interface EquiJoinPair {
|
|
9
|
+
leftAttrId: number;
|
|
10
|
+
rightAttrId: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the output attributes for a join node.
|
|
14
|
+
*
|
|
15
|
+
* If `preserveAttributeIds` is supplied (physical join nodes created from a
|
|
16
|
+
* logical JoinNode) the preserved set is returned directly. Otherwise the
|
|
17
|
+
* attributes are computed from the left/right inputs and the join type.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildJoinAttributes(leftAttrs: readonly Attribute[], rightAttrs: readonly Attribute[], joinType: JoinType, preserveAttributeIds?: readonly Attribute[]): Attribute[];
|
|
20
|
+
/**
|
|
21
|
+
* Build the `RelationType` for a join result.
|
|
22
|
+
*
|
|
23
|
+
* Semi/anti joins return the left type shape. All other join types combine
|
|
24
|
+
* columns from both sides with appropriate nullable marking.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildJoinRelationType(leftType: RelationType, rightType: RelationType, joinType: JoinType, keys?: ReadonlyArray<ReadonlyArray<ColRef>>): RelationType;
|
|
27
|
+
/**
|
|
28
|
+
* Estimate the number of output rows for a join given the input cardinalities.
|
|
29
|
+
*/
|
|
30
|
+
export declare function estimateJoinRows(leftRows: number | undefined, rightRows: number | undefined, joinType: JoinType): number | undefined;
|
|
31
|
+
//# sourceMappingURL=join-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,SAAS,SAAS,EAAE,EAC/B,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,GACzC,SAAS,EAAE,CAcb;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GACzC,YAAY,CAkCd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,QAAQ,GAChB,MAAM,GAAG,SAAS,CAoBpB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the output attributes for a join node.
|
|
3
|
+
*
|
|
4
|
+
* If `preserveAttributeIds` is supplied (physical join nodes created from a
|
|
5
|
+
* logical JoinNode) the preserved set is returned directly. Otherwise the
|
|
6
|
+
* attributes are computed from the left/right inputs and the join type.
|
|
7
|
+
*/
|
|
8
|
+
export function buildJoinAttributes(leftAttrs, rightAttrs, joinType, preserveAttributeIds) {
|
|
9
|
+
if (preserveAttributeIds)
|
|
10
|
+
return preserveAttributeIds.slice();
|
|
11
|
+
if (joinType === 'semi' || joinType === 'anti')
|
|
12
|
+
return leftAttrs.slice();
|
|
13
|
+
const attributes = [];
|
|
14
|
+
for (const attr of leftAttrs) {
|
|
15
|
+
const isNullable = joinType === 'right' || joinType === 'full';
|
|
16
|
+
attributes.push(isNullable ? { ...attr, type: { ...attr.type, nullable: true } } : attr);
|
|
17
|
+
}
|
|
18
|
+
for (const attr of rightAttrs) {
|
|
19
|
+
const isNullable = joinType === 'left' || joinType === 'full';
|
|
20
|
+
attributes.push(isNullable ? { ...attr, type: { ...attr.type, nullable: true } } : attr);
|
|
21
|
+
}
|
|
22
|
+
return attributes;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build the `RelationType` for a join result.
|
|
26
|
+
*
|
|
27
|
+
* Semi/anti joins return the left type shape. All other join types combine
|
|
28
|
+
* columns from both sides with appropriate nullable marking.
|
|
29
|
+
*/
|
|
30
|
+
export function buildJoinRelationType(leftType, rightType, joinType, keys) {
|
|
31
|
+
if (joinType === 'semi' || joinType === 'anti') {
|
|
32
|
+
return {
|
|
33
|
+
typeClass: 'relation',
|
|
34
|
+
columns: leftType.columns,
|
|
35
|
+
isSet: leftType.isSet,
|
|
36
|
+
isReadOnly: leftType.isReadOnly,
|
|
37
|
+
keys: leftType.keys,
|
|
38
|
+
rowConstraints: leftType.rowConstraints,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const combinedColumns = [
|
|
42
|
+
...leftType.columns.map(col => {
|
|
43
|
+
const isNullable = joinType === 'right' || joinType === 'full';
|
|
44
|
+
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
45
|
+
}),
|
|
46
|
+
...rightType.columns.map(col => {
|
|
47
|
+
const isNullable = joinType === 'left' || joinType === 'full';
|
|
48
|
+
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
49
|
+
}),
|
|
50
|
+
];
|
|
51
|
+
const isSet = (joinType === 'inner' || joinType === 'cross') &&
|
|
52
|
+
leftType.isSet && rightType.isSet;
|
|
53
|
+
return {
|
|
54
|
+
typeClass: 'relation',
|
|
55
|
+
columns: combinedColumns,
|
|
56
|
+
isSet,
|
|
57
|
+
isReadOnly: leftType.isReadOnly && rightType.isReadOnly,
|
|
58
|
+
keys: (keys ?? []),
|
|
59
|
+
rowConstraints: [...leftType.rowConstraints, ...rightType.rowConstraints],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Estimate the number of output rows for a join given the input cardinalities.
|
|
64
|
+
*/
|
|
65
|
+
export function estimateJoinRows(leftRows, rightRows, joinType) {
|
|
66
|
+
if (leftRows === undefined || rightRows === undefined)
|
|
67
|
+
return undefined;
|
|
68
|
+
switch (joinType) {
|
|
69
|
+
case 'cross':
|
|
70
|
+
return leftRows * rightRows;
|
|
71
|
+
case 'inner':
|
|
72
|
+
return Math.max(1, leftRows * rightRows * 0.1);
|
|
73
|
+
case 'left':
|
|
74
|
+
return leftRows;
|
|
75
|
+
case 'right':
|
|
76
|
+
return rightRows;
|
|
77
|
+
case 'full':
|
|
78
|
+
return leftRows + rightRows;
|
|
79
|
+
case 'semi':
|
|
80
|
+
case 'anti':
|
|
81
|
+
return Math.max(1, Math.floor(leftRows * 0.5));
|
|
82
|
+
default:
|
|
83
|
+
return leftRows * rightRows * 0.1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=join-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-utils.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { RelationType } from '../../common/datatype.js';
|
|
|
4
4
|
import type { Scope } from '../scopes/scope.js';
|
|
5
5
|
import type { JoinCapable, PredicateSourceCapable } from '../framework/characteristics.js';
|
|
6
6
|
import type { JoinType } from './join-node.js';
|
|
7
|
-
import type
|
|
7
|
+
import { type EquiJoinPair } from './join-utils.js';
|
|
8
8
|
/**
|
|
9
9
|
* Physical plan node implementing a merge join.
|
|
10
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/merge-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC9K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"merge-join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/merge-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC9K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAgE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGlH;;;;;;;;;GASG;AACH,qBAAa,aAAc,SAAQ,QAAS,YAAW,oBAAoB,EAAE,WAAW,EAAE,sBAAsB;IAM9G,sCAAsC;aACtB,IAAI,EAAE,kBAAkB;IACxC,uCAAuC;aACvB,KAAK,EAAE,kBAAkB;aACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;aAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;aACrC,iBAAiB,CAAC,EAAE,cAAc;IAClD,wDAAwD;aACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAf5D,SAAkB,QAAQ,0BAA0B;IACpD,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK;IACZ,sCAAsC;IACtB,IAAI,EAAE,kBAAkB;IACxC,uCAAuC;IACvB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;IAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;IACrC,iBAAiB,CAAC,EAAE,cAAc,YAAA;IAClD,wDAAwD;IACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,YAAA;IAW5D,OAAO,CAAC,eAAe;IAOvB,aAAa,IAAI,SAAS,EAAE;IAI5B,OAAO,IAAI,YAAY;IAIvB,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+BpF,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,WAAW,IAAI,SAAS,QAAQ,EAAE;IAMlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAIjE,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAgCxD,WAAW,IAAI,QAAQ;IACvB,gBAAgB,IAAI,cAAc,GAAG,SAAS;IAC9C,aAAa,IAAI,kBAAkB;IACnC,cAAc,IAAI,kBAAkB;IACpC,eAAe,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS;IAGhD,aAAa,IAAI,SAAS,cAAc,EAAE;IAIjC,QAAQ,IAAI,MAAM;IAKlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAcxD"}
|