kysely 0.27.4 → 0.27.6

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 (222) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CODE_OF_CONDUCT.md +183 -0
  3. package/CONTRIBUTING.md +121 -23
  4. package/FUNDING.md +25 -0
  5. package/README.md +13 -2
  6. package/deno.check.d.ts +86 -0
  7. package/deno.check.json +21 -0
  8. package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
  9. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
  10. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
  11. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  12. package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
  13. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  14. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  15. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  16. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  17. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  18. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  19. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  21. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +66 -44
  22. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  23. package/dist/cjs/driver/dummy-driver.js +13 -12
  24. package/dist/cjs/dynamic/dynamic.d.ts +6 -6
  25. package/dist/cjs/dynamic/dynamic.js +6 -6
  26. package/dist/cjs/expression/expression-builder.d.ts +154 -61
  27. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  28. package/dist/cjs/expression/expression.d.ts +40 -5
  29. package/dist/cjs/helpers/mssql.d.ts +74 -14
  30. package/dist/cjs/helpers/mssql.js +74 -14
  31. package/dist/cjs/helpers/mysql.d.ts +14 -10
  32. package/dist/cjs/helpers/mysql.js +14 -10
  33. package/dist/cjs/helpers/postgres.d.ts +7 -4
  34. package/dist/cjs/helpers/postgres.js +7 -4
  35. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  36. package/dist/cjs/helpers/sqlite.js +41 -16
  37. package/dist/cjs/kysely.d.ts +99 -41
  38. package/dist/cjs/kysely.js +60 -36
  39. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  40. package/dist/cjs/migration/file-migration-provider.js +2 -2
  41. package/dist/cjs/migration/migrator.d.ts +90 -15
  42. package/dist/cjs/migration/migrator.js +95 -17
  43. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  44. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  45. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/data-type-node.js +12 -0
  47. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
  48. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  49. package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
  51. package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
  52. package/dist/cjs/operation-node/query-node.d.ts +4 -0
  53. package/dist/cjs/operation-node/query-node.js +8 -0
  54. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  55. package/dist/cjs/operation-node/select-query-node.js +0 -8
  56. package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
  57. package/dist/cjs/parser/insert-values-parser.js +3 -1
  58. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  59. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
  60. package/dist/cjs/plugin/camel-case/camel-case.js +4 -1
  61. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  62. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  63. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  64. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  65. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  66. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  67. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  68. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  69. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  70. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  71. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +26 -0
  72. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  73. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  74. package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
  75. package/dist/cjs/query-builder/delete-query-builder.js +76 -26
  76. package/dist/cjs/query-builder/function-module.d.ts +35 -88
  77. package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
  78. package/dist/cjs/query-builder/insert-query-builder.js +188 -52
  79. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  80. package/dist/cjs/query-builder/insert-result.js +10 -5
  81. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  82. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  83. package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
  84. package/dist/cjs/query-builder/merge-query-builder.js +68 -6
  85. package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
  86. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  87. package/dist/cjs/query-builder/output-interface.d.ts +50 -7
  88. package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
  89. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  90. package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
  91. package/dist/cjs/query-builder/select-query-builder.js +7 -7
  92. package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
  93. package/dist/cjs/query-builder/update-query-builder.js +75 -10
  94. package/dist/cjs/query-builder/update-result.d.ts +2 -2
  95. package/dist/cjs/query-builder/update-result.js +2 -2
  96. package/dist/cjs/query-builder/where-interface.d.ts +5 -1
  97. package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
  98. package/dist/cjs/query-creator.d.ts +66 -18
  99. package/dist/cjs/query-creator.js +2 -2
  100. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  101. package/dist/cjs/raw-builder/sql.d.ts +27 -8
  102. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  103. package/dist/cjs/schema/alter-column-builder.js +17 -3
  104. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
  105. package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
  106. package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
  107. package/dist/cjs/schema/column-definition-builder.js +283 -26
  108. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  109. package/dist/cjs/schema/create-table-builder.js +86 -33
  110. package/dist/cjs/util/column-type.d.ts +5 -9
  111. package/dist/cjs/util/require-all-props.d.ts +4 -2
  112. package/dist/cjs/util/require-all-props.js +4 -2
  113. package/dist/cjs/util/streamable.d.ts +1 -1
  114. package/dist/cjs/util/type-utils.d.ts +4 -2
  115. package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
  116. package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
  117. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
  118. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  119. package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
  120. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  121. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  122. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  123. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  124. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  125. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  126. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  127. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  128. package/dist/esm/dialect/sqlite/sqlite-introspector.js +66 -44
  129. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  130. package/dist/esm/driver/dummy-driver.js +13 -12
  131. package/dist/esm/dynamic/dynamic.d.ts +6 -6
  132. package/dist/esm/dynamic/dynamic.js +6 -6
  133. package/dist/esm/expression/expression-builder.d.ts +154 -61
  134. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  135. package/dist/esm/expression/expression.d.ts +40 -5
  136. package/dist/esm/helpers/mssql.d.ts +74 -14
  137. package/dist/esm/helpers/mssql.js +74 -14
  138. package/dist/esm/helpers/mysql.d.ts +14 -10
  139. package/dist/esm/helpers/mysql.js +14 -10
  140. package/dist/esm/helpers/postgres.d.ts +7 -4
  141. package/dist/esm/helpers/postgres.js +7 -4
  142. package/dist/esm/helpers/sqlite.d.ts +41 -16
  143. package/dist/esm/helpers/sqlite.js +41 -16
  144. package/dist/esm/kysely.d.ts +99 -41
  145. package/dist/esm/kysely.js +60 -36
  146. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  147. package/dist/esm/migration/file-migration-provider.js +2 -2
  148. package/dist/esm/migration/migrator.d.ts +90 -15
  149. package/dist/esm/migration/migrator.js +95 -17
  150. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  151. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  152. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  153. package/dist/esm/operation-node/data-type-node.js +12 -0
  154. package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
  155. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  156. package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
  157. package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
  158. package/dist/esm/operation-node/operation-node-transformer.js +14 -3
  159. package/dist/esm/operation-node/query-node.d.ts +4 -0
  160. package/dist/esm/operation-node/query-node.js +8 -0
  161. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  162. package/dist/esm/operation-node/select-query-node.js +0 -8
  163. package/dist/esm/operation-node/update-query-node.d.ts +1 -0
  164. package/dist/esm/parser/insert-values-parser.js +3 -1
  165. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  166. package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
  167. package/dist/esm/plugin/camel-case/camel-case.js +4 -1
  168. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  169. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  170. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  171. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  172. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  173. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  174. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  175. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  176. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  177. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  178. package/dist/esm/plugin/with-schema/with-schema-transformer.js +26 -0
  179. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  180. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  181. package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
  182. package/dist/esm/query-builder/delete-query-builder.js +76 -26
  183. package/dist/esm/query-builder/function-module.d.ts +35 -88
  184. package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
  185. package/dist/esm/query-builder/insert-query-builder.js +188 -52
  186. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  187. package/dist/esm/query-builder/insert-result.js +10 -5
  188. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  189. package/dist/esm/query-builder/json-path-builder.js +8 -5
  190. package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
  191. package/dist/esm/query-builder/merge-query-builder.js +68 -6
  192. package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
  193. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  194. package/dist/esm/query-builder/output-interface.d.ts +50 -7
  195. package/dist/esm/query-builder/returning-interface.d.ts +5 -5
  196. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  197. package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
  198. package/dist/esm/query-builder/select-query-builder.js +7 -7
  199. package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
  200. package/dist/esm/query-builder/update-query-builder.js +75 -10
  201. package/dist/esm/query-builder/update-result.d.ts +2 -2
  202. package/dist/esm/query-builder/update-result.js +2 -2
  203. package/dist/esm/query-builder/where-interface.d.ts +5 -1
  204. package/dist/esm/query-compiler/default-query-compiler.js +20 -0
  205. package/dist/esm/query-creator.d.ts +66 -18
  206. package/dist/esm/query-creator.js +2 -2
  207. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  208. package/dist/esm/raw-builder/sql.d.ts +27 -8
  209. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  210. package/dist/esm/schema/alter-column-builder.js +17 -3
  211. package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
  212. package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
  213. package/dist/esm/schema/column-definition-builder.d.ts +283 -26
  214. package/dist/esm/schema/column-definition-builder.js +283 -26
  215. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  216. package/dist/esm/schema/create-table-builder.js +86 -33
  217. package/dist/esm/util/column-type.d.ts +5 -9
  218. package/dist/esm/util/require-all-props.d.ts +4 -2
  219. package/dist/esm/util/require-all-props.js +4 -2
  220. package/dist/esm/util/streamable.d.ts +1 -1
  221. package/dist/esm/util/type-utils.d.ts +4 -2
  222. package/package.json +28 -23
@@ -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
  *
@@ -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()
@@ -593,16 +597,16 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
593
597
  * const { ref } = db.dynamic
594
598
  *
595
599
  * // Some column name provided by the user. Value not known at compile time.
596
- * const columnFromUserInput = req.query.select;
600
+ * const columnFromUserInput: string = 'first_name';
597
601
  *
598
602
  * // A type that lists all possible values `columnFromUserInput` can have.
599
603
  * // You can use `keyof Person` if any column of an interface is allowed.
600
- * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
604
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
601
605
  *
602
- * const spersons = await db
606
+ * const people = await db
603
607
  * .selectFrom('person')
604
608
  * .select([
605
- * ref<PossibleColumns>(columnFromUserInput)
609
+ * ref<PossibleColumns>(columnFromUserInput),
606
610
  * 'id'
607
611
  * ])
608
612
  * .execute()
@@ -610,12 +614,12 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
610
614
  * // The resulting type contains all `PossibleColumns` as optional fields
611
615
  * // because we cannot know which field was actually selected before
612
616
  * // running the code.
613
- * const lastName: string | undefined = persons[0].last_name
614
- * const firstName: string | undefined = persons[0].first_name
615
- * 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
616
620
  *
617
621
  * // The result type also contains the compile time selection `id`.
618
- * persons[0].id
622
+ * people[0].id
619
623
  * ```
620
624
  */
621
625
  select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
@@ -654,7 +658,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
654
658
  * ### Examples
655
659
  *
656
660
  * ```ts
657
- * db.selectFrom('person')
661
+ * import { sql } from 'kysely'
662
+ *
663
+ * await db.selectFrom('person')
658
664
  * .modifyFront(sql`sql_no_cache`)
659
665
  * .select('first_name')
660
666
  * .execute()
@@ -677,7 +683,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
677
683
  * ### Examples
678
684
  *
679
685
  * ```ts
680
- * db.selectFrom('person')
686
+ * import { sql } from 'kysely'
687
+ *
688
+ * await db.selectFrom('person')
681
689
  * .select('first_name')
682
690
  * .modifyEnd(sql`for update`)
683
691
  * .execute()
@@ -695,10 +703,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
695
703
  /**
696
704
  * Makes the selection distinct.
697
705
  *
698
- * <!-- siteExample("select", "Distinct", 70) -->
699
- *
700
706
  * ### Examples
701
707
  *
708
+ * <!-- siteExample("select", "Distinct", 70) -->
709
+ *
702
710
  * ```ts
703
711
  * const persons = await db.selectFrom('person')
704
712
  * .select('first_name')
@@ -941,7 +949,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
941
949
  * ### Examples
942
950
  *
943
951
  * ```ts
944
- * db.selectFrom('person')
952
+ * await db.selectFrom('person')
945
953
  * .innerJoinLateral(
946
954
  * (eb) =>
947
955
  * eb.selectFrom('pet')
@@ -952,6 +960,20 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
952
960
  * )
953
961
  * .select(['first_name', 'p.name'])
954
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"
955
977
  * ```
956
978
  */
957
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>;
@@ -961,7 +983,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
961
983
  * ### Examples
962
984
  *
963
985
  * ```ts
964
- * db.selectFrom('person')
986
+ * await db.selectFrom('person')
965
987
  * .leftJoinLateral(
966
988
  * (eb) =>
967
989
  * eb.selectFrom('pet')
@@ -972,6 +994,20 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
972
994
  * )
973
995
  * .select(['first_name', 'p.name'])
974
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"
975
1011
  * ```
976
1012
  */
977
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>;
@@ -1197,7 +1233,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1197
1233
  * Select the first 10 rows of the result:
1198
1234
  *
1199
1235
  * ```ts
1200
- * return await db
1236
+ * await db
1201
1237
  * .selectFrom('person')
1202
1238
  * .select('first_name')
1203
1239
  * .limit(10)
@@ -1213,7 +1249,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1213
1249
  * Select rows from index 10 to index 19 of the result:
1214
1250
  *
1215
1251
  * ```ts
1216
- * return await db
1252
+ * await db
1217
1253
  * .selectFrom('person')
1218
1254
  * .select('first_name')
1219
1255
  * .limit(10)
@@ -1236,7 +1272,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1236
1272
  * Select rows from index 10 to index 19 of the result:
1237
1273
  *
1238
1274
  * ```ts
1239
- * return await db
1275
+ * await db
1240
1276
  * .selectFrom('person')
1241
1277
  * .select('first_name')
1242
1278
  * .limit(10)
@@ -1259,7 +1295,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1259
1295
  * ### Examples
1260
1296
  *
1261
1297
  * ```ts
1262
- * return await db
1298
+ * await db
1263
1299
  * .selectFrom('person')
1264
1300
  * .select('first_name')
1265
1301
  * .orderBy('first_name')
@@ -1289,7 +1325,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1289
1325
  * Select 10 biggest ages:
1290
1326
  *
1291
1327
  * ```ts
1292
- * return await db
1328
+ * await db
1293
1329
  * .selectFrom('person')
1294
1330
  * .select('age')
1295
1331
  * .top(10)
@@ -1306,7 +1342,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1306
1342
  * Select 10% first rows:
1307
1343
  *
1308
1344
  * ```ts
1309
- * return await db
1345
+ * await db
1310
1346
  * .selectFrom('person')
1311
1347
  * .selectAll()
1312
1348
  * .top(10, 'percent')
@@ -1328,22 +1364,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1328
1364
  * ### Examples
1329
1365
  *
1330
1366
  * ```ts
1331
- * db.selectFrom('person')
1367
+ * await db.selectFrom('person')
1332
1368
  * .select(['id', 'first_name as name'])
1333
1369
  * .union(db.selectFrom('pet').select(['id', 'name']))
1334
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"
1335
1383
  * ```
1336
1384
  *
1337
1385
  * You can provide a callback to get an expression builder.
1338
1386
  * In the following example, this allows us to wrap the query in parentheses:
1339
1387
  *
1340
1388
  * ```ts
1341
- * db.selectFrom('person')
1389
+ * await db.selectFrom('person')
1342
1390
  * .select(['id', 'first_name as name'])
1343
1391
  * .union((eb) => eb.parens(
1344
1392
  * eb.selectFrom('pet').select(['id', 'name'])
1345
1393
  * ))
1346
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"
1347
1409
  * ```
1348
1410
  */
1349
1411
  union<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1355,22 +1417,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1355
1417
  * ### Examples
1356
1418
  *
1357
1419
  * ```ts
1358
- * db.selectFrom('person')
1420
+ * await db.selectFrom('person')
1359
1421
  * .select(['id', 'first_name as name'])
1360
1422
  * .unionAll(db.selectFrom('pet').select(['id', 'name']))
1361
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"
1362
1436
  * ```
1363
1437
  *
1364
1438
  * You can provide a callback to get an expression builder.
1365
1439
  * In the following example, this allows us to wrap the query in parentheses:
1366
1440
  *
1367
1441
  * ```ts
1368
- * db.selectFrom('person')
1442
+ * await db.selectFrom('person')
1369
1443
  * .select(['id', 'first_name as name'])
1370
1444
  * .unionAll((eb) => eb.parens(
1371
1445
  * eb.selectFrom('pet').select(['id', 'name'])
1372
1446
  * ))
1373
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"
1374
1462
  * ```
1375
1463
  */
1376
1464
  unionAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1382,22 +1470,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1382
1470
  * ### Examples
1383
1471
  *
1384
1472
  * ```ts
1385
- * db.selectFrom('person')
1473
+ * await db.selectFrom('person')
1386
1474
  * .select(['id', 'first_name as name'])
1387
1475
  * .intersect(db.selectFrom('pet').select(['id', 'name']))
1388
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"
1389
1489
  * ```
1390
1490
  *
1391
1491
  * You can provide a callback to get an expression builder.
1392
1492
  * In the following example, this allows us to wrap the query in parentheses:
1393
1493
  *
1394
1494
  * ```ts
1395
- * db.selectFrom('person')
1495
+ * await db.selectFrom('person')
1396
1496
  * .select(['id', 'first_name as name'])
1397
1497
  * .intersect((eb) => eb.parens(
1398
1498
  * eb.selectFrom('pet').select(['id', 'name'])
1399
1499
  * ))
1400
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"
1401
1515
  * ```
1402
1516
  */
1403
1517
  intersect<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1409,22 +1523,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1409
1523
  * ### Examples
1410
1524
  *
1411
1525
  * ```ts
1412
- * db.selectFrom('person')
1526
+ * await db.selectFrom('person')
1413
1527
  * .select(['id', 'first_name as name'])
1414
1528
  * .intersectAll(db.selectFrom('pet').select(['id', 'name']))
1415
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"
1416
1542
  * ```
1417
1543
  *
1418
1544
  * You can provide a callback to get an expression builder.
1419
1545
  * In the following example, this allows us to wrap the query in parentheses:
1420
1546
  *
1421
1547
  * ```ts
1422
- * db.selectFrom('person')
1548
+ * await db.selectFrom('person')
1423
1549
  * .select(['id', 'first_name as name'])
1424
1550
  * .intersectAll((eb) => eb.parens(
1425
1551
  * eb.selectFrom('pet').select(['id', 'name'])
1426
1552
  * ))
1427
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"
1428
1568
  * ```
1429
1569
  */
1430
1570
  intersectAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1436,22 +1576,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1436
1576
  * ### Examples
1437
1577
  *
1438
1578
  * ```ts
1439
- * db.selectFrom('person')
1579
+ * await db.selectFrom('person')
1440
1580
  * .select(['id', 'first_name as name'])
1441
1581
  * .except(db.selectFrom('pet').select(['id', 'name']))
1442
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"
1443
1595
  * ```
1444
1596
  *
1445
1597
  * You can provide a callback to get an expression builder.
1446
1598
  * In the following example, this allows us to wrap the query in parentheses:
1447
1599
  *
1448
1600
  * ```ts
1449
- * db.selectFrom('person')
1601
+ * await db.selectFrom('person')
1450
1602
  * .select(['id', 'first_name as name'])
1451
1603
  * .except((eb) => eb.parens(
1452
1604
  * eb.selectFrom('pet').select(['id', 'name'])
1453
1605
  * ))
1454
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"
1455
1621
  * ```
1456
1622
  */
1457
1623
  except<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1463,22 +1629,48 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1463
1629
  * ### Examples
1464
1630
  *
1465
1631
  * ```ts
1466
- * db.selectFrom('person')
1632
+ * await db.selectFrom('person')
1467
1633
  * .select(['id', 'first_name as name'])
1468
1634
  * .exceptAll(db.selectFrom('pet').select(['id', 'name']))
1469
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"
1470
1648
  * ```
1471
1649
  *
1472
1650
  * You can provide a callback to get an expression builder.
1473
1651
  * In the following example, this allows us to wrap the query in parentheses:
1474
1652
  *
1475
1653
  * ```ts
1476
- * db.selectFrom('person')
1654
+ * await db.selectFrom('person')
1477
1655
  * .select(['id', 'first_name as name'])
1478
1656
  * .exceptAll((eb) => eb.parens(
1479
1657
  * eb.selectFrom('pet').select(['id', 'name'])
1480
1658
  * ))
1481
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"
1482
1674
  * ```
1483
1675
  */
1484
1676
  exceptAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
@@ -1500,6 +1692,17 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1500
1692
  *
1501
1693
  * pets[0].owner_first_name
1502
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
+ * ```
1503
1706
  */
1504
1707
  as<A extends string>(alias: A): AliasedSelectQueryBuilder<O, A>;
1505
1708
  /**
@@ -1508,10 +1711,11 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1508
1711
  * ### Examples
1509
1712
  *
1510
1713
  * ```ts
1511
- * db.selectFrom('person')
1714
+ * await db.selectFrom('person')
1512
1715
  * .select(['id', 'first_name'])
1513
1716
  * .clearSelect()
1514
1717
  * .select(['id', 'gender'])
1718
+ * .execute()
1515
1719
  * ```
1516
1720
  *
1517
1721
  * The generated SQL(PostgreSQL):
@@ -1546,10 +1750,11 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1546
1750
  * ### Examples
1547
1751
  *
1548
1752
  * ```ts
1549
- * db.selectFrom('person')
1753
+ * await db.selectFrom('person')
1550
1754
  * .selectAll()
1551
1755
  * .limit(10)
1552
1756
  * .clearLimit()
1757
+ * .execute()
1553
1758
  * ```
1554
1759
  *
1555
1760
  * The generated SQL(PostgreSQL):
@@ -1565,11 +1770,12 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1565
1770
  * ### Examples
1566
1771
  *
1567
1772
  * ```ts
1568
- * db.selectFrom('person')
1773
+ * await db.selectFrom('person')
1569
1774
  * .selectAll()
1570
1775
  * .limit(10)
1571
1776
  * .offset(20)
1572
1777
  * .clearOffset()
1778
+ * .execute()
1573
1779
  * ```
1574
1780
  *
1575
1781
  * The generated SQL(PostgreSQL):
@@ -1585,10 +1791,11 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1585
1791
  * ### Examples
1586
1792
  *
1587
1793
  * ```ts
1588
- * db.selectFrom('person')
1794
+ * await db.selectFrom('person')
1589
1795
  * .selectAll()
1590
1796
  * .orderBy('id')
1591
1797
  * .clearOrderBy()
1798
+ * .execute()
1592
1799
  * ```
1593
1800
  *
1594
1801
  * The generated SQL(PostgreSQL):
@@ -1604,10 +1811,11 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1604
1811
  * ### Examples
1605
1812
  *
1606
1813
  * ```ts
1607
- * db.selectFrom('person')
1814
+ * await db.selectFrom('person')
1608
1815
  * .selectAll()
1609
1816
  * .groupBy('id')
1610
1817
  * .clearGroupBy()
1818
+ * .execute()
1611
1819
  * ```
1612
1820
  *
1613
1821
  * The generated SQL(PostgreSQL):
@@ -1629,12 +1837,14 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1629
1837
  * The next example uses a helper function `log` to log a query:
1630
1838
  *
1631
1839
  * ```ts
1840
+ * import type { Compilable } from 'kysely'
1841
+ *
1632
1842
  * function log<T extends Compilable>(qb: T): T {
1633
1843
  * console.log(qb.compile())
1634
1844
  * return qb
1635
1845
  * }
1636
1846
  *
1637
- * db.selectFrom('person')
1847
+ * await db.selectFrom('person')
1638
1848
  * .selectAll()
1639
1849
  * .$call(log)
1640
1850
  * .execute()
@@ -1649,24 +1859,26 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1649
1859
  * like this:
1650
1860
  *
1651
1861
  * ```ts
1652
- * let query = db.selectFrom('person').selectAll()
1862
+ * async function getPeople(firstName?: string, lastName?: string) {
1863
+ * let query = db.selectFrom('person').selectAll()
1653
1864
  *
1654
- * if (firstName) {
1655
- * query = query.where('first_name', '=', firstName)
1656
- * }
1865
+ * if (firstName) {
1866
+ * query = query.where('first_name', '=', firstName)
1867
+ * }
1657
1868
  *
1658
- * if (lastName) {
1659
- * query = query.where('last_name', '=', lastName)
1660
- * }
1869
+ * if (lastName) {
1870
+ * query = query.where('last_name', '=', lastName)
1871
+ * }
1661
1872
  *
1662
- * const result = await query.execute()
1873
+ * return await query.execute()
1874
+ * }
1663
1875
  * ```
1664
1876
  *
1665
1877
  * This method is mainly useful with optional selects. Any `select` or `selectAll`
1666
1878
  * method called inside the callback add optional fields to the result type. This is
1667
1879
  * because we can't know if those selections were actually made before running the code.
1668
1880
  *
1669
- * 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)
1670
1882
  *
1671
1883
  * ### Examples
1672
1884
  *
@@ -1686,24 +1898,27 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1686
1898
  * the code. In the example above the return type of the `getPerson` function is:
1687
1899
  *
1688
1900
  * ```ts
1689
- * {
1901
+ * Promise<{
1690
1902
  * id: number
1691
1903
  * first_name: string
1692
1904
  * last_name?: string
1693
- * }
1905
+ * }>
1694
1906
  * ```
1695
1907
  *
1696
1908
  * You can also call any other methods inside the callback:
1697
1909
  *
1698
1910
  * ```ts
1699
- * db.selectFrom('person')
1700
- * .select('person.id')
1701
- * .$if(filterByFirstName, (qb) => qb.where('first_name', '=', firstName))
1702
- * .$if(filterByPetCount, (qb) => qb
1703
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
1704
- * .having((eb) => eb.fn.count('pet.id'), '>', petCountLimit)
1705
- * .groupBy('person.id')
1706
- * )
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
+ * }
1707
1922
  * ```
1708
1923
  */
1709
1924
  $if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<any, any, O & O2>): SelectQueryBuilder<DB, TB, O & Partial<Omit<O2, keyof O>>>;
@@ -1739,6 +1954,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1739
1954
  * .where('pet.species', '!=', 'cat')
1740
1955
  * .$asTuple('name', 'species')
1741
1956
  * ))
1957
+ * .execute()
1742
1958
  * ```
1743
1959
  *
1744
1960
  * The generated SQL(PostgreSQL):
@@ -1780,23 +1996,31 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1780
1996
  * Turn this code:
1781
1997
  *
1782
1998
  * ```ts
1999
+ * import type { Person } from 'type-editor' // imaginary module
2000
+ *
1783
2001
  * const person = await db.selectFrom('person')
1784
2002
  * .where('nullable_column', 'is not', null)
1785
2003
  * .selectAll()
1786
2004
  * .executeTakeFirstOrThrow()
1787
2005
  *
1788
- * if (person.nullable_column) {
2006
+ * if (isWithNoNullValue(person)) {
1789
2007
  * functionThatExpectsPersonWithNonNullValue(person)
1790
2008
  * }
2009
+ *
2010
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
2011
+ * return person.nullable_column != null
2012
+ * }
1791
2013
  * ```
1792
2014
  *
1793
2015
  * Into this:
1794
2016
  *
1795
2017
  * ```ts
2018
+ * import type { NotNull } from 'kysely'
2019
+ *
1796
2020
  * const person = await db.selectFrom('person')
1797
2021
  * .where('nullable_column', 'is not', null)
1798
2022
  * .selectAll()
1799
- * .$narrowType<{ nullable_column: string }>()
2023
+ * .$narrowType<{ nullable_column: NotNull }>()
1800
2024
  * .executeTakeFirstOrThrow()
1801
2025
  *
1802
2026
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -1846,12 +2070,12 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1846
2070
  * .with('first_and_last', (qb) => qb
1847
2071
  * .selectFrom('person')
1848
2072
  * .select(['first_name', 'last_name'])
1849
- * .$assertType<{ first_name: string, last_name: string }>()
2073
+ * .$assertType<{ first_name: string, last_name: string | null }>()
1850
2074
  * )
1851
2075
  * .with('age', (qb) => qb
1852
2076
  * .selectFrom('person')
1853
2077
  * .select('age')
1854
- * .$assertType<{ age: number }>()
2078
+ * .$assertType<{ age: number | null }>()
1855
2079
  * )
1856
2080
  * .selectFrom(['first_and_last', 'age'])
1857
2081
  * .selectAll()
@@ -1866,11 +2090,19 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1866
2090
  /**
1867
2091
  * Creates the OperationNode that describes how to compile this expression into SQL.
1868
2092
  *
2093
+ * ### Examples
2094
+ *
1869
2095
  * If you are creating a custom expression, it's often easiest to use the {@link sql}
1870
2096
  * template tag to build the node:
1871
2097
  *
1872
2098
  * ```ts
2099
+ * import { type Expression, type OperationNode, sql } from 'kysely'
2100
+ *
1873
2101
  * class SomeExpression<T> implements Expression<T> {
2102
+ * get expressionType(): T | undefined {
2103
+ * return undefined
2104
+ * }
2105
+ *
1874
2106
  * toOperationNode(): OperationNode {
1875
2107
  * return sql`some sql here`.toOperationNode()
1876
2108
  * }
@@ -1908,7 +2140,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1908
2140
  * ### Examples
1909
2141
  *
1910
2142
  * ```ts
1911
- * const stream = db.
2143
+ * const stream = db
1912
2144
  * .selectFrom('person')
1913
2145
  * .select(['first_name', 'last_name'])
1914
2146
  * .where('gender', '=', 'other')