kysely 0.19.12 → 0.21.0
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/README.md +1 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +5 -12
- package/dist/cjs/dialect/postgres/postgres-driver.js +16 -11
- package/dist/cjs/dialect/postgres/postgres-introspector.js +17 -9
- package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +6 -1
- package/dist/cjs/operation-node/create-table-node.js +16 -0
- package/dist/cjs/operation-node/create-type-node.d.ts +2 -2
- package/dist/cjs/operation-node/create-type-node.js +2 -2
- package/dist/cjs/operation-node/create-view-node.d.ts +2 -2
- package/dist/cjs/operation-node/create-view-node.js +2 -2
- package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/delete-query-node.js +6 -0
- package/dist/cjs/operation-node/drop-index-node.d.ts +2 -2
- package/dist/cjs/operation-node/drop-index-node.js +2 -2
- package/dist/cjs/operation-node/drop-type-node.d.ts +2 -2
- package/dist/cjs/operation-node/drop-type-node.js +2 -2
- package/dist/cjs/operation-node/drop-view-node.d.ts +2 -2
- package/dist/cjs/operation-node/drop-view-node.js +2 -2
- package/dist/cjs/operation-node/explain-node.d.ts +16 -0
- package/dist/cjs/operation-node/explain-node.js +19 -0
- package/dist/cjs/operation-node/identifier-node.d.ts +2 -2
- package/dist/cjs/operation-node/identifier-node.js +2 -2
- package/dist/cjs/operation-node/insert-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +7 -3
- package/dist/cjs/operation-node/operation-node-transformer.js +30 -6
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +8 -4
- package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/reference-node.d.ts +1 -1
- package/dist/cjs/operation-node/reference-node.js +1 -2
- package/dist/cjs/operation-node/schemable-identifier-node.d.ts +15 -0
- package/dist/cjs/operation-node/schemable-identifier-node.js +26 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/selection-node.d.ts +2 -1
- package/dist/cjs/operation-node/table-node.d.ts +2 -3
- package/dist/cjs/operation-node/table-node.js +3 -4
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/update-query-node.js +6 -0
- package/dist/cjs/parser/select-parser.js +2 -1
- package/dist/cjs/plugin/camel-case/camel-case-transformer.js +1 -1
- package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -28
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +72 -78
- package/dist/cjs/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/cjs/query-builder/delete-query-builder.js +24 -0
- package/dist/cjs/query-builder/function-builder.d.ts +3 -3
- package/dist/cjs/query-builder/insert-query-builder.d.ts +20 -2
- package/dist/cjs/query-builder/insert-query-builder.js +26 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +38 -1
- package/dist/cjs/query-builder/select-query-builder.js +45 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +20 -1
- package/dist/cjs/query-builder/update-query-builder.js +25 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +8 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +63 -5
- package/dist/cjs/raw-builder/sql.d.ts +96 -96
- package/dist/cjs/raw-builder/sql.js +0 -96
- package/dist/cjs/schema/alter-table-builder.d.ts +6 -6
- package/dist/cjs/schema/column-definition-builder.d.ts +6 -6
- package/dist/cjs/schema/create-table-builder.d.ts +54 -0
- package/dist/cjs/schema/create-table-builder.js +64 -0
- package/dist/cjs/util/explainable.d.ts +5 -0
- package/dist/cjs/util/explainable.js +2 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +5 -12
- package/dist/esm/dialect/postgres/postgres-driver.js +16 -11
- package/dist/esm/dialect/postgres/postgres-introspector.js +17 -9
- package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/operation-node/create-table-node.d.ts +6 -1
- package/dist/esm/operation-node/create-table-node.js +16 -0
- package/dist/esm/operation-node/create-type-node.d.ts +2 -2
- package/dist/esm/operation-node/create-type-node.js +2 -2
- package/dist/esm/operation-node/create-view-node.d.ts +2 -2
- package/dist/esm/operation-node/create-view-node.js +2 -2
- package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
- package/dist/esm/operation-node/delete-query-node.js +6 -0
- package/dist/esm/operation-node/drop-index-node.d.ts +2 -2
- package/dist/esm/operation-node/drop-index-node.js +2 -2
- package/dist/esm/operation-node/drop-type-node.d.ts +2 -2
- package/dist/esm/operation-node/drop-type-node.js +2 -2
- package/dist/esm/operation-node/drop-view-node.d.ts +2 -2
- package/dist/esm/operation-node/drop-view-node.js +2 -2
- package/dist/esm/operation-node/explain-node.d.ts +16 -0
- package/dist/esm/operation-node/explain-node.js +17 -0
- package/dist/esm/operation-node/identifier-node.d.ts +2 -2
- package/dist/esm/operation-node/identifier-node.js +2 -2
- package/dist/esm/operation-node/insert-query-node.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +7 -3
- package/dist/esm/operation-node/operation-node-transformer.js +30 -6
- package/dist/esm/operation-node/operation-node-visitor.d.ts +8 -4
- package/dist/esm/operation-node/operation-node-visitor.js +2 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/reference-node.d.ts +1 -1
- package/dist/esm/operation-node/reference-node.js +1 -2
- package/dist/esm/operation-node/schemable-identifier-node.d.ts +15 -0
- package/dist/esm/operation-node/schemable-identifier-node.js +24 -0
- package/dist/esm/operation-node/select-query-node.d.ts +3 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/selection-node.d.ts +2 -1
- package/dist/esm/operation-node/table-node.d.ts +2 -3
- package/dist/esm/operation-node/table-node.js +3 -4
- package/dist/esm/operation-node/update-query-node.d.ts +3 -0
- package/dist/esm/operation-node/update-query-node.js +6 -0
- package/dist/esm/parser/select-parser.js +2 -1
- package/dist/esm/plugin/camel-case/camel-case-transformer.js +1 -1
- package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -28
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +72 -78
- package/dist/esm/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/esm/query-builder/delete-query-builder.js +24 -0
- package/dist/esm/query-builder/function-builder.d.ts +3 -3
- package/dist/esm/query-builder/insert-query-builder.d.ts +20 -2
- package/dist/esm/query-builder/insert-query-builder.js +26 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +38 -1
- package/dist/esm/query-builder/select-query-builder.js +45 -2
- package/dist/esm/query-builder/update-query-builder.d.ts +20 -1
- package/dist/esm/query-builder/update-query-builder.js +25 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +8 -0
- package/dist/esm/query-compiler/default-query-compiler.js +63 -5
- package/dist/esm/raw-builder/sql.d.ts +96 -96
- package/dist/esm/raw-builder/sql.js +0 -96
- package/dist/esm/schema/alter-table-builder.d.ts +6 -6
- package/dist/esm/schema/column-definition-builder.d.ts +6 -6
- package/dist/esm/schema/create-table-builder.d.ts +54 -0
- package/dist/esm/schema/create-table-builder.js +64 -0
- package/dist/esm/util/explainable.d.ts +5 -0
- package/dist/esm/util/explainable.js +2 -0
- package/package.json +4 -1
|
@@ -68,6 +68,8 @@ import { ValuesNode } from './values-node.js';
|
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
69
|
import { CreateTypeNode } from './create-type-node.js';
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
|
+
import { ExplainNode } from './explain-node.js';
|
|
72
|
+
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
71
73
|
/**
|
|
72
74
|
* Transforms an operation node tree into another one.
|
|
73
75
|
*
|
|
@@ -100,9 +102,9 @@ import { DropTypeNode } from './drop-type-node.js';
|
|
|
100
102
|
export declare class OperationNodeTransformer {
|
|
101
103
|
#private;
|
|
102
104
|
protected readonly nodeStack: OperationNode[];
|
|
103
|
-
|
|
104
|
-
protected
|
|
105
|
-
protected transformNodeList<T extends OperationNode
|
|
105
|
+
transformNode<T extends OperationNode | undefined>(node: T): T;
|
|
106
|
+
protected transformNodeImpl<T extends OperationNode>(node: T): T;
|
|
107
|
+
protected transformNodeList<T extends ReadonlyArray<OperationNode> | undefined>(list: T): T;
|
|
106
108
|
protected transformSelectQuery(node: SelectQueryNode): SelectQueryNode;
|
|
107
109
|
protected transformSelection(node: SelectionNode): SelectionNode;
|
|
108
110
|
protected transformColumn(node: ColumnNode): ColumnNode;
|
|
@@ -166,6 +168,8 @@ export declare class OperationNodeTransformer {
|
|
|
166
168
|
protected transformSelectModifier(node: SelectModifierNode): SelectModifierNode;
|
|
167
169
|
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
168
170
|
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
171
|
+
protected transformExplain(node: ExplainNode): ExplainNode;
|
|
172
|
+
protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
|
|
169
173
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
170
174
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
171
175
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -36,6 +36,7 @@ export class OperationNodeTransformer {
|
|
|
36
36
|
AliasNode: this.transformAlias.bind(this),
|
|
37
37
|
ColumnNode: this.transformColumn.bind(this),
|
|
38
38
|
IdentifierNode: this.transformIdentifier.bind(this),
|
|
39
|
+
SchemableIdentifierNode: this.transformSchemableIdentifier.bind(this),
|
|
39
40
|
RawNode: this.transformRaw.bind(this),
|
|
40
41
|
ReferenceNode: this.transformReference.bind(this),
|
|
41
42
|
SelectQueryNode: this.transformSelectQuery.bind(this),
|
|
@@ -102,21 +103,25 @@ export class OperationNodeTransformer {
|
|
|
102
103
|
SelectModifierNode: this.transformSelectModifier.bind(this),
|
|
103
104
|
CreateTypeNode: this.transformCreateType.bind(this),
|
|
104
105
|
DropTypeNode: this.transformDropType.bind(this),
|
|
106
|
+
ExplainNode: this.transformExplain.bind(this),
|
|
105
107
|
});
|
|
106
|
-
transformNode
|
|
108
|
+
transformNode(node) {
|
|
107
109
|
if (!node) {
|
|
108
|
-
return
|
|
110
|
+
return node;
|
|
109
111
|
}
|
|
110
112
|
this.nodeStack.push(node);
|
|
111
|
-
const out = this
|
|
113
|
+
const out = this.transformNodeImpl(node);
|
|
112
114
|
this.nodeStack.pop();
|
|
113
115
|
return freeze(out);
|
|
114
|
-
}
|
|
116
|
+
}
|
|
117
|
+
transformNodeImpl(node) {
|
|
118
|
+
return this.#transformers[node.kind](node);
|
|
119
|
+
}
|
|
115
120
|
transformNodeList(list) {
|
|
116
121
|
if (!list) {
|
|
117
122
|
return list;
|
|
118
123
|
}
|
|
119
|
-
return freeze(list.map(this.transformNode));
|
|
124
|
+
return freeze(list.map((node) => this.transformNode(node)));
|
|
120
125
|
}
|
|
121
126
|
transformSelectQuery(node) {
|
|
122
127
|
return requireAllProps({
|
|
@@ -135,6 +140,7 @@ export class OperationNodeTransformer {
|
|
|
135
140
|
with: this.transformNode(node.with),
|
|
136
141
|
having: this.transformNode(node.having),
|
|
137
142
|
union: this.transformNodeList(node.union),
|
|
143
|
+
explain: this.transformNode(node.explain),
|
|
138
144
|
});
|
|
139
145
|
}
|
|
140
146
|
transformSelection(node) {
|
|
@@ -159,7 +165,6 @@ export class OperationNodeTransformer {
|
|
|
159
165
|
transformTable(node) {
|
|
160
166
|
return requireAllProps({
|
|
161
167
|
kind: 'TableNode',
|
|
162
|
-
schema: this.transformNode(node.schema),
|
|
163
168
|
table: this.transformNode(node.table),
|
|
164
169
|
});
|
|
165
170
|
}
|
|
@@ -243,6 +248,7 @@ export class OperationNodeTransformer {
|
|
|
243
248
|
with: this.transformNode(node.with),
|
|
244
249
|
ignore: node.ignore,
|
|
245
250
|
replace: node.replace,
|
|
251
|
+
explain: this.transformNode(node.explain),
|
|
246
252
|
});
|
|
247
253
|
}
|
|
248
254
|
transformValues(node) {
|
|
@@ -261,6 +267,7 @@ export class OperationNodeTransformer {
|
|
|
261
267
|
with: this.transformNode(node.with),
|
|
262
268
|
orderBy: this.transformNode(node.orderBy),
|
|
263
269
|
limit: this.transformNode(node.limit),
|
|
270
|
+
explain: this.transformNode(node.explain),
|
|
264
271
|
});
|
|
265
272
|
}
|
|
266
273
|
transformReturning(node) {
|
|
@@ -278,6 +285,8 @@ export class OperationNodeTransformer {
|
|
|
278
285
|
temporary: node.temporary,
|
|
279
286
|
ifNotExists: node.ifNotExists,
|
|
280
287
|
onCommit: node.onCommit,
|
|
288
|
+
frontModifiers: this.transformNodeList(node.frontModifiers),
|
|
289
|
+
endModifiers: this.transformNodeList(node.endModifiers),
|
|
281
290
|
});
|
|
282
291
|
}
|
|
283
292
|
transformColumnDefinition(node) {
|
|
@@ -344,6 +353,7 @@ export class OperationNodeTransformer {
|
|
|
344
353
|
updates: this.transformNodeList(node.updates),
|
|
345
354
|
returning: this.transformNode(node.returning),
|
|
346
355
|
with: this.transformNode(node.with),
|
|
356
|
+
explain: this.transformNode(node.explain),
|
|
347
357
|
});
|
|
348
358
|
}
|
|
349
359
|
transformColumnUpdate(node) {
|
|
@@ -618,6 +628,20 @@ export class OperationNodeTransformer {
|
|
|
618
628
|
ifExists: node.ifExists,
|
|
619
629
|
});
|
|
620
630
|
}
|
|
631
|
+
transformExplain(node) {
|
|
632
|
+
return requireAllProps({
|
|
633
|
+
kind: 'ExplainNode',
|
|
634
|
+
format: node.format,
|
|
635
|
+
options: this.transformNode(node.options),
|
|
636
|
+
});
|
|
637
|
+
}
|
|
638
|
+
transformSchemableIdentifier(node) {
|
|
639
|
+
return requireAllProps({
|
|
640
|
+
kind: 'SchemableIdentifierNode',
|
|
641
|
+
schema: this.transformNode(node.schema),
|
|
642
|
+
identifier: this.transformNode(node.identifier),
|
|
643
|
+
});
|
|
644
|
+
}
|
|
621
645
|
transformDataType(node) {
|
|
622
646
|
// An Object.freezed leaf node. No need to clone.
|
|
623
647
|
return node;
|
|
@@ -68,6 +68,8 @@ import { ValuesNode } from './values-node.js';
|
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
69
|
import { CreateTypeNode } from './create-type-node.js';
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
|
+
import { ExplainNode } from './explain-node.js';
|
|
72
|
+
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
71
73
|
export declare abstract class OperationNodeVisitor {
|
|
72
74
|
#private;
|
|
73
75
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -128,10 +130,11 @@ export declare abstract class OperationNodeVisitor {
|
|
|
128
130
|
protected abstract visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
|
|
129
131
|
protected abstract visitUnion(node: UnionNode): void;
|
|
130
132
|
protected abstract visitDataType(node: DataTypeNode): void;
|
|
131
|
-
protected abstract visitSelectAll(
|
|
132
|
-
protected abstract visitIdentifier(
|
|
133
|
-
protected abstract
|
|
134
|
-
protected abstract
|
|
133
|
+
protected abstract visitSelectAll(node: SelectAllNode): void;
|
|
134
|
+
protected abstract visitIdentifier(node: IdentifierNode): void;
|
|
135
|
+
protected abstract visitSchemableIdentifier(node: SchemableIdentifierNode): void;
|
|
136
|
+
protected abstract visitValue(node: ValueNode): void;
|
|
137
|
+
protected abstract visitPrimitiveValueList(node: PrimitiveValueListNode): void;
|
|
135
138
|
protected abstract visitOperator(node: OperatorNode): void;
|
|
136
139
|
protected abstract visitCreateView(node: CreateViewNode): void;
|
|
137
140
|
protected abstract visitDropView(node: DropViewNode): void;
|
|
@@ -142,4 +145,5 @@ export declare abstract class OperationNodeVisitor {
|
|
|
142
145
|
protected abstract visitSelectModifier(node: SelectModifierNode): void;
|
|
143
146
|
protected abstract visitCreateType(node: CreateTypeNode): void;
|
|
144
147
|
protected abstract visitDropType(node: DropTypeNode): void;
|
|
148
|
+
protected abstract visitExplain(node: ExplainNode): void;
|
|
145
149
|
}
|
|
@@ -9,6 +9,7 @@ export class OperationNodeVisitor {
|
|
|
9
9
|
AliasNode: this.visitAlias.bind(this),
|
|
10
10
|
ColumnNode: this.visitColumn.bind(this),
|
|
11
11
|
IdentifierNode: this.visitIdentifier.bind(this),
|
|
12
|
+
SchemableIdentifierNode: this.visitSchemableIdentifier.bind(this),
|
|
12
13
|
RawNode: this.visitRaw.bind(this),
|
|
13
14
|
ReferenceNode: this.visitReference.bind(this),
|
|
14
15
|
SelectQueryNode: this.visitSelectQuery.bind(this),
|
|
@@ -75,6 +76,7 @@ export class OperationNodeVisitor {
|
|
|
75
76
|
SelectModifierNode: this.visitSelectModifier.bind(this),
|
|
76
77
|
CreateTypeNode: this.visitCreateType.bind(this),
|
|
77
78
|
DropTypeNode: this.visitDropType.bind(this),
|
|
79
|
+
ExplainNode: this.visitExplain.bind(this),
|
|
78
80
|
});
|
|
79
81
|
visitNode = (node) => {
|
|
80
82
|
this.nodeStack.push(node);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type OperationNodeKind = 'IdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode';
|
|
1
|
+
export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -13,5 +13,5 @@ export interface ReferenceNode extends OperationNode {
|
|
|
13
13
|
export declare const ReferenceNode: Readonly<{
|
|
14
14
|
is(node: OperationNode): node is ReferenceNode;
|
|
15
15
|
create(table: TableNode, column: ColumnNode): ReferenceNode;
|
|
16
|
-
createSelectAll(table:
|
|
16
|
+
createSelectAll(table: TableNode): ReferenceNode;
|
|
17
17
|
}>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/// <reference types="./reference-node.d.ts" />
|
|
2
|
-
import { TableNode } from './table-node.js';
|
|
3
2
|
import { SelectAllNode } from './select-all-node.js';
|
|
4
3
|
import { freeze } from '../util/object-utils.js';
|
|
5
4
|
/**
|
|
@@ -19,7 +18,7 @@ export const ReferenceNode = freeze({
|
|
|
19
18
|
createSelectAll(table) {
|
|
20
19
|
return freeze({
|
|
21
20
|
kind: 'ReferenceNode',
|
|
22
|
-
table
|
|
21
|
+
table,
|
|
23
22
|
column: SelectAllNode.create(),
|
|
24
23
|
});
|
|
25
24
|
},
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export interface SchemableIdentifierNode extends OperationNode {
|
|
4
|
+
readonly kind: 'SchemableIdentifierNode';
|
|
5
|
+
readonly schema?: IdentifierNode;
|
|
6
|
+
readonly identifier: IdentifierNode;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare const SchemableIdentifierNode: Readonly<{
|
|
12
|
+
is(node: OperationNode): node is SchemableIdentifierNode;
|
|
13
|
+
create(identifier: string): SchemableIdentifierNode;
|
|
14
|
+
createWithSchema(schema: string, identifier: string): SchemableIdentifierNode;
|
|
15
|
+
}>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="./schemable-identifier-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export const SchemableIdentifierNode = freeze({
|
|
8
|
+
is(node) {
|
|
9
|
+
return node.kind === 'SchemableIdentifierNode';
|
|
10
|
+
},
|
|
11
|
+
create(identifier) {
|
|
12
|
+
return freeze({
|
|
13
|
+
kind: 'SchemableIdentifierNode',
|
|
14
|
+
identifier: IdentifierNode.create(identifier),
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
createWithSchema(schema, identifier) {
|
|
18
|
+
return freeze({
|
|
19
|
+
kind: 'SchemableIdentifierNode',
|
|
20
|
+
schema: IdentifierNode.create(schema),
|
|
21
|
+
identifier: IdentifierNode.create(identifier),
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
});
|
|
@@ -14,6 +14,7 @@ import { WhereNode } from './where-node.js';
|
|
|
14
14
|
import { WithNode } from './with-node.js';
|
|
15
15
|
import { UnionNode } from './union-node.js';
|
|
16
16
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
17
|
+
import { ExplainNode } from './explain-node.js';
|
|
17
18
|
export interface SelectQueryNode extends OperationNode {
|
|
18
19
|
readonly kind: 'SelectQueryNode';
|
|
19
20
|
readonly from: FromNode;
|
|
@@ -30,6 +31,7 @@ export interface SelectQueryNode extends OperationNode {
|
|
|
30
31
|
readonly with?: WithNode;
|
|
31
32
|
readonly having?: HavingNode;
|
|
32
33
|
readonly union?: ReadonlyArray<UnionNode>;
|
|
34
|
+
readonly explain?: ExplainNode;
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
35
37
|
* @internal
|
|
@@ -48,4 +50,5 @@ export declare const SelectQueryNode: Readonly<{
|
|
|
48
50
|
cloneWithHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
|
|
49
51
|
cloneWithOrHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
|
|
50
52
|
cloneWithUnion(selectNode: SelectQueryNode, union: UnionNode): SelectQueryNode;
|
|
53
|
+
cloneWithExplain(selectNode: SelectQueryNode, explain: ExplainNode): SelectQueryNode;
|
|
51
54
|
}>;
|
|
@@ -3,6 +3,7 @@ import { ColumnNode } from './column-node.js';
|
|
|
3
3
|
import { OperationNode } from './operation-node.js';
|
|
4
4
|
import { ReferenceNode } from './reference-node.js';
|
|
5
5
|
import { SelectAllNode } from './select-all-node.js';
|
|
6
|
+
import { TableNode } from './table-node.js';
|
|
6
7
|
declare type SelectionNodeChild = ColumnNode | ReferenceNode | AliasNode | SelectAllNode;
|
|
7
8
|
export interface SelectionNode extends OperationNode {
|
|
8
9
|
readonly kind: 'SelectionNode';
|
|
@@ -15,6 +16,6 @@ export declare const SelectionNode: Readonly<{
|
|
|
15
16
|
is(node: OperationNode): node is SelectionNode;
|
|
16
17
|
create(selection: SelectionNodeChild): SelectionNode;
|
|
17
18
|
createSelectAll(): SelectionNode;
|
|
18
|
-
createSelectAllFromTable(table:
|
|
19
|
+
createSelectAllFromTable(table: TableNode): SelectionNode;
|
|
19
20
|
}>;
|
|
20
21
|
export {};
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { IdentifierNode } from './identifier-node.js';
|
|
2
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
+
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
3
3
|
export interface TableNode extends OperationNode {
|
|
4
4
|
readonly kind: 'TableNode';
|
|
5
|
-
readonly
|
|
6
|
-
readonly table: IdentifierNode;
|
|
5
|
+
readonly table: SchemableIdentifierNode;
|
|
7
6
|
}
|
|
8
7
|
/**
|
|
9
8
|
* @internal
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="./table-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
@@ -11,14 +11,13 @@ export const TableNode = freeze({
|
|
|
11
11
|
create(table) {
|
|
12
12
|
return freeze({
|
|
13
13
|
kind: 'TableNode',
|
|
14
|
-
table:
|
|
14
|
+
table: SchemableIdentifierNode.create(table),
|
|
15
15
|
});
|
|
16
16
|
},
|
|
17
17
|
createWithSchema(schema, table) {
|
|
18
18
|
return freeze({
|
|
19
19
|
kind: 'TableNode',
|
|
20
|
-
|
|
21
|
-
table: IdentifierNode.create(table),
|
|
20
|
+
table: SchemableIdentifierNode.createWithSchema(schema, table),
|
|
22
21
|
});
|
|
23
22
|
},
|
|
24
23
|
});
|
|
@@ -8,6 +8,7 @@ import { ValueListNode } from './value-list-node.js';
|
|
|
8
8
|
import { WhereNode } from './where-node.js';
|
|
9
9
|
import { WithNode } from './with-node.js';
|
|
10
10
|
import { FromNode } from './from-node.js';
|
|
11
|
+
import { ExplainNode } from './explain-node.js';
|
|
11
12
|
export declare type UpdateValuesNode = ValueListNode | PrimitiveValueListNode;
|
|
12
13
|
export interface UpdateQueryNode extends OperationNode {
|
|
13
14
|
readonly kind: 'UpdateQueryNode';
|
|
@@ -18,6 +19,7 @@ export interface UpdateQueryNode extends OperationNode {
|
|
|
18
19
|
readonly updates?: ReadonlyArray<ColumnUpdateNode>;
|
|
19
20
|
readonly returning?: ReturningNode;
|
|
20
21
|
readonly with?: WithNode;
|
|
22
|
+
readonly explain?: ExplainNode;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* @internal
|
|
@@ -27,4 +29,5 @@ export declare const UpdateQueryNode: Readonly<{
|
|
|
27
29
|
create(table: TableExpressionNode, withNode?: WithNode): UpdateQueryNode;
|
|
28
30
|
cloneWithFromItems(updateQuery: UpdateQueryNode, fromItems: ReadonlyArray<TableExpressionNode>): UpdateQueryNode;
|
|
29
31
|
cloneWithUpdates(updateQuery: UpdateQueryNode, updates: ReadonlyArray<ColumnUpdateNode>): UpdateQueryNode;
|
|
32
|
+
cloneWithExplain(updateQuery: UpdateQueryNode, explain: ExplainNode): UpdateQueryNode;
|
|
30
33
|
}>;
|
|
@@ -4,6 +4,7 @@ import { SelectionNode } from '../operation-node/selection-node.js';
|
|
|
4
4
|
import { parseAliasedStringReference } from './reference-parser.js';
|
|
5
5
|
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
|
|
7
|
+
import { parseTable } from './table-parser.js';
|
|
7
8
|
export function parseSelectExpressionOrList(selection) {
|
|
8
9
|
if (isReadonlyArray(selection)) {
|
|
9
10
|
return selection.map((it) => parseSelectExpression(it));
|
|
@@ -36,7 +37,7 @@ export function parseSelectAll(table) {
|
|
|
36
37
|
}
|
|
37
38
|
function parseSelectAllArg(table) {
|
|
38
39
|
if (isString(table)) {
|
|
39
|
-
return SelectionNode.createSelectAllFromTable(table);
|
|
40
|
+
return SelectionNode.createSelectAllFromTable(parseTable(table));
|
|
40
41
|
}
|
|
41
42
|
throw new Error(`invalid value selectAll expression: ${JSON.stringify(table)}`);
|
|
42
43
|
}
|
|
@@ -1,33 +1,9 @@
|
|
|
1
|
-
import { AlterTableNode } from '../../operation-node/alter-table-node.js';
|
|
2
|
-
import { CreateIndexNode } from '../../operation-node/create-index-node.js';
|
|
3
|
-
import { CreateTableNode } from '../../operation-node/create-table-node.js';
|
|
4
|
-
import { CreateTypeNode } from '../../operation-node/create-type-node.js';
|
|
5
|
-
import { CreateViewNode } from '../../operation-node/create-view-node.js';
|
|
6
|
-
import { DeleteQueryNode } from '../../operation-node/delete-query-node.js';
|
|
7
|
-
import { DropIndexNode } from '../../operation-node/drop-index-node.js';
|
|
8
|
-
import { DropTableNode } from '../../operation-node/drop-table-node.js';
|
|
9
|
-
import { DropTypeNode } from '../../operation-node/drop-type-node.js';
|
|
10
|
-
import { DropViewNode } from '../../operation-node/drop-view-node.js';
|
|
11
|
-
import { InsertQueryNode } from '../../operation-node/insert-query-node.js';
|
|
12
1
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { UpdateQueryNode } from '../../operation-node/update-query-node.js';
|
|
2
|
+
import { OperationNode } from '../../operation-node/operation-node.js';
|
|
3
|
+
import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
|
|
16
4
|
export declare class WithSchemaTransformer extends OperationNodeTransformer {
|
|
17
5
|
#private;
|
|
18
6
|
constructor(schema: string);
|
|
19
|
-
protected
|
|
20
|
-
protected
|
|
21
|
-
protected transformUpdateQuery(node: UpdateQueryNode): UpdateQueryNode;
|
|
22
|
-
protected transformDeleteQuery(node: DeleteQueryNode): DeleteQueryNode;
|
|
23
|
-
protected transformCreateTable(node: CreateTableNode): CreateTableNode;
|
|
24
|
-
protected transformDropTable(node: DropTableNode): DropTableNode;
|
|
25
|
-
protected transformCreateIndex(node: CreateIndexNode): CreateIndexNode;
|
|
26
|
-
protected transformDropIndex(node: DropIndexNode): DropIndexNode;
|
|
27
|
-
protected transformCreateView(node: CreateViewNode): CreateViewNode;
|
|
28
|
-
protected transformDropView(node: DropViewNode): DropViewNode;
|
|
29
|
-
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
30
|
-
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
31
|
-
protected transformAlterTable(node: AlterTableNode): AlterTableNode;
|
|
32
|
-
protected transformTable(node: TableNode): TableNode;
|
|
7
|
+
protected transformNodeImpl<T extends OperationNode>(node: T): T;
|
|
8
|
+
protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
|
|
33
9
|
}
|
|
@@ -1,119 +1,113 @@
|
|
|
1
1
|
/// <reference types="./with-schema-transformer.d.ts" />
|
|
2
2
|
import { AliasNode } from '../../operation-node/alias-node.js';
|
|
3
3
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
4
|
+
import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
|
|
4
5
|
import { TableNode } from '../../operation-node/table-node.js';
|
|
6
|
+
import { freeze } from '../../util/object-utils.js';
|
|
7
|
+
// This object exist only so that we get a type error when a new RootOperationNode
|
|
8
|
+
// is added. If you get a type error here, make sure to add the new root node and
|
|
9
|
+
// handle it correctly in the transformer.
|
|
10
|
+
//
|
|
11
|
+
// DO NOT REFACTOR THIS EVEN IF IT SEEMS USELESS TO YOU!
|
|
12
|
+
const ROOT_OPERATION_NODES = freeze({
|
|
13
|
+
AlterTableNode: true,
|
|
14
|
+
CreateIndexNode: true,
|
|
15
|
+
CreateSchemaNode: true,
|
|
16
|
+
CreateTableNode: true,
|
|
17
|
+
CreateTypeNode: true,
|
|
18
|
+
CreateViewNode: true,
|
|
19
|
+
DeleteQueryNode: true,
|
|
20
|
+
DropIndexNode: true,
|
|
21
|
+
DropSchemaNode: true,
|
|
22
|
+
DropTableNode: true,
|
|
23
|
+
DropTypeNode: true,
|
|
24
|
+
DropViewNode: true,
|
|
25
|
+
InsertQueryNode: true,
|
|
26
|
+
RawNode: true,
|
|
27
|
+
SelectQueryNode: true,
|
|
28
|
+
UpdateQueryNode: true,
|
|
29
|
+
});
|
|
5
30
|
export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
6
31
|
#schema;
|
|
7
|
-
#
|
|
32
|
+
#schemableIds = new Set();
|
|
8
33
|
constructor(schema) {
|
|
9
34
|
super();
|
|
10
35
|
this.#schema = schema;
|
|
11
36
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return this.#transformRoot(node, (node) => super.transformCreateTable(node));
|
|
26
|
-
}
|
|
27
|
-
transformDropTable(node) {
|
|
28
|
-
return this.#transformRoot(node, (node) => super.transformDropTable(node));
|
|
29
|
-
}
|
|
30
|
-
transformCreateIndex(node) {
|
|
31
|
-
return this.#transformRoot(node, (node) => super.transformCreateIndex(node));
|
|
32
|
-
}
|
|
33
|
-
transformDropIndex(node) {
|
|
34
|
-
return this.#transformRoot(node, (node) => super.transformDropIndex(node));
|
|
35
|
-
}
|
|
36
|
-
transformCreateView(node) {
|
|
37
|
-
return this.#transformRoot(node, (node) => super.transformCreateView(node));
|
|
38
|
-
}
|
|
39
|
-
transformDropView(node) {
|
|
40
|
-
return this.#transformRoot(node, (node) => super.transformDropView(node));
|
|
41
|
-
}
|
|
42
|
-
transformCreateType(node) {
|
|
43
|
-
return this.#transformRoot(node, (node) => super.transformCreateType(node));
|
|
44
|
-
}
|
|
45
|
-
transformDropType(node) {
|
|
46
|
-
return this.#transformRoot(node, (node) => super.transformDropType(node));
|
|
47
|
-
}
|
|
48
|
-
transformAlterTable(node) {
|
|
49
|
-
return this.#transformRoot(node, (node) => super.transformAlterTable(node));
|
|
37
|
+
transformNodeImpl(node) {
|
|
38
|
+
if (!this.#isRootOperationNode(node)) {
|
|
39
|
+
return super.transformNodeImpl(node);
|
|
40
|
+
}
|
|
41
|
+
const tables = this.#collectSchemableIds(node);
|
|
42
|
+
for (const table of tables) {
|
|
43
|
+
this.#schemableIds.add(table);
|
|
44
|
+
}
|
|
45
|
+
const transformed = super.transformNodeImpl(node);
|
|
46
|
+
for (const table of tables) {
|
|
47
|
+
this.#schemableIds.delete(table);
|
|
48
|
+
}
|
|
49
|
+
return transformed;
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
const transformed = super.
|
|
53
|
-
if (transformed.schema || !this.#
|
|
51
|
+
transformSchemableIdentifier(node) {
|
|
52
|
+
const transformed = super.transformSchemableIdentifier(node);
|
|
53
|
+
if (transformed.schema || !this.#schemableIds.has(node.identifier.name)) {
|
|
54
54
|
return transformed;
|
|
55
55
|
}
|
|
56
56
|
return {
|
|
57
57
|
...transformed,
|
|
58
|
-
schema: {
|
|
58
|
+
schema: freeze({
|
|
59
59
|
kind: 'IdentifierNode',
|
|
60
|
-
|
|
61
|
-
},
|
|
60
|
+
name: this.#schema,
|
|
61
|
+
}),
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
-
#
|
|
65
|
-
|
|
66
|
-
for (const table of tables) {
|
|
67
|
-
this.#tables.add(table);
|
|
68
|
-
}
|
|
69
|
-
const transformed = transform(node);
|
|
70
|
-
for (const table of tables) {
|
|
71
|
-
this.#tables.delete(table);
|
|
72
|
-
}
|
|
73
|
-
return transformed;
|
|
64
|
+
#isRootOperationNode(node) {
|
|
65
|
+
return node.kind in ROOT_OPERATION_NODES;
|
|
74
66
|
}
|
|
75
|
-
#
|
|
76
|
-
const
|
|
67
|
+
#collectSchemableIds(node) {
|
|
68
|
+
const schemableIds = new Set();
|
|
69
|
+
if ('name' in node && node.name && SchemableIdentifierNode.is(node.name)) {
|
|
70
|
+
this.#collectSchemableId(node.name, schemableIds);
|
|
71
|
+
}
|
|
77
72
|
if ('from' in node && node.from) {
|
|
78
|
-
|
|
73
|
+
for (const from of node.from.froms) {
|
|
74
|
+
this.#collectSchemableIdsFromTableExpr(from, schemableIds);
|
|
75
|
+
}
|
|
79
76
|
}
|
|
80
77
|
if ('into' in node && node.into) {
|
|
81
|
-
this.#
|
|
78
|
+
this.#collectSchemableIdsFromTableExpr(node.into, schemableIds);
|
|
82
79
|
}
|
|
83
80
|
if ('table' in node && node.table) {
|
|
84
|
-
this.#
|
|
81
|
+
this.#collectSchemableIdsFromTableExpr(node.table, schemableIds);
|
|
85
82
|
}
|
|
86
83
|
if ('joins' in node && node.joins) {
|
|
87
|
-
|
|
84
|
+
for (const join of node.joins) {
|
|
85
|
+
this.#collectSchemableIdsFromTableExpr(join.table, schemableIds);
|
|
86
|
+
}
|
|
88
87
|
}
|
|
89
88
|
if ('with' in node && node.with) {
|
|
90
|
-
this.#removeCommonTableExpressionTables(node.with,
|
|
91
|
-
}
|
|
92
|
-
return tables;
|
|
93
|
-
}
|
|
94
|
-
#collectTablesFromTableExpressionNodes(nodes, tables) {
|
|
95
|
-
for (const node of nodes) {
|
|
96
|
-
this.#collectTablesFromTableExpressionNode(node, tables);
|
|
89
|
+
this.#removeCommonTableExpressionTables(node.with, schemableIds);
|
|
97
90
|
}
|
|
91
|
+
return schemableIds;
|
|
98
92
|
}
|
|
99
|
-
#
|
|
100
|
-
for (const node of nodes) {
|
|
101
|
-
this.#collectTablesFromTableExpressionNode(node.table, tables);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
#collectTablesFromTableExpressionNode(node, tables) {
|
|
93
|
+
#collectSchemableIdsFromTableExpr(node, schemableIds) {
|
|
105
94
|
const table = TableNode.is(node)
|
|
106
95
|
? node
|
|
107
96
|
: AliasNode.is(node) && TableNode.is(node.node)
|
|
108
97
|
? node.node
|
|
109
98
|
: null;
|
|
110
|
-
if (table
|
|
111
|
-
|
|
99
|
+
if (table) {
|
|
100
|
+
this.#collectSchemableId(table.table, schemableIds);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
#collectSchemableId(node, schemableIds) {
|
|
104
|
+
if (!this.#schemableIds.has(node.identifier.name)) {
|
|
105
|
+
schemableIds.add(node.identifier.name);
|
|
112
106
|
}
|
|
113
107
|
}
|
|
114
|
-
#removeCommonTableExpressionTables(node,
|
|
108
|
+
#removeCommonTableExpressionTables(node, schemableIds) {
|
|
115
109
|
for (const expr of node.expressions) {
|
|
116
|
-
|
|
110
|
+
schemableIds.delete(expr.name.table.table.identifier.name);
|
|
117
111
|
}
|
|
118
112
|
}
|
|
119
113
|
}
|