kysely 0.9.2 → 0.9.3

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.
Files changed (35) hide show
  1. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  2. package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
  3. package/dist/cjs/operation-node/operation-node-visitor.d.ts +61 -59
  4. package/dist/cjs/operation-node/operation-node-visitor.js +1 -316
  5. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  6. package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
  7. package/dist/cjs/operation-node/select-query-node.js +8 -0
  8. package/dist/cjs/operation-node/union-node.d.ts +16 -0
  9. package/dist/cjs/operation-node/union-node.js +19 -0
  10. package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
  11. package/dist/cjs/parser/union-parser.d.ts +5 -0
  12. package/dist/cjs/parser/union-parser.js +13 -0
  13. package/dist/cjs/parser/value-parser.d.ts +1 -1
  14. package/dist/cjs/query-builder/query-builder.d.ts +30 -1
  15. package/dist/cjs/query-builder/query-builder.js +46 -0
  16. package/dist/cjs/query-compiler/default-query-compiler.d.ts +5 -0
  17. package/dist/cjs/query-compiler/default-query-compiler.js +18 -1
  18. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  19. package/dist/esm/operation-node/operation-node-transformer.js +9 -0
  20. package/dist/esm/operation-node/operation-node-visitor.d.ts +61 -59
  21. package/dist/esm/operation-node/operation-node-visitor.js +1 -316
  22. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  23. package/dist/esm/operation-node/select-query-node.d.ts +3 -0
  24. package/dist/esm/operation-node/select-query-node.js +8 -0
  25. package/dist/esm/operation-node/union-node.d.ts +16 -0
  26. package/dist/esm/operation-node/union-node.js +16 -0
  27. package/dist/esm/parser/insert-values-parser.d.ts +1 -1
  28. package/dist/esm/parser/union-parser.d.ts +5 -0
  29. package/dist/esm/parser/union-parser.js +9 -0
  30. package/dist/esm/parser/value-parser.d.ts +1 -1
  31. package/dist/esm/query-builder/query-builder.d.ts +30 -1
  32. package/dist/esm/query-builder/query-builder.js +46 -0
  33. package/dist/esm/query-compiler/default-query-compiler.d.ts +5 -0
  34. package/dist/esm/query-compiler/default-query-compiler.js +18 -1
  35. package/package.json +1 -1
@@ -18,6 +18,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
18
18
  import { QueryId } from '../util/query-id.js';
19
19
  import { OnConflictConstraintTarget } from '../parser/on-conflict-parser.js';
20
20
  import { ParseContext } from '../parser/parse-context.js';
21
+ import { UnionExpression } from '../parser/union-parser.js';
21
22
  /**
22
23
  * The main query builder class.
23
24
  *
@@ -998,7 +999,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
998
999
  * ```
999
1000
  */
1000
1001
  values(row: InsertObject<DB, TB>): QueryBuilder<DB, TB, O>;
1001
- values(row: InsertObject<DB, TB>[]): QueryBuilder<DB, TB, O>;
1002
+ values(row: ReadonlyArray<InsertObject<DB, TB>>): QueryBuilder<DB, TB, O>;
1002
1003
  /**
1003
1004
  * Ignores the insert if the column or constraint given as the first
1004
1005
  * argument conflicts with the current rows in the database. The
@@ -1553,6 +1554,34 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1553
1554
  * ```
1554
1555
  */
1555
1556
  offset(offset: number): QueryBuilder<DB, TB, O>;
1557
+ /**
1558
+ * Combines another select query or raw expression to this query using `union`.
1559
+ *
1560
+ * The output row type of the combined query must match `this` query.
1561
+ *
1562
+ * @xample
1563
+ * ```ts
1564
+ * db.selectFrom('person')
1565
+ * .select(['id', 'first_name as name'])
1566
+ * .union(db.selectFrom('pet').select(['id', 'name']))
1567
+ * .orderBy('name')
1568
+ * ```
1569
+ */
1570
+ union(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
1571
+ /**
1572
+ * Combines another select query or raw expression to this query using `union all`.
1573
+ *
1574
+ * The output row type of the combined query must match `this` query.
1575
+ *
1576
+ * @xample
1577
+ * ```ts
1578
+ * db.selectFrom('person')
1579
+ * .select(['id', 'first_name as name'])
1580
+ * .unionAll(db.selectFrom('pet').select(['id', 'name']))
1581
+ * .orderBy('name')
1582
+ * ```
1583
+ */
1584
+ unionAll(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
1556
1585
  /**
1557
1586
  * Gives an alias for the query. This method is only useful for sub queries.
1558
1587
  *
@@ -20,6 +20,7 @@ const object_utils_js_1 = require("../util/object-utils.js");
20
20
  const delete_query_node_js_1 = require("../operation-node/delete-query-node.js");
21
21
  const on_duplicate_key_node_js_1 = require("../operation-node/on-duplicate-key-node.js");
22
22
  const group_by_parser_js_1 = require("../parser/group-by-parser.js");
23
+ const union_parser_js_1 = require("../parser/union-parser.js");
23
24
  /**
24
25
  * The main query builder class.
25
26
  *
@@ -777,6 +778,46 @@ class QueryBuilder {
777
778
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create(offset)),
778
779
  });
779
780
  }
781
+ /**
782
+ * Combines another select query or raw expression to this query using `union`.
783
+ *
784
+ * The output row type of the combined query must match `this` query.
785
+ *
786
+ * @xample
787
+ * ```ts
788
+ * db.selectFrom('person')
789
+ * .select(['id', 'first_name as name'])
790
+ * .union(db.selectFrom('pet').select(['id', 'name']))
791
+ * .orderBy('name')
792
+ * ```
793
+ */
794
+ union(expression) {
795
+ assertCanHaveUnion(this.#props.queryNode);
796
+ return new QueryBuilder({
797
+ ...this.#props,
798
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, false)),
799
+ });
800
+ }
801
+ /**
802
+ * Combines another select query or raw expression to this query using `union all`.
803
+ *
804
+ * The output row type of the combined query must match `this` query.
805
+ *
806
+ * @xample
807
+ * ```ts
808
+ * db.selectFrom('person')
809
+ * .select(['id', 'first_name as name'])
810
+ * .unionAll(db.selectFrom('pet').select(['id', 'name']))
811
+ * .orderBy('name')
812
+ * ```
813
+ */
814
+ unionAll(expression) {
815
+ assertCanHaveUnion(this.#props.queryNode);
816
+ return new QueryBuilder({
817
+ ...this.#props,
818
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, true)),
819
+ });
820
+ }
780
821
  /**
781
822
  * Gives an alias for the query. This method is only useful for sub queries.
782
823
  *
@@ -985,3 +1026,8 @@ function assertCanHaveOffset(node) {
985
1026
  throw new Error('only a select query can have an offset');
986
1027
  }
987
1028
  }
1029
+ function assertCanHaveUnion(node) {
1030
+ if (!select_query_node_js_1.SelectQueryNode.is(node)) {
1031
+ throw new Error('only a select query can have an union');
1032
+ }
1033
+ }
@@ -60,6 +60,8 @@ import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constrai
60
60
  import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
61
61
  import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
62
62
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
63
+ import { ColumnNode } from '../operation-node/column-node.js';
64
+ import { UnionNode } from '../operation-node/union-node.js';
63
65
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
64
66
  #private;
65
67
  protected get numParameters(): number;
@@ -67,6 +69,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
67
69
  protected getSql(): string;
68
70
  protected visitSelectQuery(node: SelectQueryNode): void;
69
71
  protected visitFrom(node: FromNode): void;
72
+ protected visitSelection(node: SelectionNode): void;
73
+ protected visitColumn(node: ColumnNode): void;
70
74
  protected compileDistinctOn(selections: ReadonlyArray<SelectionNode>): void;
71
75
  protected compileList(nodes: ReadonlyArray<OperationNode>, separator?: string): void;
72
76
  protected visitWhere(node: WhereNode): void;
@@ -125,6 +129,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
125
129
  protected visitModifyColumn(node: ModifyColumnNode): void;
126
130
  protected visitAddConstraint(node: AddConstraintNode): void;
127
131
  protected visitDropConstraint(node: DropConstraintNode): void;
132
+ protected visitUnion(node: UnionNode): void;
128
133
  protected append(str: string): void;
129
134
  protected appendValue(parameter: unknown): void;
130
135
  protected getLeftIdentifierWrapper(): string;
@@ -17,7 +17,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
17
17
  this.visitNode(node);
18
18
  return (0, object_utils_js_1.freeze)({
19
19
  sql: this.getSql(),
20
- parameters: this.#parameters,
20
+ parameters: [...this.#parameters],
21
21
  });
22
22
  }
23
23
  getSql() {
@@ -63,6 +63,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
63
63
  this.append(' ');
64
64
  this.visitNode(node.having);
65
65
  }
66
+ if (node.union) {
67
+ this.append(' ');
68
+ this.compileList(node.union, ' ');
69
+ }
66
70
  if (node.orderBy) {
67
71
  this.append(' ');
68
72
  this.visitNode(node.orderBy);
@@ -89,6 +93,12 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
89
93
  this.append('from ');
90
94
  this.compileList(node.froms);
91
95
  }
96
+ visitSelection(node) {
97
+ this.visitNode(node.selection);
98
+ }
99
+ visitColumn(node) {
100
+ this.visitNode(node.column);
101
+ }
92
102
  compileDistinctOn(selections) {
93
103
  this.append('distinct on (');
94
104
  this.compileList(selections);
@@ -630,6 +640,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
630
640
  this.append('drop constraint ');
631
641
  this.visitNode(node.constraintName);
632
642
  }
643
+ visitUnion(node) {
644
+ this.append('union ');
645
+ if (node.all) {
646
+ this.append('all ');
647
+ }
648
+ this.visitNode(node.union);
649
+ }
633
650
  append(str) {
634
651
  this.#sql += str;
635
652
  }
@@ -57,6 +57,7 @@ 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
59
  import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
60
+ import { UnionNode } from './union-node.js';
60
61
  /**
61
62
  * Transforms an operation node tree into another one.
62
63
  *
@@ -129,6 +130,7 @@ export declare class OperationNodeTransformer {
129
130
  protected transformPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): PrimaryKeyConstraintNode;
130
131
  protected transformUniqueConstraint(node: UniqueConstraintNode): UniqueConstraintNode;
131
132
  protected transformForeignKeyConstraint(node: ForeignKeyConstraintNode): ForeignKeyConstraintNode;
133
+ protected transformUnion(node: UnionNode): UnionNode;
132
134
  protected transformReferences(node: ReferencesNode): ReferencesNode;
133
135
  protected transformCheckConstraint(node: CheckConstraintNode): CheckConstraintNode;
134
136
  protected transformWith(node: WithNode): WithNode;
@@ -89,6 +89,7 @@ export class OperationNodeTransformer {
89
89
  AddConstraintNode: this.transformAddConstraint.bind(this),
90
90
  DropConstraintNode: this.transformDropConstraint.bind(this),
91
91
  ForeignKeyConstraintNode: this.transformForeignKeyConstraint.bind(this),
92
+ UnionNode: this.transformUnion.bind(this),
92
93
  };
93
94
  transformNode = (node) => {
94
95
  if (!node) {
@@ -121,6 +122,7 @@ export class OperationNodeTransformer {
121
122
  offset: this.transformNode(node.offset),
122
123
  with: this.transformNode(node.with),
123
124
  having: this.transformNode(node.having),
125
+ union: this.transformNodeList(node.union),
124
126
  };
125
127
  }
126
128
  transformSelection(node) {
@@ -400,6 +402,13 @@ export class OperationNodeTransformer {
400
402
  onUpdate: node.onUpdate,
401
403
  };
402
404
  }
405
+ transformUnion(node) {
406
+ return {
407
+ kind: 'UnionNode',
408
+ union: this.transformNode(node.union),
409
+ all: node.all,
410
+ };
411
+ }
403
412
  transformReferences(node) {
404
413
  return {
405
414
  kind: 'ReferencesNode',
@@ -57,66 +57,68 @@ 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
59
  import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
60
- export declare class OperationNodeVisitor {
60
+ import { UnionNode } from './union-node.js';
61
+ export declare abstract class OperationNodeVisitor {
61
62
  #private;
62
63
  protected readonly nodeStack: OperationNode[];
63
64
  protected readonly visitNode: (node: OperationNode) => void;
64
- protected visitSelectQuery(node: SelectQueryNode): void;
65
- protected visitSelection(node: SelectionNode): void;
66
- protected visitColumn(node: ColumnNode): void;
67
- protected visitAlias(node: AliasNode): void;
68
- protected visitTable(node: TableNode): void;
69
- protected visitFrom(node: FromNode): void;
70
- protected visitReference(node: ReferenceNode): void;
71
- protected visitFilter(node: FilterNode): void;
72
- protected visitAnd(node: AndNode): void;
73
- protected visitOr(node: OrNode): void;
74
- protected visitValueList(node: ValueListNode): void;
75
- protected visitParens(node: ParensNode): void;
76
- protected visitJoin(node: JoinNode): void;
77
- protected visitRaw(node: RawNode): void;
78
- protected visitWhere(node: WhereNode): void;
79
- protected visitInsertQuery(node: InsertQueryNode): void;
80
- protected visitDeleteQuery(node: DeleteQueryNode): void;
81
- protected visitReturning(node: ReturningNode): void;
82
- protected visitCreateTable(node: CreateTableNode): void;
83
- protected visitAddColumn(node: AddColumnNode): void;
84
- protected visitColumnDefinition(node: ColumnDefinitionNode): void;
85
- protected visitDropTable(node: DropTableNode): void;
86
- protected visitOrderBy(node: OrderByNode): void;
87
- protected visitOrderByItem(node: OrderByItemNode): void;
88
- protected visitGroupBy(node: GroupByNode): void;
89
- protected visitGroupByItem(node: GroupByItemNode): void;
90
- protected visitUpdateQuery(node: UpdateQueryNode): void;
91
- protected visitColumnUpdate(node: ColumnUpdateNode): void;
92
- protected visitLimit(node: LimitNode): void;
93
- protected visitOffset(node: OffsetNode): void;
94
- protected visitOnConflict(node: OnConflictNode): void;
95
- protected visitOnDuplicateKey(node: OnDuplicateKeyNode): void;
96
- protected visitCreateIndex(node: CreateIndexNode): void;
97
- protected visitList(node: ListNode): void;
98
- protected visitDropIndex(node: DropIndexNode): void;
99
- protected visitPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): void;
100
- protected visitUniqueConstraint(node: UniqueConstraintNode): void;
101
- protected visitReferences(node: ReferencesNode): void;
102
- protected visitCheckConstraint(node: CheckConstraintNode): void;
103
- protected visitWith(node: WithNode): void;
104
- protected visitCommonTableExpression(node: CommonTableExpressionNode): void;
105
- protected visitHaving(node: HavingNode): void;
106
- protected visitCreateSchema(node: CreateSchemaNode): void;
107
- protected visitDropSchema(node: DropSchemaNode): void;
108
- protected visitAlterTable(node: AlterTableNode): void;
109
- protected visitDropColumn(node: DropColumnNode): void;
110
- protected visitRenameColumn(node: RenameColumnNode): void;
111
- protected visitAlterColumn(node: AlterColumnNode): void;
112
- protected visitModifyColumn(node: ModifyColumnNode): void;
113
- protected visitAddConstraint(node: AddConstraintNode): void;
114
- protected visitDropConstraint(node: DropConstraintNode): void;
115
- protected visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
116
- protected visitDataType(node: DataTypeNode): void;
117
- protected visitSelectAll(_: SelectAllNode): void;
118
- protected visitIdentifier(_: IdentifierNode): void;
119
- protected visitValue(_: ValueNode): void;
120
- protected visitPrimitiveValueList(_: PrimitiveValueListNode): void;
121
- protected visitOperator(node: OperatorNode): void;
65
+ protected abstract visitSelectQuery(node: SelectQueryNode): void;
66
+ protected abstract visitSelection(node: SelectionNode): void;
67
+ protected abstract visitColumn(node: ColumnNode): void;
68
+ protected abstract visitAlias(node: AliasNode): void;
69
+ protected abstract visitTable(node: TableNode): void;
70
+ protected abstract visitFrom(node: FromNode): void;
71
+ protected abstract visitReference(node: ReferenceNode): void;
72
+ protected abstract visitFilter(node: FilterNode): void;
73
+ protected abstract visitAnd(node: AndNode): void;
74
+ protected abstract visitOr(node: OrNode): void;
75
+ protected abstract visitValueList(node: ValueListNode): void;
76
+ protected abstract visitParens(node: ParensNode): void;
77
+ protected abstract visitJoin(node: JoinNode): void;
78
+ protected abstract visitRaw(node: RawNode): void;
79
+ protected abstract visitWhere(node: WhereNode): void;
80
+ protected abstract visitInsertQuery(node: InsertQueryNode): void;
81
+ protected abstract visitDeleteQuery(node: DeleteQueryNode): void;
82
+ protected abstract visitReturning(node: ReturningNode): void;
83
+ protected abstract visitCreateTable(node: CreateTableNode): void;
84
+ protected abstract visitAddColumn(node: AddColumnNode): void;
85
+ protected abstract visitColumnDefinition(node: ColumnDefinitionNode): void;
86
+ protected abstract visitDropTable(node: DropTableNode): void;
87
+ protected abstract visitOrderBy(node: OrderByNode): void;
88
+ protected abstract visitOrderByItem(node: OrderByItemNode): void;
89
+ protected abstract visitGroupBy(node: GroupByNode): void;
90
+ protected abstract visitGroupByItem(node: GroupByItemNode): void;
91
+ protected abstract visitUpdateQuery(node: UpdateQueryNode): void;
92
+ protected abstract visitColumnUpdate(node: ColumnUpdateNode): void;
93
+ protected abstract visitLimit(node: LimitNode): void;
94
+ protected abstract visitOffset(node: OffsetNode): void;
95
+ protected abstract visitOnConflict(node: OnConflictNode): void;
96
+ protected abstract visitOnDuplicateKey(node: OnDuplicateKeyNode): void;
97
+ protected abstract visitCreateIndex(node: CreateIndexNode): void;
98
+ protected abstract visitDropIndex(node: DropIndexNode): void;
99
+ protected abstract visitList(node: ListNode): void;
100
+ protected abstract visitPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): void;
101
+ protected abstract visitUniqueConstraint(node: UniqueConstraintNode): void;
102
+ protected abstract visitReferences(node: ReferencesNode): void;
103
+ protected abstract visitCheckConstraint(node: CheckConstraintNode): void;
104
+ protected abstract visitWith(node: WithNode): void;
105
+ protected abstract visitCommonTableExpression(node: CommonTableExpressionNode): void;
106
+ protected abstract visitHaving(node: HavingNode): void;
107
+ protected abstract visitCreateSchema(node: CreateSchemaNode): void;
108
+ protected abstract visitDropSchema(node: DropSchemaNode): void;
109
+ protected abstract visitAlterTable(node: AlterTableNode): void;
110
+ protected abstract visitDropColumn(node: DropColumnNode): void;
111
+ protected abstract visitRenameColumn(node: RenameColumnNode): void;
112
+ protected abstract visitAlterColumn(node: AlterColumnNode): void;
113
+ protected abstract visitModifyColumn(node: ModifyColumnNode): void;
114
+ protected abstract visitAddConstraint(node: AddConstraintNode): void;
115
+ protected abstract visitDropConstraint(node: DropConstraintNode): void;
116
+ protected abstract visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
117
+ protected abstract visitUnion(node: UnionNode): void;
118
+ protected abstract visitDataType(node: DataTypeNode): void;
119
+ protected abstract visitSelectAll(_: SelectAllNode): void;
120
+ protected abstract visitIdentifier(_: IdentifierNode): void;
121
+ protected abstract visitValue(_: ValueNode): void;
122
+ protected abstract visitPrimitiveValueList(_: PrimitiveValueListNode): void;
123
+ protected abstract visitOperator(node: OperatorNode): void;
122
124
  }