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,160 @@
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
+ /**
6
+ * An MS SQL Server 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 MssqlDialect(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
+ * .modifyEnd(sql`offset 0 rows`)
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 (MS SQL Server):
43
+ *
44
+ * ```sql
45
+ * select "id", (
46
+ * select coalesce((select * from (
47
+ * select "pet"."id" as "pet_id", "pet"."name"
48
+ * from "pet"
49
+ * where "pet"."owner_id" = "person"."id"
50
+ * order by "pet"."name"
51
+ * offset 0 rows
52
+ * ) as "agg" for json path, include_null_values), '[]')
53
+ * ) as "pets"
54
+ * from "person"
55
+ * ```
56
+ */
57
+ function jsonArrayFrom(expr) {
58
+ return (0, sql_js_1.sql) `coalesce((select * from ${expr} as agg for json path, include_null_values), '[]')`;
59
+ }
60
+ exports.jsonArrayFrom = jsonArrayFrom;
61
+ /**
62
+ * An MS SQL Server helper for turning a subquery into a JSON object.
63
+ *
64
+ * The subquery must only return one row.
65
+ *
66
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
67
+ * Otherwise the nested selections will be returned as JSON strings.
68
+ *
69
+ * The plugin can be installed like this:
70
+ *
71
+ * ```ts
72
+ * const db = new Kysely({
73
+ * dialect: new MssqlDialect(config),
74
+ * plugins: [new ParseJSONResultsPlugin()]
75
+ * })
76
+ * ```
77
+ *
78
+ * ### Examples
79
+ *
80
+ * ```ts
81
+ * const result = await db
82
+ * .selectFrom('person')
83
+ * .select((eb) => [
84
+ * 'id',
85
+ * jsonObjectFrom(
86
+ * eb.selectFrom('pet')
87
+ * .select(['pet.id as pet_id', 'pet.name'])
88
+ * .whereRef('pet.owner_id', '=', 'person.id')
89
+ * .where('pet.is_favorite', '=', 1)
90
+ * ).as('favorite_pet')
91
+ * ])
92
+ * .execute()
93
+ *
94
+ * result[0].id
95
+ * result[0].favorite_pet.pet_id
96
+ * result[0].favorite_pet.name
97
+ * ```
98
+ *
99
+ * The generated SQL (MS SQL Server):
100
+ *
101
+ * ```sql
102
+ * select "id", (
103
+ * select * from (
104
+ * select "pet"."id" as "pet_id", "pet"."name"
105
+ * from "pet"
106
+ * where "pet"."owner_id" = "person"."id"
107
+ * and "pet"."is_favorite" = @1
108
+ * ) as "agg" for json path, include_null_values, without_array_wrapper
109
+ * ) as "favorite_pet"
110
+ * from "person"
111
+ * ```
112
+ */
113
+ function jsonObjectFrom(expr) {
114
+ return (0, sql_js_1.sql) `(select * from ${expr} as agg for json path, include_null_values, without_array_wrapper)`;
115
+ }
116
+ exports.jsonObjectFrom = jsonObjectFrom;
117
+ /**
118
+ * The MS SQL Server `json_query` function, single argument variant.
119
+ *
120
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
121
+ * Otherwise the nested selections will be returned as JSON strings.
122
+ *
123
+ * The plugin can be installed like this:
124
+ *
125
+ * ```ts
126
+ * const db = new Kysely({
127
+ * dialect: new MssqlDialect(config),
128
+ * plugins: [new ParseJSONResultsPlugin()]
129
+ * })
130
+ * ```
131
+ *
132
+ * ### Examples
133
+ *
134
+ * ```ts
135
+ * const result = await db
136
+ * .selectFrom('person')
137
+ * .select((eb) => [
138
+ * 'id',
139
+ * jsonBuildObject({
140
+ * first: eb.ref('first_name'),
141
+ * last: eb.ref('last_name'),
142
+ * full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
143
+ * }).as('name')
144
+ * ])
145
+ * .execute()
146
+ * ```
147
+ *
148
+ * The generated SQL (MS SQL Server):
149
+ *
150
+ * ```sql
151
+ * select "id", json_query(
152
+ * '{"first":"'+"first_name"+',"last":"'+"last_name"+',"full":"'+concat("first_name", ' ', "last_name")+'"}'
153
+ * ) as "name"
154
+ * from "person"
155
+ * ```
156
+ */
157
+ function jsonBuildObject(obj) {
158
+ return (0, sql_js_1.sql) `json_query('{${sql_js_1.sql.join(Object.keys(obj).map((k) => (0, sql_js_1.sql) `"${sql_js_1.sql.raw(k)}":"'+${obj[k]}+'"`), (0, sql_js_1.sql) `,`)}}')`;
159
+ }
160
+ exports.jsonBuildObject = jsonBuildObject;
@@ -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/cjs/index.js CHANGED
@@ -90,6 +90,12 @@ __exportStar(require("./dialect/postgres/postgres-dialect.js"), exports);
90
90
  __exportStar(require("./dialect/sqlite/sqlite-query-compiler.js"), exports);
91
91
  __exportStar(require("./dialect/sqlite/sqlite-introspector.js"), exports);
92
92
  __exportStar(require("./dialect/sqlite/sqlite-adapter.js"), exports);
93
+ __exportStar(require("./dialect/mssql/mssql-adapter.js"), exports);
94
+ __exportStar(require("./dialect/mssql/mssql-dialect-config.js"), exports);
95
+ __exportStar(require("./dialect/mssql/mssql-dialect.js"), exports);
96
+ __exportStar(require("./dialect/mssql/mssql-driver.js"), exports);
97
+ __exportStar(require("./dialect/mssql/mssql-introspector.js"), exports);
98
+ __exportStar(require("./dialect/mssql/mssql-query-compiler.js"), exports);
93
99
  __exportStar(require("./query-compiler/default-query-compiler.js"), exports);
94
100
  __exportStar(require("./query-compiler/query-compiler.js"), exports);
95
101
  __exportStar(require("./migration/migrator.js"), exports);
@@ -220,10 +220,7 @@ class Migrator {
220
220
  }
221
221
  if (!(await this.#doesSchemaExists())) {
222
222
  try {
223
- await this.#props.db.schema
224
- .createSchema(this.#migrationTableSchema)
225
- .ifNotExists()
226
- .execute();
223
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
227
224
  }
228
225
  catch (error) {
229
226
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema`
@@ -239,20 +236,15 @@ class Migrator {
239
236
  if (!(await this.#doesTableExists(this.#migrationTable))) {
240
237
  try {
241
238
  if (this.#migrationTableSchema) {
242
- await this.#props.db.schema
243
- .createSchema(this.#migrationTableSchema)
244
- .ifNotExists()
245
- .execute();
239
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
246
240
  }
247
- await this.#props.db.schema
241
+ await this.#createIfNotExists(this.#props.db.schema
248
242
  .withPlugin(this.#schemaPlugin)
249
243
  .createTable(this.#migrationTable)
250
- .ifNotExists()
251
244
  .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey())
252
245
  // The migration run time as ISO string. This is not a real date type as we
253
246
  // can't know which data type is supported by all future dialects.
254
- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())
255
- .execute();
247
+ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()));
256
248
  }
257
249
  catch (error) {
258
250
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -267,13 +259,11 @@ class Migrator {
267
259
  async #ensureMigrationLockTableExists() {
268
260
  if (!(await this.#doesTableExists(this.#migrationLockTable))) {
269
261
  try {
270
- await this.#props.db.schema
262
+ await this.#createIfNotExists(this.#props.db.schema
271
263
  .withPlugin(this.#schemaPlugin)
272
264
  .createTable(this.#migrationLockTable)
273
- .ifNotExists()
274
265
  .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey())
275
- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))
276
- .execute();
266
+ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)));
277
267
  }
278
268
  catch (error) {
279
269
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -481,6 +471,12 @@ class Migrator {
481
471
  }
482
472
  return { results };
483
473
  }
474
+ async #createIfNotExists(qb) {
475
+ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) {
476
+ qb = qb.ifNotExists();
477
+ }
478
+ await qb.execute();
479
+ }
484
480
  }
485
481
  exports.Migrator = Migrator;
486
482
  class MigrationResultSetError extends Error {
@@ -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,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AddIndexNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ const identifier_node_js_1 = require("./identifier-node.js");
6
+ /**
7
+ * @internal
8
+ */
9
+ exports.AddIndexNode = (0, object_utils_js_1.freeze)({
10
+ is(node) {
11
+ return node.kind === 'AddIndexNode';
12
+ },
13
+ create(name) {
14
+ return (0, object_utils_js_1.freeze)({
15
+ kind: 'AddIndexNode',
16
+ name: identifier_node_js_1.IdentifierNode.create(name)
17
+ });
18
+ },
19
+ cloneWith(node, props) {
20
+ return (0, object_utils_js_1.freeze)({
21
+ ...node,
22
+ ...props,
23
+ });
24
+ },
25
+ cloneWithColumns(node, columns) {
26
+ return (0, object_utils_js_1.freeze)({
27
+ ...node,
28
+ columns: [...(node.columns || []), ...columns],
29
+ });
30
+ },
31
+ });
@@ -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
  }>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LimitNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const value_node_js_1 = require("./value-node.js");
6
5
  /**
7
6
  * @internal
8
7
  */
@@ -13,7 +12,7 @@ exports.LimitNode = (0, object_utils_js_1.freeze)({
13
12
  create(limit) {
14
13
  return (0, object_utils_js_1.freeze)({
15
14
  kind: 'LimitNode',
16
- limit: value_node_js_1.ValueNode.create(limit),
15
+ limit,
17
16
  });
18
17
  },
19
18
  });
@@ -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
  }>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OffsetNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const value_node_js_1 = require("./value-node.js");
6
5
  /**
7
6
  * @internal
8
7
  */
@@ -13,7 +12,7 @@ exports.OffsetNode = (0, object_utils_js_1.freeze)({
13
12
  create(offset) {
14
13
  return (0, object_utils_js_1.freeze)({
15
14
  kind: 'OffsetNode',
16
- offset: value_node_js_1.ValueNode.create(offset),
15
+ offset,
17
16
  });
18
17
  },
19
18
  });
@@ -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;
@@ -121,6 +121,7 @@ class OperationNodeTransformer {
121
121
  JSONPathLegNode: this.transformJSONPathLeg.bind(this),
122
122
  JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
123
123
  TupleNode: this.transformTuple.bind(this),
124
+ AddIndexNode: this.transformAddIndex.bind(this),
124
125
  });
125
126
  transformNode(node) {
126
127
  if (!node) {
@@ -258,6 +259,7 @@ class OperationNodeTransformer {
258
259
  ignore: node.ignore,
259
260
  replace: node.replace,
260
261
  explain: this.transformNode(node.explain),
262
+ defaultValues: node.defaultValues,
261
263
  });
262
264
  }
263
265
  transformValues(node) {
@@ -297,6 +299,7 @@ class OperationNodeTransformer {
297
299
  onCommit: node.onCommit,
298
300
  frontModifiers: this.transformNodeList(node.frontModifiers),
299
301
  endModifiers: this.transformNodeList(node.endModifiers),
302
+ selectQuery: this.transformNode(node.selectQuery),
300
303
  });
301
304
  }
302
305
  transformColumnDefinition(node) {
@@ -315,6 +318,7 @@ class OperationNodeTransformer {
315
318
  generated: this.transformNode(node.generated),
316
319
  frontModifiers: this.transformNodeList(node.frontModifiers),
317
320
  endModifiers: this.transformNodeList(node.endModifiers),
321
+ nullsNotDistinct: node.nullsNotDistinct,
318
322
  });
319
323
  }
320
324
  transformAddColumn(node) {
@@ -416,6 +420,7 @@ class OperationNodeTransformer {
416
420
  using: this.transformNode(node.using),
417
421
  ifNotExists: node.ifNotExists,
418
422
  where: this.transformNode(node.where),
423
+ nullsNotDistinct: node.nullsNotDistinct,
419
424
  });
420
425
  }
421
426
  transformList(node) {
@@ -445,6 +450,7 @@ class OperationNodeTransformer {
445
450
  kind: 'UniqueConstraintNode',
446
451
  columns: this.transformNodeList(node.columns),
447
452
  name: this.transformNode(node.name),
453
+ nullsNotDistinct: node.nullsNotDistinct,
448
454
  });
449
455
  }
450
456
  transformForeignKeyConstraint(node) {
@@ -533,6 +539,8 @@ class OperationNodeTransformer {
533
539
  columnAlterations: this.transformNodeList(node.columnAlterations),
534
540
  addConstraint: this.transformNode(node.addConstraint),
535
541
  dropConstraint: this.transformNode(node.dropConstraint),
542
+ addIndex: this.transformNode(node.addIndex),
543
+ dropIndex: this.transformNode(node.dropIndex),
536
544
  });
537
545
  }
538
546
  transformDropColumn(node) {
@@ -628,6 +636,7 @@ class OperationNodeTransformer {
628
636
  kind: 'SelectModifierNode',
629
637
  modifier: node.modifier,
630
638
  rawModifier: this.transformNode(node.rawModifier),
639
+ of: this.transformNodeList(node.of),
631
640
  });
632
641
  }
633
642
  transformCreateType(node) {
@@ -765,6 +774,16 @@ class OperationNodeTransformer {
765
774
  values: this.transformNodeList(node.values),
766
775
  });
767
776
  }
777
+ transformAddIndex(node) {
778
+ return (0, require_all_props_js_1.requireAllProps)({
779
+ kind: 'AddIndexNode',
780
+ name: this.transformNode(node.name),
781
+ columns: this.transformNodeList(node.columns),
782
+ unique: node.unique,
783
+ using: this.transformNode(node.using),
784
+ ifNotExists: node.ifNotExists,
785
+ });
786
+ }
768
787
  transformDataType(node) {
769
788
  // An Object.freezed leaf node. No need to clone.
770
789
  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
  }
@@ -94,6 +94,7 @@ class OperationNodeVisitor {
94
94
  JSONPathLegNode: this.visitJSONPathLeg.bind(this),
95
95
  JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
96
96
  TupleNode: this.visitTuple.bind(this),
97
+ AddIndexNode: this.visitAddIndex.bind(this),
97
98
  });
98
99
  visitNode = (node) => {
99
100
  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];
@@ -37,6 +37,8 @@ exports.COMPARISON_OPERATORS = [
37
37
  '!!',
38
38
  '<->',
39
39
  'regexp',
40
+ 'is distinct from',
41
+ 'is not distinct from',
40
42
  ];
41
43
  exports.ARITHMETIC_OPERATORS = [
42
44
  '+',
@@ -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
  }>;