kysely 0.26.1 → 0.26.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +6 -6
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
  3. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
  4. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  5. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
  6. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  8. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  9. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
  10. package/dist/cjs/driver/runtime-driver.js +17 -2
  11. package/dist/cjs/expression/expression-builder.d.ts +300 -27
  12. package/dist/cjs/expression/expression-builder.js +36 -26
  13. package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
  14. package/dist/cjs/expression/expression-wrapper.js +4 -4
  15. package/dist/cjs/expression/expression.d.ts +64 -1
  16. package/dist/cjs/helpers/mysql.d.ts +14 -11
  17. package/dist/cjs/helpers/mysql.js +21 -32
  18. package/dist/cjs/helpers/postgres.d.ts +8 -5
  19. package/dist/cjs/helpers/postgres.js +8 -5
  20. package/dist/cjs/helpers/sqlite.d.ts +164 -0
  21. package/dist/cjs/helpers/sqlite.js +180 -0
  22. package/dist/cjs/index.d.ts +5 -3
  23. package/dist/cjs/index.js +1 -0
  24. package/dist/cjs/kysely.d.ts +4 -3
  25. package/dist/cjs/kysely.js +1 -1
  26. package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
  27. package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
  28. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
  29. package/dist/cjs/operation-node/delete-query-node.js +3 -3
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  31. package/dist/cjs/operation-node/operation-node-transformer.js +8 -0
  32. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  33. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  34. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  36. package/dist/cjs/operation-node/operator-node.js +3 -0
  37. package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
  38. package/dist/cjs/operation-node/order-by-node.js +4 -4
  39. package/dist/cjs/operation-node/over-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/over-node.js +3 -3
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
  42. package/dist/cjs/operation-node/select-query-node.js +13 -7
  43. package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
  44. package/dist/cjs/operation-node/tuple-node.js +18 -0
  45. package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
  46. package/dist/cjs/parser/binary-operation-parser.js +35 -46
  47. package/dist/cjs/parser/expression-parser.d.ts +10 -5
  48. package/dist/cjs/parser/join-parser.d.ts +2 -2
  49. package/dist/cjs/parser/join-parser.js +2 -3
  50. package/dist/cjs/parser/order-by-parser.d.ts +6 -2
  51. package/dist/cjs/parser/order-by-parser.js +41 -7
  52. package/dist/cjs/parser/parse-utils.js +2 -2
  53. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  54. package/dist/cjs/parser/reference-parser.js +1 -1
  55. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  56. package/dist/cjs/parser/select-parser.d.ts +20 -9
  57. package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
  58. package/dist/cjs/parser/set-operation-parser.js +13 -4
  59. package/dist/cjs/parser/tuple-parser.d.ts +47 -0
  60. package/dist/cjs/parser/tuple-parser.js +2 -0
  61. package/dist/cjs/parser/value-parser.d.ts +5 -3
  62. package/dist/cjs/parser/value-parser.js +12 -1
  63. package/dist/cjs/parser/with-parser.d.ts +3 -2
  64. package/dist/cjs/parser/with-parser.js +16 -4
  65. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  66. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
  67. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  68. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
  69. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
  70. package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
  71. package/dist/cjs/query-builder/case-builder.js +8 -4
  72. package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
  73. package/dist/cjs/query-builder/cte-builder.js +39 -0
  74. package/dist/cjs/query-builder/delete-query-builder.d.ts +39 -10
  75. package/dist/cjs/query-builder/delete-query-builder.js +3 -3
  76. package/dist/cjs/query-builder/function-module.d.ts +41 -6
  77. package/dist/cjs/query-builder/function-module.js +3 -0
  78. package/dist/cjs/query-builder/having-interface.d.ts +2 -5
  79. package/dist/cjs/query-builder/insert-query-builder.d.ts +5 -3
  80. package/dist/cjs/query-builder/join-builder.d.ts +2 -6
  81. package/dist/cjs/query-builder/join-builder.js +2 -2
  82. package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
  83. package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
  84. package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
  85. package/dist/cjs/query-builder/over-builder.js +1 -1
  86. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  87. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  88. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  89. package/dist/cjs/query-builder/select-query-builder.d.ts +206 -67
  90. package/dist/cjs/query-builder/select-query-builder.js +75 -924
  91. package/dist/cjs/query-builder/update-query-builder.d.ts +39 -10
  92. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  93. package/dist/cjs/query-builder/where-interface.d.ts +32 -8
  94. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  95. package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
  96. package/dist/cjs/query-creator.d.ts +76 -2
  97. package/dist/cjs/query-creator.js +36 -6
  98. package/dist/cjs/raw-builder/raw-builder.d.ts +87 -51
  99. package/dist/cjs/raw-builder/raw-builder.js +18 -45
  100. package/dist/cjs/raw-builder/sql.js +8 -8
  101. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  102. package/dist/cjs/schema/alter-table-builder.js +12 -0
  103. package/dist/cjs/schema/create-index-builder.d.ts +1 -1
  104. package/dist/cjs/schema/create-index-builder.js +1 -1
  105. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  106. package/dist/cjs/util/column-type.d.ts +7 -6
  107. package/dist/cjs/util/infer-result.d.ts +2 -1
  108. package/dist/cjs/util/json-object-args.d.ts +3 -0
  109. package/dist/cjs/util/json-object-args.js +35 -0
  110. package/dist/cjs/util/object-utils.d.ts +1 -0
  111. package/dist/cjs/util/object-utils.js +9 -1
  112. package/dist/cjs/util/type-utils.d.ts +16 -17
  113. package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
  114. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
  115. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  116. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
  117. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
  118. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  119. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  120. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
  121. package/dist/esm/driver/runtime-driver.js +17 -2
  122. package/dist/esm/expression/expression-builder.d.ts +300 -27
  123. package/dist/esm/expression/expression-builder.js +40 -30
  124. package/dist/esm/expression/expression-wrapper.d.ts +177 -8
  125. package/dist/esm/expression/expression-wrapper.js +5 -5
  126. package/dist/esm/expression/expression.d.ts +64 -1
  127. package/dist/esm/helpers/mysql.d.ts +14 -11
  128. package/dist/esm/helpers/mysql.js +21 -32
  129. package/dist/esm/helpers/postgres.d.ts +8 -5
  130. package/dist/esm/helpers/postgres.js +8 -5
  131. package/dist/esm/helpers/sqlite.d.ts +164 -0
  132. package/dist/esm/helpers/sqlite.js +175 -0
  133. package/dist/esm/index.d.ts +5 -3
  134. package/dist/esm/index.js +1 -0
  135. package/dist/esm/kysely.d.ts +4 -3
  136. package/dist/esm/kysely.js +1 -1
  137. package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
  138. package/dist/esm/operation-node/common-table-expression-node.js +6 -0
  139. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  140. package/dist/esm/operation-node/delete-query-node.js +3 -3
  141. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  142. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  143. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  144. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  145. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  146. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  147. package/dist/esm/operation-node/operator-node.js +3 -0
  148. package/dist/esm/operation-node/order-by-node.d.ts +2 -2
  149. package/dist/esm/operation-node/order-by-node.js +4 -4
  150. package/dist/esm/operation-node/over-node.d.ts +1 -1
  151. package/dist/esm/operation-node/over-node.js +3 -3
  152. package/dist/esm/operation-node/select-query-node.d.ts +5 -4
  153. package/dist/esm/operation-node/select-query-node.js +13 -7
  154. package/dist/esm/operation-node/tuple-node.d.ts +12 -0
  155. package/dist/esm/operation-node/tuple-node.js +16 -0
  156. package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
  157. package/dist/esm/parser/binary-operation-parser.js +36 -47
  158. package/dist/esm/parser/expression-parser.d.ts +10 -5
  159. package/dist/esm/parser/join-parser.d.ts +2 -2
  160. package/dist/esm/parser/join-parser.js +3 -4
  161. package/dist/esm/parser/order-by-parser.d.ts +6 -2
  162. package/dist/esm/parser/order-by-parser.js +40 -7
  163. package/dist/esm/parser/parse-utils.js +3 -3
  164. package/dist/esm/parser/reference-parser.d.ts +2 -2
  165. package/dist/esm/parser/reference-parser.js +1 -1
  166. package/dist/esm/parser/returning-parser.d.ts +2 -1
  167. package/dist/esm/parser/select-parser.d.ts +20 -9
  168. package/dist/esm/parser/set-operation-parser.d.ts +3 -1
  169. package/dist/esm/parser/set-operation-parser.js +11 -2
  170. package/dist/esm/parser/tuple-parser.d.ts +47 -0
  171. package/dist/esm/parser/tuple-parser.js +2 -0
  172. package/dist/esm/parser/value-parser.d.ts +5 -3
  173. package/dist/esm/parser/value-parser.js +10 -1
  174. package/dist/esm/parser/with-parser.d.ts +3 -2
  175. package/dist/esm/parser/with-parser.js +16 -4
  176. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  177. package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
  178. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  179. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
  180. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
  181. package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
  182. package/dist/esm/query-builder/case-builder.js +10 -6
  183. package/dist/esm/query-builder/cte-builder.d.ts +20 -0
  184. package/dist/esm/query-builder/cte-builder.js +36 -0
  185. package/dist/esm/query-builder/delete-query-builder.d.ts +39 -10
  186. package/dist/esm/query-builder/delete-query-builder.js +4 -4
  187. package/dist/esm/query-builder/function-module.d.ts +41 -6
  188. package/dist/esm/query-builder/function-module.js +3 -0
  189. package/dist/esm/query-builder/having-interface.d.ts +2 -5
  190. package/dist/esm/query-builder/insert-query-builder.d.ts +5 -3
  191. package/dist/esm/query-builder/join-builder.d.ts +2 -6
  192. package/dist/esm/query-builder/join-builder.js +3 -3
  193. package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
  194. package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
  195. package/dist/esm/query-builder/on-conflict-builder.js +5 -5
  196. package/dist/esm/query-builder/over-builder.js +1 -1
  197. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  198. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  199. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  200. package/dist/esm/query-builder/select-query-builder.d.ts +206 -67
  201. package/dist/esm/query-builder/select-query-builder.js +75 -923
  202. package/dist/esm/query-builder/update-query-builder.d.ts +39 -10
  203. package/dist/esm/query-builder/update-query-builder.js +3 -3
  204. package/dist/esm/query-builder/where-interface.d.ts +32 -8
  205. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  206. package/dist/esm/query-compiler/default-query-compiler.js +39 -7
  207. package/dist/esm/query-creator.d.ts +76 -2
  208. package/dist/esm/query-creator.js +37 -7
  209. package/dist/esm/raw-builder/raw-builder.d.ts +87 -51
  210. package/dist/esm/raw-builder/raw-builder.js +17 -42
  211. package/dist/esm/raw-builder/sql.js +9 -9
  212. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  213. package/dist/esm/schema/alter-table-builder.js +12 -0
  214. package/dist/esm/schema/create-index-builder.d.ts +1 -1
  215. package/dist/esm/schema/create-index-builder.js +2 -2
  216. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  217. package/dist/esm/util/column-type.d.ts +7 -6
  218. package/dist/esm/util/infer-result.d.ts +2 -1
  219. package/dist/esm/util/json-object-args.d.ts +3 -0
  220. package/dist/esm/util/json-object-args.js +32 -0
  221. package/dist/esm/util/object-utils.d.ts +1 -0
  222. package/dist/esm/util/object-utils.js +7 -0
  223. package/dist/esm/util/type-utils.d.ts +16 -17
  224. package/helpers/sqlite.d.ts +1 -0
  225. package/helpers/sqlite.js +1 -0
  226. package/package.json +7 -4
@@ -16,7 +16,8 @@ import { Simplify } from '../util/type-utils.js';
16
16
  * `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
17
17
  * them to work, the dialect must automatically parse the `json` data type into
18
18
  * javascript JSON values like objects and arrays. Some dialects might simply return
19
- * the data as a JSON string.
19
+ * the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
20
+ * to parse the results.
20
21
  *
21
22
  * ```ts
22
23
  * import { jsonArrayFrom } from 'kysely/helpers/postgres'
@@ -64,10 +65,11 @@ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simpli
64
65
  * use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
65
66
  *
66
67
  * Please keep in mind that the helpers under the `kysely/helpers` folder, including
67
- * `jsonObjectFrom`, are not guaranteed to work with third party dialects. In order for
68
+ * `jsonObjectFrom`, are not guaranteed to work with 3rd party dialects. In order for
68
69
  * them to work, the dialect must automatically parse the `json` data type into
69
70
  * javascript JSON values like objects and arrays. Some dialects might simply return
70
- * the data as a JSON string.
71
+ * the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
72
+ * to parse the results.
71
73
  *
72
74
  * ```ts
73
75
  * import { jsonObjectFrom } from 'kysely/helpers/postgres'
@@ -105,8 +107,9 @@ export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simpl
105
107
  * The PostgreSQL `json_build_object` function.
106
108
  *
107
109
  * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
108
- * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
109
- * may not parse the nested results into objects.
110
+ * While the produced SQL is compatible with all PostgreSQL databases, some 3rd party dialects
111
+ * may not parse the nested JSON into objects. In these cases you can use the built in
112
+ * `ParseJSONResultsPlugin` to parse the results.
110
113
  *
111
114
  * ### Examples
112
115
  *
@@ -15,7 +15,8 @@ import { sql } from '../raw-builder/sql.js';
15
15
  * `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
16
16
  * them to work, the dialect must automatically parse the `json` data type into
17
17
  * javascript JSON values like objects and arrays. Some dialects might simply return
18
- * the data as a JSON string.
18
+ * the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
19
+ * to parse the results.
19
20
  *
20
21
  * ```ts
21
22
  * import { jsonArrayFrom } from 'kysely/helpers/postgres'
@@ -65,10 +66,11 @@ export function jsonArrayFrom(expr) {
65
66
  * use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
66
67
  *
67
68
  * Please keep in mind that the helpers under the `kysely/helpers` folder, including
68
- * `jsonObjectFrom`, are not guaranteed to work with third party dialects. In order for
69
+ * `jsonObjectFrom`, are not guaranteed to work with 3rd party dialects. In order for
69
70
  * them to work, the dialect must automatically parse the `json` data type into
70
71
  * javascript JSON values like objects and arrays. Some dialects might simply return
71
- * the data as a JSON string.
72
+ * the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
73
+ * to parse the results.
72
74
  *
73
75
  * ```ts
74
76
  * import { jsonObjectFrom } from 'kysely/helpers/postgres'
@@ -108,8 +110,9 @@ export function jsonObjectFrom(expr) {
108
110
  * The PostgreSQL `json_build_object` function.
109
111
  *
110
112
  * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
111
- * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
112
- * may not parse the nested results into objects.
113
+ * While the produced SQL is compatible with all PostgreSQL databases, some 3rd party dialects
114
+ * may not parse the nested JSON into objects. In these cases you can use the built in
115
+ * `ParseJSONResultsPlugin` to parse the results.
113
116
  *
114
117
  * ### Examples
115
118
  *
@@ -0,0 +1,164 @@
1
+ import { Expression } from '../expression/expression.js';
2
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
3
+ import { RawBuilder } from '../raw-builder/raw-builder.js';
4
+ import { Simplify } from '../util/type-utils.js';
5
+ /**
6
+ * A SQLite helper for aggregating a subquery into a JSON array.
7
+ *
8
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
9
+ * Otherwise the nested selections will be returned as JSON strings.
10
+ *
11
+ * The plugin can be installed like this:
12
+ *
13
+ * ```ts
14
+ * const db = new Kysely({
15
+ * dialect: new SqliteDialect(config),
16
+ * plugins: [new ParseJSONResultsPlugin()]
17
+ * })
18
+ * ```
19
+ *
20
+ * ### Examples
21
+ *
22
+ * ```ts
23
+ * const result = await db
24
+ * .selectFrom('person')
25
+ * .select((eb) => [
26
+ * 'id',
27
+ * jsonArrayFrom(
28
+ * eb.selectFrom('pet')
29
+ * .select(['pet.id as pet_id', 'pet.name'])
30
+ * .whereRef('pet.owner_id', '=', 'person.id')
31
+ * .orderBy('pet.name')
32
+ * ).as('pets')
33
+ * ])
34
+ * .execute()
35
+ *
36
+ * result[0].id
37
+ * result[0].pets[0].pet_id
38
+ * result[0].pets[0].name
39
+ * ```
40
+ *
41
+ * The generated SQL (SQLite):
42
+ *
43
+ * ```sql
44
+ * select "id", (
45
+ * select coalesce(json_group_array(json_object(
46
+ * 'pet_id', "agg"."pet_id",
47
+ * 'name', "agg"."name"
48
+ * )), '[]') from (
49
+ * select "pet"."id" as "pet_id", "pet"."name"
50
+ * from "pet"
51
+ * where "pet"."owner_id" = "person"."id"
52
+ * order by "pet"."name"
53
+ * ) as "agg"
54
+ * ) as "pets"
55
+ * from "person"
56
+ * ```
57
+ */
58
+ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O>[]>;
59
+ /**
60
+ * A SQLite helper for turning a subquery into a JSON object.
61
+ *
62
+ * The subquery must only return one row.
63
+ *
64
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
65
+ * Otherwise the nested selections will be returned as JSON strings.
66
+ *
67
+ * The plugin can be installed like this:
68
+ *
69
+ * ```ts
70
+ * const db = new Kysely({
71
+ * dialect: new SqliteDialect(config),
72
+ * plugins: [new ParseJSONResultsPlugin()]
73
+ * })
74
+ * ```
75
+ *
76
+ * ### Examples
77
+ *
78
+ * ```ts
79
+ * const result = await db
80
+ * .selectFrom('person')
81
+ * .select((eb) => [
82
+ * 'id',
83
+ * jsonObjectFrom(
84
+ * eb.selectFrom('pet')
85
+ * .select(['pet.id as pet_id', 'pet.name'])
86
+ * .whereRef('pet.owner_id', '=', 'person.id')
87
+ * .where('pet.is_favorite', '=', true)
88
+ * ).as('favorite_pet')
89
+ * ])
90
+ * .execute()
91
+ *
92
+ * result[0].id
93
+ * result[0].favorite_pet.pet_id
94
+ * result[0].favorite_pet.name
95
+ * ```
96
+ *
97
+ * The generated SQL (SQLite):
98
+ *
99
+ * ```sql
100
+ * select "id", (
101
+ * select json_object(
102
+ * 'pet_id', "obj"."pet_id",
103
+ * 'name', "obj"."name"
104
+ * ) from (
105
+ * select "pet"."id" as "pet_id", "pet"."name"
106
+ * from "pet"
107
+ * where "pet"."owner_id" = "person"."id"
108
+ * and "pet"."is_favorite" = ?
109
+ * ) as obj
110
+ * ) as "favorite_pet"
111
+ * from "person";
112
+ * ```
113
+ */
114
+ export declare function jsonObjectFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O> | null>;
115
+ /**
116
+ * The SQLite `json_object` function.
117
+ *
118
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
119
+ * Otherwise the nested selections will be returned as JSON strings.
120
+ *
121
+ * The plugin can be installed like this:
122
+ *
123
+ * ```ts
124
+ * const db = new Kysely({
125
+ * dialect: new SqliteDialect(config),
126
+ * plugins: [new ParseJSONResultsPlugin()]
127
+ * })
128
+ * ```
129
+ *
130
+ * ### Examples
131
+ *
132
+ * ```ts
133
+ * const result = await db
134
+ * .selectFrom('person')
135
+ * .select((eb) => [
136
+ * 'id',
137
+ * jsonBuildObject({
138
+ * first: eb.ref('first_name'),
139
+ * last: eb.ref('last_name'),
140
+ * full: sql<string>`first_name || ' ' || last_name`
141
+ * }).as('name')
142
+ * ])
143
+ * .execute()
144
+ *
145
+ * result[0].id
146
+ * result[0].name.first
147
+ * result[0].name.last
148
+ * result[0].name.full
149
+ * ```
150
+ *
151
+ * The generated SQL (SQLite):
152
+ *
153
+ * ```sql
154
+ * select "id", json_object(
155
+ * 'first', first_name,
156
+ * 'last', last_name,
157
+ * 'full', "first_name" || ' ' || "last_name"
158
+ * ) as "name"
159
+ * from "person"
160
+ * ```
161
+ */
162
+ export declare function jsonBuildObject<O extends Record<string, Expression<unknown>>>(obj: O): RawBuilder<Simplify<{
163
+ [K in keyof O]: O[K] extends Expression<infer V> ? V : never;
164
+ }>>;
@@ -0,0 +1,175 @@
1
+ /// <reference types="./sqlite.d.ts" />
2
+ import { sql } from '../raw-builder/sql.js';
3
+ import { getJsonObjectArgs } from '../util/json-object-args.js';
4
+ /**
5
+ * A SQLite helper for aggregating a subquery into a JSON array.
6
+ *
7
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
8
+ * Otherwise the nested selections will be returned as JSON strings.
9
+ *
10
+ * The plugin can be installed like this:
11
+ *
12
+ * ```ts
13
+ * const db = new Kysely({
14
+ * dialect: new SqliteDialect(config),
15
+ * plugins: [new ParseJSONResultsPlugin()]
16
+ * })
17
+ * ```
18
+ *
19
+ * ### Examples
20
+ *
21
+ * ```ts
22
+ * const result = await db
23
+ * .selectFrom('person')
24
+ * .select((eb) => [
25
+ * 'id',
26
+ * jsonArrayFrom(
27
+ * eb.selectFrom('pet')
28
+ * .select(['pet.id as pet_id', 'pet.name'])
29
+ * .whereRef('pet.owner_id', '=', 'person.id')
30
+ * .orderBy('pet.name')
31
+ * ).as('pets')
32
+ * ])
33
+ * .execute()
34
+ *
35
+ * result[0].id
36
+ * result[0].pets[0].pet_id
37
+ * result[0].pets[0].name
38
+ * ```
39
+ *
40
+ * The generated SQL (SQLite):
41
+ *
42
+ * ```sql
43
+ * select "id", (
44
+ * select coalesce(json_group_array(json_object(
45
+ * 'pet_id', "agg"."pet_id",
46
+ * 'name', "agg"."name"
47
+ * )), '[]') from (
48
+ * select "pet"."id" as "pet_id", "pet"."name"
49
+ * from "pet"
50
+ * where "pet"."owner_id" = "person"."id"
51
+ * order by "pet"."name"
52
+ * ) as "agg"
53
+ * ) as "pets"
54
+ * from "person"
55
+ * ```
56
+ */
57
+ export function jsonArrayFrom(expr) {
58
+ return sql `(select coalesce(json_group_array(json_object(${sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'agg'))})), '[]') from ${expr} as agg)`;
59
+ }
60
+ /**
61
+ * A SQLite helper for turning a subquery into a JSON object.
62
+ *
63
+ * The subquery must only return one row.
64
+ *
65
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
66
+ * Otherwise the nested selections will be returned as JSON strings.
67
+ *
68
+ * The plugin can be installed like this:
69
+ *
70
+ * ```ts
71
+ * const db = new Kysely({
72
+ * dialect: new SqliteDialect(config),
73
+ * plugins: [new ParseJSONResultsPlugin()]
74
+ * })
75
+ * ```
76
+ *
77
+ * ### Examples
78
+ *
79
+ * ```ts
80
+ * const result = await db
81
+ * .selectFrom('person')
82
+ * .select((eb) => [
83
+ * 'id',
84
+ * jsonObjectFrom(
85
+ * eb.selectFrom('pet')
86
+ * .select(['pet.id as pet_id', 'pet.name'])
87
+ * .whereRef('pet.owner_id', '=', 'person.id')
88
+ * .where('pet.is_favorite', '=', true)
89
+ * ).as('favorite_pet')
90
+ * ])
91
+ * .execute()
92
+ *
93
+ * result[0].id
94
+ * result[0].favorite_pet.pet_id
95
+ * result[0].favorite_pet.name
96
+ * ```
97
+ *
98
+ * The generated SQL (SQLite):
99
+ *
100
+ * ```sql
101
+ * select "id", (
102
+ * select json_object(
103
+ * 'pet_id', "obj"."pet_id",
104
+ * 'name', "obj"."name"
105
+ * ) from (
106
+ * select "pet"."id" as "pet_id", "pet"."name"
107
+ * from "pet"
108
+ * where "pet"."owner_id" = "person"."id"
109
+ * and "pet"."is_favorite" = ?
110
+ * ) as obj
111
+ * ) as "favorite_pet"
112
+ * from "person";
113
+ * ```
114
+ */
115
+ export function jsonObjectFrom(expr) {
116
+ return sql `(select json_object(${sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'obj'))}) from ${expr} as obj)`;
117
+ }
118
+ /**
119
+ * The SQLite `json_object` function.
120
+ *
121
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
122
+ * Otherwise the nested selections will be returned as JSON strings.
123
+ *
124
+ * The plugin can be installed like this:
125
+ *
126
+ * ```ts
127
+ * const db = new Kysely({
128
+ * dialect: new SqliteDialect(config),
129
+ * plugins: [new ParseJSONResultsPlugin()]
130
+ * })
131
+ * ```
132
+ *
133
+ * ### Examples
134
+ *
135
+ * ```ts
136
+ * const result = await db
137
+ * .selectFrom('person')
138
+ * .select((eb) => [
139
+ * 'id',
140
+ * jsonBuildObject({
141
+ * first: eb.ref('first_name'),
142
+ * last: eb.ref('last_name'),
143
+ * full: sql<string>`first_name || ' ' || last_name`
144
+ * }).as('name')
145
+ * ])
146
+ * .execute()
147
+ *
148
+ * result[0].id
149
+ * result[0].name.first
150
+ * result[0].name.last
151
+ * result[0].name.full
152
+ * ```
153
+ *
154
+ * The generated SQL (SQLite):
155
+ *
156
+ * ```sql
157
+ * select "id", json_object(
158
+ * 'first', first_name,
159
+ * 'last', last_name,
160
+ * 'full', "first_name" || ' ' || "last_name"
161
+ * ) as "name"
162
+ * from "person"
163
+ * ```
164
+ */
165
+ export function jsonBuildObject(obj) {
166
+ return sql `json_object(${sql.join(Object.keys(obj).flatMap((k) => [sql.lit(k), obj[k]]))})`;
167
+ }
168
+ function getSqliteJsonObjectArgs(node, table) {
169
+ try {
170
+ return getJsonObjectArgs(node, table);
171
+ }
172
+ catch {
173
+ throw new Error('SQLite jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.');
174
+ }
175
+ }
@@ -170,15 +170,16 @@ export * from './operation-node/json-reference-node.js';
170
170
  export * from './operation-node/json-path-leg-node.js';
171
171
  export * from './operation-node/json-path-node.js';
172
172
  export * from './operation-node/json-operator-chain-node.js';
173
+ export * from './operation-node/tuple-node.js';
173
174
  export * from './util/column-type.js';
174
175
  export * from './util/compilable.js';
175
176
  export * from './util/explainable.js';
176
177
  export * from './util/streamable.js';
177
178
  export * from './util/log.js';
178
- export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, AnySelectQueryBuilder, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
179
+ export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
179
180
  export * from './util/infer-result.js';
180
181
  export { logOnce } from './util/log-once.js';
181
- export { SelectExpression, SelectArg, Selection, } from './parser/select-parser.js';
182
+ export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
182
183
  export { ReferenceExpression, ReferenceExpressionOrList, SimpleReferenceExpression, StringReference, ExtractTypeFromStringReference, ExtractTypeFromReferenceExpression, } from './parser/reference-parser.js';
183
184
  export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
184
185
  export { TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
@@ -186,5 +187,6 @@ export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-
186
187
  export { InsertObject } from './parser/insert-values-parser.js';
187
188
  export { UpdateObject } from './parser/update-set-parser.js';
188
189
  export { OrderByExpression, OrderByDirectionExpression, } from './parser/order-by-parser.js';
189
- export { ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList, } from './parser/binary-operation-parser.js';
190
+ export { ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList, FilterObject, } from './parser/binary-operation-parser.js';
190
191
  export { ExistsExpression } from './parser/unary-operation-parser.js';
192
+ export { OperandExpression, ExpressionOrFactory, } from './parser/expression-parser.js';
package/dist/esm/index.js CHANGED
@@ -171,6 +171,7 @@ export * from './operation-node/json-reference-node.js';
171
171
  export * from './operation-node/json-path-leg-node.js';
172
172
  export * from './operation-node/json-path-node.js';
173
173
  export * from './operation-node/json-operator-chain-node.js';
174
+ export * from './operation-node/tuple-node.js';
174
175
  export * from './util/column-type.js';
175
176
  export * from './util/compilable.js';
176
177
  export * from './util/explainable.js';
@@ -15,6 +15,7 @@ import { QueryId } from './util/query-id.js';
15
15
  import { Compilable } from './util/compilable.js';
16
16
  import { CaseBuilder } from './query-builder/case-builder.js';
17
17
  import { Expression } from './expression/expression.js';
18
+ import { DrainOuterGeneric } from './util/type-utils.js';
18
19
  /**
19
20
  * The main Kysely class.
20
21
  *
@@ -38,7 +39,7 @@ import { Expression } from './expression/expression.js';
38
39
  * id: Generated<number>
39
40
  * owner_id: number
40
41
  * name: string
41
- * species 'cat' | 'dog'
42
+ * species: 'cat' | 'dog'
42
43
  * }
43
44
  *
44
45
  * interface Database {
@@ -228,7 +229,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
228
229
  * .execute()
229
230
  * ```
230
231
  */
231
- withTables<T extends Record<string, Record<string, any>>>(): Kysely<DB & T>;
232
+ withTables<T extends Record<string, Record<string, any>>>(): Kysely<DrainOuterGeneric<DB & T>>;
232
233
  /**
233
234
  * Releases all resources and disconnects from the database.
234
235
  *
@@ -385,7 +386,7 @@ export declare class Transaction<DB> extends Kysely<DB> {
385
386
  * .execute()
386
387
  * ```
387
388
  */
388
- withTables<T extends Record<string, Record<string, any>>>(): Transaction<DB & T>;
389
+ withTables<T extends Record<string, Record<string, any>>>(): Transaction<DrainOuterGeneric<DB & T>>;
389
390
  }
390
391
  export interface KyselyProps {
391
392
  readonly config: KyselyConfig;
@@ -40,7 +40,7 @@ import { WithSchemaPlugin } from './plugin/with-schema/with-schema-plugin.js';
40
40
  * id: Generated<number>
41
41
  * owner_id: number
42
42
  * name: string
43
- * species 'cat' | 'dog'
43
+ * species: 'cat' | 'dog'
44
44
  * }
45
45
  *
46
46
  * interface Database {
@@ -1,8 +1,10 @@
1
1
  import { CommonTableExpressionNameNode } from './common-table-expression-name-node.js';
2
2
  import { OperationNode } from './operation-node.js';
3
+ type CommonTableExpressionNodeProps = Pick<CommonTableExpressionNode, 'materialized'>;
3
4
  export interface CommonTableExpressionNode extends OperationNode {
4
5
  readonly kind: 'CommonTableExpressionNode';
5
6
  readonly name: CommonTableExpressionNameNode;
7
+ readonly materialized?: boolean;
6
8
  readonly expression: OperationNode;
7
9
  }
8
10
  /**
@@ -11,4 +13,6 @@ export interface CommonTableExpressionNode extends OperationNode {
11
13
  export declare const CommonTableExpressionNode: Readonly<{
12
14
  is(node: OperationNode): node is CommonTableExpressionNode;
13
15
  create(name: CommonTableExpressionNameNode, expression: OperationNode): CommonTableExpressionNode;
16
+ cloneWith(node: CommonTableExpressionNode, props: CommonTableExpressionNodeProps): CommonTableExpressionNode;
14
17
  }>;
18
+ export {};
@@ -14,4 +14,10 @@ export const CommonTableExpressionNode = freeze({
14
14
  expression,
15
15
  });
16
16
  },
17
+ cloneWith(node, props) {
18
+ return freeze({
19
+ ...node,
20
+ ...props,
21
+ });
22
+ },
17
23
  });
@@ -27,7 +27,7 @@ export interface DeleteQueryNode extends OperationNode {
27
27
  export declare const DeleteQueryNode: Readonly<{
28
28
  is(node: OperationNode): node is DeleteQueryNode;
29
29
  create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
30
- cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
30
+ cloneWithOrderByItems(deleteNode: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>): DeleteQueryNode;
31
31
  cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
32
32
  cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;
33
33
  }>;
@@ -17,12 +17,12 @@ export const DeleteQueryNode = freeze({
17
17
  ...(withNode && { with: withNode }),
18
18
  });
19
19
  },
20
- cloneWithOrderByItem(deleteNode, item) {
20
+ cloneWithOrderByItems(deleteNode, items) {
21
21
  return freeze({
22
22
  ...deleteNode,
23
23
  orderBy: deleteNode.orderBy
24
- ? OrderByNode.cloneWithItem(deleteNode.orderBy, item)
25
- : OrderByNode.create(item),
24
+ ? OrderByNode.cloneWithItems(deleteNode.orderBy, items)
25
+ : OrderByNode.create(items),
26
26
  });
27
27
  },
28
28
  cloneWithLimit(deleteNode, limit) {
@@ -84,6 +84,7 @@ import { JSONReferenceNode } from './json-reference-node.js';
84
84
  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
+ import { TupleNode } from './tuple-node.js';
87
88
  /**
88
89
  * Transforms an operation node tree into another one.
89
90
  *
@@ -197,6 +198,7 @@ export declare class OperationNodeTransformer {
197
198
  protected transformJSONPath(node: JSONPathNode): JSONPathNode;
198
199
  protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
199
200
  protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
201
+ protected transformTuple(node: TupleNode): TupleNode;
200
202
  protected transformDataType(node: DataTypeNode): DataTypeNode;
201
203
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
202
204
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;
@@ -118,6 +118,7 @@ export class OperationNodeTransformer {
118
118
  JSONPathNode: this.transformJSONPath.bind(this),
119
119
  JSONPathLegNode: this.transformJSONPathLeg.bind(this),
120
120
  JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
121
+ TupleNode: this.transformTuple.bind(this),
121
122
  });
122
123
  transformNode(node) {
123
124
  if (!node) {
@@ -489,6 +490,7 @@ export class OperationNodeTransformer {
489
490
  return requireAllProps({
490
491
  kind: 'CommonTableExpressionNode',
491
492
  name: this.transformNode(node.name),
493
+ materialized: node.materialized,
492
494
  expression: this.transformNode(node.expression),
493
495
  });
494
496
  }
@@ -755,6 +757,12 @@ export class OperationNodeTransformer {
755
757
  values: this.transformNodeList(node.values),
756
758
  });
757
759
  }
760
+ transformTuple(node) {
761
+ return requireAllProps({
762
+ kind: 'TupleNode',
763
+ values: this.transformNodeList(node.values),
764
+ });
765
+ }
758
766
  transformDataType(node) {
759
767
  // An Object.freezed leaf node. No need to clone.
760
768
  return node;
@@ -84,6 +84,7 @@ import { JSONReferenceNode } from './json-reference-node.js';
84
84
  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
+ import { TupleNode } from './tuple-node.js';
87
88
  export declare abstract class OperationNodeVisitor {
88
89
  #private;
89
90
  protected readonly nodeStack: OperationNode[];
@@ -174,4 +175,5 @@ export declare abstract class OperationNodeVisitor {
174
175
  protected abstract visitJSONPath(node: JSONPathNode): void;
175
176
  protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
176
177
  protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
178
+ protected abstract visitTuple(node: TupleNode): void;
177
179
  }
@@ -91,6 +91,7 @@ export class OperationNodeVisitor {
91
91
  JSONPathNode: this.visitJSONPath.bind(this),
92
92
  JSONPathLegNode: this.visitJSONPathLeg.bind(this),
93
93
  JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
94
+ TupleNode: this.visitTuple.bind(this),
94
95
  });
95
96
  visitNode = (node) => {
96
97
  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';
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';
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"];
2
+ export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"];
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", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
5
+ export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
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", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists"];
8
+ export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "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];