kysely 0.7.1 → 0.7.5
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 +24 -19
- package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
- package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-driver.js +1 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +0 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -4
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -18
- package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +0 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -2
- package/dist/cjs/driver/database-connection.d.ts +2 -1
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/single-connection-provider.d.ts +0 -1
- package/dist/cjs/driver/single-connection-provider.js +2 -2
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/kysely.d.ts +7 -6
- package/dist/cjs/kysely.js +8 -6
- package/dist/cjs/migration/migration.js +11 -10
- package/dist/cjs/operation-node/alter-column-node.d.ts +2 -2
- package/dist/cjs/operation-node/alter-column-node.js +2 -2
- package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
- package/dist/cjs/operation-node/alter-table-node.js +2 -2
- package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
- package/dist/cjs/operation-node/column-definition-node.js +2 -2
- package/dist/cjs/operation-node/create-index-node.d.ts +2 -2
- package/dist/cjs/operation-node/create-index-node.js +2 -2
- package/dist/cjs/operation-node/create-table-node.d.ts +2 -1
- package/dist/cjs/operation-node/create-table-node.js +1 -5
- package/dist/cjs/operation-node/drop-index-node.d.ts +3 -3
- package/dist/cjs/operation-node/drop-index-node.js +2 -2
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +12 -1
- package/dist/cjs/operation-node/foreign-key-constraint-node.js +6 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +5 -2
- package/dist/cjs/operation-node/insert-query-node.js +2 -9
- package/dist/cjs/operation-node/join-node.d.ts +1 -0
- package/dist/cjs/operation-node/join-node.js +8 -0
- package/dist/cjs/operation-node/on-conflict-node.d.ts +2 -2
- package/dist/cjs/operation-node/on-conflict-node.js +2 -2
- package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +14 -0
- package/dist/cjs/operation-node/on-duplicate-key-node.js +18 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/references-node.d.ts +5 -3
- package/dist/cjs/operation-node/references-node.js +6 -0
- package/dist/cjs/operation-node/table-node.js +2 -2
- package/dist/cjs/parser/data-type-parser.d.ts +5 -0
- package/dist/cjs/parser/data-type-parser.js +11 -0
- package/dist/cjs/parser/default-value-parser.d.ts +6 -0
- package/dist/cjs/parser/default-value-parser.js +11 -0
- package/dist/cjs/parser/filter-parser.d.ts +2 -2
- package/dist/cjs/parser/filter-parser.js +34 -36
- package/dist/cjs/parser/join-parser.d.ts +1 -1
- package/dist/cjs/parser/join-parser.js +9 -11
- package/dist/cjs/parser/parse-context.d.ts +34 -7
- package/dist/cjs/parser/parse-context.js +42 -34
- package/dist/cjs/parser/reference-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.js +16 -12
- package/dist/cjs/parser/select-parser.d.ts +1 -2
- package/dist/cjs/parser/select-parser.js +4 -5
- package/dist/cjs/parser/table-parser.js +11 -6
- package/dist/cjs/parser/update-set-parser.js +1 -1
- package/dist/cjs/parser/value-parser.js +1 -1
- package/dist/cjs/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
- package/dist/cjs/query-builder/{sub-query-builder.js → expression-builder.js} +6 -10
- package/dist/cjs/query-builder/join-builder.d.ts +2 -2
- package/dist/cjs/query-builder/join-builder.js +8 -12
- package/dist/cjs/query-builder/query-builder.d.ts +47 -8
- package/dist/cjs/query-builder/query-builder.js +163 -91
- package/dist/cjs/query-builder/type-utils.d.ts +5 -5
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +26 -6
- package/dist/cjs/query-creator.d.ts +2 -2
- package/dist/cjs/query-creator.js +8 -12
- package/dist/cjs/schema/alter-table-builder.d.ts +31 -8
- package/dist/cjs/schema/alter-table-builder.js +80 -7
- package/dist/cjs/schema/column-definition-builder.d.ts +10 -4
- package/dist/cjs/schema/column-definition-builder.js +11 -6
- package/dist/cjs/schema/create-index-builder.d.ts +5 -5
- package/dist/cjs/schema/create-index-builder.js +19 -28
- package/dist/cjs/schema/create-schema-builder.d.ts +5 -5
- package/dist/cjs/schema/create-schema-builder.js +9 -13
- package/dist/cjs/schema/create-table-builder.d.ts +22 -10
- package/dist/cjs/schema/create-table-builder.js +41 -34
- package/dist/cjs/schema/drop-index-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-index-builder.js +11 -16
- package/dist/cjs/schema/drop-schema-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-schema-builder.js +9 -13
- package/dist/cjs/schema/drop-table-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-table-builder.js +9 -13
- package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +26 -0
- package/dist/cjs/transformers/with-schema-transformer.d.ts +0 -5
- package/dist/cjs/transformers/with-schema-transformer.js +21 -21
- package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-driver.js +1 -0
- package/dist/esm/dialect/mysql/mysql-introspector.d.ts +0 -1
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -4
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -18
- package/dist/esm/dialect/postgres/postgres-introspector.d.ts +0 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +2 -2
- package/dist/esm/driver/database-connection.d.ts +2 -1
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/single-connection-provider.d.ts +0 -1
- package/dist/esm/driver/single-connection-provider.js +2 -2
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/kysely.d.ts +7 -6
- package/dist/esm/kysely.js +8 -6
- package/dist/esm/migration/migration.js +12 -11
- package/dist/esm/operation-node/alter-column-node.d.ts +2 -2
- package/dist/esm/operation-node/alter-column-node.js +2 -2
- package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
- package/dist/esm/operation-node/alter-table-node.js +2 -2
- package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
- package/dist/esm/operation-node/column-definition-node.js +2 -2
- package/dist/esm/operation-node/create-index-node.d.ts +2 -2
- package/dist/esm/operation-node/create-index-node.js +2 -2
- package/dist/esm/operation-node/create-table-node.d.ts +2 -1
- package/dist/esm/operation-node/create-table-node.js +1 -5
- package/dist/esm/operation-node/drop-index-node.d.ts +3 -3
- package/dist/esm/operation-node/drop-index-node.js +2 -2
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +12 -1
- package/dist/esm/operation-node/foreign-key-constraint-node.js +6 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +5 -2
- package/dist/esm/operation-node/insert-query-node.js +2 -9
- package/dist/esm/operation-node/join-node.d.ts +1 -0
- package/dist/esm/operation-node/join-node.js +8 -0
- package/dist/esm/operation-node/on-conflict-node.d.ts +2 -2
- package/dist/esm/operation-node/on-conflict-node.js +2 -2
- package/dist/esm/operation-node/on-duplicate-key-node.d.ts +14 -0
- package/dist/esm/operation-node/on-duplicate-key-node.js +15 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +12 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +4 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/references-node.d.ts +5 -3
- package/dist/esm/operation-node/references-node.js +6 -0
- package/dist/esm/operation-node/table-node.js +2 -2
- package/dist/esm/parser/data-type-parser.d.ts +5 -0
- package/dist/esm/parser/data-type-parser.js +7 -0
- package/dist/esm/parser/default-value-parser.d.ts +6 -0
- package/dist/esm/parser/default-value-parser.js +7 -0
- package/dist/esm/parser/filter-parser.d.ts +2 -2
- package/dist/esm/parser/filter-parser.js +31 -33
- package/dist/esm/parser/join-parser.d.ts +1 -1
- package/dist/esm/parser/join-parser.js +7 -9
- package/dist/esm/parser/parse-context.d.ts +34 -7
- package/dist/esm/parser/parse-context.js +40 -32
- package/dist/esm/parser/reference-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.js +16 -12
- package/dist/esm/parser/select-parser.d.ts +1 -2
- package/dist/esm/parser/select-parser.js +3 -3
- package/dist/esm/parser/table-parser.js +11 -6
- package/dist/esm/parser/update-set-parser.js +1 -1
- package/dist/esm/parser/value-parser.js +1 -1
- package/dist/esm/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
- package/dist/esm/query-builder/{sub-query-builder.js → expression-builder.js} +4 -8
- package/dist/esm/query-builder/join-builder.d.ts +2 -2
- package/dist/esm/query-builder/join-builder.js +9 -13
- package/dist/esm/query-builder/query-builder.d.ts +47 -8
- package/dist/esm/query-builder/query-builder.js +165 -93
- package/dist/esm/query-builder/type-utils.d.ts +5 -5
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -1
- package/dist/esm/query-compiler/default-query-compiler.js +27 -7
- package/dist/esm/query-creator.d.ts +2 -2
- package/dist/esm/query-creator.js +8 -12
- package/dist/esm/schema/alter-table-builder.d.ts +31 -8
- package/dist/esm/schema/alter-table-builder.js +78 -6
- package/dist/esm/schema/column-definition-builder.d.ts +10 -4
- package/dist/esm/schema/column-definition-builder.js +12 -7
- package/dist/esm/schema/create-index-builder.d.ts +5 -5
- package/dist/esm/schema/create-index-builder.js +19 -28
- package/dist/esm/schema/create-schema-builder.d.ts +5 -5
- package/dist/esm/schema/create-schema-builder.js +9 -13
- package/dist/esm/schema/create-table-builder.d.ts +22 -10
- package/dist/esm/schema/create-table-builder.js +41 -34
- package/dist/esm/schema/drop-index-builder.d.ts +5 -5
- package/dist/esm/schema/drop-index-builder.js +11 -16
- package/dist/esm/schema/drop-schema-builder.d.ts +5 -5
- package/dist/esm/schema/drop-schema-builder.js +9 -13
- package/dist/esm/schema/drop-table-builder.d.ts +5 -5
- package/dist/esm/schema/drop-table-builder.js +9 -13
- package/dist/esm/schema/foreign-key-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +22 -0
- package/dist/esm/transformers/with-schema-transformer.d.ts +0 -5
- package/dist/esm/transformers/with-schema-transformer.js +21 -21
- package/package.json +1 -1
|
@@ -17,10 +17,10 @@ exports.DropIndexNode = (0, object_utils_js_1.freeze)({
|
|
|
17
17
|
...params,
|
|
18
18
|
});
|
|
19
19
|
},
|
|
20
|
-
cloneWith(dropIndex,
|
|
20
|
+
cloneWith(dropIndex, props) {
|
|
21
21
|
return (0, object_utils_js_1.freeze)({
|
|
22
22
|
...dropIndex,
|
|
23
|
-
...
|
|
23
|
+
...props,
|
|
24
24
|
});
|
|
25
25
|
},
|
|
26
26
|
});
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { ColumnNode } from './column-node.js';
|
|
2
2
|
import { IdentifierNode } from './identifier-node.js';
|
|
3
3
|
import { OperationNode } from './operation-node.js';
|
|
4
|
-
import { ReferencesNode } from './references-node.js';
|
|
4
|
+
import { OnModifyForeignAction, ReferencesNode } from './references-node.js';
|
|
5
5
|
import { TableNode } from './table-node.js';
|
|
6
|
+
export declare type ForeignKeyConstraintNodeProps = Omit<ForeignKeyConstraintNode, 'kind' | 'columns' | 'references'>;
|
|
6
7
|
export interface ForeignKeyConstraintNode extends OperationNode {
|
|
7
8
|
readonly kind: 'ForeignKeyConstraintNode';
|
|
8
9
|
readonly columns: ReadonlyArray<ColumnNode>;
|
|
9
10
|
readonly references: ReferencesNode;
|
|
11
|
+
readonly onDelete?: OnModifyForeignAction;
|
|
12
|
+
readonly onUpdate?: OnModifyForeignAction;
|
|
10
13
|
readonly name?: IdentifierNode;
|
|
11
14
|
}
|
|
12
15
|
/**
|
|
@@ -15,4 +18,12 @@ export interface ForeignKeyConstraintNode extends OperationNode {
|
|
|
15
18
|
export declare const ForeignKeyConstraintNode: Readonly<{
|
|
16
19
|
is(node: OperationNode): node is ForeignKeyConstraintNode;
|
|
17
20
|
create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string | undefined): ForeignKeyConstraintNode;
|
|
21
|
+
cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
|
|
22
|
+
name?: IdentifierNode | undefined;
|
|
23
|
+
onDelete?: OnModifyForeignAction | undefined;
|
|
24
|
+
onUpdate?: OnModifyForeignAction | undefined;
|
|
25
|
+
kind: 'ForeignKeyConstraintNode';
|
|
26
|
+
columns: ReadonlyArray<ColumnNode>;
|
|
27
|
+
references: ReferencesNode;
|
|
28
|
+
}>;
|
|
18
29
|
}>;
|
|
@@ -19,4 +19,10 @@ exports.ForeignKeyConstraintNode = (0, object_utils_js_1.freeze)({
|
|
|
19
19
|
name: constraintName ? identifier_node_js_1.IdentifierNode.create(constraintName) : undefined,
|
|
20
20
|
});
|
|
21
21
|
},
|
|
22
|
+
cloneWith(node, props) {
|
|
23
|
+
return (0, object_utils_js_1.freeze)({
|
|
24
|
+
...node,
|
|
25
|
+
...props,
|
|
26
|
+
});
|
|
27
|
+
},
|
|
22
28
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ColumnNode } from './column-node.js';
|
|
2
2
|
import { OnConflictNode } from './on-conflict-node.js';
|
|
3
|
+
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
3
4
|
import { OperationNode } from './operation-node.js';
|
|
4
5
|
import { PrimitiveValueListNode } from './primitive-value-list-node.js';
|
|
5
6
|
import { ReturningNode } from './returning-node.js';
|
|
@@ -7,6 +8,7 @@ import { TableNode } from './table-node.js';
|
|
|
7
8
|
import { ValueListNode } from './value-list-node.js';
|
|
8
9
|
import { WithNode } from './with-node.js';
|
|
9
10
|
export declare type InsertValuesNode = ValueListNode | PrimitiveValueListNode;
|
|
11
|
+
export declare type InsertQueryNodeProps = Omit<InsertQueryNode, 'kind' | 'into'>;
|
|
10
12
|
export interface InsertQueryNode extends OperationNode {
|
|
11
13
|
readonly kind: 'InsertQueryNode';
|
|
12
14
|
readonly into: TableNode;
|
|
@@ -14,7 +16,9 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
14
16
|
readonly values?: ReadonlyArray<InsertValuesNode>;
|
|
15
17
|
readonly returning?: ReturningNode;
|
|
16
18
|
readonly onConflict?: OnConflictNode;
|
|
19
|
+
readonly onDuplicateKey?: OnDuplicateKeyNode;
|
|
17
20
|
readonly with?: WithNode;
|
|
21
|
+
readonly ignore?: boolean;
|
|
18
22
|
}
|
|
19
23
|
/**
|
|
20
24
|
* @internal
|
|
@@ -22,6 +26,5 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
22
26
|
export declare const InsertQueryNode: Readonly<{
|
|
23
27
|
is(node: OperationNode): node is InsertQueryNode;
|
|
24
28
|
create(into: TableNode, withNode?: WithNode | undefined): InsertQueryNode;
|
|
25
|
-
|
|
26
|
-
cloneWithOnConflict(insertQuery: InsertQueryNode, onConflict: OnConflictNode): InsertQueryNode;
|
|
29
|
+
cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
|
|
27
30
|
}>;
|
|
@@ -16,17 +16,10 @@ exports.InsertQueryNode = (0, object_utils_js_1.freeze)({
|
|
|
16
16
|
...(withNode && { with: withNode }),
|
|
17
17
|
});
|
|
18
18
|
},
|
|
19
|
-
|
|
19
|
+
cloneWith(insertQuery, props) {
|
|
20
20
|
return (0, object_utils_js_1.freeze)({
|
|
21
21
|
...insertQuery,
|
|
22
|
-
|
|
23
|
-
values,
|
|
24
|
-
});
|
|
25
|
-
},
|
|
26
|
-
cloneWithOnConflict(insertQuery, onConflict) {
|
|
27
|
-
return (0, object_utils_js_1.freeze)({
|
|
28
|
-
...insertQuery,
|
|
29
|
-
onConflict,
|
|
22
|
+
...props,
|
|
30
23
|
});
|
|
31
24
|
},
|
|
32
25
|
});
|
|
@@ -20,5 +20,6 @@ export interface JoinNode extends OperationNode {
|
|
|
20
20
|
export declare const JoinNode: Readonly<{
|
|
21
21
|
is(node: OperationNode): node is JoinNode;
|
|
22
22
|
create(joinType: JoinType, table: JoinTableNode): JoinNode;
|
|
23
|
+
createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
|
|
23
24
|
cloneWithOn(joinNode: JoinNode, op: 'And' | 'Or', on: JoinNodeOnNode): JoinNode;
|
|
24
25
|
}>;
|
|
@@ -19,6 +19,14 @@ exports.JoinNode = (0, object_utils_js_1.freeze)({
|
|
|
19
19
|
on: undefined,
|
|
20
20
|
});
|
|
21
21
|
},
|
|
22
|
+
createWithOn(joinType, table, on) {
|
|
23
|
+
return (0, object_utils_js_1.freeze)({
|
|
24
|
+
kind: 'JoinNode',
|
|
25
|
+
joinType,
|
|
26
|
+
table,
|
|
27
|
+
on,
|
|
28
|
+
});
|
|
29
|
+
},
|
|
22
30
|
cloneWithOn(joinNode, op, on) {
|
|
23
31
|
return (0, object_utils_js_1.freeze)({
|
|
24
32
|
...joinNode,
|
|
@@ -2,7 +2,7 @@ import { ColumnNode } from './column-node.js';
|
|
|
2
2
|
import { ColumnUpdateNode } from './column-update-node.js';
|
|
3
3
|
import { IdentifierNode } from './identifier-node.js';
|
|
4
4
|
import { OperationNode } from './operation-node.js';
|
|
5
|
-
export declare type
|
|
5
|
+
export declare type OnConflictNodeProps = Omit<OnConflictNode, 'kind'>;
|
|
6
6
|
export interface OnConflictNode extends OperationNode {
|
|
7
7
|
readonly kind: 'OnConflictNode';
|
|
8
8
|
readonly columns?: ReadonlyArray<ColumnNode>;
|
|
@@ -15,5 +15,5 @@ export interface OnConflictNode extends OperationNode {
|
|
|
15
15
|
*/
|
|
16
16
|
export declare const OnConflictNode: Readonly<{
|
|
17
17
|
is(node: OperationNode): node is OnConflictNode;
|
|
18
|
-
create(
|
|
18
|
+
create(props: OnConflictNodeProps): OnConflictNode;
|
|
19
19
|
}>;
|
|
@@ -9,10 +9,10 @@ exports.OnConflictNode = (0, object_utils_js_1.freeze)({
|
|
|
9
9
|
is(node) {
|
|
10
10
|
return node.kind === 'OnConflictNode';
|
|
11
11
|
},
|
|
12
|
-
create(
|
|
12
|
+
create(props) {
|
|
13
13
|
return (0, object_utils_js_1.freeze)({
|
|
14
14
|
kind: 'OnConflictNode',
|
|
15
|
-
...
|
|
15
|
+
...props,
|
|
16
16
|
});
|
|
17
17
|
},
|
|
18
18
|
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ColumnUpdateNode } from './column-update-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export declare type OnDuplicateKeyNodeProps = Omit<OnDuplicateKeyNode, 'kind'>;
|
|
4
|
+
export interface OnDuplicateKeyNode extends OperationNode {
|
|
5
|
+
readonly kind: 'OnDuplicateKeyNode';
|
|
6
|
+
readonly updates: ReadonlyArray<ColumnUpdateNode>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare const OnDuplicateKeyNode: Readonly<{
|
|
12
|
+
is(node: OperationNode): node is OnDuplicateKeyNode;
|
|
13
|
+
create(updates: ReadonlyArray<ColumnUpdateNode>): OnDuplicateKeyNode;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OnDuplicateKeyNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
exports.OnDuplicateKeyNode = (0, object_utils_js_1.freeze)({
|
|
9
|
+
is(node) {
|
|
10
|
+
return node.kind === 'OnDuplicateKeyNode';
|
|
11
|
+
},
|
|
12
|
+
create(updates) {
|
|
13
|
+
return (0, object_utils_js_1.freeze)({
|
|
14
|
+
kind: 'OnDuplicateKeyNode',
|
|
15
|
+
updates,
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
});
|
|
@@ -56,6 +56,7 @@ import { DropConstraintNode } from './drop-constraint-node.js';
|
|
|
56
56
|
import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
|
|
57
57
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
58
58
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
59
|
+
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
59
60
|
/**
|
|
60
61
|
* Transforms an operation node tree into another one.
|
|
61
62
|
*
|
|
@@ -121,6 +122,7 @@ export declare class OperationNodeTransformer {
|
|
|
121
122
|
protected transformLimit(node: LimitNode): LimitNode;
|
|
122
123
|
protected transformOffset(node: OffsetNode): OffsetNode;
|
|
123
124
|
protected transformOnConflict(node: OnConflictNode): OnConflictNode;
|
|
125
|
+
protected transformOnDuplicateKey(node: OnDuplicateKeyNode): OnDuplicateKeyNode;
|
|
124
126
|
protected transformCreateIndex(node: CreateIndexNode): CreateIndexNode;
|
|
125
127
|
protected transformList(node: ListNode): ListNode;
|
|
126
128
|
protected transformDropIndex(node: DropIndexNode): DropIndexNode;
|
|
@@ -71,6 +71,7 @@ class OperationNodeTransformer {
|
|
|
71
71
|
LimitNode: this.transformLimit.bind(this),
|
|
72
72
|
OffsetNode: this.transformOffset.bind(this),
|
|
73
73
|
OnConflictNode: this.transformOnConflict.bind(this),
|
|
74
|
+
OnDuplicateKeyNode: this.transformOnDuplicateKey.bind(this),
|
|
74
75
|
CreateIndexNode: this.transformCreateIndex.bind(this),
|
|
75
76
|
DropIndexNode: this.transformDropIndex.bind(this),
|
|
76
77
|
ListNode: this.transformList.bind(this),
|
|
@@ -227,7 +228,9 @@ class OperationNodeTransformer {
|
|
|
227
228
|
values: this.transformNodeList(node.values),
|
|
228
229
|
returning: this.transformNode(node.returning),
|
|
229
230
|
onConflict: this.transformNode(node.onConflict),
|
|
231
|
+
onDuplicateKey: this.transformNode(node.onDuplicateKey),
|
|
230
232
|
with: this.transformNode(node.with),
|
|
233
|
+
ignore: node.ignore,
|
|
231
234
|
};
|
|
232
235
|
}
|
|
233
236
|
transformDeleteQuery(node) {
|
|
@@ -346,6 +349,12 @@ class OperationNodeTransformer {
|
|
|
346
349
|
doNothing: node.doNothing,
|
|
347
350
|
};
|
|
348
351
|
}
|
|
352
|
+
transformOnDuplicateKey(node) {
|
|
353
|
+
return {
|
|
354
|
+
kind: 'OnDuplicateKeyNode',
|
|
355
|
+
updates: this.transformNodeList(node.updates),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
349
358
|
transformCreateIndex(node) {
|
|
350
359
|
return {
|
|
351
360
|
kind: 'CreateIndexNode',
|
|
@@ -390,6 +399,8 @@ class OperationNodeTransformer {
|
|
|
390
399
|
columns: this.transformNodeList(node.columns),
|
|
391
400
|
references: this.transformNode(node.references),
|
|
392
401
|
name: this.transformNode(node.name),
|
|
402
|
+
onDelete: node.onDelete,
|
|
403
|
+
onUpdate: node.onUpdate,
|
|
393
404
|
};
|
|
394
405
|
}
|
|
395
406
|
transformReferences(node) {
|
|
@@ -398,6 +409,7 @@ class OperationNodeTransformer {
|
|
|
398
409
|
table: this.transformNode(node.table),
|
|
399
410
|
columns: this.transformNodeList(node.columns),
|
|
400
411
|
onDelete: node.onDelete,
|
|
412
|
+
onUpdate: node.onUpdate,
|
|
401
413
|
};
|
|
402
414
|
}
|
|
403
415
|
transformCheckConstraint(node) {
|
|
@@ -56,6 +56,7 @@ import { DropConstraintNode } from './drop-constraint-node.js';
|
|
|
56
56
|
import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
|
|
57
57
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
58
58
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
59
|
+
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
59
60
|
export declare class OperationNodeVisitor {
|
|
60
61
|
#private;
|
|
61
62
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -91,6 +92,7 @@ export declare class OperationNodeVisitor {
|
|
|
91
92
|
protected visitLimit(node: LimitNode): void;
|
|
92
93
|
protected visitOffset(node: OffsetNode): void;
|
|
93
94
|
protected visitOnConflict(node: OnConflictNode): void;
|
|
95
|
+
protected visitOnDuplicateKey(node: OnDuplicateKeyNode): void;
|
|
94
96
|
protected visitCreateIndex(node: CreateIndexNode): void;
|
|
95
97
|
protected visitList(node: ListNode): void;
|
|
96
98
|
protected visitDropIndex(node: DropIndexNode): void;
|
|
@@ -41,6 +41,7 @@ class OperationNodeVisitor {
|
|
|
41
41
|
LimitNode: this.visitLimit.bind(this),
|
|
42
42
|
OffsetNode: this.visitOffset.bind(this),
|
|
43
43
|
OnConflictNode: this.visitOnConflict.bind(this),
|
|
44
|
+
OnDuplicateKeyNode: this.visitOnDuplicateKey.bind(this),
|
|
44
45
|
CreateIndexNode: this.visitCreateIndex.bind(this),
|
|
45
46
|
DropIndexNode: this.visitDropIndex.bind(this),
|
|
46
47
|
ListNode: this.visitList.bind(this),
|
|
@@ -265,6 +266,9 @@ class OperationNodeVisitor {
|
|
|
265
266
|
node.updates.forEach(this.visitNode);
|
|
266
267
|
}
|
|
267
268
|
}
|
|
269
|
+
visitOnDuplicateKey(node) {
|
|
270
|
+
node.updates.forEach(this.visitNode);
|
|
271
|
+
}
|
|
268
272
|
visitCreateIndex(node) {
|
|
269
273
|
this.visitNode(node.name);
|
|
270
274
|
if (node.table) {
|
|
@@ -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' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode';
|
|
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';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
2
|
import { ColumnNode } from './column-node.js';
|
|
3
3
|
import { TableNode } from './table-node.js';
|
|
4
|
-
export declare type
|
|
4
|
+
export declare type OnModifyForeignAction = 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
|
|
5
5
|
export interface ReferencesNode extends OperationNode {
|
|
6
6
|
readonly kind: 'ReferencesNode';
|
|
7
7
|
readonly table: TableNode;
|
|
8
8
|
readonly columns: ReadonlyArray<ColumnNode>;
|
|
9
|
-
readonly onDelete?:
|
|
9
|
+
readonly onDelete?: OnModifyForeignAction;
|
|
10
|
+
readonly onUpdate?: OnModifyForeignAction;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* @internal
|
|
@@ -14,5 +15,6 @@ export interface ReferencesNode extends OperationNode {
|
|
|
14
15
|
export declare const ReferencesNode: Readonly<{
|
|
15
16
|
is(node: OperationNode): node is ReferencesNode;
|
|
16
17
|
create(table: TableNode, columns: ReadonlyArray<ColumnNode>): ReferencesNode;
|
|
17
|
-
cloneWithOnDelete(references: ReferencesNode, onDelete:
|
|
18
|
+
cloneWithOnDelete(references: ReferencesNode, onDelete: OnModifyForeignAction): ReferencesNode;
|
|
19
|
+
cloneWithOnUpdate(references: ReferencesNode, onUpdate: OnModifyForeignAction): ReferencesNode;
|
|
18
20
|
}>;
|
|
@@ -11,10 +11,10 @@ exports.TableNode = (0, object_utils_js_1.freeze)({
|
|
|
11
11
|
return node.kind === 'TableNode';
|
|
12
12
|
},
|
|
13
13
|
create(table) {
|
|
14
|
-
return {
|
|
14
|
+
return (0, object_utils_js_1.freeze)({
|
|
15
15
|
kind: 'TableNode',
|
|
16
16
|
table: identifier_node_js_1.IdentifierNode.create(table),
|
|
17
|
-
};
|
|
17
|
+
});
|
|
18
18
|
},
|
|
19
19
|
createWithSchema(schema, table) {
|
|
20
20
|
return (0, object_utils_js_1.freeze)({
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ColumnDataType, DataTypeNode } from '../operation-node/data-type-node.js';
|
|
2
|
+
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
|
+
import { AnyRawBuilder } from '../query-builder/type-utils.js';
|
|
4
|
+
export declare type DataTypeExpression = ColumnDataType | AnyRawBuilder;
|
|
5
|
+
export declare function parseDataTypeExpression(dataType: DataTypeExpression): DataTypeNode | RawNode;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDataTypeExpression = void 0;
|
|
4
|
+
const data_type_node_js_1 = require("../operation-node/data-type-node.js");
|
|
5
|
+
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
6
|
+
function parseDataTypeExpression(dataType) {
|
|
7
|
+
return (0, operation_node_source_js_1.isOperationNodeSource)(dataType)
|
|
8
|
+
? dataType.toOperationNode()
|
|
9
|
+
: data_type_node_js_1.DataTypeNode.create(dataType);
|
|
10
|
+
}
|
|
11
|
+
exports.parseDataTypeExpression = parseDataTypeExpression;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RawNode } from '../operation-node/raw-node.js';
|
|
2
|
+
import { ValueNode } from '../operation-node/value-node.js';
|
|
3
|
+
import { AnyRawBuilder } from '../query-builder/type-utils.js';
|
|
4
|
+
import { PrimitiveValue } from '../util/object-utils.js';
|
|
5
|
+
export declare type DefaultValueExpression = PrimitiveValue | AnyRawBuilder;
|
|
6
|
+
export declare function parseDefaultValueExpression(value: DefaultValueExpression): ValueNode | RawNode;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDefaultValueExpression = void 0;
|
|
4
|
+
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
5
|
+
const value_node_js_1 = require("../operation-node/value-node.js");
|
|
6
|
+
function parseDefaultValueExpression(value) {
|
|
7
|
+
return (0, operation_node_source_js_1.isOperationNodeSource)(value)
|
|
8
|
+
? value.toOperationNode()
|
|
9
|
+
: value_node_js_1.ValueNode.createImmediate(value);
|
|
10
|
+
}
|
|
11
|
+
exports.parseDefaultValueExpression = parseDefaultValueExpression;
|
|
@@ -10,5 +10,5 @@ export declare function parseWhereFilter(ctx: ParseContext, args: any[]): Filter
|
|
|
10
10
|
export declare function parseHavingFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
|
|
11
11
|
export declare function parseOnFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
|
|
12
12
|
export declare function parseReferenceFilter(ctx: ParseContext, lhs: ReferenceExpression<any, any>, op: FilterOperator, rhs: ReferenceExpression<any, any>): FilterNode;
|
|
13
|
-
export declare function
|
|
14
|
-
export declare function
|
|
13
|
+
export declare function parseExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
|
|
14
|
+
export declare function parseNotExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.parseNotExistFilter = exports.parseExistFilter = exports.parseReferenceFilter = exports.parseOnFilter = exports.parseHavingFilter = exports.parseWhereFilter = void 0;
|
|
4
4
|
const filter_node_js_1 = require("../operation-node/filter-node.js");
|
|
5
5
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
6
6
|
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
@@ -11,13 +11,12 @@ const reference_parser_js_1 = require("./reference-parser.js");
|
|
|
11
11
|
const value_parser_js_1 = require("./value-parser.js");
|
|
12
12
|
const select_query_node_js_1 = require("../operation-node/select-query-node.js");
|
|
13
13
|
const value_node_js_1 = require("../operation-node/value-node.js");
|
|
14
|
-
const table_parser_js_1 = require("./table-parser.js");
|
|
15
14
|
function parseWhereFilter(ctx, args) {
|
|
16
15
|
if (args.length === 3) {
|
|
17
16
|
return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
|
|
18
17
|
}
|
|
19
18
|
else if (args.length === 1 && (0, object_utils_js_1.isFunction)(args[0])) {
|
|
20
|
-
return
|
|
19
|
+
return parseWhereGroup(ctx, args[0]);
|
|
21
20
|
}
|
|
22
21
|
else {
|
|
23
22
|
throw new Error(`invalid arguments passed to a where method ${JSON.stringify(args)}`);
|
|
@@ -29,7 +28,7 @@ function parseHavingFilter(ctx, args) {
|
|
|
29
28
|
return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
|
|
30
29
|
}
|
|
31
30
|
else if (args.length === 1 && (0, object_utils_js_1.isFunction)(args[0])) {
|
|
32
|
-
return
|
|
31
|
+
return parseHavingGroup(ctx, args[0]);
|
|
33
32
|
}
|
|
34
33
|
else {
|
|
35
34
|
throw new Error(`invalid arguments passed to a having method ${JSON.stringify(args)}`);
|
|
@@ -41,7 +40,7 @@ function parseOnFilter(ctx, args) {
|
|
|
41
40
|
return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
|
|
42
41
|
}
|
|
43
42
|
else if (args.length === 1 && (0, object_utils_js_1.isFunction)(args[0])) {
|
|
44
|
-
return
|
|
43
|
+
return parseOnGroup(ctx, args[0]);
|
|
45
44
|
}
|
|
46
45
|
else {
|
|
47
46
|
throw new Error(`invalid arguments passed to an on method ${JSON.stringify(args)}`);
|
|
@@ -52,23 +51,14 @@ function parseReferenceFilter(ctx, lhs, op, rhs) {
|
|
|
52
51
|
return filter_node_js_1.FilterNode.create((0, reference_parser_js_1.parseReferenceExpression)(ctx, lhs), parseFilterOperator(op), (0, reference_parser_js_1.parseReferenceExpression)(ctx, rhs));
|
|
53
52
|
}
|
|
54
53
|
exports.parseReferenceFilter = parseReferenceFilter;
|
|
55
|
-
function
|
|
56
|
-
return
|
|
54
|
+
function parseExistFilter(ctx, arg) {
|
|
55
|
+
return parseExistExpression(ctx, 'exists', arg);
|
|
57
56
|
}
|
|
58
|
-
exports.
|
|
59
|
-
function
|
|
60
|
-
return
|
|
61
|
-
}
|
|
62
|
-
exports.parseNotExistExpression = parseNotExistExpression;
|
|
63
|
-
function doParseExistExpression(ctx, type, arg) {
|
|
64
|
-
const node = (0, object_utils_js_1.isFunction)(arg)
|
|
65
|
-
? arg(ctx.createSubQueryBuilder()).toOperationNode()
|
|
66
|
-
: arg.toOperationNode();
|
|
67
|
-
if (!select_query_node_js_1.SelectQueryNode.is(node) && !raw_node_js_1.RawNode.is(node)) {
|
|
68
|
-
throw new Error('invalid where exists arg');
|
|
69
|
-
}
|
|
70
|
-
return filter_node_js_1.FilterNode.create(undefined, operator_node_js_1.OperatorNode.create(type), node);
|
|
57
|
+
exports.parseExistFilter = parseExistFilter;
|
|
58
|
+
function parseNotExistFilter(ctx, arg) {
|
|
59
|
+
return parseExistExpression(ctx, 'not exists', arg);
|
|
71
60
|
}
|
|
61
|
+
exports.parseNotExistFilter = parseNotExistFilter;
|
|
72
62
|
function parseThreeArgFilter(ctx, left, op, right) {
|
|
73
63
|
if ((op === 'is' || op === 'is not') && ((0, object_utils_js_1.isNull)(right) || (0, object_utils_js_1.isBoolean)(right))) {
|
|
74
64
|
return parseIsFilter(ctx, left, op, right);
|
|
@@ -79,38 +69,46 @@ function parseIsFilter(ctx, left, op, right) {
|
|
|
79
69
|
return filter_node_js_1.FilterNode.create((0, reference_parser_js_1.parseReferenceExpression)(ctx, left), parseFilterOperator(op), value_node_js_1.ValueNode.createImmediate(right));
|
|
80
70
|
}
|
|
81
71
|
function parseFilterOperator(op) {
|
|
82
|
-
if ((0,
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
else if ((0, object_utils_js_1.isString)(op)) {
|
|
86
|
-
const opString = op.trim().toLowerCase();
|
|
87
|
-
if (operator_node_js_1.OPERATORS.some((it) => it === opString)) {
|
|
88
|
-
return operator_node_js_1.OperatorNode.create(opString);
|
|
72
|
+
if ((0, object_utils_js_1.isString)(op)) {
|
|
73
|
+
if (operator_node_js_1.OPERATORS.includes(op)) {
|
|
74
|
+
return operator_node_js_1.OperatorNode.create(op);
|
|
89
75
|
}
|
|
90
76
|
}
|
|
77
|
+
else if ((0, operation_node_source_js_1.isOperationNodeSource)(op)) {
|
|
78
|
+
return op.toOperationNode();
|
|
79
|
+
}
|
|
91
80
|
throw new Error(`invalid comparison operator ${JSON.stringify(op)} passed to a filter method`);
|
|
92
81
|
}
|
|
93
|
-
function
|
|
94
|
-
const query =
|
|
82
|
+
function parseWhereGroup(ctx, callback) {
|
|
83
|
+
const query = callback(ctx.createSelectQueryBuilder([]));
|
|
95
84
|
const queryNode = query.toOperationNode();
|
|
96
85
|
if (!queryNode.where) {
|
|
97
|
-
throw new Error('no where methods called insided a
|
|
86
|
+
throw new Error('no `where*` methods called insided a group callback');
|
|
98
87
|
}
|
|
99
88
|
return parens_node_js_1.ParensNode.create(queryNode.where.where);
|
|
100
89
|
}
|
|
101
|
-
function
|
|
102
|
-
const query =
|
|
90
|
+
function parseHavingGroup(ctx, callback) {
|
|
91
|
+
const query = callback(ctx.createSelectQueryBuilder([]));
|
|
103
92
|
const queryNode = query.toOperationNode();
|
|
104
93
|
if (!queryNode.having) {
|
|
105
|
-
throw new Error('no having methods called insided a
|
|
94
|
+
throw new Error('no `having*` methods called insided a group callback');
|
|
106
95
|
}
|
|
107
96
|
return parens_node_js_1.ParensNode.create(queryNode.having.having);
|
|
108
97
|
}
|
|
109
|
-
function
|
|
110
|
-
const joinBuilder =
|
|
98
|
+
function parseOnGroup(ctx, callback) {
|
|
99
|
+
const joinBuilder = callback(ctx.createJoinBuilder('InnerJoin', 'table'));
|
|
111
100
|
const joinNode = joinBuilder.toOperationNode();
|
|
112
101
|
if (!joinNode.on) {
|
|
113
|
-
throw new Error('no `on
|
|
102
|
+
throw new Error('no `on*` methods called insided a group callback');
|
|
114
103
|
}
|
|
115
104
|
return parens_node_js_1.ParensNode.create(joinNode.on);
|
|
116
105
|
}
|
|
106
|
+
function parseExistExpression(ctx, type, arg) {
|
|
107
|
+
const node = (0, object_utils_js_1.isFunction)(arg)
|
|
108
|
+
? arg(ctx.createExpressionBuilder()).toOperationNode()
|
|
109
|
+
: arg.toOperationNode();
|
|
110
|
+
if (!select_query_node_js_1.SelectQueryNode.is(node) && !raw_node_js_1.RawNode.is(node)) {
|
|
111
|
+
throw new Error('invalid where exists arg');
|
|
112
|
+
}
|
|
113
|
+
return filter_node_js_1.FilterNode.create(undefined, operator_node_js_1.OperatorNode.create(type), node);
|
|
114
|
+
}
|
|
@@ -5,4 +5,4 @@ import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
|
5
5
|
import { ParseContext } from './parse-context.js';
|
|
6
6
|
export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>> | AnyColumnWithTable<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
|
|
7
7
|
export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
|
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.parseJoin = void 0;
|
|
4
4
|
const join_node_js_1 = require("../operation-node/join-node.js");
|
|
5
5
|
const table_parser_js_1 = require("./table-parser.js");
|
|
6
6
|
const filter_parser_js_1 = require("./filter-parser.js");
|
|
7
|
-
function
|
|
8
|
-
if (args.length ===
|
|
9
|
-
return parseCallbackJoin(ctx, joinType, args[0], args[1]);
|
|
10
|
-
}
|
|
11
|
-
else if (args.length === 3) {
|
|
7
|
+
function parseJoin(ctx, joinType, args) {
|
|
8
|
+
if (args.length === 3) {
|
|
12
9
|
return parseSingleOnJoin(ctx, joinType, args[0], args[1], args[2]);
|
|
13
10
|
}
|
|
11
|
+
else if (args.length === 2) {
|
|
12
|
+
return parseCallbackJoin(ctx, joinType, args[0], args[1]);
|
|
13
|
+
}
|
|
14
14
|
else {
|
|
15
15
|
throw new Error('not implemented');
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
exports.
|
|
18
|
+
exports.parseJoin = parseJoin;
|
|
19
19
|
function parseCallbackJoin(ctx, joinType, from, callback) {
|
|
20
|
-
const
|
|
21
|
-
const joinBuilder = callback(ctx.createJoinBuilder(joinType, tableNode));
|
|
20
|
+
const joinBuilder = callback(ctx.createJoinBuilder(joinType, from));
|
|
22
21
|
return joinBuilder.toOperationNode();
|
|
23
22
|
}
|
|
24
23
|
function parseSingleOnJoin(ctx, joinType, from, lhsColumn, rhsColumn) {
|
|
25
|
-
|
|
26
|
-
return join_node_js_1.JoinNode.cloneWithOn(join_node_js_1.JoinNode.create(joinType, tableNode), 'And', (0, filter_parser_js_1.parseReferenceFilter)(ctx, lhsColumn, '=', rhsColumn));
|
|
24
|
+
return join_node_js_1.JoinNode.createWithOn(joinType, (0, table_parser_js_1.parseTableExpression)(ctx, from), (0, filter_parser_js_1.parseReferenceFilter)(ctx, lhsColumn, '=', rhsColumn));
|
|
27
25
|
}
|
|
@@ -1,14 +1,41 @@
|
|
|
1
|
-
import { DialectAdapter } from '../
|
|
1
|
+
import { DialectAdapter } from '../dialect/dialect-adapter.js';
|
|
2
2
|
import { JoinType } from '../operation-node/join-node.js';
|
|
3
|
-
import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
4
3
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
5
4
|
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
6
|
-
import {
|
|
5
|
+
import { ExpressionBuilder } from '../query-builder/expression-builder.js';
|
|
7
6
|
import { QueryCreator } from '../query-creator.js';
|
|
7
|
+
import { TableExpression } from './table-parser.js';
|
|
8
|
+
/**
|
|
9
|
+
* This interface exposes everything the parsers need to be able to parse
|
|
10
|
+
* method calls into {@link OperationNode} trees.
|
|
11
|
+
*/
|
|
8
12
|
export interface ParseContext {
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
readonly adapter: DialectAdapter;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a select query builder with a {@link NoopQueryExecutor}.
|
|
16
|
+
*/
|
|
17
|
+
createSelectQueryBuilder(tables: ReadonlyArray<TableExpression<any, any>>): QueryBuilder<any, any>;
|
|
18
|
+
/**
|
|
19
|
+
* Creates an instance of a join builder.
|
|
20
|
+
*/
|
|
21
|
+
createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
|
|
22
|
+
/**
|
|
23
|
+
* Creates an expression builder for building stuff like subqueries.
|
|
24
|
+
* {@link NoopQueryExecutor} is used as the executor and the queries
|
|
25
|
+
* built using the returned builder can never be executed.
|
|
26
|
+
*/
|
|
27
|
+
createExpressionBuilder(): ExpressionBuilder<any, any>;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a query creator with a {@link NoopQueryExecutor}.
|
|
30
|
+
*/
|
|
31
|
+
createQueryCreator(): QueryCreator<any>;
|
|
32
|
+
}
|
|
33
|
+
export declare class DefaultParseContext implements ParseContext {
|
|
34
|
+
#private;
|
|
35
|
+
constructor(adapter: DialectAdapter);
|
|
36
|
+
get adapter(): DialectAdapter;
|
|
37
|
+
createSelectQueryBuilder(tables: ReadonlyArray<TableExpression<any, any>>): QueryBuilder<any, any>;
|
|
38
|
+
createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
|
|
39
|
+
createExpressionBuilder(): ExpressionBuilder<any, any>;
|
|
11
40
|
createQueryCreator(): QueryCreator<any>;
|
|
12
|
-
createJoinBuilder(joinType: JoinType, tableNode: TableExpressionNode): JoinBuilder<any, any>;
|
|
13
41
|
}
|
|
14
|
-
export declare function createParseContext(adapter: DialectAdapter): ParseContext;
|