kysely 0.27.1 → 0.27.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 (161) hide show
  1. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  2. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  3. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  4. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  6. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  8. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +1 -1
  11. package/dist/cjs/expression/expression-builder.d.ts +30 -4
  12. package/dist/cjs/expression/expression-builder.js +5 -0
  13. package/dist/cjs/index.d.ts +7 -1
  14. package/dist/cjs/index.js +6 -0
  15. package/dist/cjs/migration/migrator.d.ts +19 -2
  16. package/dist/cjs/migration/migrator.js +77 -43
  17. package/dist/cjs/operation-node/add-index-node.js +1 -1
  18. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  19. package/dist/cjs/operation-node/cast-node.js +19 -0
  20. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  21. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  22. package/dist/cjs/operation-node/data-type-node.js +55 -1
  23. package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
  24. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  25. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  26. package/dist/cjs/operation-node/fetch-node.js +19 -0
  27. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
  28. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  29. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  31. package/dist/cjs/operation-node/matched-node.js +19 -0
  32. package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
  33. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  34. package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
  35. package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
  36. package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
  37. package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
  38. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/query-node.d.ts +10 -3
  40. package/dist/cjs/operation-node/query-node.js +15 -1
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
  42. package/dist/cjs/operation-node/select-query-node.js +6 -0
  43. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  44. package/dist/cjs/operation-node/top-node.js +19 -0
  45. package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
  46. package/dist/cjs/operation-node/update-query-node.js +11 -0
  47. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  48. package/dist/cjs/parser/binary-operation-parser.js +2 -2
  49. package/dist/cjs/parser/data-type-parser.js +7 -3
  50. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  51. package/dist/cjs/parser/fetch-parser.js +18 -0
  52. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  53. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  54. package/dist/cjs/parser/merge-parser.js +32 -0
  55. package/dist/cjs/parser/table-parser.d.ts +4 -3
  56. package/dist/cjs/parser/top-parser.d.ts +2 -0
  57. package/dist/cjs/parser/top-parser.js +20 -0
  58. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  59. package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
  60. package/dist/cjs/query-builder/delete-query-builder.js +120 -0
  61. package/dist/cjs/query-builder/insert-query-builder.d.ts +73 -3
  62. package/dist/cjs/query-builder/insert-query-builder.js +242 -0
  63. package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
  64. package/dist/cjs/query-builder/merge-query-builder.js +518 -0
  65. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  66. package/dist/cjs/query-builder/merge-result.js +10 -0
  67. package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
  68. package/dist/cjs/query-builder/select-query-builder.js +14 -0
  69. package/dist/cjs/query-builder/update-query-builder.d.ts +82 -3
  70. package/dist/cjs/query-builder/update-query-builder.js +98 -0
  71. package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
  72. package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
  73. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  74. package/dist/cjs/query-creator.d.ts +40 -2
  75. package/dist/cjs/query-creator.js +9 -0
  76. package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
  77. package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
  78. package/dist/cjs/schema/column-definition-builder.js +15 -1
  79. package/dist/cjs/util/infer-result.d.ts +2 -1
  80. package/dist/cjs/util/type-utils.d.ts +3 -2
  81. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  82. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  83. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  84. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  85. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  86. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  87. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  88. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
  89. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  90. package/dist/esm/driver/database-connection.d.ts +1 -1
  91. package/dist/esm/expression/expression-builder.d.ts +30 -4
  92. package/dist/esm/expression/expression-builder.js +5 -0
  93. package/dist/esm/index.d.ts +7 -1
  94. package/dist/esm/index.js +6 -0
  95. package/dist/esm/migration/migrator.d.ts +19 -2
  96. package/dist/esm/migration/migrator.js +76 -42
  97. package/dist/esm/operation-node/add-index-node.js +1 -1
  98. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  99. package/dist/esm/operation-node/cast-node.js +17 -0
  100. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  101. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  102. package/dist/esm/operation-node/data-type-node.js +53 -0
  103. package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
  104. package/dist/esm/operation-node/delete-query-node.js +12 -0
  105. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  106. package/dist/esm/operation-node/fetch-node.js +17 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
  108. package/dist/esm/operation-node/insert-query-node.js +5 -0
  109. package/dist/esm/operation-node/join-node.d.ts +1 -1
  110. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  111. package/dist/esm/operation-node/matched-node.js +17 -0
  112. package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
  113. package/dist/esm/operation-node/merge-query-node.js +43 -0
  114. package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
  115. package/dist/esm/operation-node/operation-node-transformer.js +50 -0
  116. package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
  117. package/dist/esm/operation-node/operation-node-visitor.js +5 -0
  118. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  119. package/dist/esm/operation-node/query-node.d.ts +10 -3
  120. package/dist/esm/operation-node/query-node.js +15 -1
  121. package/dist/esm/operation-node/select-query-node.d.ts +5 -0
  122. package/dist/esm/operation-node/select-query-node.js +6 -0
  123. package/dist/esm/operation-node/top-node.d.ts +14 -0
  124. package/dist/esm/operation-node/top-node.js +17 -0
  125. package/dist/esm/operation-node/update-query-node.d.ts +7 -1
  126. package/dist/esm/operation-node/update-query-node.js +11 -0
  127. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  128. package/dist/esm/parser/binary-operation-parser.js +2 -2
  129. package/dist/esm/parser/data-type-parser.js +8 -4
  130. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  131. package/dist/esm/parser/fetch-parser.js +15 -0
  132. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  133. package/dist/esm/parser/merge-parser.d.ts +9 -0
  134. package/dist/esm/parser/merge-parser.js +28 -0
  135. package/dist/esm/parser/table-parser.d.ts +4 -3
  136. package/dist/esm/parser/top-parser.d.ts +2 -0
  137. package/dist/esm/parser/top-parser.js +17 -0
  138. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  139. package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
  140. package/dist/esm/query-builder/delete-query-builder.js +120 -0
  141. package/dist/esm/query-builder/insert-query-builder.d.ts +73 -3
  142. package/dist/esm/query-builder/insert-query-builder.js +242 -0
  143. package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
  144. package/dist/esm/query-builder/merge-query-builder.js +512 -0
  145. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  146. package/dist/esm/query-builder/merge-result.js +7 -0
  147. package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
  148. package/dist/esm/query-builder/select-query-builder.js +14 -0
  149. package/dist/esm/query-builder/update-query-builder.d.ts +82 -3
  150. package/dist/esm/query-builder/update-query-builder.js +98 -0
  151. package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
  152. package/dist/esm/query-compiler/default-query-compiler.js +94 -10
  153. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  154. package/dist/esm/query-creator.d.ts +40 -2
  155. package/dist/esm/query-creator.js +10 -1
  156. package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
  157. package/dist/esm/schema/column-definition-builder.d.ts +13 -1
  158. package/dist/esm/schema/column-definition-builder.js +15 -1
  159. package/dist/esm/util/infer-result.d.ts +2 -1
  160. package/dist/esm/util/type-utils.d.ts +3 -2
  161. package/package.json +22 -21
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CastNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.CastNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'CastNode';
11
+ },
12
+ create(expression, dataType) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'CastNode',
15
+ expression,
16
+ dataType,
17
+ });
18
+ },
19
+ });
@@ -21,6 +21,7 @@ export interface ColumnDefinitionNode extends OperationNode {
21
21
  readonly frontModifiers?: ReadonlyArray<OperationNode>;
22
22
  readonly endModifiers?: ReadonlyArray<OperationNode>;
23
23
  readonly nullsNotDistinct?: boolean;
24
+ readonly identity?: boolean;
24
25
  }
25
26
  /**
26
27
  * @internal
@@ -1,5 +1,7 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- export type ColumnDataType = 'varchar' | `varchar(${number})` | 'char' | `char(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | `binary(${number})` | 'bytea' | 'date' | 'datetime' | `datetime(${number})` | 'time' | `time(${number})` | 'timetz' | `timetz(${number})` | 'timestamp' | `timestamp(${number})` | 'timestamptz' | `timestamptz(${number})` | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb' | 'blob';
2
+ declare const SIMPLE_COLUMN_DATA_TYPES: readonly ["varchar", "char", "text", "integer", "int2", "int4", "int8", "smallint", "bigint", "boolean", "real", "double precision", "float4", "float8", "decimal", "numeric", "binary", "bytea", "date", "datetime", "time", "timetz", "timestamp", "timestamptz", "serial", "bigserial", "uuid", "json", "jsonb", "blob"];
3
+ type SimpleColumnDataType = (typeof SIMPLE_COLUMN_DATA_TYPES)[number];
4
+ export type ColumnDataType = SimpleColumnDataType | `varchar(${number})` | `char(${number})` | `decimal(${number}, ${number})` | `numeric(${number}, ${number})` | `binary(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})`;
3
5
  export type DataTypeParams = Omit<DataTypeNode, 'kind' | 'dataType'>;
4
6
  export interface DataTypeNode extends OperationNode {
5
7
  readonly kind: 'DataTypeNode';
@@ -12,3 +14,5 @@ export declare const DataTypeNode: Readonly<{
12
14
  is(node: OperationNode): node is DataTypeNode;
13
15
  create(dataType: ColumnDataType): DataTypeNode;
14
16
  }>;
17
+ export declare function isColumnDataType(dataType: string): dataType is ColumnDataType;
18
+ export {};
@@ -1,7 +1,51 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataTypeNode = void 0;
3
+ exports.isColumnDataType = exports.DataTypeNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
+ const SIMPLE_COLUMN_DATA_TYPES = [
6
+ 'varchar',
7
+ 'char',
8
+ 'text',
9
+ 'integer',
10
+ 'int2',
11
+ 'int4',
12
+ 'int8',
13
+ 'smallint',
14
+ 'bigint',
15
+ 'boolean',
16
+ 'real',
17
+ 'double precision',
18
+ 'float4',
19
+ 'float8',
20
+ 'decimal',
21
+ 'numeric',
22
+ 'binary',
23
+ 'bytea',
24
+ 'date',
25
+ 'datetime',
26
+ 'time',
27
+ 'timetz',
28
+ 'timestamp',
29
+ 'timestamptz',
30
+ 'serial',
31
+ 'bigserial',
32
+ 'uuid',
33
+ 'json',
34
+ 'jsonb',
35
+ 'blob',
36
+ ];
37
+ const COLUMN_DATA_TYPE_REGEX = [
38
+ /^varchar\(\d+\)$/,
39
+ /^char\(\d+\)$/,
40
+ /^decimal\(\d+, \d+\)$/,
41
+ /^numeric\(\d+, \d+\)$/,
42
+ /^binary\(\d+\)$/,
43
+ /^datetime\(\d+\)$/,
44
+ /^time\(\d+\)$/,
45
+ /^timez\(\d+\)$/,
46
+ /^timestamp\(\d+\)$/,
47
+ /^timestamptz\(\d+\)$/,
48
+ ];
5
49
  /**
6
50
  * @internal
7
51
  */
@@ -16,3 +60,13 @@ exports.DataTypeNode = (0, object_utils_js_1.freeze)({
16
60
  });
17
61
  },
18
62
  });
63
+ function isColumnDataType(dataType) {
64
+ if (SIMPLE_COLUMN_DATA_TYPES.includes(dataType)) {
65
+ return true;
66
+ }
67
+ if (COLUMN_DATA_TYPE_REGEX.some((r) => r.test(dataType))) {
68
+ return true;
69
+ }
70
+ return false;
71
+ }
72
+ exports.isColumnDataType = isColumnDataType;
@@ -9,6 +9,7 @@ import { OrderByNode } from './order-by-node.js';
9
9
  import { OrderByItemNode } from './order-by-item-node.js';
10
10
  import { ExplainNode } from './explain-node.js';
11
11
  import { UsingNode } from './using-node.js';
12
+ import { TopNode } from './top-node.js';
12
13
  export interface DeleteQueryNode extends OperationNode {
13
14
  readonly kind: 'DeleteQueryNode';
14
15
  readonly from: FromNode;
@@ -20,6 +21,7 @@ export interface DeleteQueryNode extends OperationNode {
20
21
  readonly orderBy?: OrderByNode;
21
22
  readonly limit?: LimitNode;
22
23
  readonly explain?: ExplainNode;
24
+ readonly top?: TopNode;
23
25
  }
24
26
  /**
25
27
  * @internal
@@ -28,6 +30,8 @@ export declare const DeleteQueryNode: Readonly<{
28
30
  is(node: OperationNode): node is DeleteQueryNode;
29
31
  create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
30
32
  cloneWithOrderByItems(deleteNode: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>): DeleteQueryNode;
33
+ cloneWithoutOrderBy(deleteNode: DeleteQueryNode): DeleteQueryNode;
31
34
  cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
35
+ cloneWithoutLimit(deleteNode: DeleteQueryNode): DeleteQueryNode;
32
36
  cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;
33
37
  }>;
@@ -27,12 +27,24 @@ exports.DeleteQueryNode = (0, object_utils_js_1.freeze)({
27
27
  : order_by_node_js_1.OrderByNode.create(items),
28
28
  });
29
29
  },
30
+ cloneWithoutOrderBy(deleteNode) {
31
+ return (0, object_utils_js_1.freeze)({
32
+ ...deleteNode,
33
+ orderBy: undefined,
34
+ });
35
+ },
30
36
  cloneWithLimit(deleteNode, limit) {
31
37
  return (0, object_utils_js_1.freeze)({
32
38
  ...deleteNode,
33
39
  limit,
34
40
  });
35
41
  },
42
+ cloneWithoutLimit(deleteNode) {
43
+ return (0, object_utils_js_1.freeze)({
44
+ ...deleteNode,
45
+ limit: undefined,
46
+ });
47
+ },
36
48
  cloneWithUsing(deleteNode, tables) {
37
49
  return (0, object_utils_js_1.freeze)({
38
50
  ...deleteNode,
@@ -0,0 +1,15 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { ValueNode } from './value-node.js';
3
+ export type FetchModifier = 'only' | 'with ties';
4
+ export interface FetchNode extends OperationNode {
5
+ readonly kind: 'FetchNode';
6
+ readonly rowCount: ValueNode;
7
+ readonly modifier: FetchModifier;
8
+ }
9
+ /**
10
+ * @internal
11
+ */
12
+ export declare const FetchNode: {
13
+ is(node: OperationNode): node is FetchNode;
14
+ create(rowCount: number | bigint, modifier: FetchModifier): FetchNode;
15
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FetchNode = void 0;
4
+ const value_node_js_1 = require("./value-node.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.FetchNode = {
9
+ is(node) {
10
+ return node.kind === 'FetchNode';
11
+ },
12
+ create(rowCount, modifier) {
13
+ return {
14
+ kind: 'FetchNode',
15
+ rowCount: value_node_js_1.ValueNode.create(rowCount),
16
+ modifier,
17
+ };
18
+ },
19
+ };
@@ -5,11 +5,12 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
5
5
  import { OperationNode } from './operation-node.js';
6
6
  import { ReturningNode } from './returning-node.js';
7
7
  import { TableNode } from './table-node.js';
8
+ import { TopNode } from './top-node.js';
8
9
  import { WithNode } from './with-node.js';
9
10
  export type InsertQueryNodeProps = Omit<InsertQueryNode, 'kind' | 'into'>;
10
11
  export interface InsertQueryNode extends OperationNode {
11
12
  readonly kind: 'InsertQueryNode';
12
- readonly into: TableNode;
13
+ readonly into?: TableNode;
13
14
  readonly columns?: ReadonlyArray<ColumnNode>;
14
15
  readonly values?: OperationNode;
15
16
  readonly returning?: ReturningNode;
@@ -20,6 +21,7 @@ export interface InsertQueryNode extends OperationNode {
20
21
  readonly replace?: boolean;
21
22
  readonly explain?: ExplainNode;
22
23
  readonly defaultValues?: boolean;
24
+ readonly top?: TopNode;
23
25
  }
24
26
  /**
25
27
  * @internal
@@ -27,5 +29,6 @@ export interface InsertQueryNode extends OperationNode {
27
29
  export declare const InsertQueryNode: Readonly<{
28
30
  is(node: OperationNode): node is InsertQueryNode;
29
31
  create(into: TableNode, withNode?: WithNode, replace?: boolean): InsertQueryNode;
32
+ createWithoutInto(): InsertQueryNode;
30
33
  cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
31
34
  }>;
@@ -17,6 +17,11 @@ exports.InsertQueryNode = (0, object_utils_js_1.freeze)({
17
17
  replace,
18
18
  });
19
19
  },
20
+ createWithoutInto() {
21
+ return (0, object_utils_js_1.freeze)({
22
+ kind: 'InsertQueryNode',
23
+ });
24
+ },
20
25
  cloneWith(insertQuery, props) {
21
26
  return (0, object_utils_js_1.freeze)({
22
27
  ...insertQuery,
@@ -1,6 +1,6 @@
1
1
  import { OnNode } from './on-node.js';
2
2
  import { OperationNode } from './operation-node.js';
3
- export type JoinType = 'InnerJoin' | 'LeftJoin' | 'RightJoin' | 'FullJoin' | 'LateralInnerJoin' | 'LateralLeftJoin';
3
+ export type JoinType = 'InnerJoin' | 'LeftJoin' | 'RightJoin' | 'FullJoin' | 'LateralInnerJoin' | 'LateralLeftJoin' | 'Using';
4
4
  export interface JoinNode extends OperationNode {
5
5
  readonly kind: 'JoinNode';
6
6
  readonly joinType: JoinType;
@@ -0,0 +1,13 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ export interface MatchedNode extends OperationNode {
3
+ readonly kind: 'MatchedNode';
4
+ readonly not: boolean;
5
+ readonly bySource: boolean;
6
+ }
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare const MatchedNode: Readonly<{
11
+ is(node: OperationNode): node is MatchedNode;
12
+ create(not: boolean, bySource?: boolean): MatchedNode;
13
+ }>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MatchedNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.MatchedNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'MatchedNode';
11
+ },
12
+ create(not, bySource = false) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'MatchedNode',
15
+ not,
16
+ bySource,
17
+ });
18
+ },
19
+ });
@@ -0,0 +1,25 @@
1
+ import { AliasNode } from './alias-node.js';
2
+ import { JoinNode } from './join-node.js';
3
+ import { OperationNode } from './operation-node.js';
4
+ import { TableNode } from './table-node.js';
5
+ import { TopNode } from './top-node.js';
6
+ import { WhenNode } from './when-node.js';
7
+ import { WithNode } from './with-node.js';
8
+ export interface MergeQueryNode extends OperationNode {
9
+ readonly kind: 'MergeQueryNode';
10
+ readonly into: TableNode | AliasNode;
11
+ readonly using?: JoinNode;
12
+ readonly whens?: ReadonlyArray<WhenNode>;
13
+ readonly with?: WithNode;
14
+ readonly top?: TopNode;
15
+ }
16
+ /**
17
+ * @internal
18
+ */
19
+ export declare const MergeQueryNode: Readonly<{
20
+ is(node: OperationNode): node is MergeQueryNode;
21
+ create(into: TableNode | AliasNode, withNode?: WithNode): MergeQueryNode;
22
+ cloneWithUsing(mergeNode: MergeQueryNode, using: JoinNode): MergeQueryNode;
23
+ cloneWithWhen(mergeNode: MergeQueryNode, when: WhenNode): MergeQueryNode;
24
+ cloneWithThen(mergeNode: MergeQueryNode, then: OperationNode): MergeQueryNode;
25
+ }>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MergeQueryNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ const when_node_js_1 = require("./when-node.js");
6
+ /**
7
+ * @internal
8
+ */
9
+ exports.MergeQueryNode = (0, object_utils_js_1.freeze)({
10
+ is(node) {
11
+ return node.kind === 'MergeQueryNode';
12
+ },
13
+ create(into, withNode) {
14
+ return (0, object_utils_js_1.freeze)({
15
+ kind: 'MergeQueryNode',
16
+ into,
17
+ ...(withNode && { with: withNode }),
18
+ });
19
+ },
20
+ cloneWithUsing(mergeNode, using) {
21
+ return (0, object_utils_js_1.freeze)({
22
+ ...mergeNode,
23
+ using,
24
+ });
25
+ },
26
+ cloneWithWhen(mergeNode, when) {
27
+ return (0, object_utils_js_1.freeze)({
28
+ ...mergeNode,
29
+ whens: mergeNode.whens
30
+ ? (0, object_utils_js_1.freeze)([...mergeNode.whens, when])
31
+ : (0, object_utils_js_1.freeze)([when]),
32
+ });
33
+ },
34
+ cloneWithThen(mergeNode, then) {
35
+ return (0, object_utils_js_1.freeze)({
36
+ ...mergeNode,
37
+ whens: mergeNode.whens
38
+ ? (0, object_utils_js_1.freeze)([
39
+ ...mergeNode.whens.slice(0, -1),
40
+ when_node_js_1.WhenNode.cloneWithResult(mergeNode.whens[mergeNode.whens.length - 1], then),
41
+ ])
42
+ : undefined,
43
+ });
44
+ },
45
+ });
@@ -85,7 +85,12 @@ import { JSONPathNode } from './json-path-node.js';
85
85
  import { JSONPathLegNode } from './json-path-leg-node.js';
86
86
  import { JSONOperatorChainNode } from './json-operator-chain-node.js';
87
87
  import { TupleNode } from './tuple-node.js';
88
+ import { MergeQueryNode } from './merge-query-node.js';
89
+ import { MatchedNode } from './matched-node.js';
88
90
  import { AddIndexNode } from './add-index-node.js';
91
+ import { CastNode } from './cast-node.js';
92
+ import { FetchNode } from './fetch-node.js';
93
+ import { TopNode } from './top-node.js';
89
94
  /**
90
95
  * Transforms an operation node tree into another one.
91
96
  *
@@ -200,7 +205,12 @@ export declare class OperationNodeTransformer {
200
205
  protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
201
206
  protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
202
207
  protected transformTuple(node: TupleNode): TupleNode;
208
+ protected transformMergeQuery(node: MergeQueryNode): MergeQueryNode;
209
+ protected transformMatched(node: MatchedNode): MatchedNode;
203
210
  protected transformAddIndex(node: AddIndexNode): AddIndexNode;
211
+ protected transformCast(node: CastNode): CastNode;
212
+ protected transformFetch(node: FetchNode): FetchNode;
213
+ protected transformTop(node: TopNode): TopNode;
204
214
  protected transformDataType(node: DataTypeNode): DataTypeNode;
205
215
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
206
216
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;
@@ -121,7 +121,12 @@ class OperationNodeTransformer {
121
121
  JSONPathLegNode: this.transformJSONPathLeg.bind(this),
122
122
  JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
123
123
  TupleNode: this.transformTuple.bind(this),
124
+ MergeQueryNode: this.transformMergeQuery.bind(this),
125
+ MatchedNode: this.transformMatched.bind(this),
124
126
  AddIndexNode: this.transformAddIndex.bind(this),
127
+ CastNode: this.transformCast.bind(this),
128
+ FetchNode: this.transformFetch.bind(this),
129
+ TopNode: this.transformTop.bind(this),
125
130
  });
126
131
  transformNode(node) {
127
132
  if (!node) {
@@ -159,6 +164,8 @@ class OperationNodeTransformer {
159
164
  having: this.transformNode(node.having),
160
165
  explain: this.transformNode(node.explain),
161
166
  setOperations: this.transformNodeList(node.setOperations),
167
+ fetch: this.transformNode(node.fetch),
168
+ top: this.transformNode(node.top),
162
169
  });
163
170
  }
164
171
  transformSelection(node) {
@@ -260,6 +267,7 @@ class OperationNodeTransformer {
260
267
  replace: node.replace,
261
268
  explain: this.transformNode(node.explain),
262
269
  defaultValues: node.defaultValues,
270
+ top: this.transformNode(node.top),
263
271
  });
264
272
  }
265
273
  transformValues(node) {
@@ -280,6 +288,7 @@ class OperationNodeTransformer {
280
288
  orderBy: this.transformNode(node.orderBy),
281
289
  limit: this.transformNode(node.limit),
282
290
  explain: this.transformNode(node.explain),
291
+ top: this.transformNode(node.top),
283
292
  });
284
293
  }
285
294
  transformReturning(node) {
@@ -319,6 +328,7 @@ class OperationNodeTransformer {
319
328
  frontModifiers: this.transformNodeList(node.frontModifiers),
320
329
  endModifiers: this.transformNodeList(node.endModifiers),
321
330
  nullsNotDistinct: node.nullsNotDistinct,
331
+ identity: node.identity,
322
332
  });
323
333
  }
324
334
  transformAddColumn(node) {
@@ -371,6 +381,8 @@ class OperationNodeTransformer {
371
381
  returning: this.transformNode(node.returning),
372
382
  with: this.transformNode(node.with),
373
383
  explain: this.transformNode(node.explain),
384
+ limit: this.transformNode(node.limit),
385
+ top: this.transformNode(node.top),
374
386
  });
375
387
  }
376
388
  transformColumnUpdate(node) {
@@ -774,6 +786,23 @@ class OperationNodeTransformer {
774
786
  values: this.transformNodeList(node.values),
775
787
  });
776
788
  }
789
+ transformMergeQuery(node) {
790
+ return (0, require_all_props_js_1.requireAllProps)({
791
+ kind: 'MergeQueryNode',
792
+ into: this.transformNode(node.into),
793
+ using: this.transformNode(node.using),
794
+ whens: this.transformNodeList(node.whens),
795
+ with: this.transformNode(node.with),
796
+ top: this.transformNode(node.top),
797
+ });
798
+ }
799
+ transformMatched(node) {
800
+ return (0, require_all_props_js_1.requireAllProps)({
801
+ kind: 'MatchedNode',
802
+ not: node.not,
803
+ bySource: node.bySource,
804
+ });
805
+ }
777
806
  transformAddIndex(node) {
778
807
  return (0, require_all_props_js_1.requireAllProps)({
779
808
  kind: 'AddIndexNode',
@@ -784,6 +813,27 @@ class OperationNodeTransformer {
784
813
  ifNotExists: node.ifNotExists,
785
814
  });
786
815
  }
816
+ transformCast(node) {
817
+ return (0, require_all_props_js_1.requireAllProps)({
818
+ kind: 'CastNode',
819
+ expression: this.transformNode(node.expression),
820
+ dataType: this.transformNode(node.dataType),
821
+ });
822
+ }
823
+ transformFetch(node) {
824
+ return (0, require_all_props_js_1.requireAllProps)({
825
+ kind: 'FetchNode',
826
+ rowCount: this.transformNode(node.rowCount),
827
+ modifier: node.modifier,
828
+ });
829
+ }
830
+ transformTop(node) {
831
+ return (0, require_all_props_js_1.requireAllProps)({
832
+ kind: 'TopNode',
833
+ expression: node.expression,
834
+ modifiers: node.modifiers,
835
+ });
836
+ }
787
837
  transformDataType(node) {
788
838
  // An Object.freezed leaf node. No need to clone.
789
839
  return node;
@@ -85,7 +85,12 @@ import { JSONPathNode } from './json-path-node.js';
85
85
  import { JSONPathLegNode } from './json-path-leg-node.js';
86
86
  import { JSONOperatorChainNode } from './json-operator-chain-node.js';
87
87
  import { TupleNode } from './tuple-node.js';
88
+ import { MergeQueryNode } from './merge-query-node.js';
89
+ import { MatchedNode } from './matched-node.js';
88
90
  import { AddIndexNode } from './add-index-node.js';
91
+ import { CastNode } from './cast-node.js';
92
+ import { FetchNode } from './fetch-node.js';
93
+ import { TopNode } from './top-node.js';
89
94
  export declare abstract class OperationNodeVisitor {
90
95
  #private;
91
96
  protected readonly nodeStack: OperationNode[];
@@ -177,5 +182,10 @@ export declare abstract class OperationNodeVisitor {
177
182
  protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
178
183
  protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
179
184
  protected abstract visitTuple(node: TupleNode): void;
185
+ protected abstract visitMergeQuery(node: MergeQueryNode): void;
186
+ protected abstract visitMatched(node: MatchedNode): void;
180
187
  protected abstract visitAddIndex(node: AddIndexNode): void;
188
+ protected abstract visitCast(node: CastNode): void;
189
+ protected abstract visitFetch(node: FetchNode): void;
190
+ protected abstract visitTop(node: TopNode): void;
181
191
  }
@@ -94,7 +94,12 @@ class OperationNodeVisitor {
94
94
  JSONPathLegNode: this.visitJSONPathLeg.bind(this),
95
95
  JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
96
96
  TupleNode: this.visitTuple.bind(this),
97
+ MergeQueryNode: this.visitMergeQuery.bind(this),
98
+ MatchedNode: this.visitMatched.bind(this),
97
99
  AddIndexNode: this.visitAddIndex.bind(this),
100
+ CastNode: this.visitCast.bind(this),
101
+ FetchNode: this.visitFetch.bind(this),
102
+ TopNode: this.visitTop.bind(this),
98
103
  });
99
104
  visitNode = (node) => {
100
105
  this.nodeStack.push(node);
@@ -1,4 +1,4 @@
1
- export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | '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' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'AddIndexNode';
1
+ export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | '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' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'MergeQueryNode' | 'MatchedNode' | 'AddIndexNode' | 'CastNode' | 'FetchNode' | 'TopNode';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }
@@ -10,7 +10,9 @@ import { OperationNode } from './operation-node.js';
10
10
  import { ExplainNode } from './explain-node.js';
11
11
  import { ExplainFormat } from '../util/explainable.js';
12
12
  import { Expression } from '../expression/expression.js';
13
- export type QueryNode = SelectQueryNode | InsertQueryNode | UpdateQueryNode | DeleteQueryNode;
13
+ import { MergeQueryNode } from './merge-query-node.js';
14
+ import { TopNode } from './top-node.js';
15
+ export type QueryNode = SelectQueryNode | InsertQueryNode | UpdateQueryNode | DeleteQueryNode | MergeQueryNode;
14
16
  type HasJoins = {
15
17
  joins?: ReadonlyArray<JoinNode>;
16
18
  };
@@ -23,6 +25,9 @@ type HasReturning = {
23
25
  type HasExplain = {
24
26
  explain?: ExplainNode;
25
27
  };
28
+ type HasTop = {
29
+ top?: TopNode;
30
+ };
26
31
  /**
27
32
  * @internal
28
33
  */
@@ -31,7 +36,9 @@ export declare const QueryNode: Readonly<{
31
36
  cloneWithWhere<T extends HasWhere>(node: T, operation: OperationNode): T;
32
37
  cloneWithJoin<T_1 extends HasJoins>(node: T_1, join: JoinNode): T_1;
33
38
  cloneWithReturning<T_2 extends HasReturning>(node: T_2, selections: ReadonlyArray<SelectionNode>): T_2;
34
- cloneWithoutWhere<T_3 extends HasWhere>(node: T_3): T_3;
35
- cloneWithExplain<T_4 extends HasExplain>(node: T_4, format: ExplainFormat | undefined, options: Expression<any> | undefined): T_4;
39
+ cloneWithoutReturning<T_3 extends HasReturning>(node: T_3): T_3;
40
+ cloneWithoutWhere<T_4 extends HasWhere>(node: T_4): T_4;
41
+ cloneWithExplain<T_5 extends HasExplain>(node: T_5, format: ExplainFormat | undefined, options: Expression<any> | undefined): T_5;
42
+ cloneWithTop<T_6 extends HasTop>(node: T_6, top: TopNode): T_6;
36
43
  }>;
37
44
  export {};
@@ -9,6 +9,7 @@ const where_node_js_1 = require("./where-node.js");
9
9
  const object_utils_js_1 = require("../util/object-utils.js");
10
10
  const returning_node_js_1 = require("./returning-node.js");
11
11
  const explain_node_js_1 = require("./explain-node.js");
12
+ const merge_query_node_js_1 = require("./merge-query-node.js");
12
13
  /**
13
14
  * @internal
14
15
  */
@@ -17,7 +18,8 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
17
18
  return (select_query_node_js_1.SelectQueryNode.is(node) ||
18
19
  insert_query_node_js_1.InsertQueryNode.is(node) ||
19
20
  update_query_node_js_1.UpdateQueryNode.is(node) ||
20
- delete_query_node_js_1.DeleteQueryNode.is(node));
21
+ delete_query_node_js_1.DeleteQueryNode.is(node) ||
22
+ merge_query_node_js_1.MergeQueryNode.is(node));
21
23
  },
22
24
  cloneWithWhere(node, operation) {
23
25
  return (0, object_utils_js_1.freeze)({
@@ -41,6 +43,12 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
41
43
  : returning_node_js_1.ReturningNode.create(selections),
42
44
  });
43
45
  },
46
+ cloneWithoutReturning(node) {
47
+ return (0, object_utils_js_1.freeze)({
48
+ ...node,
49
+ returning: undefined,
50
+ });
51
+ },
44
52
  cloneWithoutWhere(node) {
45
53
  return (0, object_utils_js_1.freeze)({
46
54
  ...node,
@@ -53,4 +61,10 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
53
61
  explain: explain_node_js_1.ExplainNode.create(format, options?.toOperationNode()),
54
62
  });
55
63
  },
64
+ cloneWithTop(node, top) {
65
+ return (0, object_utils_js_1.freeze)({
66
+ ...node,
67
+ top,
68
+ });
69
+ },
56
70
  });
@@ -14,6 +14,8 @@ import { WithNode } from './with-node.js';
14
14
  import { SelectModifierNode } from './select-modifier-node.js';
15
15
  import { ExplainNode } from './explain-node.js';
16
16
  import { SetOperationNode } from './set-operation-node.js';
17
+ import { FetchNode } from './fetch-node.js';
18
+ import { TopNode } from './top-node.js';
17
19
  export interface SelectQueryNode extends OperationNode {
18
20
  readonly kind: 'SelectQueryNode';
19
21
  readonly from?: FromNode;
@@ -31,6 +33,8 @@ export interface SelectQueryNode extends OperationNode {
31
33
  readonly having?: HavingNode;
32
34
  readonly explain?: ExplainNode;
33
35
  readonly setOperations?: ReadonlyArray<SetOperationNode>;
36
+ readonly fetch?: FetchNode;
37
+ readonly top?: TopNode;
34
38
  }
35
39
  /**
36
40
  * @internal
@@ -47,6 +51,7 @@ export declare const SelectQueryNode: Readonly<{
47
51
  cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
48
52
  cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
49
53
  cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
54
+ cloneWithFetch(selectNode: SelectQueryNode, fetch: FetchNode): SelectQueryNode;
50
55
  cloneWithHaving(selectNode: SelectQueryNode, operation: OperationNode): SelectQueryNode;
51
56
  cloneWithSetOperations(selectNode: SelectQueryNode, setOperations: ReadonlyArray<SetOperationNode>): SelectQueryNode;
52
57
  cloneWithoutSelections(select: SelectQueryNode): SelectQueryNode;