kysely 0.21.5 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +3 -2
  2. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  3. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  4. package/dist/cjs/index.d.ts +10 -4
  5. package/dist/cjs/index.js +8 -2
  6. package/dist/cjs/kysely.d.ts +3 -3
  7. package/dist/cjs/kysely.js +3 -3
  8. package/dist/cjs/migration/file-migration-provider.js +7 -2
  9. package/dist/cjs/operation-node/aggregate-function-node.d.ts +22 -0
  10. package/dist/cjs/operation-node/aggregate-function-node.js +31 -0
  11. package/dist/cjs/operation-node/alias-node.d.ts +2 -1
  12. package/dist/cjs/operation-node/default-insert-value-node.d.ts +11 -0
  13. package/dist/cjs/operation-node/{union-node.js → default-insert-value-node.js} +5 -7
  14. package/dist/cjs/operation-node/group-by-node.d.ts +1 -1
  15. package/dist/cjs/operation-node/group-by-node.js +3 -3
  16. package/dist/cjs/operation-node/insert-query-node.d.ts +2 -1
  17. package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -2
  18. package/dist/cjs/operation-node/operation-node-transformer.js +43 -5
  19. package/dist/cjs/operation-node/operation-node-utils.d.ts +2 -1
  20. package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -2
  21. package/dist/cjs/operation-node/operation-node-visitor.js +6 -1
  22. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  23. package/dist/cjs/operation-node/over-node.d.ts +19 -0
  24. package/dist/cjs/operation-node/over-node.js +35 -0
  25. package/dist/cjs/operation-node/partition-by-item-node.d.ts +14 -0
  26. package/dist/cjs/operation-node/partition-by-item-node.js +18 -0
  27. package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
  28. package/dist/cjs/operation-node/partition-by-node.js +24 -0
  29. package/dist/cjs/operation-node/select-query-node.d.ts +3 -3
  30. package/dist/cjs/operation-node/select-query-node.js +4 -4
  31. package/dist/cjs/operation-node/set-operation-node.d.ts +18 -0
  32. package/dist/cjs/operation-node/set-operation-node.js +20 -0
  33. package/dist/cjs/operation-node/value-list-node.d.ts +3 -1
  34. package/dist/cjs/parser/complex-expression-parser.d.ts +6 -4
  35. package/dist/cjs/parser/group-by-parser.d.ts +1 -1
  36. package/dist/cjs/parser/group-by-parser.js +2 -2
  37. package/dist/cjs/parser/insert-values-parser.js +13 -4
  38. package/dist/cjs/parser/parse-utils.d.ts +2 -0
  39. package/dist/cjs/parser/parse-utils.js +9 -1
  40. package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
  41. package/dist/cjs/parser/partition-by-parser.js +9 -0
  42. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  43. package/dist/cjs/parser/select-parser.d.ts +4 -3
  44. package/dist/cjs/parser/set-operation-parser.d.ts +5 -0
  45. package/dist/cjs/parser/set-operation-parser.js +8 -0
  46. package/dist/cjs/parser/value-parser.d.ts +2 -1
  47. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +117 -0
  48. package/dist/cjs/query-builder/aggregate-function-builder.js +146 -0
  49. package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
  50. package/dist/cjs/query-builder/expression-builder.js +3 -3
  51. package/dist/cjs/query-builder/{function-builder.d.ts → function-module.d.ts} +49 -42
  52. package/dist/cjs/query-builder/{function-builder.js → function-module.js} +70 -59
  53. package/dist/cjs/query-builder/over-builder.d.ts +59 -0
  54. package/dist/cjs/query-builder/over-builder.js +50 -0
  55. package/dist/cjs/query-builder/select-query-builder.d.ts +63 -3
  56. package/dist/cjs/query-builder/select-query-builder.js +83 -3
  57. package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -2
  58. package/dist/cjs/query-compiler/default-query-compiler.js +44 -14
  59. package/dist/cjs/raw-builder/sql.d.ts +13 -5
  60. package/dist/cjs/raw-builder/sql.js +6 -0
  61. package/dist/cjs/util/object-utils.d.ts +1 -0
  62. package/dist/cjs/util/object-utils.js +5 -1
  63. package/dist/cjs/util/type-utils.d.ts +5 -1
  64. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  65. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  66. package/dist/esm/index.d.ts +10 -4
  67. package/dist/esm/index.js +8 -2
  68. package/dist/esm/kysely.d.ts +3 -3
  69. package/dist/esm/kysely.js +3 -3
  70. package/dist/esm/migration/file-migration-provider.js +7 -2
  71. package/dist/esm/operation-node/aggregate-function-node.d.ts +22 -0
  72. package/dist/esm/operation-node/aggregate-function-node.js +29 -0
  73. package/dist/esm/operation-node/alias-node.d.ts +2 -1
  74. package/dist/esm/operation-node/default-insert-value-node.d.ts +11 -0
  75. package/dist/esm/operation-node/default-insert-value-node.js +15 -0
  76. package/dist/esm/operation-node/group-by-node.d.ts +1 -1
  77. package/dist/esm/operation-node/group-by-node.js +3 -3
  78. package/dist/esm/operation-node/insert-query-node.d.ts +2 -1
  79. package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -2
  80. package/dist/esm/operation-node/operation-node-transformer.js +43 -5
  81. package/dist/esm/operation-node/operation-node-utils.d.ts +2 -1
  82. package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -2
  83. package/dist/esm/operation-node/operation-node-visitor.js +6 -1
  84. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  85. package/dist/esm/operation-node/over-node.d.ts +19 -0
  86. package/dist/esm/operation-node/over-node.js +33 -0
  87. package/dist/esm/operation-node/partition-by-item-node.d.ts +14 -0
  88. package/dist/esm/operation-node/partition-by-item-node.js +16 -0
  89. package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
  90. package/dist/esm/operation-node/partition-by-node.js +22 -0
  91. package/dist/esm/operation-node/select-query-node.d.ts +3 -3
  92. package/dist/esm/operation-node/select-query-node.js +4 -4
  93. package/dist/esm/operation-node/set-operation-node.d.ts +18 -0
  94. package/dist/esm/operation-node/set-operation-node.js +18 -0
  95. package/dist/esm/operation-node/value-list-node.d.ts +3 -1
  96. package/dist/esm/parser/complex-expression-parser.d.ts +6 -4
  97. package/dist/esm/parser/group-by-parser.d.ts +1 -1
  98. package/dist/esm/parser/group-by-parser.js +2 -2
  99. package/dist/esm/parser/insert-values-parser.js +14 -5
  100. package/dist/esm/parser/parse-utils.d.ts +2 -0
  101. package/dist/esm/parser/parse-utils.js +7 -0
  102. package/dist/esm/parser/partition-by-parser.d.ts +6 -0
  103. package/dist/esm/parser/partition-by-parser.js +6 -0
  104. package/dist/esm/parser/reference-parser.d.ts +2 -1
  105. package/dist/esm/parser/select-parser.d.ts +4 -3
  106. package/dist/esm/parser/set-operation-parser.d.ts +5 -0
  107. package/dist/esm/parser/set-operation-parser.js +5 -0
  108. package/dist/esm/parser/value-parser.d.ts +2 -1
  109. package/dist/esm/query-builder/aggregate-function-builder.d.ts +117 -0
  110. package/dist/esm/query-builder/aggregate-function-builder.js +142 -0
  111. package/dist/esm/query-builder/expression-builder.d.ts +3 -3
  112. package/dist/esm/query-builder/expression-builder.js +3 -3
  113. package/dist/esm/query-builder/{function-builder.d.ts → function-module.d.ts} +49 -42
  114. package/dist/esm/query-builder/{function-builder.js → function-module.js} +69 -58
  115. package/dist/esm/query-builder/over-builder.d.ts +59 -0
  116. package/dist/esm/query-builder/over-builder.js +47 -0
  117. package/dist/esm/query-builder/select-query-builder.d.ts +63 -3
  118. package/dist/esm/query-builder/select-query-builder.js +83 -3
  119. package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -2
  120. package/dist/esm/query-compiler/default-query-compiler.js +44 -14
  121. package/dist/esm/raw-builder/sql.d.ts +13 -5
  122. package/dist/esm/raw-builder/sql.js +6 -0
  123. package/dist/esm/util/object-utils.d.ts +1 -0
  124. package/dist/esm/util/object-utils.js +3 -0
  125. package/dist/esm/util/type-utils.d.ts +5 -1
  126. package/package.json +4 -1
  127. package/dist/cjs/operation-node/union-node.d.ts +0 -16
  128. package/dist/cjs/parser/union-parser.d.ts +0 -5
  129. package/dist/cjs/parser/union-parser.js +0 -8
  130. package/dist/esm/operation-node/union-node.d.ts +0 -16
  131. package/dist/esm/operation-node/union-node.js +0 -17
  132. package/dist/esm/parser/union-parser.d.ts +0 -5
  133. package/dist/esm/parser/union-parser.js +0 -5
@@ -0,0 +1,22 @@
1
+ import { ColumnNode } from './column-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ import { OverNode } from './over-node.js';
4
+ import { ReferenceNode } from './reference-node.js';
5
+ declare type AggregateFunction = 'avg' | 'count' | 'max' | 'min' | 'sum';
6
+ export interface AggregateFunctionNode extends OperationNode {
7
+ readonly kind: 'AggregateFunctionNode';
8
+ readonly func: AggregateFunction;
9
+ readonly column: ColumnNode | ReferenceNode;
10
+ readonly distinct?: boolean;
11
+ readonly over?: OverNode;
12
+ }
13
+ /**
14
+ * @internal
15
+ */
16
+ export declare const AggregateFunctionNode: Readonly<{
17
+ is(node: OperationNode): node is AggregateFunctionNode;
18
+ create(aggregateFunction: AggregateFunction, column: ColumnNode | ReferenceNode): AggregateFunctionNode;
19
+ cloneWithDistinct(aggregateFunctionNode: AggregateFunctionNode): AggregateFunctionNode;
20
+ cloneWithOver(aggregateFunctionNode: AggregateFunctionNode, over?: OverNode): AggregateFunctionNode;
21
+ }>;
22
+ export {};
@@ -0,0 +1,29 @@
1
+ /// <reference types="./aggregate-function-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const AggregateFunctionNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'AggregateFunctionNode';
9
+ },
10
+ create(aggregateFunction, column) {
11
+ return freeze({
12
+ kind: 'AggregateFunctionNode',
13
+ func: aggregateFunction,
14
+ column,
15
+ });
16
+ },
17
+ cloneWithDistinct(aggregateFunctionNode) {
18
+ return freeze({
19
+ ...aggregateFunctionNode,
20
+ distinct: true,
21
+ });
22
+ },
23
+ cloneWithOver(aggregateFunctionNode, over) {
24
+ return freeze({
25
+ ...aggregateFunctionNode,
26
+ over,
27
+ });
28
+ },
29
+ });
@@ -1,3 +1,4 @@
1
+ import { AggregateFunctionNode } from './aggregate-function-node.js';
1
2
  import { ColumnNode } from './column-node.js';
2
3
  import { IdentifierNode } from './identifier-node.js';
3
4
  import { OperationNode } from './operation-node.js';
@@ -5,7 +6,7 @@ import { RawNode } from './raw-node.js';
5
6
  import { ReferenceNode } from './reference-node.js';
6
7
  import { SelectQueryNode } from './select-query-node.js';
7
8
  import { TableNode } from './table-node.js';
8
- export declare type AliasNodeChild = ColumnNode | ReferenceNode | TableNode | SelectQueryNode | RawNode;
9
+ export declare type AliasNodeChild = ColumnNode | ReferenceNode | TableNode | SelectQueryNode | RawNode | AggregateFunctionNode;
9
10
  export interface AliasNode extends OperationNode {
10
11
  readonly kind: 'AliasNode';
11
12
  readonly node: AliasNodeChild;
@@ -0,0 +1,11 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ export interface DefaultInsertValueNode extends OperationNode {
3
+ readonly kind: 'DefaultInsertValueNode';
4
+ }
5
+ /**
6
+ * @internal
7
+ */
8
+ export declare const DefaultInsertValueNode: Readonly<{
9
+ is(node: OperationNode): node is DefaultInsertValueNode;
10
+ create(): DefaultInsertValueNode;
11
+ }>;
@@ -0,0 +1,15 @@
1
+ /// <reference types="./default-insert-value-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const DefaultInsertValueNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'DefaultInsertValueNode';
9
+ },
10
+ create() {
11
+ return freeze({
12
+ kind: 'DefaultInsertValueNode',
13
+ });
14
+ },
15
+ });
@@ -10,5 +10,5 @@ export interface GroupByNode extends OperationNode {
10
10
  export declare const GroupByNode: Readonly<{
11
11
  is(node: OperationNode): node is GroupByNode;
12
12
  create(items: ReadonlyArray<GroupByItemNode>): GroupByNode;
13
- cloneWithItems(orderBy: GroupByNode, items: ReadonlyArray<GroupByItemNode>): GroupByNode;
13
+ cloneWithItems(groupBy: GroupByNode, items: ReadonlyArray<GroupByItemNode>): GroupByNode;
14
14
  }>;
@@ -13,10 +13,10 @@ export const GroupByNode = freeze({
13
13
  items: freeze(items),
14
14
  });
15
15
  },
16
- cloneWithItems(orderBy, items) {
16
+ cloneWithItems(groupBy, items) {
17
17
  return freeze({
18
- ...orderBy,
19
- items: freeze([...orderBy.items, ...items]),
18
+ ...groupBy,
19
+ items: freeze([...groupBy.items, ...items]),
20
20
  });
21
21
  },
22
22
  });
@@ -1,3 +1,4 @@
1
+ import { AggregateFunctionNode } from './aggregate-function-node.js';
1
2
  import { ColumnNode } from './column-node.js';
2
3
  import { ExplainNode } from './explain-node.js';
3
4
  import { OnConflictNode } from './on-conflict-node.js';
@@ -14,7 +15,7 @@ export interface InsertQueryNode extends OperationNode {
14
15
  readonly kind: 'InsertQueryNode';
15
16
  readonly into: TableNode;
16
17
  readonly columns?: ReadonlyArray<ColumnNode>;
17
- readonly values?: ValuesNode | SelectQueryNode | RawNode;
18
+ readonly values?: ValuesNode | SelectQueryNode | RawNode | AggregateFunctionNode;
18
19
  readonly returning?: ReturningNode;
19
20
  readonly onConflict?: OnConflictNode;
20
21
  readonly onDuplicateKey?: OnDuplicateKeyNode;
@@ -58,7 +58,6 @@ import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
58
58
  import { ColumnDefinitionNode } from './column-definition-node.js';
59
59
  import { ModifyColumnNode } from './modify-column-node.js';
60
60
  import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
61
- import { UnionNode } from './union-node.js';
62
61
  import { CreateViewNode } from './create-view-node.js';
63
62
  import { DropViewNode } from './drop-view-node.js';
64
63
  import { GeneratedNode } from './generated-node.js';
@@ -70,6 +69,12 @@ import { CreateTypeNode } from './create-type-node.js';
70
69
  import { DropTypeNode } from './drop-type-node.js';
71
70
  import { ExplainNode } from './explain-node.js';
72
71
  import { SchemableIdentifierNode } from './schemable-identifier-node.js';
72
+ import { DefaultInsertValueNode } from './default-insert-value-node.js';
73
+ import { AggregateFunctionNode } from './aggregate-function-node.js';
74
+ import { OverNode } from './over-node.js';
75
+ import { PartitionByNode } from './partition-by-node.js';
76
+ import { PartitionByItemNode } from './partition-by-item-node.js';
77
+ import { SetOperationNode } from './set-operation-node.js';
73
78
  /**
74
79
  * Transforms an operation node tree into another one.
75
80
  *
@@ -144,7 +149,7 @@ export declare class OperationNodeTransformer {
144
149
  protected transformPrimaryKeyConstraint(node: PrimaryKeyConstraintNode): PrimaryKeyConstraintNode;
145
150
  protected transformUniqueConstraint(node: UniqueConstraintNode): UniqueConstraintNode;
146
151
  protected transformForeignKeyConstraint(node: ForeignKeyConstraintNode): ForeignKeyConstraintNode;
147
- protected transformUnion(node: UnionNode): UnionNode;
152
+ protected transformSetOperation(node: SetOperationNode): SetOperationNode;
148
153
  protected transformReferences(node: ReferencesNode): ReferencesNode;
149
154
  protected transformCheckConstraint(node: CheckConstraintNode): CheckConstraintNode;
150
155
  protected transformWith(node: WithNode): WithNode;
@@ -170,10 +175,15 @@ export declare class OperationNodeTransformer {
170
175
  protected transformDropType(node: DropTypeNode): DropTypeNode;
171
176
  protected transformExplain(node: ExplainNode): ExplainNode;
172
177
  protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
178
+ protected transformAggregateFunction(node: AggregateFunctionNode): AggregateFunctionNode;
179
+ protected transformOver(node: OverNode): OverNode;
180
+ protected transformPartitionBy(node: PartitionByNode): PartitionByNode;
181
+ protected transformPartitionByItem(node: PartitionByItemNode): PartitionByItemNode;
173
182
  protected transformDataType(node: DataTypeNode): DataTypeNode;
174
183
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
175
184
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;
176
185
  protected transformValue(node: ValueNode): ValueNode;
177
186
  protected transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
178
187
  protected transformOperator(node: OperatorNode): OperatorNode;
188
+ protected transformDefaultInsertValue(node: DefaultInsertValueNode): DefaultInsertValueNode;
179
189
  }
@@ -93,7 +93,6 @@ export class OperationNodeTransformer {
93
93
  AddConstraintNode: this.transformAddConstraint.bind(this),
94
94
  DropConstraintNode: this.transformDropConstraint.bind(this),
95
95
  ForeignKeyConstraintNode: this.transformForeignKeyConstraint.bind(this),
96
- UnionNode: this.transformUnion.bind(this),
97
96
  CreateViewNode: this.transformCreateView.bind(this),
98
97
  DropViewNode: this.transformDropView.bind(this),
99
98
  GeneratedNode: this.transformGenerated.bind(this),
@@ -104,6 +103,12 @@ export class OperationNodeTransformer {
104
103
  CreateTypeNode: this.transformCreateType.bind(this),
105
104
  DropTypeNode: this.transformDropType.bind(this),
106
105
  ExplainNode: this.transformExplain.bind(this),
106
+ DefaultInsertValueNode: this.transformDefaultInsertValue.bind(this),
107
+ AggregateFunctionNode: this.transformAggregateFunction.bind(this),
108
+ OverNode: this.transformOver.bind(this),
109
+ PartitionByNode: this.transformPartitionBy.bind(this),
110
+ PartitionByItemNode: this.transformPartitionByItem.bind(this),
111
+ SetOperationNode: this.transformSetOperation.bind(this),
107
112
  });
108
113
  transformNode(node) {
109
114
  if (!node) {
@@ -139,8 +144,8 @@ export class OperationNodeTransformer {
139
144
  offset: this.transformNode(node.offset),
140
145
  with: this.transformNode(node.with),
141
146
  having: this.transformNode(node.having),
142
- union: this.transformNodeList(node.union),
143
147
  explain: this.transformNode(node.explain),
148
+ setOperations: this.transformNodeList(node.setOperations),
144
149
  });
145
150
  }
146
151
  transformSelection(node) {
@@ -443,10 +448,11 @@ export class OperationNodeTransformer {
443
448
  onUpdate: node.onUpdate,
444
449
  });
445
450
  }
446
- transformUnion(node) {
451
+ transformSetOperation(node) {
447
452
  return requireAllProps({
448
- kind: 'UnionNode',
449
- union: this.transformNode(node.union),
453
+ kind: 'SetOperationNode',
454
+ operator: node.operator,
455
+ expression: this.transformNode(node.expression),
450
456
  all: node.all,
451
457
  });
452
458
  }
@@ -646,6 +652,34 @@ export class OperationNodeTransformer {
646
652
  identifier: this.transformNode(node.identifier),
647
653
  });
648
654
  }
655
+ transformAggregateFunction(node) {
656
+ return requireAllProps({
657
+ kind: 'AggregateFunctionNode',
658
+ column: this.transformNode(node.column),
659
+ distinct: node.distinct,
660
+ func: node.func,
661
+ over: this.transformNode(node.over),
662
+ });
663
+ }
664
+ transformOver(node) {
665
+ return requireAllProps({
666
+ kind: 'OverNode',
667
+ orderBy: this.transformNode(node.orderBy),
668
+ partitionBy: this.transformNode(node.partitionBy),
669
+ });
670
+ }
671
+ transformPartitionBy(node) {
672
+ return requireAllProps({
673
+ kind: 'PartitionByNode',
674
+ items: this.transformNodeList(node.items),
675
+ });
676
+ }
677
+ transformPartitionByItem(node) {
678
+ return requireAllProps({
679
+ kind: 'PartitionByItemNode',
680
+ partitionBy: this.transformNode(node.partitionBy),
681
+ });
682
+ }
649
683
  transformDataType(node) {
650
684
  // An Object.freezed leaf node. No need to clone.
651
685
  return node;
@@ -670,4 +704,8 @@ export class OperationNodeTransformer {
670
704
  // An Object.freezed leaf node. No need to clone.
671
705
  return node;
672
706
  }
707
+ transformDefaultInsertValue(node) {
708
+ // An Object.freezed leaf node. No need to clone.
709
+ return node;
710
+ }
673
711
  }
@@ -1,3 +1,4 @@
1
+ import { AggregateFunctionNode } from './aggregate-function-node.js';
1
2
  import { AliasNode } from './alias-node.js';
2
3
  import { AndNode } from './and-node.js';
3
4
  import { ColumnNode } from './column-node.js';
@@ -11,7 +12,7 @@ import { SelectQueryNode } from './select-query-node.js';
11
12
  import { TableNode } from './table-node.js';
12
13
  import { ValueListNode } from './value-list-node.js';
13
14
  import { ValueNode } from './value-node.js';
14
- export declare type ReferenceExpressionNode = ColumnNode | ReferenceNode | SelectQueryNode | RawNode;
15
+ export declare type ReferenceExpressionNode = ColumnNode | ReferenceNode | SelectQueryNode | RawNode | AggregateFunctionNode;
15
16
  export declare type ValueExpressionNode = ValueNode | ValueListNode | PrimitiveValueListNode | ReferenceExpressionNode;
16
17
  export declare type TableExpressionNode = TableNode | AliasNode;
17
18
  export declare type FilterExpressionNode = FilterNode | AndNode | OrNode | ParensNode | RawNode;
@@ -58,7 +58,6 @@ import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
58
58
  import { ColumnDefinitionNode } from './column-definition-node.js';
59
59
  import { ModifyColumnNode } from './modify-column-node.js';
60
60
  import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
61
- import { UnionNode } from './union-node.js';
62
61
  import { CreateViewNode } from './create-view-node.js';
63
62
  import { DropViewNode } from './drop-view-node.js';
64
63
  import { GeneratedNode } from './generated-node.js';
@@ -70,6 +69,12 @@ import { CreateTypeNode } from './create-type-node.js';
70
69
  import { DropTypeNode } from './drop-type-node.js';
71
70
  import { ExplainNode } from './explain-node.js';
72
71
  import { SchemableIdentifierNode } from './schemable-identifier-node.js';
72
+ import { DefaultInsertValueNode } from './default-insert-value-node.js';
73
+ import { AggregateFunctionNode } from './aggregate-function-node.js';
74
+ import { OverNode } from './over-node.js';
75
+ import { PartitionByNode } from './partition-by-node.js';
76
+ import { PartitionByItemNode } from './partition-by-item-node.js';
77
+ import { SetOperationNode } from './set-operation-node.js';
73
78
  export declare abstract class OperationNodeVisitor {
74
79
  #private;
75
80
  protected readonly nodeStack: OperationNode[];
@@ -128,7 +133,6 @@ export declare abstract class OperationNodeVisitor {
128
133
  protected abstract visitAddConstraint(node: AddConstraintNode): void;
129
134
  protected abstract visitDropConstraint(node: DropConstraintNode): void;
130
135
  protected abstract visitForeignKeyConstraint(node: ForeignKeyConstraintNode): void;
131
- protected abstract visitUnion(node: UnionNode): void;
132
136
  protected abstract visitDataType(node: DataTypeNode): void;
133
137
  protected abstract visitSelectAll(node: SelectAllNode): void;
134
138
  protected abstract visitIdentifier(node: IdentifierNode): void;
@@ -146,4 +150,10 @@ export declare abstract class OperationNodeVisitor {
146
150
  protected abstract visitCreateType(node: CreateTypeNode): void;
147
151
  protected abstract visitDropType(node: DropTypeNode): void;
148
152
  protected abstract visitExplain(node: ExplainNode): void;
153
+ protected abstract visitDefaultInsertValue(node: DefaultInsertValueNode): void;
154
+ protected abstract visitAggregateFunction(node: AggregateFunctionNode): void;
155
+ protected abstract visitOver(node: OverNode): void;
156
+ protected abstract visitPartitionBy(node: PartitionByNode): void;
157
+ protected abstract visitPartitionByItem(node: PartitionByItemNode): void;
158
+ protected abstract visitSetOperation(node: SetOperationNode): void;
149
159
  }
@@ -66,7 +66,6 @@ export class OperationNodeVisitor {
66
66
  AddConstraintNode: this.visitAddConstraint.bind(this),
67
67
  DropConstraintNode: this.visitDropConstraint.bind(this),
68
68
  ForeignKeyConstraintNode: this.visitForeignKeyConstraint.bind(this),
69
- UnionNode: this.visitUnion.bind(this),
70
69
  CreateViewNode: this.visitCreateView.bind(this),
71
70
  DropViewNode: this.visitDropView.bind(this),
72
71
  GeneratedNode: this.visitGenerated.bind(this),
@@ -77,6 +76,12 @@ export class OperationNodeVisitor {
77
76
  CreateTypeNode: this.visitCreateType.bind(this),
78
77
  DropTypeNode: this.visitDropType.bind(this),
79
78
  ExplainNode: this.visitExplain.bind(this),
79
+ DefaultInsertValueNode: this.visitDefaultInsertValue.bind(this),
80
+ AggregateFunctionNode: this.visitAggregateFunction.bind(this),
81
+ OverNode: this.visitOver.bind(this),
82
+ PartitionByNode: this.visitPartitionBy.bind(this),
83
+ PartitionByItemNode: this.visitPartitionByItem.bind(this),
84
+ SetOperationNode: this.visitSetOperation.bind(this),
80
85
  });
81
86
  visitNode = (node) => {
82
87
  this.nodeStack.push(node);
@@ -1,4 +1,4 @@
1
- export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode';
1
+ export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | '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' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }
@@ -0,0 +1,19 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { OrderByItemNode } from './order-by-item-node.js';
3
+ import { OrderByNode } from './order-by-node.js';
4
+ import { PartitionByItemNode } from './partition-by-item-node.js';
5
+ import { PartitionByNode } from './partition-by-node.js';
6
+ export interface OverNode extends OperationNode {
7
+ readonly kind: 'OverNode';
8
+ readonly orderBy?: OrderByNode;
9
+ readonly partitionBy?: PartitionByNode;
10
+ }
11
+ /**
12
+ * @internal
13
+ */
14
+ export declare const OverNode: Readonly<{
15
+ is(node: OperationNode): node is OverNode;
16
+ create(): OverNode;
17
+ cloneWithOrderByItem(overNode: OverNode, item: OrderByItemNode): OverNode;
18
+ cloneWithPartitionByItems(overNode: OverNode, items: ReadonlyArray<PartitionByItemNode>): OverNode;
19
+ }>;
@@ -0,0 +1,33 @@
1
+ /// <reference types="./over-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { OrderByNode } from './order-by-node.js';
4
+ import { PartitionByNode } from './partition-by-node.js';
5
+ /**
6
+ * @internal
7
+ */
8
+ export const OverNode = freeze({
9
+ is(node) {
10
+ return node.kind === 'OverNode';
11
+ },
12
+ create() {
13
+ return freeze({
14
+ kind: 'OverNode',
15
+ });
16
+ },
17
+ cloneWithOrderByItem(overNode, item) {
18
+ return freeze({
19
+ ...overNode,
20
+ orderBy: overNode.orderBy
21
+ ? OrderByNode.cloneWithItem(overNode.orderBy, item)
22
+ : OrderByNode.create(item),
23
+ });
24
+ },
25
+ cloneWithPartitionByItems(overNode, items) {
26
+ return freeze({
27
+ ...overNode,
28
+ partitionBy: overNode.partitionBy
29
+ ? PartitionByNode.cloneWithItems(overNode.partitionBy, items)
30
+ : PartitionByNode.create(items),
31
+ });
32
+ },
33
+ });
@@ -0,0 +1,14 @@
1
+ import { ColumnNode } from './column-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ import { ReferenceNode } from './reference-node.js';
4
+ export interface PartitionByItemNode extends OperationNode {
5
+ readonly kind: 'PartitionByItemNode';
6
+ readonly partitionBy: ColumnNode | ReferenceNode;
7
+ }
8
+ /**
9
+ * @internal
10
+ */
11
+ export declare const PartitionByItemNode: Readonly<{
12
+ is(node: OperationNode): node is PartitionByItemNode;
13
+ create(partitionBy: ColumnNode | ReferenceNode): PartitionByItemNode;
14
+ }>;
@@ -0,0 +1,16 @@
1
+ /// <reference types="./partition-by-item-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const PartitionByItemNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'PartitionByItemNode';
9
+ },
10
+ create(partitionBy) {
11
+ return freeze({
12
+ kind: 'PartitionByItemNode',
13
+ partitionBy,
14
+ });
15
+ },
16
+ });
@@ -0,0 +1,14 @@
1
+ import { PartitionByItemNode } from './partition-by-item-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ export interface PartitionByNode extends OperationNode {
4
+ readonly kind: 'PartitionByNode';
5
+ readonly items: ReadonlyArray<PartitionByItemNode>;
6
+ }
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare const PartitionByNode: Readonly<{
11
+ is(node: OperationNode): node is PartitionByNode;
12
+ create(items: ReadonlyArray<PartitionByItemNode>): PartitionByNode;
13
+ cloneWithItems(partitionBy: PartitionByNode, items: ReadonlyArray<PartitionByItemNode>): PartitionByNode;
14
+ }>;
@@ -0,0 +1,22 @@
1
+ /// <reference types="./partition-by-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const PartitionByNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'PartitionByNode';
9
+ },
10
+ create(items) {
11
+ return freeze({
12
+ kind: 'PartitionByNode',
13
+ items: freeze(items),
14
+ });
15
+ },
16
+ cloneWithItems(partitionBy, items) {
17
+ return freeze({
18
+ ...partitionBy,
19
+ items: freeze([...partitionBy.items, ...items]),
20
+ });
21
+ },
22
+ });
@@ -12,9 +12,9 @@ import { OrderByNode } from './order-by-node.js';
12
12
  import { SelectionNode } from './selection-node.js';
13
13
  import { WhereNode } from './where-node.js';
14
14
  import { WithNode } from './with-node.js';
15
- import { UnionNode } from './union-node.js';
16
15
  import { SelectModifierNode } from './select-modifier-node.js';
17
16
  import { ExplainNode } from './explain-node.js';
17
+ import { SetOperationNode } from './set-operation-node.js';
18
18
  export interface SelectQueryNode extends OperationNode {
19
19
  readonly kind: 'SelectQueryNode';
20
20
  readonly from: FromNode;
@@ -30,8 +30,8 @@ export interface SelectQueryNode extends OperationNode {
30
30
  readonly offset?: OffsetNode;
31
31
  readonly with?: WithNode;
32
32
  readonly having?: HavingNode;
33
- readonly union?: ReadonlyArray<UnionNode>;
34
33
  readonly explain?: ExplainNode;
34
+ readonly setOperations?: ReadonlyArray<SetOperationNode>;
35
35
  }
36
36
  /**
37
37
  * @internal
@@ -49,6 +49,6 @@ export declare const SelectQueryNode: Readonly<{
49
49
  cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
50
50
  cloneWithHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
51
51
  cloneWithOrHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
52
- cloneWithUnion(selectNode: SelectQueryNode, union: UnionNode): SelectQueryNode;
52
+ cloneWithSetOperation(selectNode: SelectQueryNode, setOperation: SetOperationNode): SelectQueryNode;
53
53
  cloneWithExplain(selectNode: SelectQueryNode, explain: ExplainNode): SelectQueryNode;
54
54
  }>;
@@ -94,12 +94,12 @@ export const SelectQueryNode = freeze({
94
94
  : HavingNode.create(filter),
95
95
  });
96
96
  },
97
- cloneWithUnion(selectNode, union) {
97
+ cloneWithSetOperation(selectNode, setOperation) {
98
98
  return freeze({
99
99
  ...selectNode,
100
- union: selectNode.union
101
- ? freeze([...selectNode.union, union])
102
- : freeze([union]),
100
+ setOperations: selectNode.setOperations
101
+ ? freeze([...selectNode.setOperations, setOperation])
102
+ : freeze([setOperation]),
103
103
  });
104
104
  },
105
105
  cloneWithExplain(selectNode, explain) {
@@ -0,0 +1,18 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { RawNode } from './raw-node.js';
3
+ import { SelectQueryNode } from './select-query-node.js';
4
+ export declare type SetOperationExpressionNode = SelectQueryNode | RawNode;
5
+ export declare type SetOperator = 'union' | 'intersect' | 'except';
6
+ export interface SetOperationNode extends OperationNode {
7
+ kind: 'SetOperationNode';
8
+ operator: SetOperator;
9
+ expression: SetOperationExpressionNode;
10
+ all: boolean;
11
+ }
12
+ /**
13
+ * @internal
14
+ */
15
+ export declare const SetOperationNode: Readonly<{
16
+ is(node: OperationNode): node is SetOperationNode;
17
+ create(operator: SetOperator, expression: SetOperationExpressionNode, all: boolean): SetOperationNode;
18
+ }>;
@@ -0,0 +1,18 @@
1
+ /// <reference types="./set-operation-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const SetOperationNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'SetOperationNode';
9
+ },
10
+ create(operator, expression, all) {
11
+ return freeze({
12
+ kind: 'SetOperationNode',
13
+ operator,
14
+ expression,
15
+ all,
16
+ });
17
+ },
18
+ });
@@ -1,9 +1,11 @@
1
+ import { AggregateFunctionNode } from './aggregate-function-node.js';
2
+ import { DefaultInsertValueNode } from './default-insert-value-node.js';
1
3
  import { OperationNode } from './operation-node.js';
2
4
  import { RawNode } from './raw-node.js';
3
5
  import { ReferenceNode } from './reference-node.js';
4
6
  import { SelectQueryNode } from './select-query-node.js';
5
7
  import { ValueNode } from './value-node.js';
6
- export declare type ListNodeItem = ValueNode | ReferenceNode | SelectQueryNode | RawNode;
8
+ export declare type ListNodeItem = ValueNode | ReferenceNode | DefaultInsertValueNode | SelectQueryNode | RawNode | AggregateFunctionNode;
7
9
  export interface ValueListNode extends OperationNode {
8
10
  readonly kind: 'ValueListNode';
9
11
  readonly values: ReadonlyArray<ListNodeItem>;
@@ -1,10 +1,12 @@
1
+ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
1
2
  import { AliasNode } from '../operation-node/alias-node.js';
2
3
  import { RawNode } from '../operation-node/raw-node.js';
3
4
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
5
+ import { AggregateFunctionBuilder } from '../query-builder/aggregate-function-builder.js';
4
6
  import { RawBuilder } from '../raw-builder/raw-builder.js';
5
- import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
6
- export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB>;
7
- export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB>;
8
- export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
7
+ import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory, AggregateFunctionBuilderFactory, AliasedAggregateFunctionBuilderFactory, AnyAliasedAggregateFunctionBuilder } from '../util/type-utils.js';
8
+ export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB, V> | AggregateFunctionBuilder<DB, TB, V> | AggregateFunctionBuilderFactory<DB, TB, V>;
9
+ export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB> | AnyAliasedAggregateFunctionBuilder | AliasedAggregateFunctionBuilderFactory<DB, TB>;
10
+ export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode | AggregateFunctionNode;
9
11
  export declare function parseAliasedComplexExpression(exp: AliasedComplexExpression<any, any>): AliasNode;
10
12
  export declare function isComplexExpression(obj: unknown): obj is ComplexExpression<any, any>;
@@ -2,4 +2,4 @@ import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
2
2
  import { ReferenceExpression } from './reference-parser.js';
3
3
  export declare type GroupByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
4
4
  export declare type GroupByExpressionOrList<DB, TB extends keyof DB, O> = ReadonlyArray<GroupByExpression<DB, TB, O>> | GroupByExpression<DB, TB, O>;
5
- export declare function parseGroupBy(orderBy: GroupByExpressionOrList<any, any, any>): GroupByItemNode[];
5
+ export declare function parseGroupBy(groupBy: GroupByExpressionOrList<any, any, any>): GroupByItemNode[];
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./group-by-parser.d.ts" />
2
2
  import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
3
3
  import { parseReferenceExpressionOrList, } from './reference-parser.js';
4
- export function parseGroupBy(orderBy) {
5
- return parseReferenceExpressionOrList(orderBy).map(GroupByItemNode.create);
4
+ export function parseGroupBy(groupBy) {
5
+ return parseReferenceExpressionOrList(groupBy).map(GroupByItemNode.create);
6
6
  }