kysely 0.20.1 → 0.21.2
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 +7 -7
- 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/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/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/identifier-node.d.ts +2 -2
- package/dist/cjs/operation-node/identifier-node.js +2 -2
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +7 -5
- package/dist/cjs/operation-node/operation-node-transformer.js +24 -14
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +6 -4
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- 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/table-node.d.ts +2 -3
- package/dist/cjs/operation-node/table-node.js +3 -4
- package/dist/cjs/parser/group-by-parser.d.ts +4 -2
- 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 +71 -79
- package/dist/cjs/query-builder/select-query-builder.d.ts +3 -2
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +6 -3
- package/dist/cjs/schema/alter-table-builder.d.ts +6 -6
- package/dist/cjs/schema/column-definition-builder.d.ts +6 -6
- package/dist/esm/dialect/mysql/mysql-introspector.js +7 -7
- 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/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/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/identifier-node.d.ts +2 -2
- package/dist/esm/operation-node/identifier-node.js +2 -2
- package/dist/esm/operation-node/operation-node-transformer.d.ts +7 -5
- package/dist/esm/operation-node/operation-node-transformer.js +24 -14
- package/dist/esm/operation-node/operation-node-visitor.d.ts +6 -4
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- 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/table-node.d.ts +2 -3
- package/dist/esm/operation-node/table-node.js +3 -4
- package/dist/esm/parser/group-by-parser.d.ts +4 -2
- 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 +71 -79
- package/dist/esm/query-builder/select-query-builder.d.ts +3 -2
- package/dist/esm/query-builder/select-query-builder.js +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +6 -3
- package/dist/esm/schema/alter-table-builder.d.ts +6 -6
- package/dist/esm/schema/column-definition-builder.d.ts +6 -6
- package/package.json +2 -1
|
@@ -69,6 +69,7 @@ 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
71
|
import { ExplainNode } from './explain-node.js';
|
|
72
|
+
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
72
73
|
/**
|
|
73
74
|
* Transforms an operation node tree into another one.
|
|
74
75
|
*
|
|
@@ -89,7 +90,7 @@ import { ExplainNode } from './explain-node.js';
|
|
|
89
90
|
*
|
|
90
91
|
* return {
|
|
91
92
|
* ...node,
|
|
92
|
-
*
|
|
93
|
+
* name: snakeCase(node.name),
|
|
93
94
|
* }
|
|
94
95
|
* }
|
|
95
96
|
* }
|
|
@@ -101,9 +102,9 @@ import { ExplainNode } from './explain-node.js';
|
|
|
101
102
|
export declare class OperationNodeTransformer {
|
|
102
103
|
#private;
|
|
103
104
|
protected readonly nodeStack: OperationNode[];
|
|
104
|
-
|
|
105
|
-
protected
|
|
106
|
-
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;
|
|
107
108
|
protected transformSelectQuery(node: SelectQueryNode): SelectQueryNode;
|
|
108
109
|
protected transformSelection(node: SelectionNode): SelectionNode;
|
|
109
110
|
protected transformColumn(node: ColumnNode): ColumnNode;
|
|
@@ -167,11 +168,12 @@ export declare class OperationNodeTransformer {
|
|
|
167
168
|
protected transformSelectModifier(node: SelectModifierNode): SelectModifierNode;
|
|
168
169
|
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
169
170
|
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
171
|
+
protected transformExplain(node: ExplainNode): ExplainNode;
|
|
172
|
+
protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
|
|
170
173
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
171
174
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
172
175
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
173
176
|
protected transformValue(node: ValueNode): ValueNode;
|
|
174
177
|
protected transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
|
|
175
178
|
protected transformOperator(node: OperatorNode): OperatorNode;
|
|
176
|
-
protected transformExplain(node: ExplainNode): ExplainNode;
|
|
177
179
|
}
|
|
@@ -21,7 +21,7 @@ import { requireAllProps } from '../util/require-all-props.js';
|
|
|
21
21
|
*
|
|
22
22
|
* return {
|
|
23
23
|
* ...node,
|
|
24
|
-
*
|
|
24
|
+
* name: snakeCase(node.name),
|
|
25
25
|
* }
|
|
26
26
|
* }
|
|
27
27
|
* }
|
|
@@ -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),
|
|
@@ -104,20 +105,23 @@ export class OperationNodeTransformer {
|
|
|
104
105
|
DropTypeNode: this.transformDropType.bind(this),
|
|
105
106
|
ExplainNode: this.transformExplain.bind(this),
|
|
106
107
|
});
|
|
107
|
-
transformNode
|
|
108
|
+
transformNode(node) {
|
|
108
109
|
if (!node) {
|
|
109
|
-
return
|
|
110
|
+
return node;
|
|
110
111
|
}
|
|
111
112
|
this.nodeStack.push(node);
|
|
112
|
-
const out = this
|
|
113
|
+
const out = this.transformNodeImpl(node);
|
|
113
114
|
this.nodeStack.pop();
|
|
114
115
|
return freeze(out);
|
|
115
|
-
}
|
|
116
|
+
}
|
|
117
|
+
transformNodeImpl(node) {
|
|
118
|
+
return this.#transformers[node.kind](node);
|
|
119
|
+
}
|
|
116
120
|
transformNodeList(list) {
|
|
117
121
|
if (!list) {
|
|
118
122
|
return list;
|
|
119
123
|
}
|
|
120
|
-
return freeze(list.map(this.transformNode));
|
|
124
|
+
return freeze(list.map((node) => this.transformNode(node)));
|
|
121
125
|
}
|
|
122
126
|
transformSelectQuery(node) {
|
|
123
127
|
return requireAllProps({
|
|
@@ -161,7 +165,6 @@ export class OperationNodeTransformer {
|
|
|
161
165
|
transformTable(node) {
|
|
162
166
|
return requireAllProps({
|
|
163
167
|
kind: 'TableNode',
|
|
164
|
-
schema: this.transformNode(node.schema),
|
|
165
168
|
table: this.transformNode(node.table),
|
|
166
169
|
});
|
|
167
170
|
}
|
|
@@ -625,6 +628,20 @@ export class OperationNodeTransformer {
|
|
|
625
628
|
ifExists: node.ifExists,
|
|
626
629
|
});
|
|
627
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
|
+
}
|
|
628
645
|
transformDataType(node) {
|
|
629
646
|
// An Object.freezed leaf node. No need to clone.
|
|
630
647
|
return node;
|
|
@@ -649,11 +666,4 @@ export class OperationNodeTransformer {
|
|
|
649
666
|
// An Object.freezed leaf node. No need to clone.
|
|
650
667
|
return node;
|
|
651
668
|
}
|
|
652
|
-
transformExplain(node) {
|
|
653
|
-
return requireAllProps({
|
|
654
|
-
kind: 'ExplainNode',
|
|
655
|
-
format: node.format,
|
|
656
|
-
options: this.transformNode(node.options),
|
|
657
|
-
});
|
|
658
|
-
}
|
|
659
669
|
}
|
|
@@ -69,6 +69,7 @@ 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
71
|
import { ExplainNode } from './explain-node.js';
|
|
72
|
+
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
72
73
|
export declare abstract class OperationNodeVisitor {
|
|
73
74
|
#private;
|
|
74
75
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -129,10 +130,11 @@ export declare abstract class OperationNodeVisitor {
|
|
|
129
130
|
protected abstract visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
|
|
130
131
|
protected abstract visitUnion(node: UnionNode): void;
|
|
131
132
|
protected abstract visitDataType(node: DataTypeNode): void;
|
|
132
|
-
protected abstract visitSelectAll(
|
|
133
|
-
protected abstract visitIdentifier(
|
|
134
|
-
protected abstract
|
|
135
|
-
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;
|
|
136
138
|
protected abstract visitOperator(node: OperatorNode): void;
|
|
137
139
|
protected abstract visitCreateView(node: CreateViewNode): void;
|
|
138
140
|
protected abstract visitDropView(node: DropViewNode): void;
|
|
@@ -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),
|
|
@@ -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' | 'ExplainNode';
|
|
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
|
}
|
|
@@ -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
|
+
});
|
|
@@ -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
|
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
2
|
-
import {
|
|
3
|
-
export declare
|
|
2
|
+
import { ReferenceExpression } from './reference-parser.js';
|
|
3
|
+
export declare type GroupByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
|
|
4
|
+
export declare type GroupByExpressionOrList<DB, TB extends keyof DB, O> = ReadonlyArray<GroupByExpression<DB, TB, O>> | GroupByExpression<DB, TB, O>;
|
|
5
|
+
export declare function parseGroupBy(orderBy: GroupByExpressionOrList<any, any, any>): GroupByItemNode[];
|
|
@@ -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,111 @@
|
|
|
1
1
|
/// <reference types="./with-schema-transformer.d.ts" />
|
|
2
2
|
import { AliasNode } from '../../operation-node/alias-node.js';
|
|
3
|
+
import { IdentifierNode } from '../../operation-node/identifier-node.js';
|
|
3
4
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
5
|
+
import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
|
|
4
6
|
import { TableNode } from '../../operation-node/table-node.js';
|
|
7
|
+
import { freeze } from '../../util/object-utils.js';
|
|
8
|
+
// This object exist only so that we get a type error when a new RootOperationNode
|
|
9
|
+
// is added. If you get a type error here, make sure to add the new root node and
|
|
10
|
+
// handle it correctly in the transformer.
|
|
11
|
+
//
|
|
12
|
+
// DO NOT REFACTOR THIS EVEN IF IT SEEMS USELESS TO YOU!
|
|
13
|
+
const ROOT_OPERATION_NODES = freeze({
|
|
14
|
+
AlterTableNode: true,
|
|
15
|
+
CreateIndexNode: true,
|
|
16
|
+
CreateSchemaNode: true,
|
|
17
|
+
CreateTableNode: true,
|
|
18
|
+
CreateTypeNode: true,
|
|
19
|
+
CreateViewNode: true,
|
|
20
|
+
DeleteQueryNode: true,
|
|
21
|
+
DropIndexNode: true,
|
|
22
|
+
DropSchemaNode: true,
|
|
23
|
+
DropTableNode: true,
|
|
24
|
+
DropTypeNode: true,
|
|
25
|
+
DropViewNode: true,
|
|
26
|
+
InsertQueryNode: true,
|
|
27
|
+
RawNode: true,
|
|
28
|
+
SelectQueryNode: true,
|
|
29
|
+
UpdateQueryNode: true,
|
|
30
|
+
});
|
|
5
31
|
export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
6
32
|
#schema;
|
|
7
|
-
#
|
|
33
|
+
#schemableIds = new Set();
|
|
8
34
|
constructor(schema) {
|
|
9
35
|
super();
|
|
10
36
|
this.#schema = schema;
|
|
11
37
|
}
|
|
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));
|
|
38
|
+
transformNodeImpl(node) {
|
|
39
|
+
if (!this.#isRootOperationNode(node)) {
|
|
40
|
+
return super.transformNodeImpl(node);
|
|
41
|
+
}
|
|
42
|
+
const tables = this.#collectSchemableIds(node);
|
|
43
|
+
for (const table of tables) {
|
|
44
|
+
this.#schemableIds.add(table);
|
|
45
|
+
}
|
|
46
|
+
const transformed = super.transformNodeImpl(node);
|
|
47
|
+
for (const table of tables) {
|
|
48
|
+
this.#schemableIds.delete(table);
|
|
49
|
+
}
|
|
50
|
+
return transformed;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
-
const transformed = super.
|
|
53
|
-
if (transformed.schema || !this.#
|
|
52
|
+
transformSchemableIdentifier(node) {
|
|
53
|
+
const transformed = super.transformSchemableIdentifier(node);
|
|
54
|
+
if (transformed.schema || !this.#schemableIds.has(node.identifier.name)) {
|
|
54
55
|
return transformed;
|
|
55
56
|
}
|
|
56
57
|
return {
|
|
57
58
|
...transformed,
|
|
58
|
-
schema:
|
|
59
|
-
kind: 'IdentifierNode',
|
|
60
|
-
identifier: this.#schema,
|
|
61
|
-
},
|
|
59
|
+
schema: IdentifierNode.create(this.#schema),
|
|
62
60
|
};
|
|
63
61
|
}
|
|
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;
|
|
62
|
+
#isRootOperationNode(node) {
|
|
63
|
+
return node.kind in ROOT_OPERATION_NODES;
|
|
74
64
|
}
|
|
75
|
-
#
|
|
76
|
-
const
|
|
65
|
+
#collectSchemableIds(node) {
|
|
66
|
+
const schemableIds = new Set();
|
|
67
|
+
if ('name' in node && node.name && SchemableIdentifierNode.is(node.name)) {
|
|
68
|
+
this.#collectSchemableId(node.name, schemableIds);
|
|
69
|
+
}
|
|
77
70
|
if ('from' in node && node.from) {
|
|
78
|
-
|
|
71
|
+
for (const from of node.from.froms) {
|
|
72
|
+
this.#collectSchemableIdsFromTableExpr(from, schemableIds);
|
|
73
|
+
}
|
|
79
74
|
}
|
|
80
75
|
if ('into' in node && node.into) {
|
|
81
|
-
this.#
|
|
76
|
+
this.#collectSchemableIdsFromTableExpr(node.into, schemableIds);
|
|
82
77
|
}
|
|
83
78
|
if ('table' in node && node.table) {
|
|
84
|
-
this.#
|
|
79
|
+
this.#collectSchemableIdsFromTableExpr(node.table, schemableIds);
|
|
85
80
|
}
|
|
86
81
|
if ('joins' in node && node.joins) {
|
|
87
|
-
|
|
82
|
+
for (const join of node.joins) {
|
|
83
|
+
this.#collectSchemableIdsFromTableExpr(join.table, schemableIds);
|
|
84
|
+
}
|
|
88
85
|
}
|
|
89
86
|
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);
|
|
87
|
+
this.#removeCommonTableExpressionTables(node.with, schemableIds);
|
|
97
88
|
}
|
|
89
|
+
return schemableIds;
|
|
98
90
|
}
|
|
99
|
-
#
|
|
100
|
-
for (const node of nodes) {
|
|
101
|
-
this.#collectTablesFromTableExpressionNode(node.table, tables);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
#collectTablesFromTableExpressionNode(node, tables) {
|
|
91
|
+
#collectSchemableIdsFromTableExpr(node, schemableIds) {
|
|
105
92
|
const table = TableNode.is(node)
|
|
106
93
|
? node
|
|
107
94
|
: AliasNode.is(node) && TableNode.is(node.node)
|
|
108
95
|
? node.node
|
|
109
96
|
: null;
|
|
110
|
-
if (table
|
|
111
|
-
|
|
97
|
+
if (table) {
|
|
98
|
+
this.#collectSchemableId(table.table, schemableIds);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
#collectSchemableId(node, schemableIds) {
|
|
102
|
+
if (!this.#schemableIds.has(node.identifier.name)) {
|
|
103
|
+
schemableIds.add(node.identifier.name);
|
|
112
104
|
}
|
|
113
105
|
}
|
|
114
|
-
#removeCommonTableExpressionTables(node,
|
|
106
|
+
#removeCommonTableExpressionTables(node, schemableIds) {
|
|
115
107
|
for (const expr of node.expressions) {
|
|
116
|
-
|
|
108
|
+
schemableIds.delete(expr.name.table.table.identifier.name);
|
|
117
109
|
}
|
|
118
110
|
}
|
|
119
111
|
}
|
|
@@ -12,6 +12,7 @@ import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-b
|
|
|
12
12
|
import { Compilable } from '../util/compilable.js';
|
|
13
13
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
14
14
|
import { QueryId } from '../util/query-id.js';
|
|
15
|
+
import { GroupByExpression } from '../parser/group-by-parser.js';
|
|
15
16
|
import { UnionExpression } from '../parser/union-parser.js';
|
|
16
17
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
17
18
|
import { WhereInterface } from './where-interface.js';
|
|
@@ -1144,8 +1145,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
1144
1145
|
* group by "first_name"
|
|
1145
1146
|
* ```
|
|
1146
1147
|
*/
|
|
1147
|
-
groupBy(groupBy: ReadonlyArray<
|
|
1148
|
-
groupBy(groupBy:
|
|
1148
|
+
groupBy(groupBy: ReadonlyArray<GroupByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
|
|
1149
|
+
groupBy(groupBy: GroupByExpression<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
|
|
1149
1150
|
/**
|
|
1150
1151
|
* Adds a limit clause to the query.
|
|
1151
1152
|
*
|
|
@@ -11,7 +11,7 @@ import { preventAwait } from '../util/prevent-await.js';
|
|
|
11
11
|
import { LimitNode } from '../operation-node/limit-node.js';
|
|
12
12
|
import { OffsetNode } from '../operation-node/offset-node.js';
|
|
13
13
|
import { freeze } from '../util/object-utils.js';
|
|
14
|
-
import { parseGroupBy } from '../parser/group-by-parser.js';
|
|
14
|
+
import { parseGroupBy, } from '../parser/group-by-parser.js';
|
|
15
15
|
import { parseUnion } from '../parser/union-parser.js';
|
|
16
16
|
import { NoResultError } from './no-result-error.js';
|
|
17
17
|
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
@@ -72,6 +72,7 @@ import { SelectModifierNode } from '../operation-node/select-modifier-node.js';
|
|
|
72
72
|
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
73
73
|
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
74
74
|
import { ExplainNode } from '../operation-node/explain-node.js';
|
|
75
|
+
import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
|
|
75
76
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
76
77
|
#private;
|
|
77
78
|
protected get numParameters(): number;
|
|
@@ -106,6 +107,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
106
107
|
protected visitRaw(node: RawNode): void;
|
|
107
108
|
protected visitOperator(node: OperatorNode): void;
|
|
108
109
|
protected visitTable(node: TableNode): void;
|
|
110
|
+
protected visitSchemableIdentifier(node: SchemableIdentifierNode): void;
|
|
109
111
|
protected visitCreateTable(node: CreateTableNode): void;
|
|
110
112
|
protected visitColumnDefinition(node: ColumnDefinitionNode): void;
|
|
111
113
|
protected getAutoIncrement(): string;
|
|
@@ -237,10 +237,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
237
237
|
this.append(this.getRightIdentifierWrapper());
|
|
238
238
|
}
|
|
239
239
|
compileUnwrappedIdentifier(node) {
|
|
240
|
-
if (!isString(node.
|
|
240
|
+
if (!isString(node.name)) {
|
|
241
241
|
throw new Error('a non-string identifier was passed to compileUnwrappedIdentifier.');
|
|
242
242
|
}
|
|
243
|
-
this.append(this.sanitizeIdentifier(node.
|
|
243
|
+
this.append(this.sanitizeIdentifier(node.name));
|
|
244
244
|
}
|
|
245
245
|
visitFilter(node) {
|
|
246
246
|
if (node.left) {
|
|
@@ -316,11 +316,14 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
316
316
|
this.append(node.operator);
|
|
317
317
|
}
|
|
318
318
|
visitTable(node) {
|
|
319
|
+
this.visitNode(node.table);
|
|
320
|
+
}
|
|
321
|
+
visitSchemableIdentifier(node) {
|
|
319
322
|
if (node.schema) {
|
|
320
323
|
this.visitNode(node.schema);
|
|
321
324
|
this.append('.');
|
|
322
325
|
}
|
|
323
|
-
this.visitNode(node.
|
|
326
|
+
this.visitNode(node.identifier);
|
|
324
327
|
}
|
|
325
328
|
visitCreateTable(node) {
|
|
326
329
|
this.append('create ');
|
|
@@ -92,7 +92,7 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
|
|
|
92
92
|
* Makes the column the primary key.
|
|
93
93
|
*
|
|
94
94
|
* If you want to specify a composite primary key use the
|
|
95
|
-
* {@link
|
|
95
|
+
* {@link CreateTableBuilder.addPrimaryKeyConstraint} method.
|
|
96
96
|
*/
|
|
97
97
|
primaryKey(): AlterTableAddColumnBuilder;
|
|
98
98
|
/**
|
|
@@ -100,7 +100,7 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
|
|
|
100
100
|
*
|
|
101
101
|
* If your database engine doesn't support foreign key constraints in the
|
|
102
102
|
* column definition (like MySQL 5) you need to call the table level
|
|
103
|
-
* {@link
|
|
103
|
+
* {@link CreateTableBuilder.addForeignKeyConstraint} method instead.
|
|
104
104
|
*
|
|
105
105
|
* ### Examples
|
|
106
106
|
*
|
|
@@ -114,7 +114,7 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
|
|
|
114
114
|
*
|
|
115
115
|
* If your database engine doesn't support foreign key constraints in the
|
|
116
116
|
* column definition (like MySQL 5) you need to call the table level
|
|
117
|
-
* {@link
|
|
117
|
+
* {@link CreateTableBuilder.addForeignKeyConstraint} method instead.
|
|
118
118
|
*
|
|
119
119
|
* ### Examples
|
|
120
120
|
*
|
|
@@ -258,7 +258,7 @@ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBu
|
|
|
258
258
|
* Makes the column the primary key.
|
|
259
259
|
*
|
|
260
260
|
* If you want to specify a composite primary key use the
|
|
261
|
-
* {@link
|
|
261
|
+
* {@link CreateTableBuilder.addPrimaryKeyConstraint} method.
|
|
262
262
|
*/
|
|
263
263
|
primaryKey(): AlterTableModifyColumnBuilder;
|
|
264
264
|
/**
|
|
@@ -266,7 +266,7 @@ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBu
|
|
|
266
266
|
*
|
|
267
267
|
* If your database engine doesn't support foreign key constraints in the
|
|
268
268
|
* column definition (like MySQL 5) you need to call the table level
|
|
269
|
-
* {@link
|
|
269
|
+
* {@link CreateTableBuilder.addForeignKeyConstraint} method instead.
|
|
270
270
|
*
|
|
271
271
|
* ### Examples
|
|
272
272
|
*
|
|
@@ -280,7 +280,7 @@ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBu
|
|
|
280
280
|
*
|
|
281
281
|
* If your database engine doesn't support foreign key constraints in the
|
|
282
282
|
* column definition (like MySQL 5) you need to call the table level
|
|
283
|
-
* {@link
|
|
283
|
+
* {@link CreateTableBuilder.addForeignKeyConstraint} method instead.
|
|
284
284
|
*
|
|
285
285
|
* ### Examples
|
|
286
286
|
*
|