kysely 0.26.1 → 0.26.2

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 (210) 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 +298 -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 +11 -8
  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 +3 -1
  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 +9 -4
  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.js +1 -1
  54. package/dist/cjs/parser/select-parser.d.ts +5 -5
  55. package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
  56. package/dist/cjs/parser/set-operation-parser.js +13 -4
  57. package/dist/cjs/parser/tuple-parser.d.ts +47 -0
  58. package/dist/cjs/parser/tuple-parser.js +2 -0
  59. package/dist/cjs/parser/value-parser.d.ts +4 -2
  60. package/dist/cjs/parser/value-parser.js +12 -1
  61. package/dist/cjs/parser/with-parser.d.ts +3 -2
  62. package/dist/cjs/parser/with-parser.js +16 -4
  63. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  64. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
  65. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  66. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
  67. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
  68. package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
  69. package/dist/cjs/query-builder/case-builder.js +8 -4
  70. package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
  71. package/dist/cjs/query-builder/cte-builder.js +39 -0
  72. package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -7
  73. package/dist/cjs/query-builder/delete-query-builder.js +3 -3
  74. package/dist/cjs/query-builder/function-module.d.ts +41 -6
  75. package/dist/cjs/query-builder/function-module.js +3 -0
  76. package/dist/cjs/query-builder/having-interface.d.ts +2 -5
  77. package/dist/cjs/query-builder/join-builder.d.ts +2 -6
  78. package/dist/cjs/query-builder/join-builder.js +2 -2
  79. package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
  80. package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
  81. package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
  82. package/dist/cjs/query-builder/over-builder.js +1 -1
  83. package/dist/cjs/query-builder/select-query-builder.d.ts +201 -65
  84. package/dist/cjs/query-builder/select-query-builder.js +72 -924
  85. package/dist/cjs/query-builder/update-query-builder.d.ts +34 -7
  86. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  87. package/dist/cjs/query-builder/where-interface.d.ts +32 -8
  88. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  89. package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
  90. package/dist/cjs/query-creator.d.ts +74 -2
  91. package/dist/cjs/query-creator.js +83 -6
  92. package/dist/cjs/raw-builder/raw-builder.d.ts +88 -49
  93. package/dist/cjs/raw-builder/raw-builder.js +18 -45
  94. package/dist/cjs/raw-builder/sql.js +8 -8
  95. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  96. package/dist/cjs/schema/alter-table-builder.js +12 -0
  97. package/dist/cjs/schema/create-index-builder.d.ts +1 -1
  98. package/dist/cjs/schema/create-index-builder.js +1 -1
  99. package/dist/cjs/util/column-type.d.ts +7 -6
  100. package/dist/cjs/util/json-object-args.d.ts +3 -0
  101. package/dist/cjs/util/json-object-args.js +35 -0
  102. package/dist/cjs/util/object-utils.d.ts +1 -0
  103. package/dist/cjs/util/object-utils.js +9 -1
  104. package/dist/cjs/util/type-utils.d.ts +10 -10
  105. package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
  106. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
  107. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  108. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
  109. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
  110. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  111. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  112. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
  113. package/dist/esm/driver/runtime-driver.js +17 -2
  114. package/dist/esm/expression/expression-builder.d.ts +298 -27
  115. package/dist/esm/expression/expression-builder.js +40 -30
  116. package/dist/esm/expression/expression-wrapper.d.ts +177 -8
  117. package/dist/esm/expression/expression-wrapper.js +5 -5
  118. package/dist/esm/expression/expression.d.ts +64 -1
  119. package/dist/esm/helpers/mysql.d.ts +11 -8
  120. package/dist/esm/helpers/mysql.js +21 -32
  121. package/dist/esm/helpers/postgres.d.ts +8 -5
  122. package/dist/esm/helpers/postgres.js +8 -5
  123. package/dist/esm/helpers/sqlite.d.ts +164 -0
  124. package/dist/esm/helpers/sqlite.js +175 -0
  125. package/dist/esm/index.d.ts +3 -1
  126. package/dist/esm/index.js +1 -0
  127. package/dist/esm/kysely.d.ts +4 -3
  128. package/dist/esm/kysely.js +1 -1
  129. package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
  130. package/dist/esm/operation-node/common-table-expression-node.js +6 -0
  131. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  132. package/dist/esm/operation-node/delete-query-node.js +3 -3
  133. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  134. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  135. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  136. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  137. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  138. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  139. package/dist/esm/operation-node/operator-node.js +3 -0
  140. package/dist/esm/operation-node/order-by-node.d.ts +2 -2
  141. package/dist/esm/operation-node/order-by-node.js +4 -4
  142. package/dist/esm/operation-node/over-node.d.ts +1 -1
  143. package/dist/esm/operation-node/over-node.js +3 -3
  144. package/dist/esm/operation-node/select-query-node.d.ts +5 -4
  145. package/dist/esm/operation-node/select-query-node.js +13 -7
  146. package/dist/esm/operation-node/tuple-node.d.ts +12 -0
  147. package/dist/esm/operation-node/tuple-node.js +16 -0
  148. package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
  149. package/dist/esm/parser/binary-operation-parser.js +36 -47
  150. package/dist/esm/parser/expression-parser.d.ts +9 -4
  151. package/dist/esm/parser/join-parser.d.ts +2 -2
  152. package/dist/esm/parser/join-parser.js +3 -4
  153. package/dist/esm/parser/order-by-parser.d.ts +6 -2
  154. package/dist/esm/parser/order-by-parser.js +40 -7
  155. package/dist/esm/parser/parse-utils.js +3 -3
  156. package/dist/esm/parser/reference-parser.js +1 -1
  157. package/dist/esm/parser/select-parser.d.ts +5 -5
  158. package/dist/esm/parser/set-operation-parser.d.ts +3 -1
  159. package/dist/esm/parser/set-operation-parser.js +11 -2
  160. package/dist/esm/parser/tuple-parser.d.ts +47 -0
  161. package/dist/esm/parser/tuple-parser.js +2 -0
  162. package/dist/esm/parser/value-parser.d.ts +4 -2
  163. package/dist/esm/parser/value-parser.js +10 -1
  164. package/dist/esm/parser/with-parser.d.ts +3 -2
  165. package/dist/esm/parser/with-parser.js +16 -4
  166. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  167. package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
  168. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  169. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
  170. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
  171. package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
  172. package/dist/esm/query-builder/case-builder.js +10 -6
  173. package/dist/esm/query-builder/cte-builder.d.ts +20 -0
  174. package/dist/esm/query-builder/cte-builder.js +36 -0
  175. package/dist/esm/query-builder/delete-query-builder.d.ts +34 -7
  176. package/dist/esm/query-builder/delete-query-builder.js +4 -4
  177. package/dist/esm/query-builder/function-module.d.ts +41 -6
  178. package/dist/esm/query-builder/function-module.js +3 -0
  179. package/dist/esm/query-builder/having-interface.d.ts +2 -5
  180. package/dist/esm/query-builder/join-builder.d.ts +2 -6
  181. package/dist/esm/query-builder/join-builder.js +3 -3
  182. package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
  183. package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
  184. package/dist/esm/query-builder/on-conflict-builder.js +5 -5
  185. package/dist/esm/query-builder/over-builder.js +1 -1
  186. package/dist/esm/query-builder/select-query-builder.d.ts +201 -65
  187. package/dist/esm/query-builder/select-query-builder.js +72 -923
  188. package/dist/esm/query-builder/update-query-builder.d.ts +34 -7
  189. package/dist/esm/query-builder/update-query-builder.js +3 -3
  190. package/dist/esm/query-builder/where-interface.d.ts +32 -8
  191. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  192. package/dist/esm/query-compiler/default-query-compiler.js +39 -7
  193. package/dist/esm/query-creator.d.ts +74 -2
  194. package/dist/esm/query-creator.js +84 -7
  195. package/dist/esm/raw-builder/raw-builder.d.ts +88 -49
  196. package/dist/esm/raw-builder/raw-builder.js +17 -42
  197. package/dist/esm/raw-builder/sql.js +9 -9
  198. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  199. package/dist/esm/schema/alter-table-builder.js +12 -0
  200. package/dist/esm/schema/create-index-builder.d.ts +1 -1
  201. package/dist/esm/schema/create-index-builder.js +2 -2
  202. package/dist/esm/util/column-type.d.ts +7 -6
  203. package/dist/esm/util/json-object-args.d.ts +3 -0
  204. package/dist/esm/util/json-object-args.js +32 -0
  205. package/dist/esm/util/object-utils.d.ts +1 -0
  206. package/dist/esm/util/object-utils.js +7 -0
  207. package/dist/esm/util/type-utils.d.ts +10 -10
  208. package/helpers/sqlite.d.ts +1 -0
  209. package/helpers/sqlite.js +1 -0
  210. package/package.json +7 -4
@@ -17,7 +17,8 @@ const sql_js_1 = require("../raw-builder/sql.js");
17
17
  * `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
18
18
  * them to work, the dialect must automatically parse the `json` data type into
19
19
  * javascript JSON values like objects and arrays. Some dialects might simply return
20
- * the data as a JSON string.
20
+ * the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
21
+ * to parse the results.
21
22
  *
22
23
  * ```ts
23
24
  * import { jsonArrayFrom } from 'kysely/helpers/postgres'
@@ -68,10 +69,11 @@ exports.jsonArrayFrom = jsonArrayFrom;
68
69
  * use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
69
70
  *
70
71
  * Please keep in mind that the helpers under the `kysely/helpers` folder, including
71
- * `jsonObjectFrom`, are not guaranteed to work with third party dialects. In order for
72
+ * `jsonObjectFrom`, are not guaranteed to work with 3rd party dialects. In order for
72
73
  * them to work, the dialect must automatically parse the `json` data type into
73
74
  * javascript JSON values like objects and arrays. Some dialects might simply return
74
- * the data as a JSON string.
75
+ * the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
76
+ * to parse the results.
75
77
  *
76
78
  * ```ts
77
79
  * import { jsonObjectFrom } from 'kysely/helpers/postgres'
@@ -112,8 +114,9 @@ exports.jsonObjectFrom = jsonObjectFrom;
112
114
  * The PostgreSQL `json_build_object` function.
113
115
  *
114
116
  * NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
115
- * While the produced SQL is compatibe with all PostgreSQL databases, some 3rd party dialects
116
- * may not parse the nested results into objects.
117
+ * While the produced SQL is compatible with all PostgreSQL databases, some 3rd party dialects
118
+ * may not parse the nested JSON into objects. In these cases you can use the built in
119
+ * `ParseJSONResultsPlugin` to parse the results.
117
120
  *
118
121
  * ### Examples
119
122
  *
@@ -0,0 +1,164 @@
1
+ import { Expression } from '../expression/expression.js';
2
+ import { SelectQueryBuilder } from '../query-builder/select-query-builder.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: SelectQueryBuilder<any, any, 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: SelectQueryBuilder<any, any, 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,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonBuildObject = exports.jsonObjectFrom = exports.jsonArrayFrom = void 0;
4
+ const sql_js_1 = require("../raw-builder/sql.js");
5
+ const json_object_args_js_1 = require("../util/json-object-args.js");
6
+ /**
7
+ * A SQLite helper for aggregating a subquery into a JSON array.
8
+ *
9
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
10
+ * Otherwise the nested selections will be returned as JSON strings.
11
+ *
12
+ * The plugin can be installed like this:
13
+ *
14
+ * ```ts
15
+ * const db = new Kysely({
16
+ * dialect: new SqliteDialect(config),
17
+ * plugins: [new ParseJSONResultsPlugin()]
18
+ * })
19
+ * ```
20
+ *
21
+ * ### Examples
22
+ *
23
+ * ```ts
24
+ * const result = await db
25
+ * .selectFrom('person')
26
+ * .select((eb) => [
27
+ * 'id',
28
+ * jsonArrayFrom(
29
+ * eb.selectFrom('pet')
30
+ * .select(['pet.id as pet_id', 'pet.name'])
31
+ * .whereRef('pet.owner_id', '=', 'person.id')
32
+ * .orderBy('pet.name')
33
+ * ).as('pets')
34
+ * ])
35
+ * .execute()
36
+ *
37
+ * result[0].id
38
+ * result[0].pets[0].pet_id
39
+ * result[0].pets[0].name
40
+ * ```
41
+ *
42
+ * The generated SQL (SQLite):
43
+ *
44
+ * ```sql
45
+ * select "id", (
46
+ * select coalesce(json_group_array(json_object(
47
+ * 'pet_id', "agg"."pet_id",
48
+ * 'name', "agg"."name"
49
+ * )), '[]') from (
50
+ * select "pet"."id" as "pet_id", "pet"."name"
51
+ * from "pet"
52
+ * where "pet"."owner_id" = "person"."id"
53
+ * order by "pet"."name"
54
+ * ) as "agg"
55
+ * ) as "pets"
56
+ * from "person"
57
+ * ```
58
+ */
59
+ function jsonArrayFrom(expr) {
60
+ return (0, sql_js_1.sql) `(select coalesce(json_group_array(json_object(${sql_js_1.sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'agg'))})), '[]') from ${expr} as agg)`;
61
+ }
62
+ exports.jsonArrayFrom = jsonArrayFrom;
63
+ /**
64
+ * A SQLite helper for turning a subquery into a JSON object.
65
+ *
66
+ * The subquery must only return one row.
67
+ *
68
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
69
+ * Otherwise the nested selections will be returned as JSON strings.
70
+ *
71
+ * The plugin can be installed like this:
72
+ *
73
+ * ```ts
74
+ * const db = new Kysely({
75
+ * dialect: new SqliteDialect(config),
76
+ * plugins: [new ParseJSONResultsPlugin()]
77
+ * })
78
+ * ```
79
+ *
80
+ * ### Examples
81
+ *
82
+ * ```ts
83
+ * const result = await db
84
+ * .selectFrom('person')
85
+ * .select((eb) => [
86
+ * 'id',
87
+ * jsonObjectFrom(
88
+ * eb.selectFrom('pet')
89
+ * .select(['pet.id as pet_id', 'pet.name'])
90
+ * .whereRef('pet.owner_id', '=', 'person.id')
91
+ * .where('pet.is_favorite', '=', true)
92
+ * ).as('favorite_pet')
93
+ * ])
94
+ * .execute()
95
+ *
96
+ * result[0].id
97
+ * result[0].favorite_pet.pet_id
98
+ * result[0].favorite_pet.name
99
+ * ```
100
+ *
101
+ * The generated SQL (SQLite):
102
+ *
103
+ * ```sql
104
+ * select "id", (
105
+ * select json_object(
106
+ * 'pet_id', "obj"."pet_id",
107
+ * 'name', "obj"."name"
108
+ * ) from (
109
+ * select "pet"."id" as "pet_id", "pet"."name"
110
+ * from "pet"
111
+ * where "pet"."owner_id" = "person"."id"
112
+ * and "pet"."is_favorite" = ?
113
+ * ) as obj
114
+ * ) as "favorite_pet"
115
+ * from "person";
116
+ * ```
117
+ */
118
+ function jsonObjectFrom(expr) {
119
+ return (0, sql_js_1.sql) `(select json_object(${sql_js_1.sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'obj'))}) from ${expr} as obj)`;
120
+ }
121
+ exports.jsonObjectFrom = jsonObjectFrom;
122
+ /**
123
+ * The SQLite `json_object` function.
124
+ *
125
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
126
+ * Otherwise the nested selections will be returned as JSON strings.
127
+ *
128
+ * The plugin can be installed like this:
129
+ *
130
+ * ```ts
131
+ * const db = new Kysely({
132
+ * dialect: new SqliteDialect(config),
133
+ * plugins: [new ParseJSONResultsPlugin()]
134
+ * })
135
+ * ```
136
+ *
137
+ * ### Examples
138
+ *
139
+ * ```ts
140
+ * const result = await db
141
+ * .selectFrom('person')
142
+ * .select((eb) => [
143
+ * 'id',
144
+ * jsonBuildObject({
145
+ * first: eb.ref('first_name'),
146
+ * last: eb.ref('last_name'),
147
+ * full: sql<string>`first_name || ' ' || last_name`
148
+ * }).as('name')
149
+ * ])
150
+ * .execute()
151
+ *
152
+ * result[0].id
153
+ * result[0].name.first
154
+ * result[0].name.last
155
+ * result[0].name.full
156
+ * ```
157
+ *
158
+ * The generated SQL (SQLite):
159
+ *
160
+ * ```sql
161
+ * select "id", json_object(
162
+ * 'first', first_name,
163
+ * 'last', last_name,
164
+ * 'full', "first_name" || ' ' || "last_name"
165
+ * ) as "name"
166
+ * from "person"
167
+ * ```
168
+ */
169
+ function jsonBuildObject(obj) {
170
+ return (0, sql_js_1.sql) `json_object(${sql_js_1.sql.join(Object.keys(obj).flatMap((k) => [sql_js_1.sql.lit(k), obj[k]]))})`;
171
+ }
172
+ exports.jsonBuildObject = jsonBuildObject;
173
+ function getSqliteJsonObjectArgs(node, table) {
174
+ try {
175
+ return (0, json_object_args_js_1.getJsonObjectArgs)(node, table);
176
+ }
177
+ catch {
178
+ 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.');
179
+ }
180
+ }
@@ -170,6 +170,7 @@ 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';
@@ -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/cjs/index.js CHANGED
@@ -188,6 +188,7 @@ __exportStar(require("./operation-node/json-reference-node.js"), exports);
188
188
  __exportStar(require("./operation-node/json-path-leg-node.js"), exports);
189
189
  __exportStar(require("./operation-node/json-path-node.js"), exports);
190
190
  __exportStar(require("./operation-node/json-operator-chain-node.js"), exports);
191
+ __exportStar(require("./operation-node/tuple-node.js"), exports);
191
192
  __exportStar(require("./util/column-type.js"), exports);
192
193
  __exportStar(require("./util/compilable.js"), exports);
193
194
  __exportStar(require("./util/explainable.js"), exports);
@@ -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;
@@ -42,7 +42,7 @@ const with_schema_plugin_js_1 = require("./plugin/with-schema/with-schema-plugin
42
42
  * id: Generated<number>
43
43
  * owner_id: number
44
44
  * name: string
45
- * species 'cat' | 'dog'
45
+ * species: 'cat' | 'dog'
46
46
  * }
47
47
  *
48
48
  * 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 {};
@@ -16,4 +16,10 @@ exports.CommonTableExpressionNode = (0, object_utils_js_1.freeze)({
16
16
  expression,
17
17
  });
18
18
  },
19
+ cloneWith(node, props) {
20
+ return (0, object_utils_js_1.freeze)({
21
+ ...node,
22
+ ...props,
23
+ });
24
+ },
19
25
  });
@@ -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
  }>;
@@ -19,12 +19,12 @@ exports.DeleteQueryNode = (0, object_utils_js_1.freeze)({
19
19
  ...(withNode && { with: withNode }),
20
20
  });
21
21
  },
22
- cloneWithOrderByItem(deleteNode, item) {
22
+ cloneWithOrderByItems(deleteNode, items) {
23
23
  return (0, object_utils_js_1.freeze)({
24
24
  ...deleteNode,
25
25
  orderBy: deleteNode.orderBy
26
- ? order_by_node_js_1.OrderByNode.cloneWithItem(deleteNode.orderBy, item)
27
- : order_by_node_js_1.OrderByNode.create(item),
26
+ ? order_by_node_js_1.OrderByNode.cloneWithItems(deleteNode.orderBy, items)
27
+ : order_by_node_js_1.OrderByNode.create(items),
28
28
  });
29
29
  },
30
30
  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;
@@ -120,6 +120,7 @@ class OperationNodeTransformer {
120
120
  JSONPathNode: this.transformJSONPath.bind(this),
121
121
  JSONPathLegNode: this.transformJSONPathLeg.bind(this),
122
122
  JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
123
+ TupleNode: this.transformTuple.bind(this),
123
124
  });
124
125
  transformNode(node) {
125
126
  if (!node) {
@@ -491,6 +492,7 @@ class OperationNodeTransformer {
491
492
  return (0, require_all_props_js_1.requireAllProps)({
492
493
  kind: 'CommonTableExpressionNode',
493
494
  name: this.transformNode(node.name),
495
+ materialized: node.materialized,
494
496
  expression: this.transformNode(node.expression),
495
497
  });
496
498
  }
@@ -757,6 +759,12 @@ class OperationNodeTransformer {
757
759
  values: this.transformNodeList(node.values),
758
760
  });
759
761
  }
762
+ transformTuple(node) {
763
+ return (0, require_all_props_js_1.requireAllProps)({
764
+ kind: 'TupleNode',
765
+ values: this.transformNodeList(node.values),
766
+ });
767
+ }
760
768
  transformDataType(node) {
761
769
  // An Object.freezed leaf node. No need to clone.
762
770
  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
  }
@@ -93,6 +93,7 @@ class OperationNodeVisitor {
93
93
  JSONPathNode: this.visitJSONPath.bind(this),
94
94
  JSONPathLegNode: this.visitJSONPathLeg.bind(this),
95
95
  JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
96
+ TupleNode: this.visitTuple.bind(this),
96
97
  });
97
98
  visitNode = (node) => {
98
99
  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];
@@ -22,6 +22,7 @@ exports.COMPARISON_OPERATORS = [
22
22
  'not ilike',
23
23
  '@>',
24
24
  '<@',
25
+ '&&',
25
26
  '?',
26
27
  '?&',
27
28
  '!<',
@@ -63,6 +64,8 @@ exports.OPERATORS = [
63
64
  ...exports.BINARY_OPERATORS,
64
65
  ...exports.JSON_OPERATORS,
65
66
  ...exports.UNARY_OPERATORS,
67
+ 'between',
68
+ 'between symmetric',
66
69
  ];
67
70
  /**
68
71
  * @internal
@@ -9,6 +9,6 @@ export interface OrderByNode extends OperationNode {
9
9
  */
10
10
  export declare const OrderByNode: Readonly<{
11
11
  is(node: OperationNode): node is OrderByNode;
12
- create(item: OrderByItemNode): OrderByNode;
13
- cloneWithItem(orderBy: OrderByNode, item: OrderByItemNode): OrderByNode;
12
+ create(items: ReadonlyArray<OrderByItemNode>): OrderByNode;
13
+ cloneWithItems(orderBy: OrderByNode, items: ReadonlyArray<OrderByItemNode>): OrderByNode;
14
14
  }>;