kysely 0.19.9 → 0.19.10
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 +5 -4
- package/dist/cjs/operation-node/create-type-node.d.ts +17 -0
- package/dist/cjs/operation-node/create-type-node.js +27 -0
- package/dist/cjs/operation-node/drop-type-node.d.ts +16 -0
- package/dist/cjs/operation-node/drop-type-node.js +25 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +16 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
- 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/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +6 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +15 -0
- package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
- package/dist/cjs/schema/create-type-builder.d.ts +19 -0
- package/dist/cjs/schema/create-type-builder.js +29 -0
- package/dist/cjs/schema/drop-type-builder.d.ts +19 -0
- package/dist/cjs/schema/drop-type-builder.js +31 -0
- package/dist/cjs/schema/schema.d.ts +32 -0
- package/dist/cjs/schema/schema.js +46 -0
- package/dist/esm/operation-node/create-type-node.d.ts +17 -0
- package/dist/esm/operation-node/create-type-node.js +25 -0
- package/dist/esm/operation-node/drop-type-node.d.ts +16 -0
- package/dist/esm/operation-node/drop-type-node.js +23 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-transformer.js +16 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
- 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/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +6 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -0
- package/dist/esm/query-compiler/default-query-compiler.js +15 -0
- package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
- package/dist/esm/schema/create-type-builder.d.ts +19 -0
- package/dist/esm/schema/create-type-builder.js +26 -0
- package/dist/esm/schema/drop-type-builder.d.ts +19 -0
- package/dist/esm/schema/drop-type-builder.js +28 -0
- package/dist/esm/schema/schema.d.ts +32 -0
- package/dist/esm/schema/schema.js +46 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ Kysely makes sure you only refer to tables and columns that are visible to the p
|
|
|
15
15
|
you're writing. The result type only has the selected columns with correct types and aliases. As an
|
|
16
16
|
added bonus you get autocompletion for all that stuff.
|
|
17
17
|
|
|
18
|
-
As
|
|
18
|
+
As shown in the gif above, through the pure magic of modern typescript, Kysely is even able to parse
|
|
19
19
|
the alias given to `pet.name` and add the `pet_name` column to the result row type. Kysely is able to infer
|
|
20
20
|
column names, aliases and types from selected subqueries, joined subqueries, `with` statements and pretty
|
|
21
21
|
much anything you can think of.
|
|
@@ -213,10 +213,11 @@ export async function down(db: Kysely<any>): Promise<void> {
|
|
|
213
213
|
}
|
|
214
214
|
```
|
|
215
215
|
|
|
216
|
-
The `up` function is called when you update your database schema to next version and `down`
|
|
216
|
+
The `up` function is called when you update your database schema to the next version and `down`
|
|
217
217
|
when you go back to previous version. The only argument for the functions is an instance of
|
|
218
|
-
`Kysely<any>`. It's important to use `Kysely<any>` and not `Kysely<YourDatabase>`.
|
|
219
|
-
|
|
218
|
+
`Kysely<any>`. It's important to use `Kysely<any>` and not `Kysely<YourDatabase>`.
|
|
219
|
+
|
|
220
|
+
Migrations should never depend on the current code of your app because they need to work even when the app
|
|
220
221
|
changes. Migrations need to be "frozen in time".
|
|
221
222
|
|
|
222
223
|
The migrations can use the [Kysely.schema](https://koskimas.github.io/kysely/classes/SchemaModule.html)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
import { ValueListNode } from './value-list-node.js';
|
|
4
|
+
export declare type CreateTypeNodeParams = Omit<Partial<CreateTypeNode>, 'kind'>;
|
|
5
|
+
export interface CreateTypeNode extends OperationNode {
|
|
6
|
+
readonly kind: 'CreateTypeNode';
|
|
7
|
+
readonly name: IdentifierNode;
|
|
8
|
+
readonly enum?: ValueListNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const CreateTypeNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is CreateTypeNode;
|
|
15
|
+
create(name: string): CreateTypeNode;
|
|
16
|
+
cloneWithEnum(createType: CreateTypeNode, values: string[]): CreateTypeNode;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateTypeNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
const identifier_node_js_1 = require("./identifier-node.js");
|
|
6
|
+
const value_list_node_js_1 = require("./value-list-node.js");
|
|
7
|
+
const value_node_js_1 = require("./value-node.js");
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
exports.CreateTypeNode = (0, object_utils_js_1.freeze)({
|
|
12
|
+
is(node) {
|
|
13
|
+
return node.kind === 'CreateTypeNode';
|
|
14
|
+
},
|
|
15
|
+
create(name) {
|
|
16
|
+
return (0, object_utils_js_1.freeze)({
|
|
17
|
+
kind: 'CreateTypeNode',
|
|
18
|
+
name: identifier_node_js_1.IdentifierNode.create(name),
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
cloneWithEnum(createType, values) {
|
|
22
|
+
return (0, object_utils_js_1.freeze)({
|
|
23
|
+
...createType,
|
|
24
|
+
enum: value_list_node_js_1.ValueListNode.create(values.map((value) => value_node_js_1.ValueNode.createImmediate(value))),
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export declare type DropTypeNodeParams = Omit<Partial<DropTypeNode>, 'kind' | 'name'>;
|
|
4
|
+
export interface DropTypeNode extends OperationNode {
|
|
5
|
+
readonly kind: 'DropTypeNode';
|
|
6
|
+
readonly name: IdentifierNode;
|
|
7
|
+
readonly ifExists?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare const DropTypeNode: Readonly<{
|
|
13
|
+
is(node: OperationNode): node is DropTypeNode;
|
|
14
|
+
create(name: string): DropTypeNode;
|
|
15
|
+
cloneWith(dropType: DropTypeNode, params: DropTypeNodeParams): DropTypeNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DropTypeNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
const identifier_node_js_1 = require("./identifier-node.js");
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
exports.DropTypeNode = (0, object_utils_js_1.freeze)({
|
|
10
|
+
is(node) {
|
|
11
|
+
return node.kind === 'DropTypeNode';
|
|
12
|
+
},
|
|
13
|
+
create(name) {
|
|
14
|
+
return (0, object_utils_js_1.freeze)({
|
|
15
|
+
kind: 'DropTypeNode',
|
|
16
|
+
name: identifier_node_js_1.IdentifierNode.create(name),
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
cloneWith(dropType, params) {
|
|
20
|
+
return (0, object_utils_js_1.freeze)({
|
|
21
|
+
...dropType,
|
|
22
|
+
...params,
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -66,6 +66,8 @@ import { DefaultValueNode } from './default-value-node.js';
|
|
|
66
66
|
import { OnNode } from './on-node.js';
|
|
67
67
|
import { ValuesNode } from './values-node.js';
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
|
+
import { CreateTypeNode } from './create-type-node.js';
|
|
70
|
+
import { DropTypeNode } from './drop-type-node.js';
|
|
69
71
|
/**
|
|
70
72
|
* Transforms an operation node tree into another one.
|
|
71
73
|
*
|
|
@@ -162,6 +164,8 @@ export declare class OperationNodeTransformer {
|
|
|
162
164
|
protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode;
|
|
163
165
|
protected transformOn(node: OnNode): OnNode;
|
|
164
166
|
protected transformSelectModifier(node: SelectModifierNode): SelectModifierNode;
|
|
167
|
+
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
168
|
+
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
165
169
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
166
170
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
167
171
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -102,6 +102,8 @@ class OperationNodeTransformer {
|
|
|
102
102
|
OnNode: this.transformOn.bind(this),
|
|
103
103
|
ValuesNode: this.transformValues.bind(this),
|
|
104
104
|
SelectModifierNode: this.transformSelectModifier.bind(this),
|
|
105
|
+
CreateTypeNode: this.transformCreateType.bind(this),
|
|
106
|
+
DropTypeNode: this.transformDropType.bind(this),
|
|
105
107
|
});
|
|
106
108
|
transformNode = (node) => {
|
|
107
109
|
if (!node) {
|
|
@@ -603,6 +605,20 @@ class OperationNodeTransformer {
|
|
|
603
605
|
rawModifier: this.transformNode(node.rawModifier),
|
|
604
606
|
});
|
|
605
607
|
}
|
|
608
|
+
transformCreateType(node) {
|
|
609
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
610
|
+
kind: 'CreateTypeNode',
|
|
611
|
+
name: this.transformNode(node.name),
|
|
612
|
+
enum: this.transformNode(node.enum),
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
transformDropType(node) {
|
|
616
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
617
|
+
kind: 'DropTypeNode',
|
|
618
|
+
name: this.transformNode(node.name),
|
|
619
|
+
ifExists: node.ifExists,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
606
622
|
transformDataType(node) {
|
|
607
623
|
// An Object.freezed leaf node. No need to clone.
|
|
608
624
|
return node;
|
|
@@ -66,6 +66,8 @@ import { DefaultValueNode } from './default-value-node.js';
|
|
|
66
66
|
import { OnNode } from './on-node.js';
|
|
67
67
|
import { ValuesNode } from './values-node.js';
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
|
+
import { CreateTypeNode } from './create-type-node.js';
|
|
70
|
+
import { DropTypeNode } from './drop-type-node.js';
|
|
69
71
|
export declare abstract class OperationNodeVisitor {
|
|
70
72
|
#private;
|
|
71
73
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -138,4 +140,6 @@ export declare abstract class OperationNodeVisitor {
|
|
|
138
140
|
protected abstract visitOn(node: OnNode): void;
|
|
139
141
|
protected abstract visitValues(node: ValuesNode): void;
|
|
140
142
|
protected abstract visitSelectModifier(node: SelectModifierNode): void;
|
|
143
|
+
protected abstract visitCreateType(node: CreateTypeNode): void;
|
|
144
|
+
protected abstract visitDropType(node: DropTypeNode): void;
|
|
141
145
|
}
|
|
@@ -75,6 +75,8 @@ class OperationNodeVisitor {
|
|
|
75
75
|
OnNode: this.visitOn.bind(this),
|
|
76
76
|
ValuesNode: this.visitValues.bind(this),
|
|
77
77
|
SelectModifierNode: this.visitSelectModifier.bind(this),
|
|
78
|
+
CreateTypeNode: this.visitCreateType.bind(this),
|
|
79
|
+
DropTypeNode: this.visitDropType.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';
|
|
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';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { AlterTableNode } from '../../operation-node/alter-table-node.js';
|
|
2
2
|
import { CreateIndexNode } from '../../operation-node/create-index-node.js';
|
|
3
3
|
import { CreateTableNode } from '../../operation-node/create-table-node.js';
|
|
4
|
+
import { CreateTypeNode } from '../../operation-node/create-type-node.js';
|
|
4
5
|
import { CreateViewNode } from '../../operation-node/create-view-node.js';
|
|
5
6
|
import { DeleteQueryNode } from '../../operation-node/delete-query-node.js';
|
|
6
7
|
import { DropIndexNode } from '../../operation-node/drop-index-node.js';
|
|
7
8
|
import { DropTableNode } from '../../operation-node/drop-table-node.js';
|
|
9
|
+
import { DropTypeNode } from '../../operation-node/drop-type-node.js';
|
|
8
10
|
import { DropViewNode } from '../../operation-node/drop-view-node.js';
|
|
9
11
|
import { InsertQueryNode } from '../../operation-node/insert-query-node.js';
|
|
10
12
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
@@ -24,6 +26,8 @@ export declare class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
24
26
|
protected transformDropIndex(node: DropIndexNode): DropIndexNode;
|
|
25
27
|
protected transformCreateView(node: CreateViewNode): CreateViewNode;
|
|
26
28
|
protected transformDropView(node: DropViewNode): DropViewNode;
|
|
29
|
+
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
30
|
+
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
27
31
|
protected transformAlterTable(node: AlterTableNode): AlterTableNode;
|
|
28
32
|
protected transformTable(node: TableNode): TableNode;
|
|
29
33
|
}
|
|
@@ -41,6 +41,12 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
41
41
|
transformDropView(node) {
|
|
42
42
|
return this.#transformRoot(node, (node) => super.transformDropView(node));
|
|
43
43
|
}
|
|
44
|
+
transformCreateType(node) {
|
|
45
|
+
return this.#transformRoot(node, (node) => super.transformCreateType(node));
|
|
46
|
+
}
|
|
47
|
+
transformDropType(node) {
|
|
48
|
+
return this.#transformRoot(node, (node) => super.transformDropType(node));
|
|
49
|
+
}
|
|
44
50
|
transformAlterTable(node) {
|
|
45
51
|
return this.#transformRoot(node, (node) => super.transformAlterTable(node));
|
|
46
52
|
}
|
|
@@ -69,6 +69,8 @@ import { OnNode } from '../operation-node/on-node.js';
|
|
|
69
69
|
import { ValuesNode } from '../operation-node/values-node.js';
|
|
70
70
|
import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
|
|
71
71
|
import { SelectModifierNode } from '../operation-node/select-modifier-node.js';
|
|
72
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
73
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
72
74
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
73
75
|
#private;
|
|
74
76
|
protected get numParameters(): number;
|
|
@@ -145,6 +147,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
145
147
|
protected visitGenerated(node: GeneratedNode): void;
|
|
146
148
|
protected visitDefaultValue(node: DefaultValueNode): void;
|
|
147
149
|
protected visitSelectModifier(node: SelectModifierNode): void;
|
|
150
|
+
protected visitCreateType(node: CreateTypeNode): void;
|
|
151
|
+
protected visitDropType(node: DropTypeNode): void;
|
|
148
152
|
protected append(str: string): void;
|
|
149
153
|
protected appendValue(parameter: unknown): void;
|
|
150
154
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -791,6 +791,21 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
791
791
|
this.append(SELECT_MODIFIER_SQL[node.modifier]);
|
|
792
792
|
}
|
|
793
793
|
}
|
|
794
|
+
visitCreateType(node) {
|
|
795
|
+
this.append('create type ');
|
|
796
|
+
this.visitNode(node.name);
|
|
797
|
+
if (node.enum) {
|
|
798
|
+
this.append(' as enum ');
|
|
799
|
+
this.visitNode(node.enum);
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
visitDropType(node) {
|
|
803
|
+
this.append('drop type ');
|
|
804
|
+
if (node.ifExists) {
|
|
805
|
+
this.append('if exists ');
|
|
806
|
+
}
|
|
807
|
+
this.visitNode(node.name);
|
|
808
|
+
}
|
|
794
809
|
append(str) {
|
|
795
810
|
this.#sql += str;
|
|
796
811
|
}
|
|
@@ -2,15 +2,17 @@ import { AlterTableNode } from '../operation-node/alter-table-node.js';
|
|
|
2
2
|
import { CreateIndexNode } from '../operation-node/create-index-node.js';
|
|
3
3
|
import { CreateSchemaNode } from '../operation-node/create-schema-node.js';
|
|
4
4
|
import { CreateTableNode } from '../operation-node/create-table-node.js';
|
|
5
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
5
6
|
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
6
7
|
import { DropIndexNode } from '../operation-node/drop-index-node.js';
|
|
7
8
|
import { DropSchemaNode } from '../operation-node/drop-schema-node.js';
|
|
8
9
|
import { DropTableNode } from '../operation-node/drop-table-node.js';
|
|
10
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
9
11
|
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
10
12
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
11
13
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
12
14
|
import { CompiledQuery } from './compiled-query.js';
|
|
13
|
-
export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode;
|
|
15
|
+
export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode;
|
|
14
16
|
/**
|
|
15
17
|
* a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL.
|
|
16
18
|
*/
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
|
+
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
|
+
import { Compilable } from '../util/compilable.js';
|
|
4
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
5
|
+
import { QueryId } from '../util/query-id.js';
|
|
6
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
7
|
+
export declare class CreateTypeBuilder implements OperationNodeSource, Compilable {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(props: CreateTypeBuilderProps);
|
|
10
|
+
toOperationNode(): CreateTypeNode;
|
|
11
|
+
asEnum(values: string[]): CreateTypeBuilder;
|
|
12
|
+
compile(): CompiledQuery;
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface CreateTypeBuilderProps {
|
|
16
|
+
readonly queryId: QueryId;
|
|
17
|
+
readonly executor: QueryExecutor;
|
|
18
|
+
readonly createTypeNode: CreateTypeNode;
|
|
19
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateTypeBuilder = void 0;
|
|
4
|
+
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
5
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
6
|
+
const create_type_node_js_1 = require("../operation-node/create-type-node.js");
|
|
7
|
+
class CreateTypeBuilder {
|
|
8
|
+
#props;
|
|
9
|
+
constructor(props) {
|
|
10
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
11
|
+
}
|
|
12
|
+
toOperationNode() {
|
|
13
|
+
return this.#props.executor.transformQuery(this.#props.createTypeNode, this.#props.queryId);
|
|
14
|
+
}
|
|
15
|
+
asEnum(values) {
|
|
16
|
+
return new CreateTypeBuilder({
|
|
17
|
+
...this.#props,
|
|
18
|
+
createTypeNode: create_type_node_js_1.CreateTypeNode.cloneWithEnum(this.#props.createTypeNode, values),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
compile() {
|
|
22
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
23
|
+
}
|
|
24
|
+
async execute() {
|
|
25
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.CreateTypeBuilder = CreateTypeBuilder;
|
|
29
|
+
(0, prevent_await_js_1.preventAwait)(CreateTypeBuilder, "don't await CreateTypeBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
2
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
|
+
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
4
|
+
import { Compilable } from '../util/compilable.js';
|
|
5
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
6
|
+
import { QueryId } from '../util/query-id.js';
|
|
7
|
+
export declare class DropTypeBuilder implements OperationNodeSource, Compilable {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(props: DropTypeBuilderProps);
|
|
10
|
+
ifExists(): DropTypeBuilder;
|
|
11
|
+
toOperationNode(): DropTypeNode;
|
|
12
|
+
compile(): CompiledQuery;
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface DropTypeBuilderProps {
|
|
16
|
+
readonly queryId: QueryId;
|
|
17
|
+
readonly executor: QueryExecutor;
|
|
18
|
+
readonly dropTypeNode: DropTypeNode;
|
|
19
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DropTypeBuilder = void 0;
|
|
4
|
+
const drop_type_node_js_1 = require("../operation-node/drop-type-node.js");
|
|
5
|
+
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
6
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
7
|
+
class DropTypeBuilder {
|
|
8
|
+
#props;
|
|
9
|
+
constructor(props) {
|
|
10
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
11
|
+
}
|
|
12
|
+
ifExists() {
|
|
13
|
+
return new DropTypeBuilder({
|
|
14
|
+
...this.#props,
|
|
15
|
+
dropTypeNode: drop_type_node_js_1.DropTypeNode.cloneWith(this.#props.dropTypeNode, {
|
|
16
|
+
ifExists: true,
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
toOperationNode() {
|
|
21
|
+
return this.#props.executor.transformQuery(this.#props.dropTypeNode, this.#props.queryId);
|
|
22
|
+
}
|
|
23
|
+
compile() {
|
|
24
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
25
|
+
}
|
|
26
|
+
async execute() {
|
|
27
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.DropTypeBuilder = DropTypeBuilder;
|
|
31
|
+
(0, prevent_await_js_1.preventAwait)(DropTypeBuilder, "don't await DropTypeBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -9,6 +9,8 @@ import { DropTableBuilder } from './drop-table-builder.js';
|
|
|
9
9
|
import { CreateViewBuilder } from './create-view-builder.js';
|
|
10
10
|
import { DropViewBuilder } from './drop-view-builder.js';
|
|
11
11
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
12
|
+
import { CreateTypeBuilder } from './create-type-builder.js';
|
|
13
|
+
import { DropTypeBuilder } from './drop-type-builder.js';
|
|
12
14
|
/**
|
|
13
15
|
* Provides methods for building database schema.
|
|
14
16
|
*/
|
|
@@ -170,6 +172,36 @@ export declare class SchemaModule {
|
|
|
170
172
|
* ```
|
|
171
173
|
*/
|
|
172
174
|
dropView(viewName: string): DropViewBuilder;
|
|
175
|
+
/**
|
|
176
|
+
* Create a new type.
|
|
177
|
+
*
|
|
178
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
179
|
+
*
|
|
180
|
+
* ### Examples
|
|
181
|
+
*
|
|
182
|
+
* ```ts
|
|
183
|
+
* await db.schema
|
|
184
|
+
* .createType('species')
|
|
185
|
+
* .asEnum(['dog', 'cat', 'frog'])
|
|
186
|
+
* .execute()
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
createType(viewName: string): CreateTypeBuilder;
|
|
190
|
+
/**
|
|
191
|
+
* Drop a type.
|
|
192
|
+
*
|
|
193
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
194
|
+
*
|
|
195
|
+
* ### Examples
|
|
196
|
+
*
|
|
197
|
+
* ```ts
|
|
198
|
+
* await db.schema
|
|
199
|
+
* .dropType('species')
|
|
200
|
+
* .ifExists()
|
|
201
|
+
* .execute()
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
dropType(viewName: string): DropTypeBuilder;
|
|
173
205
|
/**
|
|
174
206
|
* Returns a copy of this schema module with the given plugin installed.
|
|
175
207
|
*/
|
|
@@ -22,6 +22,10 @@ const create_view_builder_js_1 = require("./create-view-builder.js");
|
|
|
22
22
|
const create_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
23
23
|
const drop_view_builder_js_1 = require("./drop-view-builder.js");
|
|
24
24
|
const drop_view_node_js_1 = require("../operation-node/drop-view-node.js");
|
|
25
|
+
const create_type_builder_js_1 = require("./create-type-builder.js");
|
|
26
|
+
const drop_type_builder_js_1 = require("./drop-type-builder.js");
|
|
27
|
+
const create_type_node_js_1 = require("../operation-node/create-type-node.js");
|
|
28
|
+
const drop_type_node_js_1 = require("../operation-node/drop-type-node.js");
|
|
25
29
|
/**
|
|
26
30
|
* Provides methods for building database schema.
|
|
27
31
|
*/
|
|
@@ -239,6 +243,48 @@ class SchemaModule {
|
|
|
239
243
|
dropViewNode: drop_view_node_js_1.DropViewNode.create(viewName),
|
|
240
244
|
});
|
|
241
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Create a new type.
|
|
248
|
+
*
|
|
249
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
250
|
+
*
|
|
251
|
+
* ### Examples
|
|
252
|
+
*
|
|
253
|
+
* ```ts
|
|
254
|
+
* await db.schema
|
|
255
|
+
* .createType('species')
|
|
256
|
+
* .asEnum(['dog', 'cat', 'frog'])
|
|
257
|
+
* .execute()
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
createType(viewName) {
|
|
261
|
+
return new create_type_builder_js_1.CreateTypeBuilder({
|
|
262
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
263
|
+
executor: this.#executor,
|
|
264
|
+
createTypeNode: create_type_node_js_1.CreateTypeNode.create(viewName),
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Drop a type.
|
|
269
|
+
*
|
|
270
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
271
|
+
*
|
|
272
|
+
* ### Examples
|
|
273
|
+
*
|
|
274
|
+
* ```ts
|
|
275
|
+
* await db.schema
|
|
276
|
+
* .dropType('species')
|
|
277
|
+
* .ifExists()
|
|
278
|
+
* .execute()
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
dropType(viewName) {
|
|
282
|
+
return new drop_type_builder_js_1.DropTypeBuilder({
|
|
283
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
284
|
+
executor: this.#executor,
|
|
285
|
+
dropTypeNode: drop_type_node_js_1.DropTypeNode.create(viewName),
|
|
286
|
+
});
|
|
287
|
+
}
|
|
242
288
|
/**
|
|
243
289
|
* Returns a copy of this schema module with the given plugin installed.
|
|
244
290
|
*/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
import { ValueListNode } from './value-list-node.js';
|
|
4
|
+
export declare type CreateTypeNodeParams = Omit<Partial<CreateTypeNode>, 'kind'>;
|
|
5
|
+
export interface CreateTypeNode extends OperationNode {
|
|
6
|
+
readonly kind: 'CreateTypeNode';
|
|
7
|
+
readonly name: IdentifierNode;
|
|
8
|
+
readonly enum?: ValueListNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const CreateTypeNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is CreateTypeNode;
|
|
15
|
+
create(name: string): CreateTypeNode;
|
|
16
|
+
cloneWithEnum(createType: CreateTypeNode, values: string[]): CreateTypeNode;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/// <reference types="./create-type-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
4
|
+
import { ValueListNode } from './value-list-node.js';
|
|
5
|
+
import { ValueNode } from './value-node.js';
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const CreateTypeNode = freeze({
|
|
10
|
+
is(node) {
|
|
11
|
+
return node.kind === 'CreateTypeNode';
|
|
12
|
+
},
|
|
13
|
+
create(name) {
|
|
14
|
+
return freeze({
|
|
15
|
+
kind: 'CreateTypeNode',
|
|
16
|
+
name: IdentifierNode.create(name),
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
cloneWithEnum(createType, values) {
|
|
20
|
+
return freeze({
|
|
21
|
+
...createType,
|
|
22
|
+
enum: ValueListNode.create(values.map((value) => ValueNode.createImmediate(value))),
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export declare type DropTypeNodeParams = Omit<Partial<DropTypeNode>, 'kind' | 'name'>;
|
|
4
|
+
export interface DropTypeNode extends OperationNode {
|
|
5
|
+
readonly kind: 'DropTypeNode';
|
|
6
|
+
readonly name: IdentifierNode;
|
|
7
|
+
readonly ifExists?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare const DropTypeNode: Readonly<{
|
|
13
|
+
is(node: OperationNode): node is DropTypeNode;
|
|
14
|
+
create(name: string): DropTypeNode;
|
|
15
|
+
cloneWith(dropType: DropTypeNode, params: DropTypeNodeParams): DropTypeNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="./drop-type-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 DropTypeNode = freeze({
|
|
8
|
+
is(node) {
|
|
9
|
+
return node.kind === 'DropTypeNode';
|
|
10
|
+
},
|
|
11
|
+
create(name) {
|
|
12
|
+
return freeze({
|
|
13
|
+
kind: 'DropTypeNode',
|
|
14
|
+
name: IdentifierNode.create(name),
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
cloneWith(dropType, params) {
|
|
18
|
+
return freeze({
|
|
19
|
+
...dropType,
|
|
20
|
+
...params,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -66,6 +66,8 @@ import { DefaultValueNode } from './default-value-node.js';
|
|
|
66
66
|
import { OnNode } from './on-node.js';
|
|
67
67
|
import { ValuesNode } from './values-node.js';
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
|
+
import { CreateTypeNode } from './create-type-node.js';
|
|
70
|
+
import { DropTypeNode } from './drop-type-node.js';
|
|
69
71
|
/**
|
|
70
72
|
* Transforms an operation node tree into another one.
|
|
71
73
|
*
|
|
@@ -162,6 +164,8 @@ export declare class OperationNodeTransformer {
|
|
|
162
164
|
protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode;
|
|
163
165
|
protected transformOn(node: OnNode): OnNode;
|
|
164
166
|
protected transformSelectModifier(node: SelectModifierNode): SelectModifierNode;
|
|
167
|
+
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
168
|
+
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
165
169
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
166
170
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
167
171
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -100,6 +100,8 @@ export class OperationNodeTransformer {
|
|
|
100
100
|
OnNode: this.transformOn.bind(this),
|
|
101
101
|
ValuesNode: this.transformValues.bind(this),
|
|
102
102
|
SelectModifierNode: this.transformSelectModifier.bind(this),
|
|
103
|
+
CreateTypeNode: this.transformCreateType.bind(this),
|
|
104
|
+
DropTypeNode: this.transformDropType.bind(this),
|
|
103
105
|
});
|
|
104
106
|
transformNode = (node) => {
|
|
105
107
|
if (!node) {
|
|
@@ -601,6 +603,20 @@ export class OperationNodeTransformer {
|
|
|
601
603
|
rawModifier: this.transformNode(node.rawModifier),
|
|
602
604
|
});
|
|
603
605
|
}
|
|
606
|
+
transformCreateType(node) {
|
|
607
|
+
return requireAllProps({
|
|
608
|
+
kind: 'CreateTypeNode',
|
|
609
|
+
name: this.transformNode(node.name),
|
|
610
|
+
enum: this.transformNode(node.enum),
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
transformDropType(node) {
|
|
614
|
+
return requireAllProps({
|
|
615
|
+
kind: 'DropTypeNode',
|
|
616
|
+
name: this.transformNode(node.name),
|
|
617
|
+
ifExists: node.ifExists,
|
|
618
|
+
});
|
|
619
|
+
}
|
|
604
620
|
transformDataType(node) {
|
|
605
621
|
// An Object.freezed leaf node. No need to clone.
|
|
606
622
|
return node;
|
|
@@ -66,6 +66,8 @@ import { DefaultValueNode } from './default-value-node.js';
|
|
|
66
66
|
import { OnNode } from './on-node.js';
|
|
67
67
|
import { ValuesNode } from './values-node.js';
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
|
+
import { CreateTypeNode } from './create-type-node.js';
|
|
70
|
+
import { DropTypeNode } from './drop-type-node.js';
|
|
69
71
|
export declare abstract class OperationNodeVisitor {
|
|
70
72
|
#private;
|
|
71
73
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -138,4 +140,6 @@ export declare abstract class OperationNodeVisitor {
|
|
|
138
140
|
protected abstract visitOn(node: OnNode): void;
|
|
139
141
|
protected abstract visitValues(node: ValuesNode): void;
|
|
140
142
|
protected abstract visitSelectModifier(node: SelectModifierNode): void;
|
|
143
|
+
protected abstract visitCreateType(node: CreateTypeNode): void;
|
|
144
|
+
protected abstract visitDropType(node: DropTypeNode): void;
|
|
141
145
|
}
|
|
@@ -73,6 +73,8 @@ export class OperationNodeVisitor {
|
|
|
73
73
|
OnNode: this.visitOn.bind(this),
|
|
74
74
|
ValuesNode: this.visitValues.bind(this),
|
|
75
75
|
SelectModifierNode: this.visitSelectModifier.bind(this),
|
|
76
|
+
CreateTypeNode: this.visitCreateType.bind(this),
|
|
77
|
+
DropTypeNode: this.visitDropType.bind(this),
|
|
76
78
|
});
|
|
77
79
|
visitNode = (node) => {
|
|
78
80
|
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';
|
|
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';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { AlterTableNode } from '../../operation-node/alter-table-node.js';
|
|
2
2
|
import { CreateIndexNode } from '../../operation-node/create-index-node.js';
|
|
3
3
|
import { CreateTableNode } from '../../operation-node/create-table-node.js';
|
|
4
|
+
import { CreateTypeNode } from '../../operation-node/create-type-node.js';
|
|
4
5
|
import { CreateViewNode } from '../../operation-node/create-view-node.js';
|
|
5
6
|
import { DeleteQueryNode } from '../../operation-node/delete-query-node.js';
|
|
6
7
|
import { DropIndexNode } from '../../operation-node/drop-index-node.js';
|
|
7
8
|
import { DropTableNode } from '../../operation-node/drop-table-node.js';
|
|
9
|
+
import { DropTypeNode } from '../../operation-node/drop-type-node.js';
|
|
8
10
|
import { DropViewNode } from '../../operation-node/drop-view-node.js';
|
|
9
11
|
import { InsertQueryNode } from '../../operation-node/insert-query-node.js';
|
|
10
12
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
@@ -24,6 +26,8 @@ export declare class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
24
26
|
protected transformDropIndex(node: DropIndexNode): DropIndexNode;
|
|
25
27
|
protected transformCreateView(node: CreateViewNode): CreateViewNode;
|
|
26
28
|
protected transformDropView(node: DropViewNode): DropViewNode;
|
|
29
|
+
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
30
|
+
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
27
31
|
protected transformAlterTable(node: AlterTableNode): AlterTableNode;
|
|
28
32
|
protected transformTable(node: TableNode): TableNode;
|
|
29
33
|
}
|
|
@@ -39,6 +39,12 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
39
39
|
transformDropView(node) {
|
|
40
40
|
return this.#transformRoot(node, (node) => super.transformDropView(node));
|
|
41
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
|
+
}
|
|
42
48
|
transformAlterTable(node) {
|
|
43
49
|
return this.#transformRoot(node, (node) => super.transformAlterTable(node));
|
|
44
50
|
}
|
|
@@ -69,6 +69,8 @@ import { OnNode } from '../operation-node/on-node.js';
|
|
|
69
69
|
import { ValuesNode } from '../operation-node/values-node.js';
|
|
70
70
|
import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
|
|
71
71
|
import { SelectModifierNode } from '../operation-node/select-modifier-node.js';
|
|
72
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
73
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
72
74
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
73
75
|
#private;
|
|
74
76
|
protected get numParameters(): number;
|
|
@@ -145,6 +147,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
145
147
|
protected visitGenerated(node: GeneratedNode): void;
|
|
146
148
|
protected visitDefaultValue(node: DefaultValueNode): void;
|
|
147
149
|
protected visitSelectModifier(node: SelectModifierNode): void;
|
|
150
|
+
protected visitCreateType(node: CreateTypeNode): void;
|
|
151
|
+
protected visitDropType(node: DropTypeNode): void;
|
|
148
152
|
protected append(str: string): void;
|
|
149
153
|
protected appendValue(parameter: unknown): void;
|
|
150
154
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -789,6 +789,21 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
789
789
|
this.append(SELECT_MODIFIER_SQL[node.modifier]);
|
|
790
790
|
}
|
|
791
791
|
}
|
|
792
|
+
visitCreateType(node) {
|
|
793
|
+
this.append('create type ');
|
|
794
|
+
this.visitNode(node.name);
|
|
795
|
+
if (node.enum) {
|
|
796
|
+
this.append(' as enum ');
|
|
797
|
+
this.visitNode(node.enum);
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
visitDropType(node) {
|
|
801
|
+
this.append('drop type ');
|
|
802
|
+
if (node.ifExists) {
|
|
803
|
+
this.append('if exists ');
|
|
804
|
+
}
|
|
805
|
+
this.visitNode(node.name);
|
|
806
|
+
}
|
|
792
807
|
append(str) {
|
|
793
808
|
this.#sql += str;
|
|
794
809
|
}
|
|
@@ -2,15 +2,17 @@ import { AlterTableNode } from '../operation-node/alter-table-node.js';
|
|
|
2
2
|
import { CreateIndexNode } from '../operation-node/create-index-node.js';
|
|
3
3
|
import { CreateSchemaNode } from '../operation-node/create-schema-node.js';
|
|
4
4
|
import { CreateTableNode } from '../operation-node/create-table-node.js';
|
|
5
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
5
6
|
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
6
7
|
import { DropIndexNode } from '../operation-node/drop-index-node.js';
|
|
7
8
|
import { DropSchemaNode } from '../operation-node/drop-schema-node.js';
|
|
8
9
|
import { DropTableNode } from '../operation-node/drop-table-node.js';
|
|
10
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
9
11
|
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
10
12
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
11
13
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
12
14
|
import { CompiledQuery } from './compiled-query.js';
|
|
13
|
-
export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode;
|
|
15
|
+
export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode;
|
|
14
16
|
/**
|
|
15
17
|
* a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL.
|
|
16
18
|
*/
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
|
+
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
|
+
import { Compilable } from '../util/compilable.js';
|
|
4
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
5
|
+
import { QueryId } from '../util/query-id.js';
|
|
6
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
7
|
+
export declare class CreateTypeBuilder implements OperationNodeSource, Compilable {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(props: CreateTypeBuilderProps);
|
|
10
|
+
toOperationNode(): CreateTypeNode;
|
|
11
|
+
asEnum(values: string[]): CreateTypeBuilder;
|
|
12
|
+
compile(): CompiledQuery;
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface CreateTypeBuilderProps {
|
|
16
|
+
readonly queryId: QueryId;
|
|
17
|
+
readonly executor: QueryExecutor;
|
|
18
|
+
readonly createTypeNode: CreateTypeNode;
|
|
19
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="./create-type-builder.d.ts" />
|
|
2
|
+
import { preventAwait } from '../util/prevent-await.js';
|
|
3
|
+
import { freeze } from '../util/object-utils.js';
|
|
4
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
5
|
+
export class CreateTypeBuilder {
|
|
6
|
+
#props;
|
|
7
|
+
constructor(props) {
|
|
8
|
+
this.#props = freeze(props);
|
|
9
|
+
}
|
|
10
|
+
toOperationNode() {
|
|
11
|
+
return this.#props.executor.transformQuery(this.#props.createTypeNode, this.#props.queryId);
|
|
12
|
+
}
|
|
13
|
+
asEnum(values) {
|
|
14
|
+
return new CreateTypeBuilder({
|
|
15
|
+
...this.#props,
|
|
16
|
+
createTypeNode: CreateTypeNode.cloneWithEnum(this.#props.createTypeNode, values),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
compile() {
|
|
20
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
21
|
+
}
|
|
22
|
+
async execute() {
|
|
23
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
preventAwait(CreateTypeBuilder, "don't await CreateTypeBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
2
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
|
+
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
4
|
+
import { Compilable } from '../util/compilable.js';
|
|
5
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
6
|
+
import { QueryId } from '../util/query-id.js';
|
|
7
|
+
export declare class DropTypeBuilder implements OperationNodeSource, Compilable {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(props: DropTypeBuilderProps);
|
|
10
|
+
ifExists(): DropTypeBuilder;
|
|
11
|
+
toOperationNode(): DropTypeNode;
|
|
12
|
+
compile(): CompiledQuery;
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface DropTypeBuilderProps {
|
|
16
|
+
readonly queryId: QueryId;
|
|
17
|
+
readonly executor: QueryExecutor;
|
|
18
|
+
readonly dropTypeNode: DropTypeNode;
|
|
19
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="./drop-type-builder.d.ts" />
|
|
2
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
3
|
+
import { preventAwait } from '../util/prevent-await.js';
|
|
4
|
+
import { freeze } from '../util/object-utils.js';
|
|
5
|
+
export class DropTypeBuilder {
|
|
6
|
+
#props;
|
|
7
|
+
constructor(props) {
|
|
8
|
+
this.#props = freeze(props);
|
|
9
|
+
}
|
|
10
|
+
ifExists() {
|
|
11
|
+
return new DropTypeBuilder({
|
|
12
|
+
...this.#props,
|
|
13
|
+
dropTypeNode: DropTypeNode.cloneWith(this.#props.dropTypeNode, {
|
|
14
|
+
ifExists: true,
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
toOperationNode() {
|
|
19
|
+
return this.#props.executor.transformQuery(this.#props.dropTypeNode, this.#props.queryId);
|
|
20
|
+
}
|
|
21
|
+
compile() {
|
|
22
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
23
|
+
}
|
|
24
|
+
async execute() {
|
|
25
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
preventAwait(DropTypeBuilder, "don't await DropTypeBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -9,6 +9,8 @@ import { DropTableBuilder } from './drop-table-builder.js';
|
|
|
9
9
|
import { CreateViewBuilder } from './create-view-builder.js';
|
|
10
10
|
import { DropViewBuilder } from './drop-view-builder.js';
|
|
11
11
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
12
|
+
import { CreateTypeBuilder } from './create-type-builder.js';
|
|
13
|
+
import { DropTypeBuilder } from './drop-type-builder.js';
|
|
12
14
|
/**
|
|
13
15
|
* Provides methods for building database schema.
|
|
14
16
|
*/
|
|
@@ -170,6 +172,36 @@ export declare class SchemaModule {
|
|
|
170
172
|
* ```
|
|
171
173
|
*/
|
|
172
174
|
dropView(viewName: string): DropViewBuilder;
|
|
175
|
+
/**
|
|
176
|
+
* Create a new type.
|
|
177
|
+
*
|
|
178
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
179
|
+
*
|
|
180
|
+
* ### Examples
|
|
181
|
+
*
|
|
182
|
+
* ```ts
|
|
183
|
+
* await db.schema
|
|
184
|
+
* .createType('species')
|
|
185
|
+
* .asEnum(['dog', 'cat', 'frog'])
|
|
186
|
+
* .execute()
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
createType(viewName: string): CreateTypeBuilder;
|
|
190
|
+
/**
|
|
191
|
+
* Drop a type.
|
|
192
|
+
*
|
|
193
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
194
|
+
*
|
|
195
|
+
* ### Examples
|
|
196
|
+
*
|
|
197
|
+
* ```ts
|
|
198
|
+
* await db.schema
|
|
199
|
+
* .dropType('species')
|
|
200
|
+
* .ifExists()
|
|
201
|
+
* .execute()
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
dropType(viewName: string): DropTypeBuilder;
|
|
173
205
|
/**
|
|
174
206
|
* Returns a copy of this schema module with the given plugin installed.
|
|
175
207
|
*/
|
|
@@ -20,6 +20,10 @@ import { CreateViewBuilder } from './create-view-builder.js';
|
|
|
20
20
|
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
21
21
|
import { DropViewBuilder } from './drop-view-builder.js';
|
|
22
22
|
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
23
|
+
import { CreateTypeBuilder } from './create-type-builder.js';
|
|
24
|
+
import { DropTypeBuilder } from './drop-type-builder.js';
|
|
25
|
+
import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
26
|
+
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
23
27
|
/**
|
|
24
28
|
* Provides methods for building database schema.
|
|
25
29
|
*/
|
|
@@ -237,6 +241,48 @@ export class SchemaModule {
|
|
|
237
241
|
dropViewNode: DropViewNode.create(viewName),
|
|
238
242
|
});
|
|
239
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Create a new type.
|
|
246
|
+
*
|
|
247
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
248
|
+
*
|
|
249
|
+
* ### Examples
|
|
250
|
+
*
|
|
251
|
+
* ```ts
|
|
252
|
+
* await db.schema
|
|
253
|
+
* .createType('species')
|
|
254
|
+
* .asEnum(['dog', 'cat', 'frog'])
|
|
255
|
+
* .execute()
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
createType(viewName) {
|
|
259
|
+
return new CreateTypeBuilder({
|
|
260
|
+
queryId: createQueryId(),
|
|
261
|
+
executor: this.#executor,
|
|
262
|
+
createTypeNode: CreateTypeNode.create(viewName),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Drop a type.
|
|
267
|
+
*
|
|
268
|
+
* Only some dialects like PostgreSQL have user-defined types.
|
|
269
|
+
*
|
|
270
|
+
* ### Examples
|
|
271
|
+
*
|
|
272
|
+
* ```ts
|
|
273
|
+
* await db.schema
|
|
274
|
+
* .dropType('species')
|
|
275
|
+
* .ifExists()
|
|
276
|
+
* .execute()
|
|
277
|
+
* ```
|
|
278
|
+
*/
|
|
279
|
+
dropType(viewName) {
|
|
280
|
+
return new DropTypeBuilder({
|
|
281
|
+
queryId: createQueryId(),
|
|
282
|
+
executor: this.#executor,
|
|
283
|
+
dropTypeNode: DropTypeNode.create(viewName),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
240
286
|
/**
|
|
241
287
|
* Returns a copy of this schema module with the given plugin installed.
|
|
242
288
|
*/
|