kysely 0.26.3 → 0.27.1

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 (216) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  3. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  4. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  6. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  10. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  12. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  14. package/dist/cjs/dialect/mssql/mssql-introspector.js +99 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  16. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  18. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  22. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  23. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  24. package/dist/cjs/driver/driver.d.ts +1 -1
  25. package/dist/cjs/driver/driver.js +1 -0
  26. package/dist/cjs/driver/runtime-driver.js +5 -1
  27. package/dist/cjs/driver/single-connection-provider.js +7 -8
  28. package/dist/cjs/expression/expression-builder.d.ts +66 -75
  29. package/dist/cjs/expression/expression-builder.js +8 -17
  30. package/dist/cjs/expression/expression-wrapper.d.ts +21 -11
  31. package/dist/cjs/expression/expression-wrapper.js +12 -0
  32. package/dist/cjs/helpers/mssql.d.ts +152 -0
  33. package/dist/cjs/helpers/mssql.js +160 -0
  34. package/dist/cjs/index.d.ts +7 -1
  35. package/dist/cjs/index.js +6 -0
  36. package/dist/cjs/migration/migrator.js +12 -16
  37. package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
  38. package/dist/cjs/operation-node/add-index-node.js +31 -0
  39. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
  40. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  41. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  42. package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
  43. package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/limit-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/limit-node.js +1 -2
  47. package/dist/cjs/operation-node/offset-node.d.ts +2 -3
  48. package/dist/cjs/operation-node/offset-node.js +1 -2
  49. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.js +19 -0
  51. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  52. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  53. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  55. package/dist/cjs/operation-node/operator-node.js +2 -0
  56. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -1
  57. package/dist/cjs/operation-node/select-modifier-node.js +2 -1
  58. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  59. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  60. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  61. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  62. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  63. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  64. package/dist/cjs/parser/update-set-parser.js +13 -3
  65. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +21 -4
  66. package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
  67. package/dist/cjs/query-builder/case-builder.d.ts +6 -5
  68. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -7
  69. package/dist/cjs/query-builder/delete-query-builder.js +4 -3
  70. package/dist/cjs/query-builder/function-module.d.ts +96 -25
  71. package/dist/cjs/query-builder/function-module.js +17 -3
  72. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  73. package/dist/cjs/query-builder/insert-query-builder.d.ts +34 -12
  74. package/dist/cjs/query-builder/insert-query-builder.js +16 -5
  75. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  76. package/dist/cjs/query-builder/insert-result.js +8 -1
  77. package/dist/cjs/query-builder/json-path-builder.d.ts +5 -3
  78. package/dist/cjs/query-builder/json-path-builder.js +9 -3
  79. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  80. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  81. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +49 -31
  83. package/dist/cjs/query-builder/select-query-builder.js +12 -10
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +23 -7
  85. package/dist/cjs/query-builder/update-query-builder.js +4 -4
  86. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  87. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  88. package/dist/cjs/query-compiler/default-query-compiler.js +73 -12
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
  90. package/dist/cjs/raw-builder/raw-builder.js +3 -0
  91. package/dist/cjs/raw-builder/sql.js +9 -2
  92. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  93. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  94. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  95. package/dist/cjs/schema/alter-table-builder.js +59 -2
  96. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  97. package/dist/cjs/schema/column-definition-builder.js +27 -0
  98. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  99. package/dist/cjs/schema/create-index-builder.js +30 -0
  100. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  101. package/dist/cjs/schema/create-table-builder.js +38 -3
  102. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  103. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +2 -2
  106. package/dist/cjs/util/object-utils.js +1 -1
  107. package/dist/cjs/util/type-utils.d.ts +27 -19
  108. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  109. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  110. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  112. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  116. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  118. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  120. package/dist/esm/dialect/mssql/mssql-introspector.js +96 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  122. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  124. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  125. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  127. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  128. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  129. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  130. package/dist/esm/driver/driver.d.ts +1 -1
  131. package/dist/esm/driver/driver.js +1 -0
  132. package/dist/esm/driver/runtime-driver.js +5 -1
  133. package/dist/esm/driver/single-connection-provider.js +7 -8
  134. package/dist/esm/expression/expression-builder.d.ts +66 -75
  135. package/dist/esm/expression/expression-builder.js +10 -19
  136. package/dist/esm/expression/expression-wrapper.d.ts +21 -11
  137. package/dist/esm/expression/expression-wrapper.js +12 -0
  138. package/dist/esm/helpers/mssql.d.ts +152 -0
  139. package/dist/esm/helpers/mssql.js +155 -0
  140. package/dist/esm/index.d.ts +7 -1
  141. package/dist/esm/index.js +6 -0
  142. package/dist/esm/migration/migrator.js +12 -16
  143. package/dist/esm/operation-node/add-index-node.d.ts +21 -0
  144. package/dist/esm/operation-node/add-index-node.js +29 -0
  145. package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
  146. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  147. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  148. package/dist/esm/operation-node/create-index-node.d.ts +1 -0
  149. package/dist/esm/operation-node/create-table-node.d.ts +1 -0
  150. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  151. package/dist/esm/operation-node/limit-node.d.ts +2 -3
  152. package/dist/esm/operation-node/limit-node.js +1 -2
  153. package/dist/esm/operation-node/offset-node.d.ts +2 -3
  154. package/dist/esm/operation-node/offset-node.js +1 -2
  155. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  156. package/dist/esm/operation-node/operation-node-transformer.js +19 -0
  157. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  158. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  159. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  160. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  161. package/dist/esm/operation-node/operator-node.js +2 -0
  162. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -1
  163. package/dist/esm/operation-node/select-modifier-node.js +2 -1
  164. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  165. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  166. package/dist/esm/parser/binary-operation-parser.js +1 -1
  167. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  168. package/dist/esm/parser/reference-parser.d.ts +2 -1
  169. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  170. package/dist/esm/parser/update-set-parser.js +10 -1
  171. package/dist/esm/query-builder/aggregate-function-builder.d.ts +21 -4
  172. package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
  173. package/dist/esm/query-builder/case-builder.d.ts +6 -5
  174. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -7
  175. package/dist/esm/query-builder/delete-query-builder.js +4 -3
  176. package/dist/esm/query-builder/function-module.d.ts +96 -25
  177. package/dist/esm/query-builder/function-module.js +17 -3
  178. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  179. package/dist/esm/query-builder/insert-query-builder.d.ts +34 -12
  180. package/dist/esm/query-builder/insert-query-builder.js +17 -6
  181. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  182. package/dist/esm/query-builder/insert-result.js +8 -1
  183. package/dist/esm/query-builder/json-path-builder.d.ts +5 -3
  184. package/dist/esm/query-builder/json-path-builder.js +9 -3
  185. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  186. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  187. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  188. package/dist/esm/query-builder/select-query-builder.d.ts +49 -31
  189. package/dist/esm/query-builder/select-query-builder.js +13 -11
  190. package/dist/esm/query-builder/update-query-builder.d.ts +23 -7
  191. package/dist/esm/query-builder/update-query-builder.js +5 -5
  192. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  194. package/dist/esm/query-compiler/default-query-compiler.js +73 -12
  195. package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
  196. package/dist/esm/raw-builder/raw-builder.js +3 -0
  197. package/dist/esm/raw-builder/sql.js +9 -2
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  199. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  200. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  201. package/dist/esm/schema/alter-table-builder.js +59 -2
  202. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  203. package/dist/esm/schema/column-definition-builder.js +27 -0
  204. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  205. package/dist/esm/schema/create-index-builder.js +30 -0
  206. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  207. package/dist/esm/schema/create-table-builder.js +38 -3
  208. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  209. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +2 -2
  212. package/dist/esm/util/object-utils.js +1 -1
  213. package/dist/esm/util/type-utils.d.ts +27 -19
  214. package/helpers/mssql.d.ts +1 -0
  215. package/helpers/mssql.js +1 -0
  216. package/package.json +15 -10
@@ -0,0 +1,155 @@
1
+ /// <reference types="./mssql.d.ts" />
2
+ import { sql } from '../raw-builder/sql.js';
3
+ /**
4
+ * An MS SQL Server helper for aggregating a subquery into a JSON array.
5
+ *
6
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
7
+ * Otherwise the nested selections will be returned as JSON strings.
8
+ *
9
+ * The plugin can be installed like this:
10
+ *
11
+ * ```ts
12
+ * const db = new Kysely({
13
+ * dialect: new MssqlDialect(config),
14
+ * plugins: [new ParseJSONResultsPlugin()]
15
+ * })
16
+ * ```
17
+ *
18
+ * ### Examples
19
+ *
20
+ * ```ts
21
+ * const result = await db
22
+ * .selectFrom('person')
23
+ * .select((eb) => [
24
+ * 'id',
25
+ * jsonArrayFrom(
26
+ * eb.selectFrom('pet')
27
+ * .select(['pet.id as pet_id', 'pet.name'])
28
+ * .whereRef('pet.owner_id', '=', 'person.id')
29
+ * .orderBy('pet.name')
30
+ * .modifyEnd(sql`offset 0 rows`)
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 (MS SQL Server):
41
+ *
42
+ * ```sql
43
+ * select "id", (
44
+ * select coalesce((select * from (
45
+ * select "pet"."id" as "pet_id", "pet"."name"
46
+ * from "pet"
47
+ * where "pet"."owner_id" = "person"."id"
48
+ * order by "pet"."name"
49
+ * offset 0 rows
50
+ * ) as "agg" for json path, include_null_values), '[]')
51
+ * ) as "pets"
52
+ * from "person"
53
+ * ```
54
+ */
55
+ export function jsonArrayFrom(expr) {
56
+ return sql `coalesce((select * from ${expr} as agg for json path, include_null_values), '[]')`;
57
+ }
58
+ /**
59
+ * An MS SQL Server helper for turning a subquery into a JSON object.
60
+ *
61
+ * The subquery must only return one row.
62
+ *
63
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
64
+ * Otherwise the nested selections will be returned as JSON strings.
65
+ *
66
+ * The plugin can be installed like this:
67
+ *
68
+ * ```ts
69
+ * const db = new Kysely({
70
+ * dialect: new MssqlDialect(config),
71
+ * plugins: [new ParseJSONResultsPlugin()]
72
+ * })
73
+ * ```
74
+ *
75
+ * ### Examples
76
+ *
77
+ * ```ts
78
+ * const result = await db
79
+ * .selectFrom('person')
80
+ * .select((eb) => [
81
+ * 'id',
82
+ * jsonObjectFrom(
83
+ * eb.selectFrom('pet')
84
+ * .select(['pet.id as pet_id', 'pet.name'])
85
+ * .whereRef('pet.owner_id', '=', 'person.id')
86
+ * .where('pet.is_favorite', '=', 1)
87
+ * ).as('favorite_pet')
88
+ * ])
89
+ * .execute()
90
+ *
91
+ * result[0].id
92
+ * result[0].favorite_pet.pet_id
93
+ * result[0].favorite_pet.name
94
+ * ```
95
+ *
96
+ * The generated SQL (MS SQL Server):
97
+ *
98
+ * ```sql
99
+ * select "id", (
100
+ * select * from (
101
+ * select "pet"."id" as "pet_id", "pet"."name"
102
+ * from "pet"
103
+ * where "pet"."owner_id" = "person"."id"
104
+ * and "pet"."is_favorite" = @1
105
+ * ) as "agg" for json path, include_null_values, without_array_wrapper
106
+ * ) as "favorite_pet"
107
+ * from "person"
108
+ * ```
109
+ */
110
+ export function jsonObjectFrom(expr) {
111
+ return sql `(select * from ${expr} as agg for json path, include_null_values, without_array_wrapper)`;
112
+ }
113
+ /**
114
+ * The MS SQL Server `json_query` function, single argument variant.
115
+ *
116
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
117
+ * Otherwise the nested selections will be returned as JSON strings.
118
+ *
119
+ * The plugin can be installed like this:
120
+ *
121
+ * ```ts
122
+ * const db = new Kysely({
123
+ * dialect: new MssqlDialect(config),
124
+ * plugins: [new ParseJSONResultsPlugin()]
125
+ * })
126
+ * ```
127
+ *
128
+ * ### Examples
129
+ *
130
+ * ```ts
131
+ * const result = await db
132
+ * .selectFrom('person')
133
+ * .select((eb) => [
134
+ * 'id',
135
+ * jsonBuildObject({
136
+ * first: eb.ref('first_name'),
137
+ * last: eb.ref('last_name'),
138
+ * full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
139
+ * }).as('name')
140
+ * ])
141
+ * .execute()
142
+ * ```
143
+ *
144
+ * The generated SQL (MS SQL Server):
145
+ *
146
+ * ```sql
147
+ * select "id", json_query(
148
+ * '{"first":"'+"first_name"+',"last":"'+"last_name"+',"full":"'+concat("first_name", ' ', "last_name")+'"}'
149
+ * ) as "name"
150
+ * from "person"
151
+ * ```
152
+ */
153
+ export function jsonBuildObject(obj) {
154
+ return sql `json_query('{${sql.join(Object.keys(obj).map((k) => sql `"${sql.raw(k)}":"'+${obj[k]}+'"`), sql `,`)}}')`;
155
+ }
@@ -72,6 +72,12 @@ export * from './dialect/postgres/postgres-dialect.js';
72
72
  export * from './dialect/sqlite/sqlite-query-compiler.js';
73
73
  export * from './dialect/sqlite/sqlite-introspector.js';
74
74
  export * from './dialect/sqlite/sqlite-adapter.js';
75
+ export * from './dialect/mssql/mssql-adapter.js';
76
+ export * from './dialect/mssql/mssql-dialect-config.js';
77
+ export * from './dialect/mssql/mssql-dialect.js';
78
+ export * from './dialect/mssql/mssql-driver.js';
79
+ export * from './dialect/mssql/mssql-introspector.js';
80
+ export * from './dialect/mssql/mssql-query-compiler.js';
75
81
  export * from './query-compiler/default-query-compiler.js';
76
82
  export * from './query-compiler/query-compiler.js';
77
83
  export * from './migration/migrator.js';
@@ -176,7 +182,7 @@ export * from './util/compilable.js';
176
182
  export * from './util/explainable.js';
177
183
  export * from './util/streamable.js';
178
184
  export * from './util/log.js';
179
- export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
185
+ export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, NotNull, } from './util/type-utils.js';
180
186
  export * from './util/infer-result.js';
181
187
  export { logOnce } from './util/log-once.js';
182
188
  export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
package/dist/esm/index.js CHANGED
@@ -73,6 +73,12 @@ export * from './dialect/postgres/postgres-dialect.js';
73
73
  export * from './dialect/sqlite/sqlite-query-compiler.js';
74
74
  export * from './dialect/sqlite/sqlite-introspector.js';
75
75
  export * from './dialect/sqlite/sqlite-adapter.js';
76
+ export * from './dialect/mssql/mssql-adapter.js';
77
+ export * from './dialect/mssql/mssql-dialect-config.js';
78
+ export * from './dialect/mssql/mssql-dialect.js';
79
+ export * from './dialect/mssql/mssql-driver.js';
80
+ export * from './dialect/mssql/mssql-introspector.js';
81
+ export * from './dialect/mssql/mssql-query-compiler.js';
76
82
  export * from './query-compiler/default-query-compiler.js';
77
83
  export * from './query-compiler/query-compiler.js';
78
84
  export * from './migration/migrator.js';
@@ -218,10 +218,7 @@ export class Migrator {
218
218
  }
219
219
  if (!(await this.#doesSchemaExists())) {
220
220
  try {
221
- await this.#props.db.schema
222
- .createSchema(this.#migrationTableSchema)
223
- .ifNotExists()
224
- .execute();
221
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
225
222
  }
226
223
  catch (error) {
227
224
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema`
@@ -237,20 +234,15 @@ export class Migrator {
237
234
  if (!(await this.#doesTableExists(this.#migrationTable))) {
238
235
  try {
239
236
  if (this.#migrationTableSchema) {
240
- await this.#props.db.schema
241
- .createSchema(this.#migrationTableSchema)
242
- .ifNotExists()
243
- .execute();
237
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
244
238
  }
245
- await this.#props.db.schema
239
+ await this.#createIfNotExists(this.#props.db.schema
246
240
  .withPlugin(this.#schemaPlugin)
247
241
  .createTable(this.#migrationTable)
248
- .ifNotExists()
249
242
  .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey())
250
243
  // The migration run time as ISO string. This is not a real date type as we
251
244
  // can't know which data type is supported by all future dialects.
252
- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())
253
- .execute();
245
+ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()));
254
246
  }
255
247
  catch (error) {
256
248
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -265,13 +257,11 @@ export class Migrator {
265
257
  async #ensureMigrationLockTableExists() {
266
258
  if (!(await this.#doesTableExists(this.#migrationLockTable))) {
267
259
  try {
268
- await this.#props.db.schema
260
+ await this.#createIfNotExists(this.#props.db.schema
269
261
  .withPlugin(this.#schemaPlugin)
270
262
  .createTable(this.#migrationLockTable)
271
- .ifNotExists()
272
263
  .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey())
273
- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))
274
- .execute();
264
+ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)));
275
265
  }
276
266
  catch (error) {
277
267
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -479,6 +469,12 @@ export class Migrator {
479
469
  }
480
470
  return { results };
481
471
  }
472
+ async #createIfNotExists(qb) {
473
+ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) {
474
+ qb = qb.ifNotExists();
475
+ }
476
+ await qb.execute();
477
+ }
482
478
  }
483
479
  class MigrationResultSetError extends Error {
484
480
  #resultSet;
@@ -0,0 +1,21 @@
1
+ import { IdentifierNode } from './identifier-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ import { RawNode } from './raw-node.js';
4
+ export type AddIndexNodeProps = Omit<AddIndexNode, 'kind' | 'name'>;
5
+ export interface AddIndexNode extends OperationNode {
6
+ readonly kind: 'AddIndexNode';
7
+ readonly name: IdentifierNode;
8
+ readonly columns?: OperationNode[];
9
+ readonly unique?: boolean;
10
+ readonly using?: RawNode;
11
+ readonly ifNotExists?: boolean;
12
+ }
13
+ /**
14
+ * @internal
15
+ */
16
+ export declare const AddIndexNode: Readonly<{
17
+ is(node: OperationNode): node is AddIndexNode;
18
+ create(name: string): AddIndexNode;
19
+ cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode;
20
+ cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode;
21
+ }>;
@@ -0,0 +1,29 @@
1
+ /// <reference types="./add-index-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { IdentifierNode } from './identifier-node.js';
4
+ /**
5
+ * @internal
6
+ */
7
+ export const AddIndexNode = freeze({
8
+ is(node) {
9
+ return node.kind === 'AddIndexNode';
10
+ },
11
+ create(name) {
12
+ return freeze({
13
+ kind: 'AddIndexNode',
14
+ name: IdentifierNode.create(name)
15
+ });
16
+ },
17
+ cloneWith(node, props) {
18
+ return freeze({
19
+ ...node,
20
+ ...props,
21
+ });
22
+ },
23
+ cloneWithColumns(node, columns) {
24
+ return freeze({
25
+ ...node,
26
+ columns: [...(node.columns || []), ...columns],
27
+ });
28
+ },
29
+ });
@@ -8,7 +8,9 @@ import { AlterColumnNode } from './alter-column-node.js';
8
8
  import { AddConstraintNode } from './add-constraint-node.js';
9
9
  import { DropConstraintNode } from './drop-constraint-node.js';
10
10
  import { ModifyColumnNode } from './modify-column-node.js';
11
- export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint'>;
11
+ import { DropIndexNode } from './drop-index-node.js';
12
+ import { AddIndexNode } from './add-index-node.js';
13
+ export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint' | 'addIndex' | 'dropIndex'>;
12
14
  export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode;
13
15
  export interface AlterTableNode extends OperationNode {
14
16
  readonly kind: 'AlterTableNode';
@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode {
18
20
  readonly columnAlterations?: ReadonlyArray<AlterTableColumnAlterationNode>;
19
21
  readonly addConstraint?: AddConstraintNode;
20
22
  readonly dropConstraint?: DropConstraintNode;
23
+ readonly addIndex?: AddIndexNode;
24
+ readonly dropIndex?: DropIndexNode;
21
25
  }
22
26
  /**
23
27
  * @internal
@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode {
20
20
  readonly unsigned?: boolean;
21
21
  readonly frontModifiers?: ReadonlyArray<OperationNode>;
22
22
  readonly endModifiers?: ReadonlyArray<OperationNode>;
23
+ readonly nullsNotDistinct?: boolean;
23
24
  }
24
25
  /**
25
26
  * @internal
@@ -1,8 +1,7 @@
1
- import { ColumnNode } from './column-node.js';
2
1
  import { OperationNode } from './operation-node.js';
3
2
  export interface ColumnUpdateNode extends OperationNode {
4
3
  readonly kind: 'ColumnUpdateNode';
5
- readonly column: ColumnNode;
4
+ readonly column: OperationNode;
6
5
  readonly value: OperationNode;
7
6
  }
8
7
  /**
@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode {
10
9
  */
11
10
  export declare const ColumnUpdateNode: Readonly<{
12
11
  is(node: OperationNode): node is ColumnUpdateNode;
13
- create(column: ColumnNode, value: OperationNode): ColumnUpdateNode;
12
+ create(column: OperationNode, value: OperationNode): ColumnUpdateNode;
14
13
  }>;
@@ -14,6 +14,7 @@ export interface CreateIndexNode extends OperationNode {
14
14
  readonly using?: RawNode;
15
15
  readonly ifNotExists?: boolean;
16
16
  readonly where?: WhereNode;
17
+ readonly nullsNotDistinct?: boolean;
17
18
  }
18
19
  /**
19
20
  * @internal
@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode {
16
16
  readonly onCommit?: OnCommitAction;
17
17
  readonly frontModifiers?: ReadonlyArray<OperationNode>;
18
18
  readonly endModifiers?: ReadonlyArray<OperationNode>;
19
+ readonly selectQuery?: OperationNode;
19
20
  }
20
21
  /**
21
22
  * @internal
@@ -19,6 +19,7 @@ export interface InsertQueryNode extends OperationNode {
19
19
  readonly ignore?: boolean;
20
20
  readonly replace?: boolean;
21
21
  readonly explain?: ExplainNode;
22
+ readonly defaultValues?: boolean;
22
23
  }
23
24
  /**
24
25
  * @internal
@@ -1,13 +1,12 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- import { ValueNode } from './value-node.js';
3
2
  export interface LimitNode extends OperationNode {
4
3
  readonly kind: 'LimitNode';
5
- readonly limit: ValueNode;
4
+ readonly limit: OperationNode;
6
5
  }
7
6
  /**
8
7
  * @internal
9
8
  */
10
9
  export declare const LimitNode: Readonly<{
11
10
  is(node: OperationNode): node is LimitNode;
12
- create(limit: number): LimitNode;
11
+ create(limit: OperationNode): LimitNode;
13
12
  }>;
@@ -1,6 +1,5 @@
1
1
  /// <reference types="./limit-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { ValueNode } from './value-node.js';
4
3
  /**
5
4
  * @internal
6
5
  */
@@ -11,7 +10,7 @@ export const LimitNode = freeze({
11
10
  create(limit) {
12
11
  return freeze({
13
12
  kind: 'LimitNode',
14
- limit: ValueNode.create(limit),
13
+ limit,
15
14
  });
16
15
  },
17
16
  });
@@ -1,13 +1,12 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- import { ValueNode } from './value-node.js';
3
2
  export interface OffsetNode extends OperationNode {
4
3
  readonly kind: 'OffsetNode';
5
- readonly offset: ValueNode;
4
+ readonly offset: OperationNode;
6
5
  }
7
6
  /**
8
7
  * @internal
9
8
  */
10
9
  export declare const OffsetNode: Readonly<{
11
10
  is(node: OperationNode): node is OffsetNode;
12
- create(offset: number): OffsetNode;
11
+ create(offset: OperationNode): OffsetNode;
13
12
  }>;
@@ -1,6 +1,5 @@
1
1
  /// <reference types="./offset-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { ValueNode } from './value-node.js';
4
3
  /**
5
4
  * @internal
6
5
  */
@@ -11,7 +10,7 @@ export const OffsetNode = freeze({
11
10
  create(offset) {
12
11
  return freeze({
13
12
  kind: 'OffsetNode',
14
- offset: ValueNode.create(offset),
13
+ offset,
15
14
  });
16
15
  },
17
16
  });
@@ -85,6 +85,7 @@ 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 { AddIndexNode } from './add-index-node.js';
88
89
  /**
89
90
  * Transforms an operation node tree into another one.
90
91
  *
@@ -199,6 +200,7 @@ export declare class OperationNodeTransformer {
199
200
  protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
200
201
  protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
201
202
  protected transformTuple(node: TupleNode): TupleNode;
203
+ protected transformAddIndex(node: AddIndexNode): AddIndexNode;
202
204
  protected transformDataType(node: DataTypeNode): DataTypeNode;
203
205
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
204
206
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;
@@ -119,6 +119,7 @@ export class OperationNodeTransformer {
119
119
  JSONPathLegNode: this.transformJSONPathLeg.bind(this),
120
120
  JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
121
121
  TupleNode: this.transformTuple.bind(this),
122
+ AddIndexNode: this.transformAddIndex.bind(this),
122
123
  });
123
124
  transformNode(node) {
124
125
  if (!node) {
@@ -256,6 +257,7 @@ export class OperationNodeTransformer {
256
257
  ignore: node.ignore,
257
258
  replace: node.replace,
258
259
  explain: this.transformNode(node.explain),
260
+ defaultValues: node.defaultValues,
259
261
  });
260
262
  }
261
263
  transformValues(node) {
@@ -295,6 +297,7 @@ export class OperationNodeTransformer {
295
297
  onCommit: node.onCommit,
296
298
  frontModifiers: this.transformNodeList(node.frontModifiers),
297
299
  endModifiers: this.transformNodeList(node.endModifiers),
300
+ selectQuery: this.transformNode(node.selectQuery),
298
301
  });
299
302
  }
300
303
  transformColumnDefinition(node) {
@@ -313,6 +316,7 @@ export class OperationNodeTransformer {
313
316
  generated: this.transformNode(node.generated),
314
317
  frontModifiers: this.transformNodeList(node.frontModifiers),
315
318
  endModifiers: this.transformNodeList(node.endModifiers),
319
+ nullsNotDistinct: node.nullsNotDistinct,
316
320
  });
317
321
  }
318
322
  transformAddColumn(node) {
@@ -414,6 +418,7 @@ export class OperationNodeTransformer {
414
418
  using: this.transformNode(node.using),
415
419
  ifNotExists: node.ifNotExists,
416
420
  where: this.transformNode(node.where),
421
+ nullsNotDistinct: node.nullsNotDistinct,
417
422
  });
418
423
  }
419
424
  transformList(node) {
@@ -443,6 +448,7 @@ export class OperationNodeTransformer {
443
448
  kind: 'UniqueConstraintNode',
444
449
  columns: this.transformNodeList(node.columns),
445
450
  name: this.transformNode(node.name),
451
+ nullsNotDistinct: node.nullsNotDistinct,
446
452
  });
447
453
  }
448
454
  transformForeignKeyConstraint(node) {
@@ -531,6 +537,8 @@ export class OperationNodeTransformer {
531
537
  columnAlterations: this.transformNodeList(node.columnAlterations),
532
538
  addConstraint: this.transformNode(node.addConstraint),
533
539
  dropConstraint: this.transformNode(node.dropConstraint),
540
+ addIndex: this.transformNode(node.addIndex),
541
+ dropIndex: this.transformNode(node.dropIndex),
534
542
  });
535
543
  }
536
544
  transformDropColumn(node) {
@@ -626,6 +634,7 @@ export class OperationNodeTransformer {
626
634
  kind: 'SelectModifierNode',
627
635
  modifier: node.modifier,
628
636
  rawModifier: this.transformNode(node.rawModifier),
637
+ of: this.transformNodeList(node.of),
629
638
  });
630
639
  }
631
640
  transformCreateType(node) {
@@ -763,6 +772,16 @@ export class OperationNodeTransformer {
763
772
  values: this.transformNodeList(node.values),
764
773
  });
765
774
  }
775
+ transformAddIndex(node) {
776
+ return requireAllProps({
777
+ kind: 'AddIndexNode',
778
+ name: this.transformNode(node.name),
779
+ columns: this.transformNodeList(node.columns),
780
+ unique: node.unique,
781
+ using: this.transformNode(node.using),
782
+ ifNotExists: node.ifNotExists,
783
+ });
784
+ }
766
785
  transformDataType(node) {
767
786
  // An Object.freezed leaf node. No need to clone.
768
787
  return node;
@@ -85,6 +85,7 @@ 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 { AddIndexNode } from './add-index-node.js';
88
89
  export declare abstract class OperationNodeVisitor {
89
90
  #private;
90
91
  protected readonly nodeStack: OperationNode[];
@@ -176,4 +177,5 @@ export declare abstract class OperationNodeVisitor {
176
177
  protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
177
178
  protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
178
179
  protected abstract visitTuple(node: TupleNode): void;
180
+ protected abstract visitAddIndex(node: AddIndexNode): void;
179
181
  }
@@ -92,6 +92,7 @@ export class OperationNodeVisitor {
92
92
  JSONPathLegNode: this.visitJSONPathLeg.bind(this),
93
93
  JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
94
94
  TupleNode: this.visitTuple.bind(this),
95
+ AddIndexNode: this.visitAddIndex.bind(this),
95
96
  });
96
97
  visitNode = (node) => {
97
98
  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';
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';
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", "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", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
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", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "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];
@@ -35,6 +35,8 @@ export const COMPARISON_OPERATORS = [
35
35
  '!!',
36
36
  '<->',
37
37
  'regexp',
38
+ 'is distinct from',
39
+ 'is not distinct from',
38
40
  ];
39
41
  export const ARITHMETIC_OPERATORS = [
40
42
  '+',
@@ -4,12 +4,13 @@ export interface SelectModifierNode extends OperationNode {
4
4
  readonly kind: 'SelectModifierNode';
5
5
  readonly modifier?: SelectModifier;
6
6
  readonly rawModifier?: OperationNode;
7
+ readonly of?: ReadonlyArray<OperationNode>;
7
8
  }
8
9
  /**
9
10
  * @internal
10
11
  */
11
12
  export declare const SelectModifierNode: Readonly<{
12
13
  is(node: OperationNode): node is SelectModifierNode;
13
- create(modifier: SelectModifier): SelectModifierNode;
14
+ create(modifier: SelectModifier, of?: ReadonlyArray<OperationNode>): SelectModifierNode;
14
15
  createWithExpression(modifier: OperationNode): SelectModifierNode;
15
16
  }>;
@@ -7,10 +7,11 @@ export const SelectModifierNode = freeze({
7
7
  is(node) {
8
8
  return node.kind === 'SelectModifierNode';
9
9
  },
10
- create(modifier) {
10
+ create(modifier, of) {
11
11
  return freeze({
12
12
  kind: 'SelectModifierNode',
13
13
  modifier,
14
+ of,
14
15
  });
15
16
  },
16
17
  createWithExpression(modifier) {