kysely 0.9.6 → 0.10.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 +15 -13
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/operation-node/column-definition-node.d.ts +4 -4
- package/dist/cjs/operation-node/column-definition-node.js +4 -4
- package/dist/cjs/operation-node/create-schema-node.d.ts +1 -2
- package/dist/cjs/operation-node/create-table-node.d.ts +2 -3
- package/dist/cjs/operation-node/create-table-node.js +2 -2
- package/dist/cjs/operation-node/create-view-node.d.ts +22 -0
- package/dist/cjs/operation-node/create-view-node.js +25 -0
- package/dist/cjs/operation-node/drop-index-node.d.ts +1 -2
- package/dist/cjs/operation-node/drop-schema-node.d.ts +2 -3
- package/dist/cjs/operation-node/drop-schema-node.js +3 -3
- package/dist/cjs/operation-node/drop-table-node.d.ts +2 -3
- package/dist/cjs/operation-node/drop-table-node.js +2 -2
- package/dist/cjs/operation-node/drop-view-node.d.ts +17 -0
- package/dist/cjs/operation-node/drop-view-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 +29 -9
- 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/operation-node/operator-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.js +5 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/select-query-node.js +1 -1
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +22 -0
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.js +21 -0
- 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 +42 -10
- package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
- package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
- package/dist/cjs/schema/alter-table-builder.js +4 -4
- package/dist/cjs/schema/column-definition-builder.d.ts +2 -2
- package/dist/cjs/schema/column-definition-builder.js +5 -5
- package/dist/cjs/schema/create-schema-builder.js +1 -1
- package/dist/cjs/schema/create-table-builder.d.ts +1 -1
- package/dist/cjs/schema/create-table-builder.js +2 -2
- package/dist/cjs/schema/create-view-builder.d.ts +24 -0
- package/dist/cjs/schema/create-view-builder.js +73 -0
- package/dist/cjs/schema/drop-index-builder.js +1 -1
- package/dist/cjs/schema/drop-schema-builder.js +3 -1
- package/dist/cjs/schema/drop-table-builder.js +3 -1
- package/dist/cjs/schema/drop-view-builder.d.ts +20 -0
- package/dist/cjs/schema/drop-view-builder.js +39 -0
- package/dist/cjs/schema/schema.d.ts +30 -3
- package/dist/cjs/schema/schema.js +44 -3
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/operation-node/column-definition-node.d.ts +4 -4
- package/dist/esm/operation-node/column-definition-node.js +4 -4
- package/dist/esm/operation-node/create-schema-node.d.ts +1 -2
- package/dist/esm/operation-node/create-table-node.d.ts +2 -3
- package/dist/esm/operation-node/create-table-node.js +2 -2
- package/dist/esm/operation-node/create-view-node.d.ts +22 -0
- package/dist/esm/operation-node/create-view-node.js +22 -0
- package/dist/esm/operation-node/drop-index-node.d.ts +1 -2
- package/dist/esm/operation-node/drop-schema-node.d.ts +2 -3
- package/dist/esm/operation-node/drop-schema-node.js +3 -3
- package/dist/esm/operation-node/drop-table-node.d.ts +2 -3
- package/dist/esm/operation-node/drop-table-node.js +2 -2
- package/dist/esm/operation-node/drop-view-node.d.ts +17 -0
- package/dist/esm/operation-node/drop-view-node.js +22 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-transformer.js +29 -9
- 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/operation-node/operator-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.js +5 -0
- package/dist/esm/operation-node/select-query-node.d.ts +1 -1
- package/dist/esm/operation-node/select-query-node.js +1 -1
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +18 -0
- package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
- package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.js +17 -0
- 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 +42 -10
- package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
- package/dist/esm/schema/alter-table-builder.d.ts +2 -2
- package/dist/esm/schema/alter-table-builder.js +4 -4
- package/dist/esm/schema/column-definition-builder.d.ts +2 -2
- package/dist/esm/schema/column-definition-builder.js +5 -5
- package/dist/esm/schema/create-schema-builder.js +1 -1
- package/dist/esm/schema/create-table-builder.d.ts +1 -1
- package/dist/esm/schema/create-table-builder.js +2 -2
- package/dist/esm/schema/create-view-builder.d.ts +24 -0
- package/dist/esm/schema/create-view-builder.js +69 -0
- package/dist/esm/schema/drop-index-builder.js +1 -1
- package/dist/esm/schema/drop-schema-builder.js +3 -1
- package/dist/esm/schema/drop-table-builder.js +3 -1
- package/dist/esm/schema/drop-view-builder.d.ts +20 -0
- package/dist/esm/schema/drop-view-builder.js +35 -0
- package/dist/esm/schema/schema.d.ts +30 -3
- package/dist/esm/schema/schema.js +44 -3
- package/package.json +4 -1
|
@@ -35,6 +35,12 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
|
|
|
35
35
|
transformDropIndex(node) {
|
|
36
36
|
return this.#transformRoot(node, (node) => super.transformDropIndex(node));
|
|
37
37
|
}
|
|
38
|
+
transformCreateView(node) {
|
|
39
|
+
return this.#transformRoot(node, (node) => super.transformCreateView(node));
|
|
40
|
+
}
|
|
41
|
+
transformDropView(node) {
|
|
42
|
+
return this.#transformRoot(node, (node) => super.transformDropView(node));
|
|
43
|
+
}
|
|
38
44
|
transformAlterTable(node) {
|
|
39
45
|
return this.#transformRoot(node, (node) => super.transformAlterTable(node));
|
|
40
46
|
}
|
|
@@ -62,6 +62,8 @@ import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
|
|
|
62
62
|
import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
|
|
63
63
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
64
64
|
import { UnionNode } from '../operation-node/union-node.js';
|
|
65
|
+
import { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
66
|
+
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
65
67
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
66
68
|
#private;
|
|
67
69
|
protected get numParameters(): number;
|
|
@@ -130,6 +132,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
130
132
|
protected visitAddConstraint(node: AddConstraintNode): void;
|
|
131
133
|
protected visitDropConstraint(node: DropConstraintNode): void;
|
|
132
134
|
protected visitUnion(node: UnionNode): void;
|
|
135
|
+
protected visitCreateView(node: CreateViewNode): void;
|
|
136
|
+
protected visitDropView(node: DropViewNode): void;
|
|
133
137
|
protected append(str: string): void;
|
|
134
138
|
protected appendValue(parameter: unknown): void;
|
|
135
139
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -38,7 +38,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
38
38
|
this.compileDistinctOn(node.distinctOnSelections);
|
|
39
39
|
this.append(' ');
|
|
40
40
|
}
|
|
41
|
-
if (node.
|
|
41
|
+
if (node.distinct) {
|
|
42
42
|
this.append('distinct');
|
|
43
43
|
this.append(' ');
|
|
44
44
|
}
|
|
@@ -290,7 +290,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
290
290
|
}
|
|
291
291
|
visitCreateTable(node) {
|
|
292
292
|
this.append('create table ');
|
|
293
|
-
if (node.
|
|
293
|
+
if (node.ifNotExists) {
|
|
294
294
|
this.append('if not exists ');
|
|
295
295
|
}
|
|
296
296
|
this.visitNode(node.table);
|
|
@@ -306,17 +306,17 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
306
306
|
this.append(' default ');
|
|
307
307
|
this.visitNode(node.defaultTo);
|
|
308
308
|
}
|
|
309
|
-
if (!node.
|
|
309
|
+
if (!node.nullable) {
|
|
310
310
|
this.append(' not null');
|
|
311
311
|
}
|
|
312
|
-
if (node.
|
|
312
|
+
if (node.autoIncrement) {
|
|
313
313
|
this.append(' ');
|
|
314
314
|
this.append(this.getAutoIncrement());
|
|
315
315
|
}
|
|
316
|
-
if (node.
|
|
316
|
+
if (node.unique) {
|
|
317
317
|
this.append(' unique');
|
|
318
318
|
}
|
|
319
|
-
if (node.
|
|
319
|
+
if (node.primaryKey) {
|
|
320
320
|
this.append(' primary key');
|
|
321
321
|
}
|
|
322
322
|
if (node.references) {
|
|
@@ -348,7 +348,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
348
348
|
}
|
|
349
349
|
visitDropTable(node) {
|
|
350
350
|
this.append('drop table ');
|
|
351
|
-
if (node.
|
|
351
|
+
if (node.ifExists) {
|
|
352
352
|
this.append('if exists ');
|
|
353
353
|
}
|
|
354
354
|
this.visitNode(node.table);
|
|
@@ -470,7 +470,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
470
470
|
}
|
|
471
471
|
visitDropIndex(node) {
|
|
472
472
|
this.append('drop index ');
|
|
473
|
-
if (node.
|
|
473
|
+
if (node.ifExists) {
|
|
474
474
|
this.append('if exists ');
|
|
475
475
|
}
|
|
476
476
|
this.visitNode(node.name);
|
|
@@ -481,14 +481,14 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
481
481
|
}
|
|
482
482
|
visitCreateSchema(node) {
|
|
483
483
|
this.append('create schema ');
|
|
484
|
-
if (node.
|
|
484
|
+
if (node.ifNotExists) {
|
|
485
485
|
this.append('if not exists ');
|
|
486
486
|
}
|
|
487
487
|
this.visitNode(node.schema);
|
|
488
488
|
}
|
|
489
489
|
visitDropSchema(node) {
|
|
490
490
|
this.append('drop schema ');
|
|
491
|
-
if (node.
|
|
491
|
+
if (node.ifExists) {
|
|
492
492
|
this.append('if exists ');
|
|
493
493
|
}
|
|
494
494
|
this.visitNode(node.schema);
|
|
@@ -647,6 +647,38 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
647
647
|
}
|
|
648
648
|
this.visitNode(node.union);
|
|
649
649
|
}
|
|
650
|
+
visitCreateView(node) {
|
|
651
|
+
this.append('create ');
|
|
652
|
+
if (node.orReplace) {
|
|
653
|
+
this.append('or replace ');
|
|
654
|
+
}
|
|
655
|
+
if (node.materialized) {
|
|
656
|
+
this.append('materialized ');
|
|
657
|
+
}
|
|
658
|
+
this.append('view ');
|
|
659
|
+
this.visitNode(node.name);
|
|
660
|
+
this.append(' ');
|
|
661
|
+
if (node.columns) {
|
|
662
|
+
this.append('(');
|
|
663
|
+
this.compileList(node.columns);
|
|
664
|
+
this.append(') ');
|
|
665
|
+
}
|
|
666
|
+
if (node.as) {
|
|
667
|
+
this.append('as ');
|
|
668
|
+
this.visitNode(node.as);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
visitDropView(node) {
|
|
672
|
+
this.append('drop ');
|
|
673
|
+
if (node.materialized) {
|
|
674
|
+
this.append('materialized ');
|
|
675
|
+
}
|
|
676
|
+
this.append('view ');
|
|
677
|
+
if (node.ifExists) {
|
|
678
|
+
this.append('if exists ');
|
|
679
|
+
}
|
|
680
|
+
this.visitNode(node.name);
|
|
681
|
+
}
|
|
650
682
|
append(str) {
|
|
651
683
|
this.#sql += str;
|
|
652
684
|
}
|
|
@@ -2,13 +2,15 @@ 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 { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
5
6
|
import { DropIndexNode } from '../operation-node/drop-index-node.js';
|
|
6
7
|
import { DropSchemaNode } from '../operation-node/drop-schema-node.js';
|
|
7
8
|
import { DropTableNode } from '../operation-node/drop-table-node.js';
|
|
9
|
+
import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
8
10
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
9
11
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
10
12
|
import { CompiledQuery } from './compiled-query.js';
|
|
11
|
-
export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode |
|
|
13
|
+
export declare type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode;
|
|
12
14
|
/**
|
|
13
15
|
* a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL.
|
|
14
16
|
*/
|
|
@@ -63,7 +63,7 @@ export interface AlterTableExecutorProps extends AlterTableBuilderProps {
|
|
|
63
63
|
export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableAddColumnBuilder>, OperationNodeSource, Compilable {
|
|
64
64
|
#private;
|
|
65
65
|
constructor(props: AlterTableAddColumnBuilderProps);
|
|
66
|
-
|
|
66
|
+
autoIncrement(): AlterTableAddColumnBuilder;
|
|
67
67
|
primaryKey(): AlterTableAddColumnBuilder;
|
|
68
68
|
references(ref: string): AlterTableAddColumnBuilder;
|
|
69
69
|
onDelete(onDelete: OnModifyForeignAction): AlterTableAddColumnBuilder;
|
|
@@ -82,7 +82,7 @@ export interface AlterTableAddColumnBuilderProps extends AlterTableBuilderProps
|
|
|
82
82
|
export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableModifyColumnBuilder>, OperationNodeSource, Compilable {
|
|
83
83
|
#private;
|
|
84
84
|
constructor(props: AlterTableModifyColumnBuilderProps);
|
|
85
|
-
|
|
85
|
+
autoIncrement(): AlterTableModifyColumnBuilder;
|
|
86
86
|
primaryKey(): AlterTableModifyColumnBuilder;
|
|
87
87
|
references(ref: string): AlterTableModifyColumnBuilder;
|
|
88
88
|
onDelete(onDelete: OnModifyForeignAction): AlterTableModifyColumnBuilder;
|
|
@@ -190,10 +190,10 @@ class AlterTableAddColumnBuilder {
|
|
|
190
190
|
constructor(props) {
|
|
191
191
|
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
192
192
|
}
|
|
193
|
-
|
|
193
|
+
autoIncrement() {
|
|
194
194
|
return new AlterTableAddColumnBuilder({
|
|
195
195
|
...this.#props,
|
|
196
|
-
columnBuilder: this.#props.columnBuilder.
|
|
196
|
+
columnBuilder: this.#props.columnBuilder.autoIncrement(),
|
|
197
197
|
});
|
|
198
198
|
}
|
|
199
199
|
primaryKey() {
|
|
@@ -262,10 +262,10 @@ class AlterTableModifyColumnBuilder {
|
|
|
262
262
|
constructor(props) {
|
|
263
263
|
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
264
264
|
}
|
|
265
|
-
|
|
265
|
+
autoIncrement() {
|
|
266
266
|
return new AlterTableModifyColumnBuilder({
|
|
267
267
|
...this.#props,
|
|
268
|
-
columnBuilder: this.#props.columnBuilder.
|
|
268
|
+
columnBuilder: this.#props.columnBuilder.autoIncrement(),
|
|
269
269
|
});
|
|
270
270
|
}
|
|
271
271
|
primaryKey() {
|
|
@@ -12,7 +12,7 @@ export interface ColumnDefinitionBuilderInterface<R> {
|
|
|
12
12
|
* Some dialects like PostgreSQL don't support this. On PostgreSQL
|
|
13
13
|
* you can use the `serial` or `bigserial` data type instead.
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
autoIncrement(): R;
|
|
16
16
|
/**
|
|
17
17
|
* Makes the column the primary key.
|
|
18
18
|
*
|
|
@@ -82,7 +82,7 @@ export interface ColumnDefinitionBuilderInterface<R> {
|
|
|
82
82
|
export declare class ColumnDefinitionBuilder implements ColumnDefinitionBuilderInterface<ColumnDefinitionBuilder>, OperationNodeSource {
|
|
83
83
|
#private;
|
|
84
84
|
constructor(node: ColumnDefinitionNode);
|
|
85
|
-
|
|
85
|
+
autoIncrement(): ColumnDefinitionBuilder;
|
|
86
86
|
primaryKey(): ColumnDefinitionBuilder;
|
|
87
87
|
references(ref: string): ColumnDefinitionBuilder;
|
|
88
88
|
onDelete(onDelete: OnModifyForeignAction): ColumnDefinitionBuilder;
|
|
@@ -14,11 +14,11 @@ class ColumnDefinitionBuilder {
|
|
|
14
14
|
constructor(node) {
|
|
15
15
|
this.#node = node;
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
|
|
17
|
+
autoIncrement() {
|
|
18
|
+
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { autoIncrement: true }));
|
|
19
19
|
}
|
|
20
20
|
primaryKey() {
|
|
21
|
-
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
|
|
21
|
+
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { primaryKey: true }));
|
|
22
22
|
}
|
|
23
23
|
references(ref) {
|
|
24
24
|
const references = (0, reference_parser_js_1.parseStringReference)(ref);
|
|
@@ -48,10 +48,10 @@ class ColumnDefinitionBuilder {
|
|
|
48
48
|
}));
|
|
49
49
|
}
|
|
50
50
|
unique() {
|
|
51
|
-
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
|
|
51
|
+
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { unique: true }));
|
|
52
52
|
}
|
|
53
53
|
notNull() {
|
|
54
|
-
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
|
|
54
|
+
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { nullable: false }));
|
|
55
55
|
}
|
|
56
56
|
defaultTo(value) {
|
|
57
57
|
return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
|
|
@@ -12,7 +12,7 @@ class CreateSchemaBuilder {
|
|
|
12
12
|
ifNotExists() {
|
|
13
13
|
return new CreateSchemaBuilder({
|
|
14
14
|
...this.#props,
|
|
15
|
-
createSchemaNode: create_schema_node_js_1.CreateSchemaNode.cloneWith(this.#props.createSchemaNode, {
|
|
15
|
+
createSchemaNode: create_schema_node_js_1.CreateSchemaNode.cloneWith(this.#props.createSchemaNode, { ifNotExists: true }),
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
toOperationNode() {
|
|
@@ -26,7 +26,7 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
|
|
|
26
26
|
* ```ts
|
|
27
27
|
* await db.schema
|
|
28
28
|
* .createTable('person')
|
|
29
|
-
* .addColumn('id', 'integer', (col) => col.
|
|
29
|
+
* .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
|
|
30
30
|
* .addColumn('first_name', 'varchar(50), (col) => col.notNull())
|
|
31
31
|
* .addColumn('last_name', 'varchar')
|
|
32
32
|
* .addColumn('bank_balance', 'numeric(8, 2)')
|
|
@@ -30,7 +30,7 @@ class CreateTableBuilder {
|
|
|
30
30
|
ifNotExists() {
|
|
31
31
|
return new CreateTableBuilder({
|
|
32
32
|
...this.#props,
|
|
33
|
-
createTableNode: create_table_node_js_1.CreateTableNode.
|
|
33
|
+
createTableNode: create_table_node_js_1.CreateTableNode.cloneWithIfNotExists(this.#props.createTableNode, true),
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
@@ -40,7 +40,7 @@ class CreateTableBuilder {
|
|
|
40
40
|
* ```ts
|
|
41
41
|
* await db.schema
|
|
42
42
|
* .createTable('person')
|
|
43
|
-
* .addColumn('id', 'integer', (col) => col.
|
|
43
|
+
* .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
|
|
44
44
|
* .addColumn('first_name', 'varchar(50), (col) => col.notNull())
|
|
45
45
|
* .addColumn('last_name', 'varchar')
|
|
46
46
|
* .addColumn('bank_balance', 'numeric(8, 2)')
|
|
@@ -0,0 +1,24 @@
|
|
|
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 { CreateViewNode } from '../operation-node/create-view-node.js';
|
|
7
|
+
import { AnyQueryBuilder } from '../index.js';
|
|
8
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
9
|
+
export declare class CreateViewBuilder implements OperationNodeSource, Compilable {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(props: CreateViewBuilderProps);
|
|
12
|
+
materialized(): CreateViewBuilder;
|
|
13
|
+
orReplace(): CreateViewBuilder;
|
|
14
|
+
columns(columns: string[]): CreateViewBuilder;
|
|
15
|
+
as(query: AnyQueryBuilder | AnyRawBuilder): CreateViewBuilder;
|
|
16
|
+
toOperationNode(): CreateViewNode;
|
|
17
|
+
compile(): CompiledQuery;
|
|
18
|
+
execute(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export interface CreateViewBuilderProps {
|
|
21
|
+
readonly queryId: QueryId;
|
|
22
|
+
readonly executor: QueryExecutor;
|
|
23
|
+
readonly createViewNode: CreateViewNode;
|
|
24
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateViewBuilder = 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_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
7
|
+
const reference_parser_js_1 = require("../parser/reference-parser.js");
|
|
8
|
+
const index_js_1 = require("../index.js");
|
|
9
|
+
const immediate_value_plugin_js_1 = require("../plugin/immediate-value.ts/immediate-value-plugin.js");
|
|
10
|
+
class CreateViewBuilder {
|
|
11
|
+
#props;
|
|
12
|
+
constructor(props) {
|
|
13
|
+
this.#props = (0, object_utils_js_1.freeze)({
|
|
14
|
+
...props,
|
|
15
|
+
// The select statement (defined using the `as` method) can't have parameters on some
|
|
16
|
+
// dialects. We add the `ImmediateValuePlugin` to make all parameters "immediate"
|
|
17
|
+
// meaning they are interpolated into the SQL instead of added as parameters.
|
|
18
|
+
//
|
|
19
|
+
// The values are therefore not escaped at all, which leads to SQL injection
|
|
20
|
+
// vulnerabilities if user input is passed into the query. However, the use
|
|
21
|
+
// case where user input is passed into a `create view` statement is a weird
|
|
22
|
+
// one, and we can pretty safely just ignore it.
|
|
23
|
+
executor: props.executor.withPlugin(new immediate_value_plugin_js_1.ImmediateValuePlugin()),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
materialized() {
|
|
27
|
+
return new CreateViewBuilder({
|
|
28
|
+
...this.#props,
|
|
29
|
+
createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
|
|
30
|
+
materialized: true,
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
orReplace() {
|
|
35
|
+
return new CreateViewBuilder({
|
|
36
|
+
...this.#props,
|
|
37
|
+
createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
|
|
38
|
+
orReplace: true,
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
columns(columns) {
|
|
43
|
+
return new CreateViewBuilder({
|
|
44
|
+
...this.#props,
|
|
45
|
+
createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
|
|
46
|
+
columns: columns.map(reference_parser_js_1.parseColumnName),
|
|
47
|
+
}),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
as(query) {
|
|
51
|
+
const queryNode = query.toOperationNode();
|
|
52
|
+
if (index_js_1.QueryNode.isMutating(queryNode)) {
|
|
53
|
+
throw new Error('only select statements are allowd in views');
|
|
54
|
+
}
|
|
55
|
+
return new CreateViewBuilder({
|
|
56
|
+
...this.#props,
|
|
57
|
+
createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
|
|
58
|
+
as: queryNode,
|
|
59
|
+
}),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
toOperationNode() {
|
|
63
|
+
return this.#props.executor.transformQuery(this.#props.createViewNode, this.#props.queryId);
|
|
64
|
+
}
|
|
65
|
+
compile() {
|
|
66
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
67
|
+
}
|
|
68
|
+
async execute() {
|
|
69
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.CreateViewBuilder = CreateViewBuilder;
|
|
73
|
+
(0, prevent_await_js_1.preventAwait)(CreateViewBuilder, "don't await CreateViewBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -12,7 +12,9 @@ class DropSchemaBuilder {
|
|
|
12
12
|
ifExists() {
|
|
13
13
|
return new DropSchemaBuilder({
|
|
14
14
|
...this.#props,
|
|
15
|
-
dropSchemaNode: drop_schema_node_js_1.DropSchemaNode.
|
|
15
|
+
dropSchemaNode: drop_schema_node_js_1.DropSchemaNode.cloneWith(this.#props.dropSchemaNode, {
|
|
16
|
+
ifExists: true,
|
|
17
|
+
}),
|
|
16
18
|
});
|
|
17
19
|
}
|
|
18
20
|
toOperationNode() {
|
|
@@ -12,7 +12,9 @@ class DropTableBuilder {
|
|
|
12
12
|
ifExists() {
|
|
13
13
|
return new DropTableBuilder({
|
|
14
14
|
...this.#props,
|
|
15
|
-
dropTableNode: drop_table_node_js_1.DropTableNode.
|
|
15
|
+
dropTableNode: drop_table_node_js_1.DropTableNode.cloneWith(this.#props.dropTableNode, {
|
|
16
|
+
ifExists: true,
|
|
17
|
+
}),
|
|
16
18
|
});
|
|
17
19
|
}
|
|
18
20
|
toOperationNode() {
|
|
@@ -0,0 +1,20 @@
|
|
|
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 { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
7
|
+
export declare class DropViewBuilder implements OperationNodeSource, Compilable {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(props: DropViewBuilderProps);
|
|
10
|
+
materialized(): DropViewBuilder;
|
|
11
|
+
ifExists(): DropViewBuilder;
|
|
12
|
+
toOperationNode(): DropViewNode;
|
|
13
|
+
compile(): CompiledQuery;
|
|
14
|
+
execute(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export interface DropViewBuilderProps {
|
|
17
|
+
readonly queryId: QueryId;
|
|
18
|
+
readonly executor: QueryExecutor;
|
|
19
|
+
readonly dropViewNode: DropViewNode;
|
|
20
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DropViewBuilder = 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 drop_view_node_js_1 = require("../operation-node/drop-view-node.js");
|
|
7
|
+
class DropViewBuilder {
|
|
8
|
+
#props;
|
|
9
|
+
constructor(props) {
|
|
10
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
11
|
+
}
|
|
12
|
+
materialized() {
|
|
13
|
+
return new DropViewBuilder({
|
|
14
|
+
...this.#props,
|
|
15
|
+
dropViewNode: drop_view_node_js_1.DropViewNode.cloneWith(this.#props.dropViewNode, {
|
|
16
|
+
materialized: true,
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
ifExists() {
|
|
21
|
+
return new DropViewBuilder({
|
|
22
|
+
...this.#props,
|
|
23
|
+
dropViewNode: drop_view_node_js_1.DropViewNode.cloneWith(this.#props.dropViewNode, {
|
|
24
|
+
ifExists: true,
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
toOperationNode() {
|
|
29
|
+
return this.#props.executor.transformQuery(this.#props.dropViewNode, this.#props.queryId);
|
|
30
|
+
}
|
|
31
|
+
compile() {
|
|
32
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
33
|
+
}
|
|
34
|
+
async execute() {
|
|
35
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.DropViewBuilder = DropViewBuilder;
|
|
39
|
+
(0, prevent_await_js_1.preventAwait)(DropViewBuilder, "don't await DropViewBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -6,6 +6,8 @@ import { CreateTableBuilder } from './create-table-builder.js';
|
|
|
6
6
|
import { DropIndexBuilder } from './drop-index-builder.js';
|
|
7
7
|
import { DropSchemaBuilder } from './drop-schema-builder.js';
|
|
8
8
|
import { DropTableBuilder } from './drop-table-builder.js';
|
|
9
|
+
import { CreateViewBuilder } from './create-view-builder.js';
|
|
10
|
+
import { DropViewBuilder } from './drop-view-builder.js';
|
|
9
11
|
/**
|
|
10
12
|
* Provides methods for building database schema.
|
|
11
13
|
*/
|
|
@@ -22,7 +24,7 @@ export declare class SchemaModule {
|
|
|
22
24
|
* ```ts
|
|
23
25
|
* await db.schema
|
|
24
26
|
* .createTable('person')
|
|
25
|
-
* .addColumn('id', 'integer', col => col.primaryKey().
|
|
27
|
+
* .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
|
|
26
28
|
* .addColumn('first_name', 'varchar', col => col.notNull())
|
|
27
29
|
* .addColumn('last_name', 'varchar', col => col.notNull())
|
|
28
30
|
* .addColumn('gender', 'varchar')
|
|
@@ -38,7 +40,7 @@ export declare class SchemaModule {
|
|
|
38
40
|
* ```ts
|
|
39
41
|
* await db.schema
|
|
40
42
|
* .createTable('pet')
|
|
41
|
-
* .addColumn('id', 'integer', col => col.primaryKey().
|
|
43
|
+
* .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
|
|
42
44
|
* .addColumn('owner_id', 'integer', col => col
|
|
43
45
|
* .references('person.id')
|
|
44
46
|
* .onDelete('cascade')
|
|
@@ -55,7 +57,7 @@ export declare class SchemaModule {
|
|
|
55
57
|
* ```ts
|
|
56
58
|
* await db.schema
|
|
57
59
|
* .createTable('pet')
|
|
58
|
-
* .addColumn('id', 'integer', col => col.primaryKey().
|
|
60
|
+
* .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
|
|
59
61
|
* .addColumn('owner_id', 'integer')
|
|
60
62
|
* .addForeignKeyConstraint(
|
|
61
63
|
* 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
|
|
@@ -135,6 +137,31 @@ export declare class SchemaModule {
|
|
|
135
137
|
* ```
|
|
136
138
|
*/
|
|
137
139
|
alterTable(table: string): AlterTableBuilder;
|
|
140
|
+
/**
|
|
141
|
+
* Create a new view.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* await db.schema
|
|
146
|
+
* .createView('dogs')
|
|
147
|
+
* .orReplace()
|
|
148
|
+
* .as(db.selectFrom('pet').selectAll().where('species', '=', 'dog'))
|
|
149
|
+
* .execute()
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
createView(viewName: string): CreateViewBuilder;
|
|
153
|
+
/**
|
|
154
|
+
* Drop a view.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```ts
|
|
158
|
+
* await db.schema
|
|
159
|
+
* .dropView('dogs')
|
|
160
|
+
* .ifExists()
|
|
161
|
+
* .execute()
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
dropView(viewName: string): DropViewBuilder;
|
|
138
165
|
/**
|
|
139
166
|
* See {@link QueryCreator.withSchema}
|
|
140
167
|
*/
|
|
@@ -18,6 +18,10 @@ const drop_schema_builder_js_1 = require("./drop-schema-builder.js");
|
|
|
18
18
|
const drop_table_builder_js_1 = require("./drop-table-builder.js");
|
|
19
19
|
const query_id_js_1 = require("../util/query-id.js");
|
|
20
20
|
const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
|
|
21
|
+
const create_view_builder_js_1 = require("./create-view-builder.js");
|
|
22
|
+
const create_view_node_js_1 = require("../operation-node/create-view-node.js");
|
|
23
|
+
const drop_view_builder_js_1 = require("./drop-view-builder.js");
|
|
24
|
+
const drop_view_node_js_1 = require("../operation-node/drop-view-node.js");
|
|
21
25
|
/**
|
|
22
26
|
* Provides methods for building database schema.
|
|
23
27
|
*/
|
|
@@ -36,7 +40,7 @@ class SchemaModule {
|
|
|
36
40
|
* ```ts
|
|
37
41
|
* await db.schema
|
|
38
42
|
* .createTable('person')
|
|
39
|
-
* .addColumn('id', 'integer', col => col.primaryKey().
|
|
43
|
+
* .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
|
|
40
44
|
* .addColumn('first_name', 'varchar', col => col.notNull())
|
|
41
45
|
* .addColumn('last_name', 'varchar', col => col.notNull())
|
|
42
46
|
* .addColumn('gender', 'varchar')
|
|
@@ -52,7 +56,7 @@ class SchemaModule {
|
|
|
52
56
|
* ```ts
|
|
53
57
|
* await db.schema
|
|
54
58
|
* .createTable('pet')
|
|
55
|
-
* .addColumn('id', 'integer', col => col.primaryKey().
|
|
59
|
+
* .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
|
|
56
60
|
* .addColumn('owner_id', 'integer', col => col
|
|
57
61
|
* .references('person.id')
|
|
58
62
|
* .onDelete('cascade')
|
|
@@ -69,7 +73,7 @@ class SchemaModule {
|
|
|
69
73
|
* ```ts
|
|
70
74
|
* await db.schema
|
|
71
75
|
* .createTable('pet')
|
|
72
|
-
* .addColumn('id', 'integer', col => col.primaryKey().
|
|
76
|
+
* .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
|
|
73
77
|
* .addColumn('owner_id', 'integer')
|
|
74
78
|
* .addForeignKeyConstraint(
|
|
75
79
|
* 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
|
|
@@ -191,6 +195,43 @@ class SchemaModule {
|
|
|
191
195
|
alterTableNode: alter_table_node_js_1.AlterTableNode.create(table),
|
|
192
196
|
});
|
|
193
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Create a new view.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```ts
|
|
203
|
+
* await db.schema
|
|
204
|
+
* .createView('dogs')
|
|
205
|
+
* .orReplace()
|
|
206
|
+
* .as(db.selectFrom('pet').selectAll().where('species', '=', 'dog'))
|
|
207
|
+
* .execute()
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
createView(viewName) {
|
|
211
|
+
return new create_view_builder_js_1.CreateViewBuilder({
|
|
212
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
213
|
+
executor: this.#executor,
|
|
214
|
+
createViewNode: create_view_node_js_1.CreateViewNode.create(viewName),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Drop a view.
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```ts
|
|
222
|
+
* await db.schema
|
|
223
|
+
* .dropView('dogs')
|
|
224
|
+
* .ifExists()
|
|
225
|
+
* .execute()
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
dropView(viewName) {
|
|
229
|
+
return new drop_view_builder_js_1.DropViewBuilder({
|
|
230
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
231
|
+
executor: this.#executor,
|
|
232
|
+
dropViewNode: drop_view_node_js_1.DropViewNode.create(viewName),
|
|
233
|
+
});
|
|
234
|
+
}
|
|
194
235
|
/**
|
|
195
236
|
* See {@link QueryCreator.withSchema}
|
|
196
237
|
*/
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export * from './schema/drop-schema-builder.js';
|
|
|
19
19
|
export * from './schema/column-definition-builder.js';
|
|
20
20
|
export * from './schema/foreign-key-constraint-builder.js';
|
|
21
21
|
export * from './schema/alter-table-builder.js';
|
|
22
|
+
export * from './schema/create-view-builder.js';
|
|
23
|
+
export * from './schema/drop-view-builder.js';
|
|
22
24
|
export * from './dynamic/dynamic.js';
|
|
23
25
|
export * from './driver/driver.js';
|
|
24
26
|
export * from './driver/database-connection.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -19,6 +19,8 @@ export * from './schema/drop-schema-builder.js';
|
|
|
19
19
|
export * from './schema/column-definition-builder.js';
|
|
20
20
|
export * from './schema/foreign-key-constraint-builder.js';
|
|
21
21
|
export * from './schema/alter-table-builder.js';
|
|
22
|
+
export * from './schema/create-view-builder.js';
|
|
23
|
+
export * from './schema/drop-view-builder.js';
|
|
22
24
|
export * from './dynamic/dynamic.js';
|
|
23
25
|
export * from './driver/driver.js';
|
|
24
26
|
export * from './driver/database-connection.js';
|