kysely 0.27.2 → 0.27.4

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 (285) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +7 -7
  3. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  4. package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
  5. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  6. package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
  7. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
  8. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  9. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  10. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
  12. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  13. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  14. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  15. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  16. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  17. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  18. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
  19. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  20. package/dist/cjs/driver/database-connection.d.ts +4 -2
  21. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  22. package/dist/cjs/dynamic/dynamic.d.ts +1 -1
  23. package/dist/cjs/dynamic/dynamic.js +1 -1
  24. package/dist/cjs/expression/expression-builder.d.ts +31 -5
  25. package/dist/cjs/expression/expression-builder.js +7 -3
  26. package/dist/cjs/expression/expression.js +2 -3
  27. package/dist/cjs/helpers/mssql.js +3 -4
  28. package/dist/cjs/helpers/mysql.d.ts +3 -3
  29. package/dist/cjs/helpers/mysql.js +6 -7
  30. package/dist/cjs/helpers/postgres.d.ts +4 -4
  31. package/dist/cjs/helpers/postgres.js +7 -8
  32. package/dist/cjs/helpers/sqlite.js +3 -4
  33. package/dist/cjs/index.d.ts +31 -18
  34. package/dist/cjs/index.js +30 -17
  35. package/dist/cjs/kysely.d.ts +1 -1
  36. package/dist/cjs/kysely.js +3 -3
  37. package/dist/cjs/operation-node/add-index-node.js +1 -1
  38. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  41. package/dist/cjs/operation-node/cast-node.js +19 -0
  42. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -0
  43. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  44. package/dist/cjs/operation-node/data-type-node.js +56 -0
  45. package/dist/cjs/operation-node/delete-query-node.d.ts +6 -0
  46. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  47. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  48. package/dist/cjs/operation-node/fetch-node.js +19 -0
  49. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  50. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +6 -1
  52. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  53. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  55. package/dist/cjs/operation-node/matched-node.js +19 -0
  56. package/dist/cjs/operation-node/merge-query-node.d.ts +27 -0
  57. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  58. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  60. package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -0
  61. package/dist/cjs/operation-node/operation-node-transformer.js +62 -0
  62. package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
  63. package/dist/cjs/operation-node/operation-node-visitor.js +6 -0
  64. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  65. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  66. package/dist/cjs/operation-node/operator-node.js +8 -6
  67. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  68. package/dist/cjs/operation-node/output-node.js +26 -0
  69. package/dist/cjs/operation-node/query-node.d.ts +17 -5
  70. package/dist/cjs/operation-node/query-node.js +24 -1
  71. package/dist/cjs/operation-node/select-query-node.d.ts +6 -0
  72. package/dist/cjs/operation-node/select-query-node.js +12 -0
  73. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  74. package/dist/cjs/operation-node/top-node.js +19 -0
  75. package/dist/cjs/operation-node/update-query-node.d.ts +9 -1
  76. package/dist/cjs/operation-node/update-query-node.js +11 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  79. package/dist/cjs/parser/binary-operation-parser.js +7 -8
  80. package/dist/cjs/parser/data-type-parser.js +8 -5
  81. package/dist/cjs/parser/default-value-parser.js +1 -2
  82. package/dist/cjs/parser/expression-parser.js +3 -4
  83. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  84. package/dist/cjs/parser/fetch-parser.js +17 -0
  85. package/dist/cjs/parser/group-by-parser.js +1 -2
  86. package/dist/cjs/parser/identifier-parser.js +1 -2
  87. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  88. package/dist/cjs/parser/insert-values-parser.js +1 -2
  89. package/dist/cjs/parser/join-parser.js +1 -2
  90. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  91. package/dist/cjs/parser/merge-parser.js +31 -0
  92. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  93. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  94. package/dist/cjs/parser/order-by-parser.js +3 -4
  95. package/dist/cjs/parser/parse-utils.js +4 -5
  96. package/dist/cjs/parser/partition-by-parser.js +1 -2
  97. package/dist/cjs/parser/reference-parser.js +8 -9
  98. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  99. package/dist/cjs/parser/select-parser.js +2 -3
  100. package/dist/cjs/parser/set-operation-parser.js +1 -2
  101. package/dist/cjs/parser/table-parser.d.ts +4 -3
  102. package/dist/cjs/parser/table-parser.js +4 -5
  103. package/dist/cjs/parser/top-parser.d.ts +2 -0
  104. package/dist/cjs/parser/top-parser.js +19 -0
  105. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  106. package/dist/cjs/parser/update-set-parser.js +2 -3
  107. package/dist/cjs/parser/value-parser.js +4 -5
  108. package/dist/cjs/parser/with-parser.js +1 -2
  109. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  110. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
  111. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  114. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  115. package/dist/cjs/query-builder/delete-query-builder.d.ts +188 -5
  116. package/dist/cjs/query-builder/delete-query-builder.js +139 -5
  117. package/dist/cjs/query-builder/function-module.d.ts +5 -5
  118. package/dist/cjs/query-builder/function-module.js +1 -2
  119. package/dist/cjs/query-builder/insert-query-builder.d.ts +166 -10
  120. package/dist/cjs/query-builder/insert-query-builder.js +107 -10
  121. package/dist/cjs/query-builder/merge-query-builder.d.ts +721 -0
  122. package/dist/cjs/query-builder/merge-query-builder.js +547 -0
  123. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  124. package/dist/cjs/query-builder/merge-result.js +10 -0
  125. package/dist/cjs/query-builder/no-result-error.js +2 -2
  126. package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
  127. package/dist/cjs/query-builder/output-interface.d.ts +95 -0
  128. package/dist/cjs/query-builder/output-interface.js +2 -0
  129. package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
  130. package/dist/cjs/query-builder/select-query-builder.d.ts +177 -17
  131. package/dist/cjs/query-builder/select-query-builder.js +21 -2
  132. package/dist/cjs/query-builder/update-query-builder.d.ts +175 -10
  133. package/dist/cjs/query-builder/update-query-builder.js +119 -7
  134. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  135. package/dist/cjs/query-builder/update-result.js +9 -0
  136. package/dist/cjs/query-builder/where-interface.d.ts +1 -1
  137. package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
  138. package/dist/cjs/query-compiler/default-query-compiler.js +118 -10
  139. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  140. package/dist/cjs/query-creator.d.ts +96 -5
  141. package/dist/cjs/query-creator.js +63 -1
  142. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  143. package/dist/cjs/raw-builder/sql.d.ts +5 -5
  144. package/dist/cjs/schema/alter-column-builder.js +3 -0
  145. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
  146. package/dist/cjs/schema/alter-table-add-index-builder.js +7 -3
  147. package/dist/cjs/schema/alter-table-builder.js +1 -2
  148. package/dist/cjs/schema/column-definition-builder.d.ts +18 -1
  149. package/dist/cjs/schema/column-definition-builder.js +22 -1
  150. package/dist/cjs/util/assert.js +2 -3
  151. package/dist/cjs/util/compilable.js +1 -2
  152. package/dist/cjs/util/infer-result.d.ts +2 -1
  153. package/dist/cjs/util/json-object-args.js +1 -2
  154. package/dist/cjs/util/log-once.js +1 -2
  155. package/dist/cjs/util/object-utils.js +38 -26
  156. package/dist/cjs/util/performance-now.js +1 -2
  157. package/dist/cjs/util/prevent-await.js +1 -2
  158. package/dist/cjs/util/query-id.js +1 -2
  159. package/dist/cjs/util/random-string.js +1 -2
  160. package/dist/cjs/util/require-all-props.js +1 -2
  161. package/dist/cjs/util/stack-trace-utils.js +1 -2
  162. package/dist/cjs/util/type-utils.d.ts +3 -2
  163. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  164. package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
  165. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  166. package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
  167. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
  168. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  169. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  170. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  171. package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
  172. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  173. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  174. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  175. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  176. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  177. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  178. package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
  179. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  180. package/dist/esm/driver/database-connection.d.ts +4 -2
  181. package/dist/esm/dynamic/dynamic.d.ts +1 -1
  182. package/dist/esm/dynamic/dynamic.js +1 -1
  183. package/dist/esm/expression/expression-builder.d.ts +31 -5
  184. package/dist/esm/expression/expression-builder.js +5 -0
  185. package/dist/esm/helpers/mysql.d.ts +3 -3
  186. package/dist/esm/helpers/mysql.js +3 -3
  187. package/dist/esm/helpers/postgres.d.ts +4 -4
  188. package/dist/esm/helpers/postgres.js +4 -4
  189. package/dist/esm/index.d.ts +31 -18
  190. package/dist/esm/index.js +30 -17
  191. package/dist/esm/kysely.d.ts +1 -1
  192. package/dist/esm/kysely.js +1 -1
  193. package/dist/esm/operation-node/add-index-node.js +1 -1
  194. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  195. package/dist/esm/operation-node/case-node.d.ts +1 -1
  196. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  197. package/dist/esm/operation-node/cast-node.js +17 -0
  198. package/dist/esm/operation-node/column-definition-node.d.ts +2 -0
  199. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  200. package/dist/esm/operation-node/data-type-node.js +55 -0
  201. package/dist/esm/operation-node/delete-query-node.d.ts +6 -0
  202. package/dist/esm/operation-node/delete-query-node.js +12 -0
  203. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  204. package/dist/esm/operation-node/fetch-node.js +17 -0
  205. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  206. package/dist/esm/operation-node/having-node.d.ts +1 -1
  207. package/dist/esm/operation-node/insert-query-node.d.ts +6 -1
  208. package/dist/esm/operation-node/insert-query-node.js +5 -0
  209. package/dist/esm/operation-node/join-node.d.ts +1 -1
  210. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  211. package/dist/esm/operation-node/matched-node.js +17 -0
  212. package/dist/esm/operation-node/merge-query-node.d.ts +27 -0
  213. package/dist/esm/operation-node/merge-query-node.js +43 -0
  214. package/dist/esm/operation-node/on-node.d.ts +1 -1
  215. package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
  216. package/dist/esm/operation-node/operation-node-transformer.js +62 -0
  217. package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
  218. package/dist/esm/operation-node/operation-node-visitor.js +6 -0
  219. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  220. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  221. package/dist/esm/operation-node/operator-node.js +2 -0
  222. package/dist/esm/operation-node/output-node.d.ts +13 -0
  223. package/dist/esm/operation-node/output-node.js +24 -0
  224. package/dist/esm/operation-node/query-node.d.ts +17 -5
  225. package/dist/esm/operation-node/query-node.js +24 -1
  226. package/dist/esm/operation-node/select-query-node.d.ts +6 -0
  227. package/dist/esm/operation-node/select-query-node.js +12 -0
  228. package/dist/esm/operation-node/top-node.d.ts +14 -0
  229. package/dist/esm/operation-node/top-node.js +17 -0
  230. package/dist/esm/operation-node/update-query-node.d.ts +9 -1
  231. package/dist/esm/operation-node/update-query-node.js +11 -0
  232. package/dist/esm/operation-node/where-node.d.ts +1 -1
  233. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  234. package/dist/esm/parser/binary-operation-parser.js +2 -2
  235. package/dist/esm/parser/data-type-parser.js +8 -4
  236. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  237. package/dist/esm/parser/fetch-parser.js +15 -0
  238. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  239. package/dist/esm/parser/merge-parser.d.ts +9 -0
  240. package/dist/esm/parser/merge-parser.js +28 -0
  241. package/dist/esm/parser/returning-parser.d.ts +4 -3
  242. package/dist/esm/parser/table-parser.d.ts +4 -3
  243. package/dist/esm/parser/top-parser.d.ts +2 -0
  244. package/dist/esm/parser/top-parser.js +17 -0
  245. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  246. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  247. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  248. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  249. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  250. package/dist/esm/query-builder/delete-query-builder.d.ts +188 -5
  251. package/dist/esm/query-builder/delete-query-builder.js +139 -5
  252. package/dist/esm/query-builder/function-module.d.ts +5 -5
  253. package/dist/esm/query-builder/insert-query-builder.d.ts +166 -10
  254. package/dist/esm/query-builder/insert-query-builder.js +107 -10
  255. package/dist/esm/query-builder/merge-query-builder.d.ts +721 -0
  256. package/dist/esm/query-builder/merge-query-builder.js +541 -0
  257. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  258. package/dist/esm/query-builder/merge-result.js +7 -0
  259. package/dist/esm/query-builder/on-conflict-builder.d.ts +2 -2
  260. package/dist/esm/query-builder/output-interface.d.ts +95 -0
  261. package/dist/esm/query-builder/output-interface.js +2 -0
  262. package/dist/esm/query-builder/returning-interface.d.ts +2 -0
  263. package/dist/esm/query-builder/select-query-builder.d.ts +177 -17
  264. package/dist/esm/query-builder/select-query-builder.js +20 -0
  265. package/dist/esm/query-builder/update-query-builder.d.ts +175 -10
  266. package/dist/esm/query-builder/update-query-builder.js +119 -7
  267. package/dist/esm/query-builder/update-result.d.ts +9 -0
  268. package/dist/esm/query-builder/update-result.js +9 -0
  269. package/dist/esm/query-builder/where-interface.d.ts +1 -1
  270. package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
  271. package/dist/esm/query-compiler/default-query-compiler.js +118 -10
  272. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  273. package/dist/esm/query-creator.d.ts +96 -5
  274. package/dist/esm/query-creator.js +64 -2
  275. package/dist/esm/raw-builder/sql.d.ts +5 -5
  276. package/dist/esm/schema/alter-column-builder.js +3 -0
  277. package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
  278. package/dist/esm/schema/alter-table-add-index-builder.js +8 -4
  279. package/dist/esm/schema/alter-table-builder.js +1 -2
  280. package/dist/esm/schema/column-definition-builder.d.ts +18 -1
  281. package/dist/esm/schema/column-definition-builder.js +22 -1
  282. package/dist/esm/util/infer-result.d.ts +2 -1
  283. package/dist/esm/util/object-utils.js +18 -5
  284. package/dist/esm/util/type-utils.d.ts +3 -2
  285. package/package.json +26 -24
@@ -1,5 +1,51 @@
1
1
  /// <reference types="./data-type-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
+ const SIMPLE_COLUMN_DATA_TYPES = [
4
+ 'varchar',
5
+ 'char',
6
+ 'text',
7
+ 'integer',
8
+ 'int2',
9
+ 'int4',
10
+ 'int8',
11
+ 'smallint',
12
+ 'bigint',
13
+ 'boolean',
14
+ 'real',
15
+ 'double precision',
16
+ 'float4',
17
+ 'float8',
18
+ 'decimal',
19
+ 'numeric',
20
+ 'binary',
21
+ 'bytea',
22
+ 'date',
23
+ 'datetime',
24
+ 'time',
25
+ 'timetz',
26
+ 'timestamp',
27
+ 'timestamptz',
28
+ 'serial',
29
+ 'bigserial',
30
+ 'uuid',
31
+ 'json',
32
+ 'jsonb',
33
+ 'blob',
34
+ 'varbinary',
35
+ ];
36
+ const COLUMN_DATA_TYPE_REGEX = [
37
+ /^varchar\(\d+\)$/,
38
+ /^char\(\d+\)$/,
39
+ /^decimal\(\d+, \d+\)$/,
40
+ /^numeric\(\d+, \d+\)$/,
41
+ /^binary\(\d+\)$/,
42
+ /^datetime\(\d+\)$/,
43
+ /^time\(\d+\)$/,
44
+ /^timetz\(\d+\)$/,
45
+ /^timestamp\(\d+\)$/,
46
+ /^timestamptz\(\d+\)$/,
47
+ /^varbinary\(\d+\)$/,
48
+ ];
3
49
  /**
4
50
  * @internal
5
51
  */
@@ -14,3 +60,12 @@ export const DataTypeNode = freeze({
14
60
  });
15
61
  },
16
62
  });
63
+ export 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
+ }
@@ -9,6 +9,8 @@ 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';
13
+ import { OutputNode } from './output-node.js';
12
14
  export interface DeleteQueryNode extends OperationNode {
13
15
  readonly kind: 'DeleteQueryNode';
14
16
  readonly from: FromNode;
@@ -20,6 +22,8 @@ export interface DeleteQueryNode extends OperationNode {
20
22
  readonly orderBy?: OrderByNode;
21
23
  readonly limit?: LimitNode;
22
24
  readonly explain?: ExplainNode;
25
+ readonly top?: TopNode;
26
+ readonly output?: OutputNode;
23
27
  }
24
28
  /**
25
29
  * @internal
@@ -28,6 +32,8 @@ export declare const DeleteQueryNode: Readonly<{
28
32
  is(node: OperationNode): node is DeleteQueryNode;
29
33
  create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
30
34
  cloneWithOrderByItems(deleteNode: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>): DeleteQueryNode;
35
+ cloneWithoutOrderBy(deleteNode: DeleteQueryNode): DeleteQueryNode;
31
36
  cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
37
+ cloneWithoutLimit(deleteNode: DeleteQueryNode): DeleteQueryNode;
32
38
  cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;
33
39
  }>;
@@ -25,12 +25,24 @@ export const DeleteQueryNode = freeze({
25
25
  : OrderByNode.create(items),
26
26
  });
27
27
  },
28
+ cloneWithoutOrderBy(deleteNode) {
29
+ return freeze({
30
+ ...deleteNode,
31
+ orderBy: undefined,
32
+ });
33
+ },
28
34
  cloneWithLimit(deleteNode, limit) {
29
35
  return freeze({
30
36
  ...deleteNode,
31
37
  limit,
32
38
  });
33
39
  },
40
+ cloneWithoutLimit(deleteNode) {
41
+ return freeze({
42
+ ...deleteNode,
43
+ limit: undefined,
44
+ });
45
+ },
34
46
  cloneWithUsing(deleteNode, tables) {
35
47
  return freeze({
36
48
  ...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,17 @@
1
+ /// <reference types="./fetch-node.d.ts" />
2
+ import { ValueNode } from './value-node.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const FetchNode = {
7
+ is(node) {
8
+ return node.kind === 'FetchNode';
9
+ },
10
+ create(rowCount, modifier) {
11
+ return {
12
+ kind: 'FetchNode',
13
+ rowCount: ValueNode.create(rowCount),
14
+ modifier,
15
+ };
16
+ },
17
+ };
@@ -19,10 +19,10 @@ export declare const ForeignKeyConstraintNode: Readonly<{
19
19
  is(node: OperationNode): node is ForeignKeyConstraintNode;
20
20
  create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string): ForeignKeyConstraintNode;
21
21
  cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
22
- name?: IdentifierNode | undefined;
23
- onDelete?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
24
- onUpdate?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
25
- kind: 'ForeignKeyConstraintNode';
22
+ name?: IdentifierNode;
23
+ onDelete?: OnModifyForeignAction;
24
+ onUpdate?: OnModifyForeignAction;
25
+ kind: "ForeignKeyConstraintNode";
26
26
  columns: ReadonlyArray<ColumnNode>;
27
27
  references: ReferencesNode;
28
28
  }>;
@@ -9,5 +9,5 @@ export interface HavingNode extends OperationNode {
9
9
  export declare const HavingNode: Readonly<{
10
10
  is(node: OperationNode): node is HavingNode;
11
11
  create(filter: OperationNode): HavingNode;
12
- cloneWithOperation(havingNode: HavingNode, operator: 'And' | 'Or', operation: OperationNode): HavingNode;
12
+ cloneWithOperation(havingNode: HavingNode, operator: "And" | "Or", operation: OperationNode): HavingNode;
13
13
  }>;
@@ -3,13 +3,15 @@ import { ExplainNode } from './explain-node.js';
3
3
  import { OnConflictNode } from './on-conflict-node.js';
4
4
  import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
5
5
  import { OperationNode } from './operation-node.js';
6
+ import { OutputNode } from './output-node.js';
6
7
  import { ReturningNode } from './returning-node.js';
7
8
  import { TableNode } from './table-node.js';
9
+ import { TopNode } from './top-node.js';
8
10
  import { WithNode } from './with-node.js';
9
11
  export type InsertQueryNodeProps = Omit<InsertQueryNode, 'kind' | 'into'>;
10
12
  export interface InsertQueryNode extends OperationNode {
11
13
  readonly kind: 'InsertQueryNode';
12
- readonly into: TableNode;
14
+ readonly into?: TableNode;
13
15
  readonly columns?: ReadonlyArray<ColumnNode>;
14
16
  readonly values?: OperationNode;
15
17
  readonly returning?: ReturningNode;
@@ -20,6 +22,8 @@ export interface InsertQueryNode extends OperationNode {
20
22
  readonly replace?: boolean;
21
23
  readonly explain?: ExplainNode;
22
24
  readonly defaultValues?: boolean;
25
+ readonly top?: TopNode;
26
+ readonly output?: OutputNode;
23
27
  }
24
28
  /**
25
29
  * @internal
@@ -27,5 +31,6 @@ export interface InsertQueryNode extends OperationNode {
27
31
  export declare const InsertQueryNode: Readonly<{
28
32
  is(node: OperationNode): node is InsertQueryNode;
29
33
  create(into: TableNode, withNode?: WithNode, replace?: boolean): InsertQueryNode;
34
+ createWithoutInto(): InsertQueryNode;
30
35
  cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
31
36
  }>;
@@ -15,6 +15,11 @@ export const InsertQueryNode = freeze({
15
15
  replace,
16
16
  });
17
17
  },
18
+ createWithoutInto() {
19
+ return freeze({
20
+ kind: 'InsertQueryNode',
21
+ });
22
+ },
18
23
  cloneWith(insertQuery, props) {
19
24
  return freeze({
20
25
  ...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,17 @@
1
+ /// <reference types="./matched-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const MatchedNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'MatchedNode';
9
+ },
10
+ create(not, bySource = false) {
11
+ return freeze({
12
+ kind: 'MatchedNode',
13
+ not,
14
+ bySource,
15
+ });
16
+ },
17
+ });
@@ -0,0 +1,27 @@
1
+ import { AliasNode } from './alias-node.js';
2
+ import { JoinNode } from './join-node.js';
3
+ import { OperationNode } from './operation-node.js';
4
+ import { OutputNode } from './output-node.js';
5
+ import { TableNode } from './table-node.js';
6
+ import { TopNode } from './top-node.js';
7
+ import { WhenNode } from './when-node.js';
8
+ import { WithNode } from './with-node.js';
9
+ export interface MergeQueryNode extends OperationNode {
10
+ readonly kind: 'MergeQueryNode';
11
+ readonly into: TableNode | AliasNode;
12
+ readonly using?: JoinNode;
13
+ readonly whens?: ReadonlyArray<WhenNode>;
14
+ readonly with?: WithNode;
15
+ readonly top?: TopNode;
16
+ readonly output?: OutputNode;
17
+ }
18
+ /**
19
+ * @internal
20
+ */
21
+ export declare const MergeQueryNode: Readonly<{
22
+ is(node: OperationNode): node is MergeQueryNode;
23
+ create(into: TableNode | AliasNode, withNode?: WithNode): MergeQueryNode;
24
+ cloneWithUsing(mergeNode: MergeQueryNode, using: JoinNode): MergeQueryNode;
25
+ cloneWithWhen(mergeNode: MergeQueryNode, when: WhenNode): MergeQueryNode;
26
+ cloneWithThen(mergeNode: MergeQueryNode, then: OperationNode): MergeQueryNode;
27
+ }>;
@@ -0,0 +1,43 @@
1
+ /// <reference types="./merge-query-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { WhenNode } from './when-node.js';
4
+ /**
5
+ * @internal
6
+ */
7
+ export const MergeQueryNode = freeze({
8
+ is(node) {
9
+ return node.kind === 'MergeQueryNode';
10
+ },
11
+ create(into, withNode) {
12
+ return freeze({
13
+ kind: 'MergeQueryNode',
14
+ into,
15
+ ...(withNode && { with: withNode }),
16
+ });
17
+ },
18
+ cloneWithUsing(mergeNode, using) {
19
+ return freeze({
20
+ ...mergeNode,
21
+ using,
22
+ });
23
+ },
24
+ cloneWithWhen(mergeNode, when) {
25
+ return freeze({
26
+ ...mergeNode,
27
+ whens: mergeNode.whens
28
+ ? freeze([...mergeNode.whens, when])
29
+ : freeze([when]),
30
+ });
31
+ },
32
+ cloneWithThen(mergeNode, then) {
33
+ return freeze({
34
+ ...mergeNode,
35
+ whens: mergeNode.whens
36
+ ? freeze([
37
+ ...mergeNode.whens.slice(0, -1),
38
+ WhenNode.cloneWithResult(mergeNode.whens[mergeNode.whens.length - 1], then),
39
+ ])
40
+ : undefined,
41
+ });
42
+ },
43
+ });
@@ -9,5 +9,5 @@ export interface OnNode extends OperationNode {
9
9
  export declare const OnNode: Readonly<{
10
10
  is(node: OperationNode): node is OnNode;
11
11
  create(filter: OperationNode): OnNode;
12
- cloneWithOperation(onNode: OnNode, operator: 'And' | 'Or', operation: OperationNode): OnNode;
12
+ cloneWithOperation(onNode: OnNode, operator: "And" | "Or", operation: OperationNode): OnNode;
13
13
  }>;
@@ -85,7 +85,13 @@ 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';
94
+ import { OutputNode } from './output-node.js';
89
95
  /**
90
96
  * Transforms an operation node tree into another one.
91
97
  *
@@ -200,7 +206,13 @@ export declare class OperationNodeTransformer {
200
206
  protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
201
207
  protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
202
208
  protected transformTuple(node: TupleNode): TupleNode;
209
+ protected transformMergeQuery(node: MergeQueryNode): MergeQueryNode;
210
+ protected transformMatched(node: MatchedNode): MatchedNode;
203
211
  protected transformAddIndex(node: AddIndexNode): AddIndexNode;
212
+ protected transformCast(node: CastNode): CastNode;
213
+ protected transformFetch(node: FetchNode): FetchNode;
214
+ protected transformTop(node: TopNode): TopNode;
215
+ protected transformOutput(node: OutputNode): OutputNode;
204
216
  protected transformDataType(node: DataTypeNode): DataTypeNode;
205
217
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
206
218
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;
@@ -119,7 +119,13 @@ export class OperationNodeTransformer {
119
119
  JSONPathLegNode: this.transformJSONPathLeg.bind(this),
120
120
  JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
121
121
  TupleNode: this.transformTuple.bind(this),
122
+ MergeQueryNode: this.transformMergeQuery.bind(this),
123
+ MatchedNode: this.transformMatched.bind(this),
122
124
  AddIndexNode: this.transformAddIndex.bind(this),
125
+ CastNode: this.transformCast.bind(this),
126
+ FetchNode: this.transformFetch.bind(this),
127
+ TopNode: this.transformTop.bind(this),
128
+ OutputNode: this.transformOutput.bind(this),
123
129
  });
124
130
  transformNode(node) {
125
131
  if (!node) {
@@ -157,6 +163,8 @@ export class OperationNodeTransformer {
157
163
  having: this.transformNode(node.having),
158
164
  explain: this.transformNode(node.explain),
159
165
  setOperations: this.transformNodeList(node.setOperations),
166
+ fetch: this.transformNode(node.fetch),
167
+ top: this.transformNode(node.top),
160
168
  });
161
169
  }
162
170
  transformSelection(node) {
@@ -258,6 +266,8 @@ export class OperationNodeTransformer {
258
266
  replace: node.replace,
259
267
  explain: this.transformNode(node.explain),
260
268
  defaultValues: node.defaultValues,
269
+ top: this.transformNode(node.top),
270
+ output: this.transformNode(node.output),
261
271
  });
262
272
  }
263
273
  transformValues(node) {
@@ -278,6 +288,8 @@ export class OperationNodeTransformer {
278
288
  orderBy: this.transformNode(node.orderBy),
279
289
  limit: this.transformNode(node.limit),
280
290
  explain: this.transformNode(node.explain),
291
+ top: this.transformNode(node.top),
292
+ output: this.transformNode(node.output),
281
293
  });
282
294
  }
283
295
  transformReturning(node) {
@@ -317,6 +329,8 @@ export class OperationNodeTransformer {
317
329
  frontModifiers: this.transformNodeList(node.frontModifiers),
318
330
  endModifiers: this.transformNodeList(node.endModifiers),
319
331
  nullsNotDistinct: node.nullsNotDistinct,
332
+ identity: node.identity,
333
+ ifNotExists: node.ifNotExists,
320
334
  });
321
335
  }
322
336
  transformAddColumn(node) {
@@ -369,6 +383,9 @@ export class OperationNodeTransformer {
369
383
  returning: this.transformNode(node.returning),
370
384
  with: this.transformNode(node.with),
371
385
  explain: this.transformNode(node.explain),
386
+ limit: this.transformNode(node.limit),
387
+ top: this.transformNode(node.top),
388
+ output: this.transformNode(node.output),
372
389
  });
373
390
  }
374
391
  transformColumnUpdate(node) {
@@ -772,6 +789,24 @@ export class OperationNodeTransformer {
772
789
  values: this.transformNodeList(node.values),
773
790
  });
774
791
  }
792
+ transformMergeQuery(node) {
793
+ return requireAllProps({
794
+ kind: 'MergeQueryNode',
795
+ into: this.transformNode(node.into),
796
+ using: this.transformNode(node.using),
797
+ whens: this.transformNodeList(node.whens),
798
+ with: this.transformNode(node.with),
799
+ top: this.transformNode(node.top),
800
+ output: this.transformNode(node.output),
801
+ });
802
+ }
803
+ transformMatched(node) {
804
+ return requireAllProps({
805
+ kind: 'MatchedNode',
806
+ not: node.not,
807
+ bySource: node.bySource,
808
+ });
809
+ }
775
810
  transformAddIndex(node) {
776
811
  return requireAllProps({
777
812
  kind: 'AddIndexNode',
@@ -782,6 +817,33 @@ export class OperationNodeTransformer {
782
817
  ifNotExists: node.ifNotExists,
783
818
  });
784
819
  }
820
+ transformCast(node) {
821
+ return requireAllProps({
822
+ kind: 'CastNode',
823
+ expression: this.transformNode(node.expression),
824
+ dataType: this.transformNode(node.dataType),
825
+ });
826
+ }
827
+ transformFetch(node) {
828
+ return requireAllProps({
829
+ kind: 'FetchNode',
830
+ rowCount: this.transformNode(node.rowCount),
831
+ modifier: node.modifier,
832
+ });
833
+ }
834
+ transformTop(node) {
835
+ return requireAllProps({
836
+ kind: 'TopNode',
837
+ expression: node.expression,
838
+ modifiers: node.modifiers,
839
+ });
840
+ }
841
+ transformOutput(node) {
842
+ return requireAllProps({
843
+ kind: 'OutputNode',
844
+ selections: this.transformNodeList(node.selections),
845
+ });
846
+ }
785
847
  transformDataType(node) {
786
848
  // An Object.freezed leaf node. No need to clone.
787
849
  return node;
@@ -85,7 +85,13 @@ 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';
94
+ import { OutputNode } from './output-node.js';
89
95
  export declare abstract class OperationNodeVisitor {
90
96
  #private;
91
97
  protected readonly nodeStack: OperationNode[];
@@ -177,5 +183,11 @@ export declare abstract class OperationNodeVisitor {
177
183
  protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
178
184
  protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
179
185
  protected abstract visitTuple(node: TupleNode): void;
186
+ protected abstract visitMergeQuery(node: MergeQueryNode): void;
187
+ protected abstract visitMatched(node: MatchedNode): void;
180
188
  protected abstract visitAddIndex(node: AddIndexNode): void;
189
+ protected abstract visitCast(node: CastNode): void;
190
+ protected abstract visitFetch(node: FetchNode): void;
191
+ protected abstract visitTop(node: TopNode): void;
192
+ protected abstract visitOutput(node: OutputNode): void;
181
193
  }
@@ -92,7 +92,13 @@ export class OperationNodeVisitor {
92
92
  JSONPathLegNode: this.visitJSONPathLeg.bind(this),
93
93
  JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
94
94
  TupleNode: this.visitTuple.bind(this),
95
+ MergeQueryNode: this.visitMergeQuery.bind(this),
96
+ MatchedNode: this.visitMatched.bind(this),
95
97
  AddIndexNode: this.visitAddIndex.bind(this),
98
+ CastNode: this.visitCast.bind(this),
99
+ FetchNode: this.visitFetch.bind(this),
100
+ TopNode: this.visitTop.bind(this),
101
+ OutputNode: this.visitOutput.bind(this),
96
102
  });
97
103
  visitNode = (node) => {
98
104
  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' | 'OutputNode';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }
@@ -1,11 +1,11 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"];
2
+ export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "^@", "&&", "?", "?&", "?|", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"];
3
3
  export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"];
4
4
  export declare const JSON_OPERATORS: readonly ["->", "->>"];
5
- export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
5
+ export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "^@", "&&", "?", "?&", "?|", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
6
6
  export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"];
7
7
  export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"];
8
- export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"];
8
+ export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "^@", "&&", "?", "?&", "?|", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"];
9
9
  export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number];
10
10
  export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number];
11
11
  export type JSONOperator = (typeof JSON_OPERATORS)[number];
@@ -20,9 +20,11 @@ export const COMPARISON_OPERATORS = [
20
20
  'not ilike',
21
21
  '@>',
22
22
  '<@',
23
+ '^@',
23
24
  '&&',
24
25
  '?',
25
26
  '?&',
27
+ '?|',
26
28
  '!<',
27
29
  '!>',
28
30
  '<=>',
@@ -0,0 +1,13 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ export interface OutputNode extends OperationNode {
3
+ readonly kind: 'OutputNode';
4
+ readonly selections: ReadonlyArray<OperationNode>;
5
+ }
6
+ /**
7
+ * @internal
8
+ */
9
+ export declare const OutputNode: Readonly<{
10
+ is(node: OperationNode): node is OutputNode;
11
+ create(selections: ReadonlyArray<OperationNode>): OutputNode;
12
+ cloneWithSelections(output: OutputNode, selections: ReadonlyArray<OperationNode>): OutputNode;
13
+ }>;
@@ -0,0 +1,24 @@
1
+ /// <reference types="./output-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const OutputNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'OutputNode';
9
+ },
10
+ create(selections) {
11
+ return freeze({
12
+ kind: 'OutputNode',
13
+ selections: freeze(selections),
14
+ });
15
+ },
16
+ cloneWithSelections(output, selections) {
17
+ return freeze({
18
+ ...output,
19
+ selections: output.selections
20
+ ? freeze([...output.selections, ...selections])
21
+ : freeze(selections),
22
+ });
23
+ },
24
+ });