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
@@ -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;
@@ -121,7 +121,13 @@ 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),
130
+ OutputNode: this.transformOutput.bind(this),
125
131
  });
126
132
  transformNode(node) {
127
133
  if (!node) {
@@ -159,6 +165,8 @@ class OperationNodeTransformer {
159
165
  having: this.transformNode(node.having),
160
166
  explain: this.transformNode(node.explain),
161
167
  setOperations: this.transformNodeList(node.setOperations),
168
+ fetch: this.transformNode(node.fetch),
169
+ top: this.transformNode(node.top),
162
170
  });
163
171
  }
164
172
  transformSelection(node) {
@@ -260,6 +268,8 @@ class OperationNodeTransformer {
260
268
  replace: node.replace,
261
269
  explain: this.transformNode(node.explain),
262
270
  defaultValues: node.defaultValues,
271
+ top: this.transformNode(node.top),
272
+ output: this.transformNode(node.output),
263
273
  });
264
274
  }
265
275
  transformValues(node) {
@@ -280,6 +290,8 @@ class OperationNodeTransformer {
280
290
  orderBy: this.transformNode(node.orderBy),
281
291
  limit: this.transformNode(node.limit),
282
292
  explain: this.transformNode(node.explain),
293
+ top: this.transformNode(node.top),
294
+ output: this.transformNode(node.output),
283
295
  });
284
296
  }
285
297
  transformReturning(node) {
@@ -319,6 +331,8 @@ class OperationNodeTransformer {
319
331
  frontModifiers: this.transformNodeList(node.frontModifiers),
320
332
  endModifiers: this.transformNodeList(node.endModifiers),
321
333
  nullsNotDistinct: node.nullsNotDistinct,
334
+ identity: node.identity,
335
+ ifNotExists: node.ifNotExists,
322
336
  });
323
337
  }
324
338
  transformAddColumn(node) {
@@ -371,6 +385,9 @@ class OperationNodeTransformer {
371
385
  returning: this.transformNode(node.returning),
372
386
  with: this.transformNode(node.with),
373
387
  explain: this.transformNode(node.explain),
388
+ limit: this.transformNode(node.limit),
389
+ top: this.transformNode(node.top),
390
+ output: this.transformNode(node.output),
374
391
  });
375
392
  }
376
393
  transformColumnUpdate(node) {
@@ -774,6 +791,24 @@ class OperationNodeTransformer {
774
791
  values: this.transformNodeList(node.values),
775
792
  });
776
793
  }
794
+ transformMergeQuery(node) {
795
+ return (0, require_all_props_js_1.requireAllProps)({
796
+ kind: 'MergeQueryNode',
797
+ into: this.transformNode(node.into),
798
+ using: this.transformNode(node.using),
799
+ whens: this.transformNodeList(node.whens),
800
+ with: this.transformNode(node.with),
801
+ top: this.transformNode(node.top),
802
+ output: this.transformNode(node.output),
803
+ });
804
+ }
805
+ transformMatched(node) {
806
+ return (0, require_all_props_js_1.requireAllProps)({
807
+ kind: 'MatchedNode',
808
+ not: node.not,
809
+ bySource: node.bySource,
810
+ });
811
+ }
777
812
  transformAddIndex(node) {
778
813
  return (0, require_all_props_js_1.requireAllProps)({
779
814
  kind: 'AddIndexNode',
@@ -784,6 +819,33 @@ class OperationNodeTransformer {
784
819
  ifNotExists: node.ifNotExists,
785
820
  });
786
821
  }
822
+ transformCast(node) {
823
+ return (0, require_all_props_js_1.requireAllProps)({
824
+ kind: 'CastNode',
825
+ expression: this.transformNode(node.expression),
826
+ dataType: this.transformNode(node.dataType),
827
+ });
828
+ }
829
+ transformFetch(node) {
830
+ return (0, require_all_props_js_1.requireAllProps)({
831
+ kind: 'FetchNode',
832
+ rowCount: this.transformNode(node.rowCount),
833
+ modifier: node.modifier,
834
+ });
835
+ }
836
+ transformTop(node) {
837
+ return (0, require_all_props_js_1.requireAllProps)({
838
+ kind: 'TopNode',
839
+ expression: node.expression,
840
+ modifiers: node.modifiers,
841
+ });
842
+ }
843
+ transformOutput(node) {
844
+ return (0, require_all_props_js_1.requireAllProps)({
845
+ kind: 'OutputNode',
846
+ selections: this.transformNodeList(node.selections),
847
+ });
848
+ }
787
849
  transformDataType(node) {
788
850
  // An Object.freezed leaf node. No need to clone.
789
851
  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
  }
@@ -94,7 +94,13 @@ 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),
103
+ OutputNode: this.visitOutput.bind(this),
98
104
  });
99
105
  visitNode = (node) => {
100
106
  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];
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isJSONOperator = exports.isArithmeticOperator = exports.isComparisonOperator = exports.isBinaryOperator = exports.isOperator = exports.OperatorNode = exports.OPERATORS = exports.UNARY_OPERATORS = exports.UNARY_FILTER_OPERATORS = exports.BINARY_OPERATORS = exports.JSON_OPERATORS = exports.ARITHMETIC_OPERATORS = exports.COMPARISON_OPERATORS = void 0;
3
+ exports.OperatorNode = exports.OPERATORS = exports.UNARY_OPERATORS = exports.UNARY_FILTER_OPERATORS = exports.BINARY_OPERATORS = exports.JSON_OPERATORS = exports.ARITHMETIC_OPERATORS = exports.COMPARISON_OPERATORS = void 0;
4
+ exports.isOperator = isOperator;
5
+ exports.isBinaryOperator = isBinaryOperator;
6
+ exports.isComparisonOperator = isComparisonOperator;
7
+ exports.isArithmeticOperator = isArithmeticOperator;
8
+ exports.isJSONOperator = isJSONOperator;
4
9
  const object_utils_js_1 = require("../util/object-utils.js");
5
10
  exports.COMPARISON_OPERATORS = [
6
11
  '=',
@@ -22,9 +27,11 @@ exports.COMPARISON_OPERATORS = [
22
27
  'not ilike',
23
28
  '@>',
24
29
  '<@',
30
+ '^@',
25
31
  '&&',
26
32
  '?',
27
33
  '?&',
34
+ '?|',
28
35
  '!<',
29
36
  '!>',
30
37
  '<=>',
@@ -86,20 +93,15 @@ exports.OperatorNode = (0, object_utils_js_1.freeze)({
86
93
  function isOperator(op) {
87
94
  return (0, object_utils_js_1.isString)(op) && exports.OPERATORS.includes(op);
88
95
  }
89
- exports.isOperator = isOperator;
90
96
  function isBinaryOperator(op) {
91
97
  return (0, object_utils_js_1.isString)(op) && exports.BINARY_OPERATORS.includes(op);
92
98
  }
93
- exports.isBinaryOperator = isBinaryOperator;
94
99
  function isComparisonOperator(op) {
95
100
  return (0, object_utils_js_1.isString)(op) && exports.COMPARISON_OPERATORS.includes(op);
96
101
  }
97
- exports.isComparisonOperator = isComparisonOperator;
98
102
  function isArithmeticOperator(op) {
99
103
  return (0, object_utils_js_1.isString)(op) && exports.ARITHMETIC_OPERATORS.includes(op);
100
104
  }
101
- exports.isArithmeticOperator = isArithmeticOperator;
102
105
  function isJSONOperator(op) {
103
106
  return (0, object_utils_js_1.isString)(op) && exports.JSON_OPERATORS.includes(op);
104
107
  }
105
- exports.isJSONOperator = isJSONOperator;
@@ -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,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.OutputNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'OutputNode';
11
+ },
12
+ create(selections) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'OutputNode',
15
+ selections: (0, object_utils_js_1.freeze)(selections),
16
+ });
17
+ },
18
+ cloneWithSelections(output, selections) {
19
+ return (0, object_utils_js_1.freeze)({
20
+ ...output,
21
+ selections: output.selections
22
+ ? (0, object_utils_js_1.freeze)([...output.selections, ...selections])
23
+ : (0, object_utils_js_1.freeze)(selections),
24
+ });
25
+ },
26
+ });
@@ -10,7 +10,10 @@ 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
+ import { OutputNode } from './output-node.js';
16
+ export type QueryNode = SelectQueryNode | InsertQueryNode | UpdateQueryNode | DeleteQueryNode | MergeQueryNode;
14
17
  type HasJoins = {
15
18
  joins?: ReadonlyArray<JoinNode>;
16
19
  };
@@ -23,15 +26,24 @@ type HasReturning = {
23
26
  type HasExplain = {
24
27
  explain?: ExplainNode;
25
28
  };
29
+ type HasTop = {
30
+ top?: TopNode;
31
+ };
32
+ type HasOutput = {
33
+ output?: OutputNode;
34
+ };
26
35
  /**
27
36
  * @internal
28
37
  */
29
38
  export declare const QueryNode: Readonly<{
30
39
  is(node: OperationNode): node is QueryNode;
31
40
  cloneWithWhere<T extends HasWhere>(node: T, operation: OperationNode): T;
32
- cloneWithJoin<T_1 extends HasJoins>(node: T_1, join: JoinNode): T_1;
33
- 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;
41
+ cloneWithJoin<T extends HasJoins>(node: T, join: JoinNode): T;
42
+ cloneWithReturning<T extends HasReturning>(node: T, selections: ReadonlyArray<SelectionNode>): T;
43
+ cloneWithoutReturning<T extends HasReturning>(node: T): T;
44
+ cloneWithoutWhere<T extends HasWhere>(node: T): T;
45
+ cloneWithExplain<T extends HasExplain>(node: T, format: ExplainFormat | undefined, options: Expression<any> | undefined): T;
46
+ cloneWithTop<T extends HasTop>(node: T, top: TopNode): T;
47
+ cloneWithOutput<T extends HasOutput>(node: T, selections: ReadonlyArray<SelectionNode>): T;
36
48
  }>;
37
49
  export {};
@@ -9,6 +9,8 @@ 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");
13
+ const output_node_js_1 = require("./output-node.js");
12
14
  /**
13
15
  * @internal
14
16
  */
@@ -17,7 +19,8 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
17
19
  return (select_query_node_js_1.SelectQueryNode.is(node) ||
18
20
  insert_query_node_js_1.InsertQueryNode.is(node) ||
19
21
  update_query_node_js_1.UpdateQueryNode.is(node) ||
20
- delete_query_node_js_1.DeleteQueryNode.is(node));
22
+ delete_query_node_js_1.DeleteQueryNode.is(node) ||
23
+ merge_query_node_js_1.MergeQueryNode.is(node));
21
24
  },
22
25
  cloneWithWhere(node, operation) {
23
26
  return (0, object_utils_js_1.freeze)({
@@ -41,6 +44,12 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
41
44
  : returning_node_js_1.ReturningNode.create(selections),
42
45
  });
43
46
  },
47
+ cloneWithoutReturning(node) {
48
+ return (0, object_utils_js_1.freeze)({
49
+ ...node,
50
+ returning: undefined,
51
+ });
52
+ },
44
53
  cloneWithoutWhere(node) {
45
54
  return (0, object_utils_js_1.freeze)({
46
55
  ...node,
@@ -53,4 +62,18 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
53
62
  explain: explain_node_js_1.ExplainNode.create(format, options?.toOperationNode()),
54
63
  });
55
64
  },
65
+ cloneWithTop(node, top) {
66
+ return (0, object_utils_js_1.freeze)({
67
+ ...node,
68
+ top,
69
+ });
70
+ },
71
+ cloneWithOutput(node, selections) {
72
+ return (0, object_utils_js_1.freeze)({
73
+ ...node,
74
+ output: node.output
75
+ ? output_node_js_1.OutputNode.cloneWithSelections(node.output, selections)
76
+ : output_node_js_1.OutputNode.create(selections),
77
+ });
78
+ },
56
79
  });
@@ -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,10 +51,12 @@ 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;
53
58
  cloneWithoutLimit(select: SelectQueryNode): SelectQueryNode;
54
59
  cloneWithoutOffset(select: SelectQueryNode): SelectQueryNode;
55
60
  cloneWithoutOrderBy(select: SelectQueryNode): SelectQueryNode;
61
+ cloneWithoutGroupBy(select: SelectQueryNode): SelectQueryNode;
56
62
  }>;
@@ -86,6 +86,12 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
86
86
  offset,
87
87
  });
88
88
  },
89
+ cloneWithFetch(selectNode, fetch) {
90
+ return (0, object_utils_js_1.freeze)({
91
+ ...selectNode,
92
+ fetch,
93
+ });
94
+ },
89
95
  cloneWithHaving(selectNode, operation) {
90
96
  return (0, object_utils_js_1.freeze)({
91
97
  ...selectNode,
@@ -126,4 +132,10 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
126
132
  orderBy: undefined,
127
133
  });
128
134
  },
135
+ cloneWithoutGroupBy(select) {
136
+ return (0, object_utils_js_1.freeze)({
137
+ ...select,
138
+ groupBy: undefined,
139
+ });
140
+ },
129
141
  });
@@ -0,0 +1,14 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ export type TopModifier = 'percent' | 'with ties' | 'percent with ties';
3
+ export interface TopNode extends OperationNode {
4
+ readonly kind: 'TopNode';
5
+ readonly expression: number | bigint;
6
+ readonly modifiers?: TopModifier;
7
+ }
8
+ /**
9
+ * @internal
10
+ */
11
+ export declare const TopNode: Readonly<{
12
+ is(node: OperationNode): node is TopNode;
13
+ create(expression: number | bigint, modifiers?: TopModifier): TopNode;
14
+ }>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TopNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.TopNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'TopNode';
11
+ },
12
+ create(expression, modifiers) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'TopNode',
15
+ expression,
16
+ modifiers,
17
+ });
18
+ },
19
+ });
@@ -8,10 +8,13 @@ import { WhereNode } from './where-node.js';
8
8
  import { WithNode } from './with-node.js';
9
9
  import { FromNode } from './from-node.js';
10
10
  import { ExplainNode } from './explain-node.js';
11
+ import { LimitNode } from './limit-node.js';
12
+ import { TopNode } from './top-node.js';
13
+ import { OutputNode } from './output-node.js';
11
14
  export type UpdateValuesNode = ValueListNode | PrimitiveValueListNode;
12
15
  export interface UpdateQueryNode extends OperationNode {
13
16
  readonly kind: 'UpdateQueryNode';
14
- readonly table: OperationNode;
17
+ readonly table?: OperationNode;
15
18
  readonly from?: FromNode;
16
19
  readonly joins?: ReadonlyArray<JoinNode>;
17
20
  readonly where?: WhereNode;
@@ -19,6 +22,9 @@ export interface UpdateQueryNode extends OperationNode {
19
22
  readonly returning?: ReturningNode;
20
23
  readonly with?: WithNode;
21
24
  readonly explain?: ExplainNode;
25
+ readonly limit?: LimitNode;
26
+ readonly top?: TopNode;
27
+ readonly output?: OutputNode;
22
28
  }
23
29
  /**
24
30
  * @internal
@@ -26,6 +32,8 @@ export interface UpdateQueryNode extends OperationNode {
26
32
  export declare const UpdateQueryNode: Readonly<{
27
33
  is(node: OperationNode): node is UpdateQueryNode;
28
34
  create(table: OperationNode, withNode?: WithNode): UpdateQueryNode;
35
+ createWithoutTable(): UpdateQueryNode;
29
36
  cloneWithFromItems(updateQuery: UpdateQueryNode, fromItems: ReadonlyArray<OperationNode>): UpdateQueryNode;
30
37
  cloneWithUpdates(updateQuery: UpdateQueryNode, updates: ReadonlyArray<ColumnUpdateNode>): UpdateQueryNode;
38
+ cloneWithLimit(updateQuery: UpdateQueryNode, limit: LimitNode): UpdateQueryNode;
31
39
  }>;
@@ -17,6 +17,11 @@ exports.UpdateQueryNode = (0, object_utils_js_1.freeze)({
17
17
  ...(withNode && { with: withNode }),
18
18
  });
19
19
  },
20
+ createWithoutTable() {
21
+ return (0, object_utils_js_1.freeze)({
22
+ kind: 'UpdateQueryNode',
23
+ });
24
+ },
20
25
  cloneWithFromItems(updateQuery, fromItems) {
21
26
  return (0, object_utils_js_1.freeze)({
22
27
  ...updateQuery,
@@ -33,4 +38,10 @@ exports.UpdateQueryNode = (0, object_utils_js_1.freeze)({
33
38
  : updates,
34
39
  });
35
40
  },
41
+ cloneWithLimit(updateQuery, limit) {
42
+ return (0, object_utils_js_1.freeze)({
43
+ ...updateQuery,
44
+ limit,
45
+ });
46
+ },
36
47
  });
@@ -9,5 +9,5 @@ export interface WhereNode extends OperationNode {
9
9
  export declare const WhereNode: Readonly<{
10
10
  is(node: OperationNode): node is WhereNode;
11
11
  create(filter: OperationNode): WhereNode;
12
- cloneWithOperation(whereNode: WhereNode, operator: 'And' | 'Or', operation: OperationNode): WhereNode;
12
+ cloneWithOperation(whereNode: WhereNode, operator: "And" | "Or", operation: OperationNode): WhereNode;
13
13
  }>;
@@ -18,4 +18,4 @@ export declare function parseValueBinaryOperationOrExpression(args: any[]): Oper
18
18
  export declare function parseValueBinaryOperation(left: ReferenceExpression<any, any>, operator: BinaryOperatorExpression, right: OperandValueExpressionOrList<any, any, any>): BinaryOperationNode;
19
19
  export declare function parseReferentialBinaryOperation(left: ReferenceExpression<any, any>, operator: BinaryOperatorExpression, right: OperandValueExpressionOrList<any, any, any>): BinaryOperationNode;
20
20
  export declare function parseFilterObject(obj: Readonly<FilterObject<any, any>>, combinator: 'and' | 'or'): OperationNode;
21
- export declare function parseFilterList(list: ReadonlyArray<OperationNodeSource | OperationNode>, combinator: 'and' | 'or'): OperationNode;
21
+ export declare function parseFilterList(list: ReadonlyArray<OperationNodeSource | OperationNode>, combinator: 'and' | 'or', withParens?: boolean): OperationNode;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseFilterList = exports.parseFilterObject = exports.parseReferentialBinaryOperation = exports.parseValueBinaryOperation = exports.parseValueBinaryOperationOrExpression = void 0;
3
+ exports.parseValueBinaryOperationOrExpression = parseValueBinaryOperationOrExpression;
4
+ exports.parseValueBinaryOperation = parseValueBinaryOperation;
5
+ exports.parseReferentialBinaryOperation = parseReferentialBinaryOperation;
6
+ exports.parseFilterObject = parseFilterObject;
7
+ exports.parseFilterList = parseFilterList;
4
8
  const binary_operation_node_js_1 = require("../operation-node/binary-operation-node.js");
5
9
  const object_utils_js_1 = require("../util/object-utils.js");
6
10
  const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
@@ -20,25 +24,21 @@ function parseValueBinaryOperationOrExpression(args) {
20
24
  }
21
25
  throw new Error(`invalid arguments: ${JSON.stringify(args)}`);
22
26
  }
23
- exports.parseValueBinaryOperationOrExpression = parseValueBinaryOperationOrExpression;
24
27
  function parseValueBinaryOperation(left, operator, right) {
25
28
  if (isIsOperator(operator) && needsIsOperator(right)) {
26
29
  return binary_operation_node_js_1.BinaryOperationNode.create((0, reference_parser_js_1.parseReferenceExpression)(left), parseOperator(operator), value_node_js_1.ValueNode.createImmediate(right));
27
30
  }
28
31
  return binary_operation_node_js_1.BinaryOperationNode.create((0, reference_parser_js_1.parseReferenceExpression)(left), parseOperator(operator), (0, value_parser_js_1.parseValueExpressionOrList)(right));
29
32
  }
30
- exports.parseValueBinaryOperation = parseValueBinaryOperation;
31
33
  function parseReferentialBinaryOperation(left, operator, right) {
32
34
  return binary_operation_node_js_1.BinaryOperationNode.create((0, reference_parser_js_1.parseReferenceExpression)(left), parseOperator(operator), (0, reference_parser_js_1.parseReferenceExpression)(right));
33
35
  }
34
- exports.parseReferentialBinaryOperation = parseReferentialBinaryOperation;
35
36
  function parseFilterObject(obj, combinator) {
36
37
  return parseFilterList(Object.entries(obj)
37
38
  .filter(([, v]) => !(0, object_utils_js_1.isUndefined)(v))
38
39
  .map(([k, v]) => parseValueBinaryOperation(k, needsIsOperator(v) ? 'is' : '=', v)), combinator);
39
40
  }
40
- exports.parseFilterObject = parseFilterObject;
41
- function parseFilterList(list, combinator) {
41
+ function parseFilterList(list, combinator, withParens = true) {
42
42
  const combine = combinator === 'and' ? and_node_js_1.AndNode.create : or_node_js_1.OrNode.create;
43
43
  if (list.length === 0) {
44
44
  return binary_operation_node_js_1.BinaryOperationNode.create(value_node_js_1.ValueNode.createImmediate(1), operator_node_js_1.OperatorNode.create('='), value_node_js_1.ValueNode.createImmediate(combinator === 'and' ? 1 : 0));
@@ -47,12 +47,11 @@ function parseFilterList(list, combinator) {
47
47
  for (let i = 1; i < list.length; ++i) {
48
48
  node = combine(node, toOperationNode(list[i]));
49
49
  }
50
- if (list.length > 1) {
50
+ if (list.length > 1 && withParens) {
51
51
  return parens_node_js_1.ParensNode.create(node);
52
52
  }
53
53
  return node;
54
54
  }
55
- exports.parseFilterList = parseFilterList;
56
55
  function isIsOperator(operator) {
57
56
  return operator === 'is' || operator === 'is not';
58
57
  }
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseDataTypeExpression = void 0;
3
+ exports.parseDataTypeExpression = parseDataTypeExpression;
4
4
  const data_type_node_js_1 = require("../operation-node/data-type-node.js");
5
5
  const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
6
6
  function parseDataTypeExpression(dataType) {
7
- return (0, operation_node_source_js_1.isOperationNodeSource)(dataType)
8
- ? dataType.toOperationNode()
9
- : data_type_node_js_1.DataTypeNode.create(dataType);
7
+ if ((0, operation_node_source_js_1.isOperationNodeSource)(dataType)) {
8
+ return dataType.toOperationNode();
9
+ }
10
+ if ((0, data_type_node_js_1.isColumnDataType)(dataType)) {
11
+ return data_type_node_js_1.DataTypeNode.create(dataType);
12
+ }
13
+ throw new Error(`invalid column data type ${JSON.stringify(dataType)}`);
10
14
  }
11
- exports.parseDataTypeExpression = parseDataTypeExpression;