kysely 0.27.3 → 0.27.5

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 (301) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +7 -7
  4. package/deno.check.d.ts +86 -0
  5. package/deno.check.json +21 -0
  6. package/dist/cjs/dialect/dialect-adapter-base.d.ts +13 -3
  7. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  8. package/dist/cjs/dialect/dialect-adapter.d.ts +16 -2
  9. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +12 -7
  10. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  11. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  12. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  13. package/dist/cjs/dialect/mssql/mssql-driver.js +114 -48
  14. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  15. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  16. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  17. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  18. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  20. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  22. package/dist/cjs/driver/database-connection.d.ts +3 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  24. package/dist/cjs/driver/dummy-driver.js +13 -12
  25. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  26. package/dist/cjs/dynamic/dynamic.d.ts +7 -7
  27. package/dist/cjs/dynamic/dynamic.js +7 -7
  28. package/dist/cjs/expression/expression-builder.d.ts +153 -62
  29. package/dist/cjs/expression/expression-builder.js +2 -3
  30. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  31. package/dist/cjs/expression/expression.d.ts +40 -5
  32. package/dist/cjs/expression/expression.js +2 -3
  33. package/dist/cjs/helpers/mssql.d.ts +74 -14
  34. package/dist/cjs/helpers/mssql.js +77 -18
  35. package/dist/cjs/helpers/mysql.d.ts +17 -13
  36. package/dist/cjs/helpers/mysql.js +20 -17
  37. package/dist/cjs/helpers/postgres.d.ts +11 -8
  38. package/dist/cjs/helpers/postgres.js +14 -12
  39. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  40. package/dist/cjs/helpers/sqlite.js +44 -20
  41. package/dist/cjs/index.d.ts +28 -21
  42. package/dist/cjs/index.js +28 -21
  43. package/dist/cjs/kysely.d.ts +100 -42
  44. package/dist/cjs/kysely.js +63 -39
  45. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  46. package/dist/cjs/migration/file-migration-provider.js +2 -2
  47. package/dist/cjs/migration/migrator.d.ts +82 -14
  48. package/dist/cjs/migration/migrator.js +82 -14
  49. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  50. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  51. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  53. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  54. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  55. package/dist/cjs/operation-node/data-type-node.js +17 -3
  56. package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
  57. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  58. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  60. package/dist/cjs/operation-node/merge-query-node.d.ts +3 -0
  61. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  62. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  63. package/dist/cjs/operation-node/operation-node-transformer.d.ts +11 -3
  64. package/dist/cjs/operation-node/operation-node-transformer.js +26 -3
  65. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  66. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  67. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  68. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  69. package/dist/cjs/operation-node/operator-node.js +8 -6
  70. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/output-node.js +26 -0
  72. package/dist/cjs/operation-node/query-node.d.ts +15 -6
  73. package/dist/cjs/operation-node/query-node.js +17 -0
  74. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  75. package/dist/cjs/operation-node/select-query-node.js +6 -8
  76. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.js +5 -6
  79. package/dist/cjs/parser/data-type-parser.js +1 -2
  80. package/dist/cjs/parser/default-value-parser.js +1 -2
  81. package/dist/cjs/parser/expression-parser.js +3 -4
  82. package/dist/cjs/parser/fetch-parser.js +1 -2
  83. package/dist/cjs/parser/group-by-parser.js +1 -2
  84. package/dist/cjs/parser/identifier-parser.js +1 -2
  85. package/dist/cjs/parser/insert-values-parser.js +1 -2
  86. package/dist/cjs/parser/join-parser.js +1 -2
  87. package/dist/cjs/parser/merge-parser.js +2 -3
  88. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  89. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  90. package/dist/cjs/parser/order-by-parser.js +3 -4
  91. package/dist/cjs/parser/parse-utils.js +4 -5
  92. package/dist/cjs/parser/partition-by-parser.js +1 -2
  93. package/dist/cjs/parser/reference-parser.js +8 -9
  94. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  95. package/dist/cjs/parser/select-parser.js +2 -3
  96. package/dist/cjs/parser/set-operation-parser.js +1 -2
  97. package/dist/cjs/parser/table-parser.js +4 -5
  98. package/dist/cjs/parser/top-parser.js +1 -2
  99. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  100. package/dist/cjs/parser/update-set-parser.js +2 -3
  101. package/dist/cjs/parser/value-parser.js +4 -5
  102. package/dist/cjs/parser/with-parser.js +1 -2
  103. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  104. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +26 -21
  105. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  106. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  107. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  108. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  109. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  110. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  111. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  114. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  115. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  116. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  117. package/dist/cjs/query-builder/delete-query-builder.d.ts +219 -43
  118. package/dist/cjs/query-builder/delete-query-builder.js +95 -31
  119. package/dist/cjs/query-builder/function-module.d.ts +40 -93
  120. package/dist/cjs/query-builder/function-module.js +1 -2
  121. package/dist/cjs/query-builder/insert-query-builder.d.ts +326 -67
  122. package/dist/cjs/query-builder/insert-query-builder.js +212 -61
  123. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  124. package/dist/cjs/query-builder/insert-result.js +10 -5
  125. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  126. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  127. package/dist/cjs/query-builder/merge-query-builder.d.ts +312 -10
  128. package/dist/cjs/query-builder/merge-query-builder.js +98 -7
  129. package/dist/cjs/query-builder/no-result-error.js +2 -2
  130. package/dist/cjs/query-builder/on-conflict-builder.d.ts +53 -20
  131. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  132. package/dist/cjs/query-builder/output-interface.d.ts +138 -0
  133. package/dist/cjs/query-builder/output-interface.js +2 -0
  134. package/dist/cjs/query-builder/returning-interface.d.ts +7 -5
  135. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  136. package/dist/cjs/query-builder/select-query-builder.d.ts +370 -73
  137. package/dist/cjs/query-builder/select-query-builder.js +14 -9
  138. package/dist/cjs/query-builder/update-query-builder.d.ts +225 -31
  139. package/dist/cjs/query-builder/update-query-builder.js +96 -17
  140. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  141. package/dist/cjs/query-builder/update-result.js +9 -0
  142. package/dist/cjs/query-builder/where-interface.d.ts +6 -2
  143. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  144. package/dist/cjs/query-compiler/default-query-compiler.js +45 -1
  145. package/dist/cjs/query-creator.d.ts +122 -21
  146. package/dist/cjs/query-creator.js +56 -3
  147. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  148. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  149. package/dist/cjs/raw-builder/sql.d.ts +31 -12
  150. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  151. package/dist/cjs/schema/alter-column-builder.js +20 -3
  152. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +44 -10
  153. package/dist/cjs/schema/alter-table-add-index-builder.js +27 -10
  154. package/dist/cjs/schema/alter-table-builder.js +1 -2
  155. package/dist/cjs/schema/column-definition-builder.d.ts +286 -24
  156. package/dist/cjs/schema/column-definition-builder.js +288 -24
  157. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  158. package/dist/cjs/schema/create-table-builder.js +86 -33
  159. package/dist/cjs/util/assert.js +2 -3
  160. package/dist/cjs/util/column-type.d.ts +5 -9
  161. package/dist/cjs/util/compilable.js +1 -2
  162. package/dist/cjs/util/json-object-args.js +1 -2
  163. package/dist/cjs/util/log-once.js +1 -2
  164. package/dist/cjs/util/object-utils.js +38 -26
  165. package/dist/cjs/util/performance-now.js +1 -2
  166. package/dist/cjs/util/prevent-await.js +1 -2
  167. package/dist/cjs/util/query-id.js +1 -2
  168. package/dist/cjs/util/random-string.js +1 -2
  169. package/dist/cjs/util/require-all-props.d.ts +4 -2
  170. package/dist/cjs/util/require-all-props.js +5 -4
  171. package/dist/cjs/util/stack-trace-utils.js +1 -2
  172. package/dist/cjs/util/streamable.d.ts +1 -1
  173. package/dist/cjs/util/type-utils.d.ts +4 -2
  174. package/dist/esm/dialect/dialect-adapter-base.d.ts +13 -3
  175. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  176. package/dist/esm/dialect/dialect-adapter.d.ts +16 -2
  177. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +12 -7
  178. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  181. package/dist/esm/dialect/mssql/mssql-driver.js +114 -48
  182. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  183. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  185. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  186. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  187. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  189. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  190. package/dist/esm/driver/database-connection.d.ts +3 -1
  191. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  192. package/dist/esm/driver/dummy-driver.js +13 -12
  193. package/dist/esm/dynamic/dynamic.d.ts +7 -7
  194. package/dist/esm/dynamic/dynamic.js +7 -7
  195. package/dist/esm/expression/expression-builder.d.ts +153 -62
  196. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  197. package/dist/esm/expression/expression.d.ts +40 -5
  198. package/dist/esm/helpers/mssql.d.ts +74 -14
  199. package/dist/esm/helpers/mssql.js +74 -14
  200. package/dist/esm/helpers/mysql.d.ts +17 -13
  201. package/dist/esm/helpers/mysql.js +17 -13
  202. package/dist/esm/helpers/postgres.d.ts +11 -8
  203. package/dist/esm/helpers/postgres.js +11 -8
  204. package/dist/esm/helpers/sqlite.d.ts +41 -16
  205. package/dist/esm/helpers/sqlite.js +41 -16
  206. package/dist/esm/index.d.ts +28 -21
  207. package/dist/esm/index.js +28 -21
  208. package/dist/esm/kysely.d.ts +100 -42
  209. package/dist/esm/kysely.js +61 -37
  210. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  211. package/dist/esm/migration/file-migration-provider.js +2 -2
  212. package/dist/esm/migration/migrator.d.ts +82 -14
  213. package/dist/esm/migration/migrator.js +82 -14
  214. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  215. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  216. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  217. package/dist/esm/operation-node/case-node.d.ts +1 -1
  218. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  219. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  220. package/dist/esm/operation-node/data-type-node.js +15 -1
  221. package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
  222. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  223. package/dist/esm/operation-node/having-node.d.ts +1 -1
  224. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  225. package/dist/esm/operation-node/merge-query-node.d.ts +3 -0
  226. package/dist/esm/operation-node/on-node.d.ts +1 -1
  227. package/dist/esm/operation-node/operation-node-transformer.d.ts +11 -3
  228. package/dist/esm/operation-node/operation-node-transformer.js +26 -3
  229. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  230. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  231. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  232. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  233. package/dist/esm/operation-node/operator-node.js +2 -0
  234. package/dist/esm/operation-node/output-node.d.ts +13 -0
  235. package/dist/esm/operation-node/output-node.js +24 -0
  236. package/dist/esm/operation-node/query-node.d.ts +15 -6
  237. package/dist/esm/operation-node/query-node.js +17 -0
  238. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  239. package/dist/esm/operation-node/select-query-node.js +6 -8
  240. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  241. package/dist/esm/operation-node/where-node.d.ts +1 -1
  242. package/dist/esm/parser/returning-parser.d.ts +4 -3
  243. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  244. package/dist/esm/plugin/camel-case/camel-case-plugin.js +26 -21
  245. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  246. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  247. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  248. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  249. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  250. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  251. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  252. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  253. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  254. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  255. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  256. package/dist/esm/query-builder/delete-query-builder.d.ts +219 -43
  257. package/dist/esm/query-builder/delete-query-builder.js +95 -31
  258. package/dist/esm/query-builder/function-module.d.ts +40 -93
  259. package/dist/esm/query-builder/insert-query-builder.d.ts +326 -67
  260. package/dist/esm/query-builder/insert-query-builder.js +212 -61
  261. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  262. package/dist/esm/query-builder/insert-result.js +10 -5
  263. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  264. package/dist/esm/query-builder/json-path-builder.js +8 -5
  265. package/dist/esm/query-builder/merge-query-builder.d.ts +312 -10
  266. package/dist/esm/query-builder/merge-query-builder.js +98 -7
  267. package/dist/esm/query-builder/on-conflict-builder.d.ts +53 -20
  268. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  269. package/dist/esm/query-builder/output-interface.d.ts +138 -0
  270. package/dist/esm/query-builder/output-interface.js +2 -0
  271. package/dist/esm/query-builder/returning-interface.d.ts +7 -5
  272. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  273. package/dist/esm/query-builder/select-query-builder.d.ts +370 -73
  274. package/dist/esm/query-builder/select-query-builder.js +13 -7
  275. package/dist/esm/query-builder/update-query-builder.d.ts +225 -31
  276. package/dist/esm/query-builder/update-query-builder.js +96 -17
  277. package/dist/esm/query-builder/update-result.d.ts +9 -0
  278. package/dist/esm/query-builder/update-result.js +9 -0
  279. package/dist/esm/query-builder/where-interface.d.ts +6 -2
  280. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  281. package/dist/esm/query-compiler/default-query-compiler.js +45 -1
  282. package/dist/esm/query-creator.d.ts +122 -21
  283. package/dist/esm/query-creator.js +56 -3
  284. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  285. package/dist/esm/raw-builder/sql.d.ts +31 -12
  286. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  287. package/dist/esm/schema/alter-column-builder.js +20 -3
  288. package/dist/esm/schema/alter-table-add-index-builder.d.ts +44 -10
  289. package/dist/esm/schema/alter-table-add-index-builder.js +27 -10
  290. package/dist/esm/schema/alter-table-builder.js +1 -2
  291. package/dist/esm/schema/column-definition-builder.d.ts +286 -24
  292. package/dist/esm/schema/column-definition-builder.js +288 -24
  293. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  294. package/dist/esm/schema/create-table-builder.js +86 -33
  295. package/dist/esm/util/column-type.d.ts +5 -9
  296. package/dist/esm/util/object-utils.js +18 -5
  297. package/dist/esm/util/require-all-props.d.ts +4 -2
  298. package/dist/esm/util/require-all-props.js +4 -2
  299. package/dist/esm/util/streamable.d.ts +1 -1
  300. package/dist/esm/util/type-utils.d.ts +4 -2
  301. package/package.json +30 -24
@@ -61,6 +61,8 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
61
61
  * you can always use:
62
62
  *
63
63
  * ```ts
64
+ * import { sql } from 'kysely'
65
+ *
64
66
  * sql`your operator`
65
67
  * ```
66
68
  *
@@ -72,7 +74,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
72
74
  * const persons = await db
73
75
  * .selectFrom('person')
74
76
  * .selectAll()
75
- * .where('id', 'in', ['1', '2', '3'])
77
+ * .where('id', 'in', [1, 2, 3])
76
78
  * .execute()
77
79
  * ```
78
80
  *
@@ -291,7 +293,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
291
293
  * .selectFrom('person')
292
294
  * .selectAll()
293
295
  * .where(
294
- * sql`coalesce(first_name, last_name)`,
296
+ * sql<string>`coalesce(first_name, last_name)`,
295
297
  * 'like',
296
298
  * '%' + name + '%',
297
299
  * )
@@ -320,6 +322,8 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
320
322
  * import { sql } from 'kysely'
321
323
  * const { ref } = db.dynamic
322
324
  *
325
+ * const columnFromUserInput: string = 'id'
326
+ *
323
327
  * const persons = await db
324
328
  * .selectFrom('person')
325
329
  * .selectAll()
@@ -542,6 +546,45 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
542
546
  * In case you use the {@link sql} tag you need to specify the type of the expression
543
547
  * (in this example `string`).
544
548
  *
549
+ * <!-- siteExample("select", "Not null", 51) -->
550
+ *
551
+ * Sometimes you can be sure something's not null, but Kysely isn't able to infer
552
+ * it. For example calling `where('last_name', 'is not', null)` doesn't make
553
+ * `last_name` not null in the result type, but unless you have other where statements
554
+ * you can be sure it's never null.
555
+ *
556
+ * Kysely has a couple of helpers for dealing with these cases: `$notNull()` and `$narrowType`.
557
+ * Both are used in the following example:
558
+ *
559
+ * ```ts
560
+ * import { NotNull } from 'kysely'
561
+ * import { jsonObjectFrom } from 'kysely/helpers/postgres'
562
+ *
563
+ * const persons = db
564
+ * .selectFrom('person')
565
+ * .select((eb) => [
566
+ * 'last_name',
567
+ * // Let's assume we know the person has at least one
568
+ * // pet. We can use the `.$notNull()` method to make
569
+ * // the expression not null. You could just as well
570
+ * // add `pet` to the `$narrowType` call below.
571
+ * jsonObjectFrom(
572
+ * eb.selectFrom('pet')
573
+ * .selectAll()
574
+ * .limit(1)
575
+ * .whereRef('person.id', '=', 'pet.owner_id')
576
+ * ).$notNull().as('pet')
577
+ * ])
578
+ * .where('last_name', 'is not', null)
579
+ * // $narrowType can be used to narrow the output type.
580
+ * // The special `NotNull` type can be used to make a
581
+ * // selection not null. You could add `pet: NotNull`
582
+ * // here and omit the `$notNull()` call on it.
583
+ * // Use whichever way you prefer.
584
+ * .$narrowType<{ last_name: NotNull }>()
585
+ * .execute()
586
+ * ```
587
+ *
545
588
  * All the examples above assume you know the column names at compile time.
546
589
  * While it's better to build your code like that (that way you also know
547
590
  * the types) sometimes it's not possible or you just prefer to write more
@@ -554,16 +597,16 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
554
597
  * const { ref } = db.dynamic
555
598
  *
556
599
  * // Some column name provided by the user. Value not known at compile time.
557
- * const columnFromUserInput = req.query.select;
600
+ * const columnFromUserInput: string = 'first_name';
558
601
  *
559
602
  * // A type that lists all possible values `columnFromUserInput` can have.
560
603
  * // You can use `keyof Person` if any column of an interface is allowed.
561
- * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
604
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
562
605
  *
563
- * const spersons = await db
606
+ * const people = await db
564
607
  * .selectFrom('person')
565
608
  * .select([
566
- * ref<PossibleColumns>(columnFromUserInput)
609
+ * ref<PossibleColumns>(columnFromUserInput),
567
610
  * 'id'
568
611
  * ])
569
612
  * .execute()
@@ -571,12 +614,12 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
571
614
  * // The resulting type contains all `PossibleColumns` as optional fields
572
615
  * // because we cannot know which field was actually selected before
573
616
  * // running the code.
574
- * const lastName: string | undefined = persons[0].last_name
575
- * const firstName: string | undefined = persons[0].first_name
576
- * const birthDate: string | undefined = persons[0].birth_date
617
+ * const lastName: string | null | undefined = people[0].last_name
618
+ * const firstName: string | undefined = people[0].first_name
619
+ * const birthDate: Date | null | undefined = people[0].birthdate
577
620
  *
578
621
  * // The result type also contains the compile time selection `id`.
579
- * persons[0].id
622
+ * people[0].id
580
623
  * ```
581
624
  */
582
625
  select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
@@ -615,7 +658,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
615
658
  * ### Examples
616
659
  *
617
660
  * ```ts
618
- * db.selectFrom('person')
661
+ * import { sql } from 'kysely'
662
+ *
663
+ * await db.selectFrom('person')
619
664
  * .modifyFront(sql`sql_no_cache`)
620
665
  * .select('first_name')
621
666
  * .execute()
@@ -638,7 +683,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
638
683
  * ### Examples
639
684
  *
640
685
  * ```ts
641
- * db.selectFrom('person')
686
+ * import { sql } from 'kysely'
687
+ *
688
+ * await db.selectFrom('person')
642
689
  * .select('first_name')
643
690
  * .modifyEnd(sql`for update`)
644
691
  * .execute()
@@ -656,10 +703,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
656
703
  /**
657
704
  * Makes the selection distinct.
658
705
  *
659
- * <!-- siteExample("select", "Distinct", 70) -->
660
- *
661
706
  * ### Examples
662
707
  *
708
+ * <!-- siteExample("select", "Distinct", 70) -->
709
+ *
663
710
  * ```ts
664
711
  * const persons = await db.selectFrom('person')
665
712
  * .select('first_name')
@@ -824,7 +871,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
824
871
  * (join) => join
825
872
  * .onRef('pet.owner_id', '=', 'person.id')
826
873
  * .on('pet.name', '=', 'Doggo')
827
- * .on((eb) => eb.or([eb("person.age", ">", 18), eb("person.age", "<", 100)]))
874
+ * .on((eb) => eb.or([
875
+ * eb('person.age', '>', 18),
876
+ * eb('person.age', '<', 100)
877
+ * ]))
828
878
  * )
829
879
  * .selectAll()
830
880
  * .execute()
@@ -838,6 +888,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
838
888
  * inner join "pet"
839
889
  * on "pet"."owner_id" = "person"."id"
840
890
  * and "pet"."name" = $1
891
+ * and (
892
+ * "person"."age" > $2
893
+ * OR "person"."age" < $3
894
+ * )
841
895
  * ```
842
896
  *
843
897
  * <!-- siteExample("join", "Subquery join", 40) -->
@@ -895,7 +949,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
895
949
  * ### Examples
896
950
  *
897
951
  * ```ts
898
- * db.selectFrom('person')
952
+ * await db.selectFrom('person')
899
953
  * .innerJoinLateral(
900
954
  * (eb) =>
901
955
  * eb.selectFrom('pet')
@@ -906,6 +960,20 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
906
960
  * )
907
961
  * .select(['first_name', 'p.name'])
908
962
  * .orderBy('first_name')
963
+ * .execute()
964
+ * ```
965
+ *
966
+ * The generated SQL (PostgreSQL):
967
+ *
968
+ * ```sql
969
+ * select "person"."first_name", "p"."name"
970
+ * from "person"
971
+ * inner join lateral (
972
+ * select "name"
973
+ * from "pet"
974
+ * where "pet"."owner_id" = "person"."id"
975
+ * ) as "p" on true
976
+ * order by "first_name"
909
977
  * ```
910
978
  */
911
979
  innerJoinLateral<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
@@ -915,7 +983,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
915
983
  * ### Examples
916
984
  *
917
985
  * ```ts
918
- * db.selectFrom('person')
986
+ * await db.selectFrom('person')
919
987
  * .leftJoinLateral(
920
988
  * (eb) =>
921
989
  * eb.selectFrom('pet')
@@ -926,6 +994,20 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
926
994
  * )
927
995
  * .select(['first_name', 'p.name'])
928
996
  * .orderBy('first_name')
997
+ * .execute()
998
+ * ```
999
+ *
1000
+ * The generated SQL (PostgreSQL):
1001
+ *
1002
+ * ```sql
1003
+ * select "person"."first_name", "p"."name"
1004
+ * from "person"
1005
+ * left join lateral (
1006
+ * select "name"
1007
+ * from "pet"
1008
+ * where "pet"."owner_id" = "person"."id"
1009
+ * ) as "p" on true
1010
+ * order by "first_name"
929
1011
  * ```
930
1012
  */
931
1013
  leftJoinLateral<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
@@ -997,7 +1079,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
997
1079
  * .limit(1)
998
1080
  * )
999
1081
  * .orderBy(
1000
- * sql`concat(first_name, last_name)`
1082
+ * sql<string>`concat(first_name, last_name)`
1001
1083
  * )
1002
1084
  * .execute()
1003
1085
  * ```
@@ -1056,7 +1138,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1056
1138
  * .selectFrom('person')
1057
1139
  * .select([
1058
1140
  * 'first_name',
1059
- * sql`max(id)`.as('max_id')
1141
+ * sql<string>`max(id)`.as('max_id')
1060
1142
  * ])
1061
1143
  * .groupBy('first_name')
1062
1144
  * .execute()
@@ -1080,7 +1162,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1080
1162
  * .select([
1081
1163
  * 'first_name',
1082
1164
  * 'last_name',
1083
- * sql`max(id)`.as('max_id')
1165
+ * sql<string>`max(id)`.as('max_id')
1084
1166
  * ])
1085
1167
  * .groupBy([
1086
1168
  * 'first_name',
@@ -1108,10 +1190,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1108
1190
  * .select([
1109
1191
  * 'first_name',
1110
1192
  * 'last_name',
1111
- * sql`max(id)`.as('max_id')
1193
+ * sql<string>`max(id)`.as('max_id')
1112
1194
  * ])
1113
1195
  * .groupBy([
1114
- * sql`concat(first_name, last_name)`,
1196
+ * sql<string>`concat(first_name, last_name)`,
1115
1197
  * (qb) => qb.selectFrom('pet').select('id').limit(1)
1116
1198
  * ])
1117
1199
  * .execute()
@@ -1151,7 +1233,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1151
1233
  * Select the first 10 rows of the result:
1152
1234
  *
1153
1235
  * ```ts
1154
- * return await db
1236
+ * await db
1155
1237
  * .selectFrom('person')
1156
1238
  * .select('first_name')
1157
1239
  * .limit(10)
@@ -1167,7 +1249,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1167
1249
  * Select rows from index 10 to index 19 of the result:
1168
1250
  *
1169
1251
  * ```ts
1170
- * return await db
1252
+ * await db
1171
1253
  * .selectFrom('person')
1172
1254
  * .select('first_name')
1173
1255
  * .limit(10)
@@ -1190,7 +1272,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1190
1272
  * Select rows from index 10 to index 19 of the result:
1191
1273
  *
1192
1274
  * ```ts
1193
- * return await db
1275
+ * await db
1194
1276
  * .selectFrom('person')
1195
1277
  * .select('first_name')
1196
1278
  * .limit(10)
@@ -1213,7 +1295,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1213
1295
  * ### Examples
1214
1296
  *
1215
1297
  * ```ts
1216
- * return await db
1298
+ * await db
1217
1299
  * .selectFrom('person')
1218
1300
  * .select('first_name')
1219
1301
  * .orderBy('first_name')
@@ -1243,7 +1325,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1243
1325
  * Select 10 biggest ages:
1244
1326
  *
1245
1327
  * ```ts
1246
- * return await db
1328
+ * await db
1247
1329
  * .selectFrom('person')
1248
1330
  * .select('age')
1249
1331
  * .top(10)
@@ -1260,7 +1342,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1260
1342
  * Select 10% first rows:
1261
1343
  *
1262
1344
  * ```ts
1263
- * return await db
1345
+ * await db
1264
1346
  * .selectFrom('person')
1265
1347
  * .selectAll()
1266
1348
  * .top(10, 'percent')
@@ -1282,22 +1364,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1282
1364
  * ### Examples
1283
1365
  *
1284
1366
  * ```ts
1285
- * db.selectFrom('person')
1367
+ * await db.selectFrom('person')
1286
1368
  * .select(['id', 'first_name as name'])
1287
1369
  * .union(db.selectFrom('pet').select(['id', 'name']))
1288
1370
  * .orderBy('name')
1371
+ * .execute()
1372
+ * ```
1373
+ *
1374
+ * The generated SQL (PostgreSQL):
1375
+ *
1376
+ * ```sql
1377
+ * select "id", "first_name" as "name"
1378
+ * from "person"
1379
+ * union
1380
+ * select "id", "name"
1381
+ * from "pet"
1382
+ * order by "name"
1289
1383
  * ```
1290
1384
  *
1291
1385
  * You can provide a callback to get an expression builder.
1292
1386
  * In the following example, this allows us to wrap the query in parentheses:
1293
1387
  *
1294
1388
  * ```ts
1295
- * db.selectFrom('person')
1389
+ * await db.selectFrom('person')
1296
1390
  * .select(['id', 'first_name as name'])
1297
1391
  * .union((eb) => eb.parens(
1298
1392
  * eb.selectFrom('pet').select(['id', 'name'])
1299
1393
  * ))
1300
1394
  * .orderBy('name')
1395
+ * .execute()
1396
+ * ```
1397
+ *
1398
+ * The generated SQL (PostgreSQL):
1399
+ *
1400
+ * ```sql
1401
+ * select "id", "first_name" as "name"
1402
+ * from "person"
1403
+ * union
1404
+ * (
1405
+ * select "id", "name"
1406
+ * from "pet"
1407
+ * )
1408
+ * order by "name"
1301
1409
  * ```
1302
1410
  */
1303
1411
  union<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1309,22 +1417,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1309
1417
  * ### Examples
1310
1418
  *
1311
1419
  * ```ts
1312
- * db.selectFrom('person')
1420
+ * await db.selectFrom('person')
1313
1421
  * .select(['id', 'first_name as name'])
1314
1422
  * .unionAll(db.selectFrom('pet').select(['id', 'name']))
1315
1423
  * .orderBy('name')
1424
+ * .execute()
1425
+ * ```
1426
+ *
1427
+ * The generated SQL (PostgreSQL):
1428
+ *
1429
+ * ```sql
1430
+ * select "id", "first_name" as "name"
1431
+ * from "person"
1432
+ * union all
1433
+ * select "id", "name"
1434
+ * from "pet"
1435
+ * order by "name"
1316
1436
  * ```
1317
1437
  *
1318
1438
  * You can provide a callback to get an expression builder.
1319
1439
  * In the following example, this allows us to wrap the query in parentheses:
1320
1440
  *
1321
1441
  * ```ts
1322
- * db.selectFrom('person')
1442
+ * await db.selectFrom('person')
1323
1443
  * .select(['id', 'first_name as name'])
1324
1444
  * .unionAll((eb) => eb.parens(
1325
1445
  * eb.selectFrom('pet').select(['id', 'name'])
1326
1446
  * ))
1327
1447
  * .orderBy('name')
1448
+ * .execute()
1449
+ * ```
1450
+ *
1451
+ * The generated SQL (PostgreSQL):
1452
+ *
1453
+ * ```sql
1454
+ * select "id", "first_name" as "name"
1455
+ * from "person"
1456
+ * union all
1457
+ * (
1458
+ * select "id", "name"
1459
+ * from "pet"
1460
+ * )
1461
+ * order by "name"
1328
1462
  * ```
1329
1463
  */
1330
1464
  unionAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1336,22 +1470,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1336
1470
  * ### Examples
1337
1471
  *
1338
1472
  * ```ts
1339
- * db.selectFrom('person')
1473
+ * await db.selectFrom('person')
1340
1474
  * .select(['id', 'first_name as name'])
1341
1475
  * .intersect(db.selectFrom('pet').select(['id', 'name']))
1342
1476
  * .orderBy('name')
1477
+ * .execute()
1478
+ * ```
1479
+ *
1480
+ * The generated SQL (PostgreSQL):
1481
+ *
1482
+ * ```sql
1483
+ * select "id", "first_name" as "name"
1484
+ * from "person"
1485
+ * intersect
1486
+ * select "id", "name"
1487
+ * from "pet"
1488
+ * order by "name"
1343
1489
  * ```
1344
1490
  *
1345
1491
  * You can provide a callback to get an expression builder.
1346
1492
  * In the following example, this allows us to wrap the query in parentheses:
1347
1493
  *
1348
1494
  * ```ts
1349
- * db.selectFrom('person')
1495
+ * await db.selectFrom('person')
1350
1496
  * .select(['id', 'first_name as name'])
1351
1497
  * .intersect((eb) => eb.parens(
1352
1498
  * eb.selectFrom('pet').select(['id', 'name'])
1353
1499
  * ))
1354
1500
  * .orderBy('name')
1501
+ * .execute()
1502
+ * ```
1503
+ *
1504
+ * The generated SQL (PostgreSQL):
1505
+ *
1506
+ * ```sql
1507
+ * select "id", "first_name" as "name"
1508
+ * from "person"
1509
+ * intersect
1510
+ * (
1511
+ * select "id", "name"
1512
+ * from "pet"
1513
+ * )
1514
+ * order by "name"
1355
1515
  * ```
1356
1516
  */
1357
1517
  intersect<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1363,22 +1523,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1363
1523
  * ### Examples
1364
1524
  *
1365
1525
  * ```ts
1366
- * db.selectFrom('person')
1526
+ * await db.selectFrom('person')
1367
1527
  * .select(['id', 'first_name as name'])
1368
1528
  * .intersectAll(db.selectFrom('pet').select(['id', 'name']))
1369
1529
  * .orderBy('name')
1530
+ * .execute()
1531
+ * ```
1532
+ *
1533
+ * The generated SQL (PostgreSQL):
1534
+ *
1535
+ * ```sql
1536
+ * select "id", "first_name" as "name"
1537
+ * from "person"
1538
+ * intersect all
1539
+ * select "id", "name"
1540
+ * from "pet"
1541
+ * order by "name"
1370
1542
  * ```
1371
1543
  *
1372
1544
  * You can provide a callback to get an expression builder.
1373
1545
  * In the following example, this allows us to wrap the query in parentheses:
1374
1546
  *
1375
1547
  * ```ts
1376
- * db.selectFrom('person')
1548
+ * await db.selectFrom('person')
1377
1549
  * .select(['id', 'first_name as name'])
1378
1550
  * .intersectAll((eb) => eb.parens(
1379
1551
  * eb.selectFrom('pet').select(['id', 'name'])
1380
1552
  * ))
1381
1553
  * .orderBy('name')
1554
+ * .execute()
1555
+ * ```
1556
+ *
1557
+ * The generated SQL (PostgreSQL):
1558
+ *
1559
+ * ```sql
1560
+ * select "id", "first_name" as "name"
1561
+ * from "person"
1562
+ * intersect all
1563
+ * (
1564
+ * select "id", "name"
1565
+ * from "pet"
1566
+ * )
1567
+ * order by "name"
1382
1568
  * ```
1383
1569
  */
1384
1570
  intersectAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1390,22 +1576,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1390
1576
  * ### Examples
1391
1577
  *
1392
1578
  * ```ts
1393
- * db.selectFrom('person')
1579
+ * await db.selectFrom('person')
1394
1580
  * .select(['id', 'first_name as name'])
1395
1581
  * .except(db.selectFrom('pet').select(['id', 'name']))
1396
1582
  * .orderBy('name')
1583
+ * .execute()
1584
+ * ```
1585
+ *
1586
+ * The generated SQL (PostgreSQL):
1587
+ *
1588
+ * ```sql
1589
+ * select "id", "first_name" as "name"
1590
+ * from "person"
1591
+ * except
1592
+ * select "id", "name"
1593
+ * from "pet"
1594
+ * order by "name"
1397
1595
  * ```
1398
1596
  *
1399
1597
  * You can provide a callback to get an expression builder.
1400
1598
  * In the following example, this allows us to wrap the query in parentheses:
1401
1599
  *
1402
1600
  * ```ts
1403
- * db.selectFrom('person')
1601
+ * await db.selectFrom('person')
1404
1602
  * .select(['id', 'first_name as name'])
1405
1603
  * .except((eb) => eb.parens(
1406
1604
  * eb.selectFrom('pet').select(['id', 'name'])
1407
1605
  * ))
1408
1606
  * .orderBy('name')
1607
+ * .execute()
1608
+ * ```
1609
+ *
1610
+ * The generated SQL (PostgreSQL):
1611
+ *
1612
+ * ```sql
1613
+ * select "id", "first_name" as "name"
1614
+ * from "person"
1615
+ * except
1616
+ * (
1617
+ * select "id", "name"
1618
+ * from "pet"
1619
+ * )
1620
+ * order by "name"
1409
1621
  * ```
1410
1622
  */
1411
1623
  except<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1417,22 +1629,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1417
1629
  * ### Examples
1418
1630
  *
1419
1631
  * ```ts
1420
- * db.selectFrom('person')
1632
+ * await db.selectFrom('person')
1421
1633
  * .select(['id', 'first_name as name'])
1422
1634
  * .exceptAll(db.selectFrom('pet').select(['id', 'name']))
1423
1635
  * .orderBy('name')
1636
+ * .execute()
1637
+ * ```
1638
+ *
1639
+ * The generated SQL (PostgreSQL):
1640
+ *
1641
+ * ```sql
1642
+ * select "id", "first_name" as "name"
1643
+ * from "person"
1644
+ * except all
1645
+ * select "id", "name"
1646
+ * from "pet"
1647
+ * order by "name"
1424
1648
  * ```
1425
1649
  *
1426
1650
  * You can provide a callback to get an expression builder.
1427
1651
  * In the following example, this allows us to wrap the query in parentheses:
1428
1652
  *
1429
1653
  * ```ts
1430
- * db.selectFrom('person')
1654
+ * await db.selectFrom('person')
1431
1655
  * .select(['id', 'first_name as name'])
1432
1656
  * .exceptAll((eb) => eb.parens(
1433
1657
  * eb.selectFrom('pet').select(['id', 'name'])
1434
1658
  * ))
1435
1659
  * .orderBy('name')
1660
+ * .execute()
1661
+ * ```
1662
+ *
1663
+ * The generated SQL (PostgreSQL):
1664
+ *
1665
+ * ```sql
1666
+ * select "id", "first_name" as "name"
1667
+ * from "person"
1668
+ * except all
1669
+ * (
1670
+ * select "id", "name"
1671
+ * from "pet"
1672
+ * )
1673
+ * order by "name"
1436
1674
  * ```
1437
1675
  */
1438
1676
  exceptAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1454,6 +1692,17 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1454
1692
  *
1455
1693
  * pets[0].owner_first_name
1456
1694
  * ```
1695
+ *
1696
+ * The generated SQL (PostgreSQL):
1697
+ *
1698
+ * ```sql
1699
+ * select "pet".*, (
1700
+ * select "first_name"
1701
+ * from "person"
1702
+ * where "pet"."owner_id" = "person"."id"
1703
+ * ) as "owner_first_name"
1704
+ * from "pet"
1705
+ * ```
1457
1706
  */
1458
1707
  as<A extends string>(alias: A): AliasedSelectQueryBuilder<O, A>;
1459
1708
  /**
@@ -1462,10 +1711,11 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1462
1711
  * ### Examples
1463
1712
  *
1464
1713
  * ```ts
1465
- * db.selectFrom('person')
1714
+ * await db.selectFrom('person')
1466
1715
  * .select(['id', 'first_name'])
1467
1716
  * .clearSelect()
1468
1717
  * .select(['id', 'gender'])
1718
+ * .execute()
1469
1719
  * ```
1470
1720
  *
1471
1721
  * The generated SQL(PostgreSQL):
@@ -1500,10 +1750,11 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1500
1750
  * ### Examples
1501
1751
  *
1502
1752
  * ```ts
1503
- * db.selectFrom('person')
1753
+ * await db.selectFrom('person')
1504
1754
  * .selectAll()
1505
1755
  * .limit(10)
1506
1756
  * .clearLimit()
1757
+ * .execute()
1507
1758
  * ```
1508
1759
  *
1509
1760
  * The generated SQL(PostgreSQL):
@@ -1519,11 +1770,12 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1519
1770
  * ### Examples
1520
1771
  *
1521
1772
  * ```ts
1522
- * db.selectFrom('person')
1773
+ * await db.selectFrom('person')
1523
1774
  * .selectAll()
1524
1775
  * .limit(10)
1525
1776
  * .offset(20)
1526
1777
  * .clearOffset()
1778
+ * .execute()
1527
1779
  * ```
1528
1780
  *
1529
1781
  * The generated SQL(PostgreSQL):
@@ -1539,10 +1791,11 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1539
1791
  * ### Examples
1540
1792
  *
1541
1793
  * ```ts
1542
- * db.selectFrom('person')
1794
+ * await db.selectFrom('person')
1543
1795
  * .selectAll()
1544
1796
  * .orderBy('id')
1545
1797
  * .clearOrderBy()
1798
+ * .execute()
1546
1799
  * ```
1547
1800
  *
1548
1801
  * The generated SQL(PostgreSQL):
@@ -1552,6 +1805,26 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1552
1805
  * ```
1553
1806
  */
1554
1807
  clearOrderBy(): SelectQueryBuilder<DB, TB, O>;
1808
+ /**
1809
+ * Clears `group by` clause from the query.
1810
+ *
1811
+ * ### Examples
1812
+ *
1813
+ * ```ts
1814
+ * await db.selectFrom('person')
1815
+ * .selectAll()
1816
+ * .groupBy('id')
1817
+ * .clearGroupBy()
1818
+ * .execute()
1819
+ * ```
1820
+ *
1821
+ * The generated SQL(PostgreSQL):
1822
+ *
1823
+ * ```sql
1824
+ * select * from "person"
1825
+ * ```
1826
+ */
1827
+ clearGroupBy(): SelectQueryBuilder<DB, TB, O>;
1555
1828
  /**
1556
1829
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
1557
1830
  * what the provided function returns.
@@ -1564,12 +1837,14 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1564
1837
  * The next example uses a helper function `log` to log a query:
1565
1838
  *
1566
1839
  * ```ts
1840
+ * import type { Compilable } from 'kysely'
1841
+ *
1567
1842
  * function log<T extends Compilable>(qb: T): T {
1568
1843
  * console.log(qb.compile())
1569
1844
  * return qb
1570
1845
  * }
1571
1846
  *
1572
- * db.selectFrom('person')
1847
+ * await db.selectFrom('person')
1573
1848
  * .selectAll()
1574
1849
  * .$call(log)
1575
1850
  * .execute()
@@ -1579,29 +1854,31 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1579
1854
  /**
1580
1855
  * Call `func(this)` if `condition` is true.
1581
1856
  *
1582
- * NOTE: This method has an impact on typescript performance and it should only be used
1857
+ * NOTE: This method has an impact on TypeScript performance and it should only be used
1583
1858
  * when necessary. Remember that you can call most methods like `where` conditionally
1584
1859
  * like this:
1585
1860
  *
1586
1861
  * ```ts
1587
- * let query = db.selectFrom('person').selectAll()
1862
+ * async function getPeople(firstName?: string, lastName?: string) {
1863
+ * let query = db.selectFrom('person').selectAll()
1588
1864
  *
1589
- * if (firstName) {
1590
- * query = query.where('first_name', '=', firstName)
1591
- * }
1865
+ * if (firstName) {
1866
+ * query = query.where('first_name', '=', firstName)
1867
+ * }
1592
1868
  *
1593
- * if (lastName) {
1594
- * query = query.where('last_name', '=', lastName)
1595
- * }
1869
+ * if (lastName) {
1870
+ * query = query.where('last_name', '=', lastName)
1871
+ * }
1596
1872
  *
1597
- * const result = await query.execute()
1873
+ * return await query.execute()
1874
+ * }
1598
1875
  * ```
1599
1876
  *
1600
1877
  * This method is mainly useful with optional selects. Any `select` or `selectAll`
1601
1878
  * method called inside the callback add optional fields to the result type. This is
1602
1879
  * because we can't know if those selections were actually made before running the code.
1603
1880
  *
1604
- * Also see [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/conditional-selects.md)
1881
+ * Also see [this recipe](https://github.com/kysely-org/kysely/blob/master/site/docs/recipes/0005-conditional-selects.md)
1605
1882
  *
1606
1883
  * ### Examples
1607
1884
  *
@@ -1621,24 +1898,27 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1621
1898
  * the code. In the example above the return type of the `getPerson` function is:
1622
1899
  *
1623
1900
  * ```ts
1624
- * {
1901
+ * Promise<{
1625
1902
  * id: number
1626
1903
  * first_name: string
1627
1904
  * last_name?: string
1628
- * }
1905
+ * }>
1629
1906
  * ```
1630
1907
  *
1631
1908
  * You can also call any other methods inside the callback:
1632
1909
  *
1633
1910
  * ```ts
1634
- * db.selectFrom('person')
1635
- * .select('person.id')
1636
- * .$if(filterByFirstName, (qb) => qb.where('first_name', '=', firstName))
1637
- * .$if(filterByPetCount, (qb) => qb
1638
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
1639
- * .having((eb) => eb.fn.count('pet.id'), '>', petCountLimit)
1640
- * .groupBy('person.id')
1641
- * )
1911
+ * async function getPeople(firstName?: string, petCountLimit?: number) {
1912
+ * return await db.selectFrom('person')
1913
+ * .select('person.id')
1914
+ * .$if(firstName != null, (qb) => qb.where('first_name', '=', firstName!))
1915
+ * .$if(petCountLimit != null, (qb) => qb
1916
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
1917
+ * .having((eb) => eb.fn.count('pet.id'), '>', petCountLimit!)
1918
+ * .groupBy('person.id')
1919
+ * )
1920
+ * .execute()
1921
+ * }
1642
1922
  * ```
1643
1923
  */
1644
1924
  $if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<any, any, O & O2>): SelectQueryBuilder<DB, TB, O & Partial<Omit<O2, keyof O>>>;
@@ -1674,6 +1954,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1674
1954
  * .where('pet.species', '!=', 'cat')
1675
1955
  * .$asTuple('name', 'species')
1676
1956
  * ))
1957
+ * .execute()
1677
1958
  * ```
1678
1959
  *
1679
1960
  * The generated SQL(PostgreSQL):
@@ -1715,23 +1996,31 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1715
1996
  * Turn this code:
1716
1997
  *
1717
1998
  * ```ts
1999
+ * import type { Person } from 'type-editor' // imaginary module
2000
+ *
1718
2001
  * const person = await db.selectFrom('person')
1719
2002
  * .where('nullable_column', 'is not', null)
1720
2003
  * .selectAll()
1721
2004
  * .executeTakeFirstOrThrow()
1722
2005
  *
1723
- * if (person.nullable_column) {
2006
+ * if (isWithNoNullValue(person)) {
1724
2007
  * functionThatExpectsPersonWithNonNullValue(person)
1725
2008
  * }
2009
+ *
2010
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
2011
+ * return person.nullable_column != null
2012
+ * }
1726
2013
  * ```
1727
2014
  *
1728
2015
  * Into this:
1729
2016
  *
1730
2017
  * ```ts
2018
+ * import type { NotNull } from 'kysely'
2019
+ *
1731
2020
  * const person = await db.selectFrom('person')
1732
2021
  * .where('nullable_column', 'is not', null)
1733
2022
  * .selectAll()
1734
- * .$narrowType<{ nullable_column: string }>()
2023
+ * .$narrowType<{ nullable_column: NotNull }>()
1735
2024
  * .executeTakeFirstOrThrow()
1736
2025
  *
1737
2026
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -1757,17 +2046,17 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1757
2046
  /**
1758
2047
  * Asserts that query's output row type equals the given type `T`.
1759
2048
  *
1760
- * This method can be used to simplify excessively complex types to make typescript happy
2049
+ * This method can be used to simplify excessively complex types to make TypeScript happy
1761
2050
  * and much faster.
1762
2051
  *
1763
2052
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
1764
- * for typescript and you get errors like this:
2053
+ * for TypeScript and you get errors like this:
1765
2054
  *
1766
2055
  * ```
1767
2056
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
1768
2057
  * ```
1769
2058
  *
1770
- * In these case you can often use this method to help typescript a little bit. When you use this
2059
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
1771
2060
  * method to assert the output type of a query, Kysely can drop the complex output type that
1772
2061
  * consists of multiple nested helper types and replace it with the simple asserted type.
1773
2062
  *
@@ -1781,12 +2070,12 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1781
2070
  * .with('first_and_last', (qb) => qb
1782
2071
  * .selectFrom('person')
1783
2072
  * .select(['first_name', 'last_name'])
1784
- * .$assertType<{ first_name: string, last_name: string }>()
2073
+ * .$assertType<{ first_name: string, last_name: string | null }>()
1785
2074
  * )
1786
2075
  * .with('age', (qb) => qb
1787
2076
  * .selectFrom('person')
1788
2077
  * .select('age')
1789
- * .$assertType<{ age: number }>()
2078
+ * .$assertType<{ age: number | null }>()
1790
2079
  * )
1791
2080
  * .selectFrom(['first_and_last', 'age'])
1792
2081
  * .selectAll()
@@ -1801,11 +2090,19 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1801
2090
  /**
1802
2091
  * Creates the OperationNode that describes how to compile this expression into SQL.
1803
2092
  *
2093
+ * ### Examples
2094
+ *
1804
2095
  * If you are creating a custom expression, it's often easiest to use the {@link sql}
1805
2096
  * template tag to build the node:
1806
2097
  *
1807
2098
  * ```ts
2099
+ * import { type Expression, type OperationNode, sql } from 'kysely'
2100
+ *
1808
2101
  * class SomeExpression<T> implements Expression<T> {
2102
+ * get expressionType(): T | undefined {
2103
+ * return undefined
2104
+ * }
2105
+ *
1809
2106
  * toOperationNode(): OperationNode {
1810
2107
  * return sql`some sql here`.toOperationNode()
1811
2108
  * }
@@ -1843,7 +2140,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1843
2140
  * ### Examples
1844
2141
  *
1845
2142
  * ```ts
1846
- * const stream = db.
2143
+ * const stream = db
1847
2144
  * .selectFrom('person')
1848
2145
  * .select(['first_name', 'last_name'])
1849
2146
  * .where('gender', '=', 'other')