kysely 0.9.8 → 0.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- 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-schema-node.d.ts +1 -1
- package/dist/cjs/operation-node/drop-schema-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 +18 -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/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 +25 -0
- package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
- package/dist/cjs/schema/create-view-builder.d.ts +23 -0
- package/dist/cjs/schema/create-view-builder.js +65 -0
- package/dist/cjs/schema/drop-view-builder.d.ts +19 -0
- package/dist/cjs/schema/drop-view-builder.js +29 -0
- package/dist/cjs/schema/schema.d.ts +27 -0
- package/dist/cjs/schema/schema.js +41 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- 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-schema-node.d.ts +1 -1
- package/dist/esm/operation-node/drop-schema-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 +18 -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/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 +25 -0
- package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
- package/dist/esm/schema/create-view-builder.d.ts +23 -0
- package/dist/esm/schema/create-view-builder.js +61 -0
- package/dist/esm/schema/drop-view-builder.d.ts +19 -0
- package/dist/esm/schema/drop-view-builder.js +25 -0
- package/dist/esm/schema/schema.d.ts +27 -0
- package/dist/esm/schema/schema.js +41 -0
- package/package.json +1 -1
package/dist/cjs/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/cjs/index.js
CHANGED
|
@@ -31,6 +31,8 @@ __exportStar(require("./schema/drop-schema-builder.js"), exports);
|
|
|
31
31
|
__exportStar(require("./schema/column-definition-builder.js"), exports);
|
|
32
32
|
__exportStar(require("./schema/foreign-key-constraint-builder.js"), exports);
|
|
33
33
|
__exportStar(require("./schema/alter-table-builder.js"), exports);
|
|
34
|
+
__exportStar(require("./schema/create-view-builder.js"), exports);
|
|
35
|
+
__exportStar(require("./schema/drop-view-builder.js"), exports);
|
|
34
36
|
__exportStar(require("./dynamic/dynamic.js"), exports);
|
|
35
37
|
__exportStar(require("./driver/driver.js"), exports);
|
|
36
38
|
__exportStar(require("./driver/database-connection.js"), exports);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ColumnNode } from './column-node.js';
|
|
2
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
3
|
+
import { OperationNode } from './operation-node.js';
|
|
4
|
+
import { RawNode } from './raw-node.js';
|
|
5
|
+
import { SelectQueryNode } from './select-query-node.js';
|
|
6
|
+
export declare type CreateViewNodeModifier = 'OrReplace';
|
|
7
|
+
export declare type CreateViewNodeParams = Omit<Partial<CreateViewNode>, 'kind' | 'name'>;
|
|
8
|
+
export interface CreateViewNode extends OperationNode {
|
|
9
|
+
readonly kind: 'CreateViewNode';
|
|
10
|
+
readonly name: IdentifierNode;
|
|
11
|
+
readonly modifier?: CreateViewNodeModifier;
|
|
12
|
+
readonly columns?: ReadonlyArray<ColumnNode>;
|
|
13
|
+
readonly as?: SelectQueryNode | RawNode;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export declare const CreateViewNode: Readonly<{
|
|
19
|
+
is(node: OperationNode): node is CreateViewNode;
|
|
20
|
+
create(name: string): CreateViewNode;
|
|
21
|
+
cloneWith(createView: CreateViewNode, params: CreateViewNodeParams): CreateViewNode;
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateViewNode = 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.CreateViewNode = (0, object_utils_js_1.freeze)({
|
|
10
|
+
is(node) {
|
|
11
|
+
return node.kind === 'CreateViewNode';
|
|
12
|
+
},
|
|
13
|
+
create(name) {
|
|
14
|
+
return (0, object_utils_js_1.freeze)({
|
|
15
|
+
kind: 'CreateViewNode',
|
|
16
|
+
name: identifier_node_js_1.IdentifierNode.create(name),
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
cloneWith(createView, params) {
|
|
20
|
+
return (0, object_utils_js_1.freeze)({
|
|
21
|
+
...createView,
|
|
22
|
+
...params,
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -13,5 +13,5 @@ export interface DropSchemaNode extends OperationNode {
|
|
|
13
13
|
export declare const DropSchemaNode: Readonly<{
|
|
14
14
|
is(node: OperationNode): node is DropSchemaNode;
|
|
15
15
|
create(schema: string, params?: DropSchemaNodeParams | undefined): DropSchemaNode;
|
|
16
|
-
cloneWithModifier(
|
|
16
|
+
cloneWithModifier(dropSchema: DropSchemaNode, modifier: DropSchemaNodeModifier): DropSchemaNode;
|
|
17
17
|
}>;
|
|
@@ -17,9 +17,9 @@ exports.DropSchemaNode = (0, object_utils_js_1.freeze)({
|
|
|
17
17
|
...params,
|
|
18
18
|
});
|
|
19
19
|
},
|
|
20
|
-
cloneWithModifier(
|
|
20
|
+
cloneWithModifier(dropSchema, modifier) {
|
|
21
21
|
return (0, object_utils_js_1.freeze)({
|
|
22
|
-
...
|
|
22
|
+
...dropSchema,
|
|
23
23
|
modifier,
|
|
24
24
|
});
|
|
25
25
|
},
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export declare type DropViewNodeModifier = 'IfExists';
|
|
4
|
+
export declare type DropViewNodeParams = Omit<Partial<DropViewNode>, 'kind' | 'name'>;
|
|
5
|
+
export interface DropViewNode extends OperationNode {
|
|
6
|
+
readonly kind: 'DropViewNode';
|
|
7
|
+
readonly name: IdentifierNode;
|
|
8
|
+
readonly modifier?: DropViewNodeModifier;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const DropViewNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is DropViewNode;
|
|
15
|
+
create(name: string): DropViewNode;
|
|
16
|
+
cloneWithModifier(dropView: DropViewNode, modifier: DropViewNodeModifier): DropViewNode;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DropViewNode = 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.DropViewNode = (0, object_utils_js_1.freeze)({
|
|
10
|
+
is(node) {
|
|
11
|
+
return node.kind === 'DropViewNode';
|
|
12
|
+
},
|
|
13
|
+
create(name) {
|
|
14
|
+
return (0, object_utils_js_1.freeze)({
|
|
15
|
+
kind: 'DropViewNode',
|
|
16
|
+
name: identifier_node_js_1.IdentifierNode.create(name),
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
cloneWithModifier(dropView, modifier) {
|
|
20
|
+
return (0, object_utils_js_1.freeze)({
|
|
21
|
+
...dropView,
|
|
22
|
+
modifier,
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -58,6 +58,8 @@ import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
|
58
58
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
59
59
|
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
60
60
|
import { UnionNode } from './union-node.js';
|
|
61
|
+
import { CreateViewNode } from './create-view-node.js';
|
|
62
|
+
import { DropViewNode } from './drop-view-node.js';
|
|
61
63
|
/**
|
|
62
64
|
* Transforms an operation node tree into another one.
|
|
63
65
|
*
|
|
@@ -145,6 +147,8 @@ export declare class OperationNodeTransformer {
|
|
|
145
147
|
protected transformModifyColumn(node: ModifyColumnNode): ModifyColumnNode;
|
|
146
148
|
protected transformAddConstraint(node: AddConstraintNode): AddConstraintNode;
|
|
147
149
|
protected transformDropConstraint(node: DropConstraintNode): DropConstraintNode;
|
|
150
|
+
protected transformCreateView(node: CreateViewNode): CreateViewNode;
|
|
151
|
+
protected transformDropView(node: DropViewNode): DropViewNode;
|
|
148
152
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
149
153
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
150
154
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -93,6 +93,8 @@ class OperationNodeTransformer {
|
|
|
93
93
|
DropConstraintNode: this.transformDropConstraint.bind(this),
|
|
94
94
|
ForeignKeyConstraintNode: this.transformForeignKeyConstraint.bind(this),
|
|
95
95
|
UnionNode: this.transformUnion.bind(this),
|
|
96
|
+
CreateViewNode: this.transformCreateView.bind(this),
|
|
97
|
+
DropViewNode: this.transformDropView.bind(this),
|
|
96
98
|
};
|
|
97
99
|
transformNode = (node) => {
|
|
98
100
|
if (!node) {
|
|
@@ -518,6 +520,22 @@ class OperationNodeTransformer {
|
|
|
518
520
|
constraintName: this.transformNode(node.constraintName),
|
|
519
521
|
};
|
|
520
522
|
}
|
|
523
|
+
transformCreateView(node) {
|
|
524
|
+
return {
|
|
525
|
+
kind: 'CreateViewNode',
|
|
526
|
+
name: this.transformNode(node.name),
|
|
527
|
+
modifier: node.modifier,
|
|
528
|
+
columns: this.transformNodeList(node.columns),
|
|
529
|
+
as: this.transformNode(node.as),
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
transformDropView(node) {
|
|
533
|
+
return {
|
|
534
|
+
kind: 'DropViewNode',
|
|
535
|
+
name: this.transformNode(node.name),
|
|
536
|
+
modifier: node.modifier,
|
|
537
|
+
};
|
|
538
|
+
}
|
|
521
539
|
transformDataType(node) {
|
|
522
540
|
// An Object.freezed leaf node. No need to clone.
|
|
523
541
|
return node;
|
|
@@ -58,6 +58,8 @@ import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
|
58
58
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
59
59
|
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
60
60
|
import { UnionNode } from './union-node.js';
|
|
61
|
+
import { CreateViewNode } from './create-view-node.js';
|
|
62
|
+
import { DropViewNode } from './drop-view-node.js';
|
|
61
63
|
export declare abstract class OperationNodeVisitor {
|
|
62
64
|
#private;
|
|
63
65
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -121,4 +123,6 @@ export declare abstract class OperationNodeVisitor {
|
|
|
121
123
|
protected abstract visitValue(_: ValueNode): void;
|
|
122
124
|
protected abstract visitPrimitiveValueList(_: PrimitiveValueListNode): void;
|
|
123
125
|
protected abstract visitOperator(node: OperatorNode): void;
|
|
126
|
+
protected abstract visitCreateView(node: CreateViewNode): void;
|
|
127
|
+
protected abstract visitDropView(node: DropViewNode): void;
|
|
124
128
|
}
|
|
@@ -63,6 +63,8 @@ class OperationNodeVisitor {
|
|
|
63
63
|
DropConstraintNode: this.visitDropConstraint.bind(this),
|
|
64
64
|
ForeignKeyConstraintNode: this.visitForeignKeyConstraint.bind(this),
|
|
65
65
|
UnionNode: this.visitUnion.bind(this),
|
|
66
|
+
CreateViewNode: this.visitCreateView.bind(this),
|
|
67
|
+
DropViewNode: this.visitDropView.bind(this),
|
|
66
68
|
};
|
|
67
69
|
visitNode = (node) => {
|
|
68
70
|
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';
|
|
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';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { QueryResult } from '../../driver/database-connection.js';
|
|
2
|
+
import { UnknownRow } from '../../index.js';
|
|
3
|
+
import { RootOperationNode } from '../../query-compiler/query-compiler.js';
|
|
4
|
+
import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } from '../kysely-plugin.js';
|
|
5
|
+
/**
|
|
6
|
+
* Transforms all ValueNodes to immediate.
|
|
7
|
+
*
|
|
8
|
+
* WARNING! This should never be part of the public API. Users should never use this.
|
|
9
|
+
* This is an internal helper.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare class ImmediateValuePlugin implements KyselyPlugin {
|
|
14
|
+
#private;
|
|
15
|
+
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
16
|
+
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ImmediateValuePlugin = void 0;
|
|
4
|
+
const immediate_value_transformer_js_1 = require("./immediate-value-transformer.js");
|
|
5
|
+
/**
|
|
6
|
+
* Transforms all ValueNodes to immediate.
|
|
7
|
+
*
|
|
8
|
+
* WARNING! This should never be part of the public API. Users should never use this.
|
|
9
|
+
* This is an internal helper.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
class ImmediateValuePlugin {
|
|
14
|
+
#transformer = new immediate_value_transformer_js_1.ImmediateValueTransformer();
|
|
15
|
+
transformQuery(args) {
|
|
16
|
+
return this.#transformer.transformNode(args.node);
|
|
17
|
+
}
|
|
18
|
+
async transformResult(args) {
|
|
19
|
+
return args.result;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.ImmediateValuePlugin = ImmediateValuePlugin;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
2
|
+
import { ValueNode } from '../../operation-node/value-node.js';
|
|
3
|
+
/**
|
|
4
|
+
* Transforms all ValueNodes to immediate.
|
|
5
|
+
*
|
|
6
|
+
* WARNING! This should never be part of the public API. Users should never use this.
|
|
7
|
+
* This is an internal helper.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare class ImmediateValueTransformer extends OperationNodeTransformer {
|
|
12
|
+
transformValue(node: ValueNode): ValueNode;
|
|
13
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ImmediateValueTransformer = void 0;
|
|
4
|
+
const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
|
|
5
|
+
/**
|
|
6
|
+
* Transforms all ValueNodes to immediate.
|
|
7
|
+
*
|
|
8
|
+
* WARNING! This should never be part of the public API. Users should never use this.
|
|
9
|
+
* This is an internal helper.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
class ImmediateValueTransformer extends operation_node_transformer_js_1.OperationNodeTransformer {
|
|
14
|
+
transformValue(node) {
|
|
15
|
+
return {
|
|
16
|
+
...super.transformValue(node),
|
|
17
|
+
immediate: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ImmediateValueTransformer = ImmediateValueTransformer;
|
|
@@ -1,9 +1,11 @@
|
|
|
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 { CreateViewNode } from '../../operation-node/create-view-node.js';
|
|
4
5
|
import { DeleteQueryNode } from '../../operation-node/delete-query-node.js';
|
|
5
6
|
import { DropIndexNode } from '../../operation-node/drop-index-node.js';
|
|
6
7
|
import { DropTableNode } from '../../operation-node/drop-table-node.js';
|
|
8
|
+
import { DropViewNode } from '../../operation-node/drop-view-node.js';
|
|
7
9
|
import { InsertQueryNode } from '../../operation-node/insert-query-node.js';
|
|
8
10
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
9
11
|
import { SelectQueryNode } from '../../operation-node/select-query-node.js';
|
|
@@ -20,6 +22,8 @@ export declare class WithSchemaTransformer extends OperationNodeTransformer {
|
|
|
20
22
|
protected transformDropTable(node: DropTableNode): DropTableNode;
|
|
21
23
|
protected transformCreateIndex(node: CreateIndexNode): CreateIndexNode;
|
|
22
24
|
protected transformDropIndex(node: DropIndexNode): DropIndexNode;
|
|
25
|
+
protected transformCreateView(node: CreateViewNode): CreateViewNode;
|
|
26
|
+
protected transformDropView(node: DropViewNode): DropViewNode;
|
|
23
27
|
protected transformAlterTable(node: AlterTableNode): AlterTableNode;
|
|
24
28
|
protected transformTable(node: TableNode): TableNode;
|
|
25
29
|
}
|
|
@@ -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;
|
|
@@ -647,6 +647,31 @@ 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.modifier === 'OrReplace') {
|
|
653
|
+
this.append('or replace ');
|
|
654
|
+
}
|
|
655
|
+
this.append('view ');
|
|
656
|
+
this.visitNode(node.name);
|
|
657
|
+
this.append(' ');
|
|
658
|
+
if (node.columns) {
|
|
659
|
+
this.append('(');
|
|
660
|
+
this.compileList(node.columns);
|
|
661
|
+
this.append(') ');
|
|
662
|
+
}
|
|
663
|
+
if (node.as) {
|
|
664
|
+
this.append('as ');
|
|
665
|
+
this.visitNode(node.as);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
visitDropView(node) {
|
|
669
|
+
this.append('drop view ');
|
|
670
|
+
if (node.modifier === 'IfExists') {
|
|
671
|
+
this.append('if exists ');
|
|
672
|
+
}
|
|
673
|
+
this.visitNode(node.name);
|
|
674
|
+
}
|
|
650
675
|
append(str) {
|
|
651
676
|
this.#sql += str;
|
|
652
677
|
}
|
|
@@ -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
|
*/
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
orReplace(): CreateViewBuilder;
|
|
13
|
+
columns(columns: string[]): CreateViewBuilder;
|
|
14
|
+
as(query: AnyQueryBuilder | AnyRawBuilder): CreateViewBuilder;
|
|
15
|
+
toOperationNode(): CreateViewNode;
|
|
16
|
+
compile(): CompiledQuery;
|
|
17
|
+
execute(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export interface CreateViewBuilderProps {
|
|
20
|
+
readonly queryId: QueryId;
|
|
21
|
+
readonly executor: QueryExecutor;
|
|
22
|
+
readonly createViewNode: CreateViewNode;
|
|
23
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
orReplace() {
|
|
27
|
+
return new CreateViewBuilder({
|
|
28
|
+
...this.#props,
|
|
29
|
+
createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
|
|
30
|
+
modifier: 'OrReplace',
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
columns(columns) {
|
|
35
|
+
return new CreateViewBuilder({
|
|
36
|
+
...this.#props,
|
|
37
|
+
createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
|
|
38
|
+
columns: columns.map(reference_parser_js_1.parseColumnName),
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
as(query) {
|
|
43
|
+
const queryNode = query.toOperationNode();
|
|
44
|
+
if (index_js_1.QueryNode.isMutating(queryNode)) {
|
|
45
|
+
throw new Error('only select statements are allowd in views');
|
|
46
|
+
}
|
|
47
|
+
return new CreateViewBuilder({
|
|
48
|
+
...this.#props,
|
|
49
|
+
createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
|
|
50
|
+
as: queryNode,
|
|
51
|
+
}),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
toOperationNode() {
|
|
55
|
+
return this.#props.executor.transformQuery(this.#props.createViewNode, this.#props.queryId);
|
|
56
|
+
}
|
|
57
|
+
compile() {
|
|
58
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
59
|
+
}
|
|
60
|
+
async execute() {
|
|
61
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.CreateViewBuilder = CreateViewBuilder;
|
|
65
|
+
(0, prevent_await_js_1.preventAwait)(CreateViewBuilder, "don't await CreateViewBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -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 { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
7
|
+
export declare class DropViewBuilder implements OperationNodeSource, Compilable {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(props: DropViewBuilderProps);
|
|
10
|
+
ifExists(): DropViewBuilder;
|
|
11
|
+
toOperationNode(): DropViewNode;
|
|
12
|
+
compile(): CompiledQuery;
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface DropViewBuilderProps {
|
|
16
|
+
readonly queryId: QueryId;
|
|
17
|
+
readonly executor: QueryExecutor;
|
|
18
|
+
readonly dropViewNode: DropViewNode;
|
|
19
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
ifExists() {
|
|
13
|
+
return new DropViewBuilder({
|
|
14
|
+
...this.#props,
|
|
15
|
+
dropViewNode: drop_view_node_js_1.DropViewNode.cloneWithModifier(this.#props.dropViewNode, 'IfExists'),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
toOperationNode() {
|
|
19
|
+
return this.#props.executor.transformQuery(this.#props.dropViewNode, 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
|
+
exports.DropViewBuilder = DropViewBuilder;
|
|
29
|
+
(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
|
*/
|
|
@@ -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
|
*/
|
|
@@ -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
|
*/
|