kysely 0.26.1 → 0.26.3

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 (226) hide show
  1. package/README.md +6 -6
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
  3. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
  4. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  5. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
  6. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  8. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  9. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
  10. package/dist/cjs/driver/runtime-driver.js +17 -2
  11. package/dist/cjs/expression/expression-builder.d.ts +300 -27
  12. package/dist/cjs/expression/expression-builder.js +36 -26
  13. package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
  14. package/dist/cjs/expression/expression-wrapper.js +4 -4
  15. package/dist/cjs/expression/expression.d.ts +64 -1
  16. package/dist/cjs/helpers/mysql.d.ts +14 -11
  17. package/dist/cjs/helpers/mysql.js +21 -32
  18. package/dist/cjs/helpers/postgres.d.ts +8 -5
  19. package/dist/cjs/helpers/postgres.js +8 -5
  20. package/dist/cjs/helpers/sqlite.d.ts +164 -0
  21. package/dist/cjs/helpers/sqlite.js +180 -0
  22. package/dist/cjs/index.d.ts +5 -3
  23. package/dist/cjs/index.js +1 -0
  24. package/dist/cjs/kysely.d.ts +4 -3
  25. package/dist/cjs/kysely.js +1 -1
  26. package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
  27. package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
  28. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
  29. package/dist/cjs/operation-node/delete-query-node.js +3 -3
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  31. package/dist/cjs/operation-node/operation-node-transformer.js +8 -0
  32. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  33. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  34. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  36. package/dist/cjs/operation-node/operator-node.js +3 -0
  37. package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
  38. package/dist/cjs/operation-node/order-by-node.js +4 -4
  39. package/dist/cjs/operation-node/over-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/over-node.js +3 -3
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
  42. package/dist/cjs/operation-node/select-query-node.js +13 -7
  43. package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
  44. package/dist/cjs/operation-node/tuple-node.js +18 -0
  45. package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
  46. package/dist/cjs/parser/binary-operation-parser.js +35 -46
  47. package/dist/cjs/parser/expression-parser.d.ts +10 -5
  48. package/dist/cjs/parser/join-parser.d.ts +2 -2
  49. package/dist/cjs/parser/join-parser.js +2 -3
  50. package/dist/cjs/parser/order-by-parser.d.ts +6 -2
  51. package/dist/cjs/parser/order-by-parser.js +41 -7
  52. package/dist/cjs/parser/parse-utils.js +2 -2
  53. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  54. package/dist/cjs/parser/reference-parser.js +1 -1
  55. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  56. package/dist/cjs/parser/select-parser.d.ts +20 -9
  57. package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
  58. package/dist/cjs/parser/set-operation-parser.js +13 -4
  59. package/dist/cjs/parser/tuple-parser.d.ts +47 -0
  60. package/dist/cjs/parser/tuple-parser.js +2 -0
  61. package/dist/cjs/parser/value-parser.d.ts +5 -3
  62. package/dist/cjs/parser/value-parser.js +12 -1
  63. package/dist/cjs/parser/with-parser.d.ts +3 -2
  64. package/dist/cjs/parser/with-parser.js +16 -4
  65. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  66. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
  67. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  68. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
  69. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
  70. package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
  71. package/dist/cjs/query-builder/case-builder.js +8 -4
  72. package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
  73. package/dist/cjs/query-builder/cte-builder.js +39 -0
  74. package/dist/cjs/query-builder/delete-query-builder.d.ts +39 -10
  75. package/dist/cjs/query-builder/delete-query-builder.js +3 -3
  76. package/dist/cjs/query-builder/function-module.d.ts +41 -6
  77. package/dist/cjs/query-builder/function-module.js +3 -0
  78. package/dist/cjs/query-builder/having-interface.d.ts +2 -5
  79. package/dist/cjs/query-builder/insert-query-builder.d.ts +5 -3
  80. package/dist/cjs/query-builder/join-builder.d.ts +2 -6
  81. package/dist/cjs/query-builder/join-builder.js +2 -2
  82. package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
  83. package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
  84. package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
  85. package/dist/cjs/query-builder/over-builder.js +1 -1
  86. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  87. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  88. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  89. package/dist/cjs/query-builder/select-query-builder.d.ts +206 -67
  90. package/dist/cjs/query-builder/select-query-builder.js +75 -924
  91. package/dist/cjs/query-builder/update-query-builder.d.ts +39 -10
  92. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  93. package/dist/cjs/query-builder/where-interface.d.ts +32 -8
  94. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  95. package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
  96. package/dist/cjs/query-creator.d.ts +76 -2
  97. package/dist/cjs/query-creator.js +36 -6
  98. package/dist/cjs/raw-builder/raw-builder.d.ts +87 -51
  99. package/dist/cjs/raw-builder/raw-builder.js +18 -45
  100. package/dist/cjs/raw-builder/sql.js +8 -8
  101. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  102. package/dist/cjs/schema/alter-table-builder.js +12 -0
  103. package/dist/cjs/schema/create-index-builder.d.ts +1 -1
  104. package/dist/cjs/schema/create-index-builder.js +1 -1
  105. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  106. package/dist/cjs/util/column-type.d.ts +7 -6
  107. package/dist/cjs/util/infer-result.d.ts +2 -1
  108. package/dist/cjs/util/json-object-args.d.ts +3 -0
  109. package/dist/cjs/util/json-object-args.js +35 -0
  110. package/dist/cjs/util/object-utils.d.ts +1 -0
  111. package/dist/cjs/util/object-utils.js +9 -1
  112. package/dist/cjs/util/type-utils.d.ts +16 -17
  113. package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
  114. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
  115. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  116. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
  117. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
  118. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  119. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  120. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
  121. package/dist/esm/driver/runtime-driver.js +17 -2
  122. package/dist/esm/expression/expression-builder.d.ts +300 -27
  123. package/dist/esm/expression/expression-builder.js +40 -30
  124. package/dist/esm/expression/expression-wrapper.d.ts +177 -8
  125. package/dist/esm/expression/expression-wrapper.js +5 -5
  126. package/dist/esm/expression/expression.d.ts +64 -1
  127. package/dist/esm/helpers/mysql.d.ts +14 -11
  128. package/dist/esm/helpers/mysql.js +21 -32
  129. package/dist/esm/helpers/postgres.d.ts +8 -5
  130. package/dist/esm/helpers/postgres.js +8 -5
  131. package/dist/esm/helpers/sqlite.d.ts +164 -0
  132. package/dist/esm/helpers/sqlite.js +175 -0
  133. package/dist/esm/index.d.ts +5 -3
  134. package/dist/esm/index.js +1 -0
  135. package/dist/esm/kysely.d.ts +4 -3
  136. package/dist/esm/kysely.js +1 -1
  137. package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
  138. package/dist/esm/operation-node/common-table-expression-node.js +6 -0
  139. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  140. package/dist/esm/operation-node/delete-query-node.js +3 -3
  141. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  142. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  143. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  144. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  145. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  146. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  147. package/dist/esm/operation-node/operator-node.js +3 -0
  148. package/dist/esm/operation-node/order-by-node.d.ts +2 -2
  149. package/dist/esm/operation-node/order-by-node.js +4 -4
  150. package/dist/esm/operation-node/over-node.d.ts +1 -1
  151. package/dist/esm/operation-node/over-node.js +3 -3
  152. package/dist/esm/operation-node/select-query-node.d.ts +5 -4
  153. package/dist/esm/operation-node/select-query-node.js +13 -7
  154. package/dist/esm/operation-node/tuple-node.d.ts +12 -0
  155. package/dist/esm/operation-node/tuple-node.js +16 -0
  156. package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
  157. package/dist/esm/parser/binary-operation-parser.js +36 -47
  158. package/dist/esm/parser/expression-parser.d.ts +10 -5
  159. package/dist/esm/parser/join-parser.d.ts +2 -2
  160. package/dist/esm/parser/join-parser.js +3 -4
  161. package/dist/esm/parser/order-by-parser.d.ts +6 -2
  162. package/dist/esm/parser/order-by-parser.js +40 -7
  163. package/dist/esm/parser/parse-utils.js +3 -3
  164. package/dist/esm/parser/reference-parser.d.ts +2 -2
  165. package/dist/esm/parser/reference-parser.js +1 -1
  166. package/dist/esm/parser/returning-parser.d.ts +2 -1
  167. package/dist/esm/parser/select-parser.d.ts +20 -9
  168. package/dist/esm/parser/set-operation-parser.d.ts +3 -1
  169. package/dist/esm/parser/set-operation-parser.js +11 -2
  170. package/dist/esm/parser/tuple-parser.d.ts +47 -0
  171. package/dist/esm/parser/tuple-parser.js +2 -0
  172. package/dist/esm/parser/value-parser.d.ts +5 -3
  173. package/dist/esm/parser/value-parser.js +10 -1
  174. package/dist/esm/parser/with-parser.d.ts +3 -2
  175. package/dist/esm/parser/with-parser.js +16 -4
  176. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  177. package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
  178. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  179. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
  180. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
  181. package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
  182. package/dist/esm/query-builder/case-builder.js +10 -6
  183. package/dist/esm/query-builder/cte-builder.d.ts +20 -0
  184. package/dist/esm/query-builder/cte-builder.js +36 -0
  185. package/dist/esm/query-builder/delete-query-builder.d.ts +39 -10
  186. package/dist/esm/query-builder/delete-query-builder.js +4 -4
  187. package/dist/esm/query-builder/function-module.d.ts +41 -6
  188. package/dist/esm/query-builder/function-module.js +3 -0
  189. package/dist/esm/query-builder/having-interface.d.ts +2 -5
  190. package/dist/esm/query-builder/insert-query-builder.d.ts +5 -3
  191. package/dist/esm/query-builder/join-builder.d.ts +2 -6
  192. package/dist/esm/query-builder/join-builder.js +3 -3
  193. package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
  194. package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
  195. package/dist/esm/query-builder/on-conflict-builder.js +5 -5
  196. package/dist/esm/query-builder/over-builder.js +1 -1
  197. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  198. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  199. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  200. package/dist/esm/query-builder/select-query-builder.d.ts +206 -67
  201. package/dist/esm/query-builder/select-query-builder.js +75 -923
  202. package/dist/esm/query-builder/update-query-builder.d.ts +39 -10
  203. package/dist/esm/query-builder/update-query-builder.js +3 -3
  204. package/dist/esm/query-builder/where-interface.d.ts +32 -8
  205. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  206. package/dist/esm/query-compiler/default-query-compiler.js +39 -7
  207. package/dist/esm/query-creator.d.ts +76 -2
  208. package/dist/esm/query-creator.js +37 -7
  209. package/dist/esm/raw-builder/raw-builder.d.ts +87 -51
  210. package/dist/esm/raw-builder/raw-builder.js +17 -42
  211. package/dist/esm/raw-builder/sql.js +9 -9
  212. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  213. package/dist/esm/schema/alter-table-builder.js +12 -0
  214. package/dist/esm/schema/create-index-builder.d.ts +1 -1
  215. package/dist/esm/schema/create-index-builder.js +2 -2
  216. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  217. package/dist/esm/util/column-type.d.ts +7 -6
  218. package/dist/esm/util/infer-result.d.ts +2 -1
  219. package/dist/esm/util/json-object-args.d.ts +3 -0
  220. package/dist/esm/util/json-object-args.js +32 -0
  221. package/dist/esm/util/object-utils.d.ts +1 -0
  222. package/dist/esm/util/object-utils.js +7 -0
  223. package/dist/esm/util/type-utils.d.ts +16 -17
  224. package/helpers/sqlite.d.ts +1 -0
  225. package/helpers/sqlite.js +1 -0
  226. package/package.json +7 -4
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://stand-with-ukraine.pp.ua)
2
2
 
3
3
  [![Discord](https://img.shields.io/discord/890118421587578920?logo=discord&style=flat)](https://discord.gg/xyBJ3GwvAm)
4
- [![Tests](https://github.com/koskimas/kysely/actions/workflows/test.yml/badge.svg)](https://github.com/koskimas/kysely)
4
+ [![Tests](https://github.com/kysely-org/kysely/actions/workflows/test.yml/badge.svg)](https://github.com/kysely-org/kysely)
5
5
  [![License](https://img.shields.io/github/license/kysely-org/kysely?style=flat)](https://github.com/kysely-org/kysely/blob/master/LICENSE)
6
6
  [![Issues](https://img.shields.io/github/issues-closed/kysely-org/kysely?logo=github)](https://github.com/kysely-org/kysely/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc)
7
7
  [![Pull Requests](https://img.shields.io/github/issues-pr-closed/kysely-org/kysely?label=PRs&logo=github&style=flat)](https://github.com/kysely-org/kysely/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)
@@ -16,7 +16,7 @@ Kysely (pronounce “Key-Seh-Lee”) is a type-safe and autocompletion-friendly
16
16
  Inspired by [knex](http://knexjs.org/). Mainly developed for [node.js](https://nodejs.org/en/) but also
17
17
  runs on all other javascript environments like [deno](https://deno.land/).
18
18
 
19
- ![](https://github.com/koskimas/kysely/blob/master/assets/demo.gif)
19
+ ![](https://github.com/kysely-org/kysely/blob/master/assets/demo.gif)
20
20
 
21
21
  Kysely makes sure you only refer to tables and columns that are visible to the part of the query
22
22
  you're writing. The result type only has the selected columns with correct types and aliases. As an
@@ -28,11 +28,11 @@ column names, aliases and types from selected subqueries, joined subqueries, `wi
28
28
  much anything you can think of.
29
29
 
30
30
  Of course there are cases where things cannot be typed at compile time, and Kysely offers escape
31
- hatches for these situations. See the [sql template tag](https://kysely-org.github.io/kysely/interfaces/Sql.html)
32
- and the [DynamicModule](https://kysely-org.github.io/kysely/classes/DynamicModule.html#ref) for more info.
31
+ hatches for these situations. See the [sql template tag](https://kysely-org.github.io/kysely-apidoc/interfaces/Sql.html)
32
+ and the [DynamicModule](https://kysely-org.github.io/kysely-apidoc/classes/DynamicModule.html#ref) for more info.
33
33
 
34
34
  All API documentation is written in the typing files and you can simply hover over the module, class
35
- or method you're using to see it in your IDE. The same documentation is also hosted [here](https://github.com/koskimas/kysely).
35
+ or method you're using to see it in your IDE. The same documentation is also hosted [here](https://github.com/kysely-org/kysely).
36
36
 
37
37
  If you start using Kysely and can't find something you'd want to use, please open an issue or join our
38
38
  [discord server](https://discord.gg/xyBJ3GwvAm).
@@ -40,7 +40,7 @@ If you start using Kysely and can't find something you'd want to use, please ope
40
40
  # Getting started
41
41
 
42
42
  Please visit our documentation site [kysely.dev](https://kysely.dev) to get started. We also have a comprehensive
43
- API documentation hosted [here](https://kysely-org.github.io/kysely/) but you can access the same
43
+ API documentation hosted [here](https://kysely-org.github.io/kysely-apidoc/) but you can access the same
44
44
  documentation in your IDE by hovering over a class/method/property/whatever.
45
45
 
46
46
  # Contributors
@@ -1,5 +1,5 @@
1
1
  import { Kysely } from '../kysely.js';
2
- import { DialectAdapter } from './dialect-adapter.js';
2
+ import { DialectAdapter, MigrationLockOptions } from './dialect-adapter.js';
3
3
  /**
4
4
  * A basic implementation of `DialectAdapter` with sensible default values.
5
5
  * 3rd party dialects can extend this instead of implementing the `DialectAdapter`
@@ -63,7 +63,7 @@ export declare abstract class DialectAdapterBase implements DialectAdapter {
63
63
  * `db` is a single connection (session) that will be used to execute the
64
64
  * migrations.
65
65
  */
66
- abstract acquireMigrationLock(db: Kysely<any>): Promise<void>;
66
+ abstract acquireMigrationLock(db: Kysely<any>, options: MigrationLockOptions): Promise<void>;
67
67
  /**
68
68
  * Releases the migration lock. See {@link acquireMigrationLock}.
69
69
  *
@@ -72,5 +72,5 @@ export declare abstract class DialectAdapterBase implements DialectAdapter {
72
72
  * is a single connection (session) that was used to execute the migrations
73
73
  * and the `acquireMigrationLock` call.
74
74
  */
75
- abstract releaseMigrationLock(db: Kysely<any>): Promise<void>;
75
+ abstract releaseMigrationLock(db: Kysely<any>, options: MigrationLockOptions): Promise<void>;
76
76
  }
@@ -1,5 +1,6 @@
1
1
  import { Kysely } from '../../kysely.js';
2
2
  import { DialectAdapterBase } from '../dialect-adapter-base.js';
3
+ import { MigrationLockOptions } from '../dialect-adapter.js';
3
4
  export declare class MysqlAdapter extends DialectAdapterBase {
4
5
  /**
5
6
  * Whether or not this dialect supports transactional DDL.
@@ -57,7 +58,7 @@ export declare class MysqlAdapter extends DialectAdapterBase {
57
58
  * `db` is a single connection (session) that will be used to execute the
58
59
  * migrations.
59
60
  */
60
- acquireMigrationLock(db: Kysely<any>): Promise<void>;
61
+ acquireMigrationLock(db: Kysely<any>, _opt: MigrationLockOptions): Promise<void>;
61
62
  /**
62
63
  * Releases the migration lock. See {@link acquireMigrationLock}.
63
64
  *
@@ -66,5 +67,5 @@ export declare class MysqlAdapter extends DialectAdapterBase {
66
67
  * is a single connection (session) that was used to execute the migrations
67
68
  * and the `acquireMigrationLock` call.
68
69
  */
69
- releaseMigrationLock(db: Kysely<any>): Promise<void>;
70
+ releaseMigrationLock(db: Kysely<any>, _opt: MigrationLockOptions): Promise<void>;
70
71
  }
@@ -12,7 +12,7 @@ class MysqlAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
12
12
  get supportsReturning() {
13
13
  return false;
14
14
  }
15
- async acquireMigrationLock(db) {
15
+ async acquireMigrationLock(db, _opt) {
16
16
  // Kysely uses a single connection to run the migrations. Because of that, we
17
17
  // can take a lock using `get_lock`. Locks acquired using `get_lock` get
18
18
  // released when the connection is destroyed (session ends) or when the lock
@@ -21,7 +21,7 @@ class MysqlAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
21
21
  // MySQL if the process gets killed for some reason.
22
22
  await (0, sql_js_1.sql) `select get_lock(${sql_js_1.sql.lit(LOCK_ID)}, ${sql_js_1.sql.lit(LOCK_TIMEOUT_SECONDS)})`.execute(db);
23
23
  }
24
- async releaseMigrationLock(db) {
24
+ async releaseMigrationLock(db, _opt) {
25
25
  await (0, sql_js_1.sql) `select release_lock(${sql_js_1.sql.lit(LOCK_ID)})`.execute(db);
26
26
  }
27
27
  }
@@ -1,5 +1,6 @@
1
1
  import { Kysely } from '../../kysely.js';
2
2
  import { DialectAdapterBase } from '../dialect-adapter-base.js';
3
+ import { MigrationLockOptions } from '../dialect-adapter.js';
3
4
  export declare class PostgresAdapter extends DialectAdapterBase {
4
5
  /**
5
6
  * Whether or not this dialect supports transactional DDL.
@@ -57,7 +58,7 @@ export declare class PostgresAdapter extends DialectAdapterBase {
57
58
  * `db` is a single connection (session) that will be used to execute the
58
59
  * migrations.
59
60
  */
60
- acquireMigrationLock(db: Kysely<any>): Promise<void>;
61
+ acquireMigrationLock(db: Kysely<any>, _opt: MigrationLockOptions): Promise<void>;
61
62
  /**
62
63
  * Releases the migration lock. See {@link acquireMigrationLock}.
63
64
  *
@@ -66,5 +67,5 @@ export declare class PostgresAdapter extends DialectAdapterBase {
66
67
  * is a single connection (session) that was used to execute the migrations
67
68
  * and the `acquireMigrationLock` call.
68
69
  */
69
- releaseMigrationLock(): Promise<void>;
70
+ releaseMigrationLock(_db: Kysely<any>, _opt: MigrationLockOptions): Promise<void>;
70
71
  }
@@ -12,11 +12,11 @@ class PostgresAdapter extends dialect_adapter_base_js_1.DialectAdapterBase {
12
12
  get supportsReturning() {
13
13
  return true;
14
14
  }
15
- async acquireMigrationLock(db) {
15
+ async acquireMigrationLock(db, _opt) {
16
16
  // Acquire a transaction level advisory lock.
17
17
  await (0, sql_js_1.sql) `select pg_advisory_xact_lock(${sql_js_1.sql.lit(LOCK_ID)})`.execute(db);
18
18
  }
19
- async releaseMigrationLock() {
19
+ async releaseMigrationLock(_db, _opt) {
20
20
  // Nothing to do here. `pg_advisory_xact_lock` is automatically released at the
21
21
  // end of the transaction and since `supportsTransactionalDdl` true, we know
22
22
  // the `db` instance passed to acquireMigrationLock is actually a transaction.
@@ -8,7 +8,7 @@ export interface PostgresDialectConfig {
8
8
  *
9
9
  * If a function is provided, it's called once when the first query is executed.
10
10
  *
11
- * https://node-postgres.com/api/pool
11
+ * https://node-postgres.com/apis/pool
12
12
  */
13
13
  pool: PostgresPool | (() => Promise<PostgresPool>);
14
14
  /**
@@ -35,7 +35,7 @@ export interface PostgresDialectConfig {
35
35
  *
36
36
  * We don't use the type from `pg` here to not have a dependency to it.
37
37
  *
38
- * https://node-postgres.com/api/pool
38
+ * https://node-postgres.com/apis/pool
39
39
  */
40
40
  export interface PostgresPool {
41
41
  connect(): Promise<PostgresPoolClient>;
@@ -1,4 +1,6 @@
1
+ import { Kysely } from '../../kysely.js';
1
2
  import { DialectAdapterBase } from '../dialect-adapter-base.js';
3
+ import { MigrationLockOptions } from '../dialect-adapter.js';
2
4
  export declare class SqliteAdapter implements DialectAdapterBase {
3
5
  /**
4
6
  * Whether or not this dialect supports transactional DDL.
@@ -56,7 +58,7 @@ export declare class SqliteAdapter implements DialectAdapterBase {
56
58
  * `db` is a single connection (session) that will be used to execute the
57
59
  * migrations.
58
60
  */
59
- acquireMigrationLock(): Promise<void>;
61
+ acquireMigrationLock(_db: Kysely<any>, _opt: MigrationLockOptions): Promise<void>;
60
62
  /**
61
63
  * Releases the migration lock. See {@link acquireMigrationLock}.
62
64
  *
@@ -65,5 +67,5 @@ export declare class SqliteAdapter implements DialectAdapterBase {
65
67
  * is a single connection (session) that was used to execute the migrations
66
68
  * and the `acquireMigrationLock` call.
67
69
  */
68
- releaseMigrationLock(): Promise<void>;
70
+ releaseMigrationLock(_db: Kysely<any>, _opt: MigrationLockOptions): Promise<void>;
69
71
  }
@@ -8,12 +8,12 @@ class SqliteAdapter {
8
8
  get supportsReturning() {
9
9
  return true;
10
10
  }
11
- async acquireMigrationLock() {
11
+ async acquireMigrationLock(_db, _opt) {
12
12
  // SQLite only has one connection that's reserved by the migration system
13
13
  // for the whole time between acquireMigrationLock and releaseMigrationLock.
14
14
  // We don't need to do anything here.
15
15
  }
16
- async releaseMigrationLock() {
16
+ async releaseMigrationLock(_db, _opt) {
17
17
  // SQLite only has one connection that's reserved by the migration system
18
18
  // for the whole time between acquireMigrationLock and releaseMigrationLock.
19
19
  // We don't need to do anything here.
@@ -11,15 +11,25 @@ class RuntimeDriver {
11
11
  #driver;
12
12
  #log;
13
13
  #initPromise;
14
+ #initDone;
14
15
  #destroyPromise;
15
16
  #connections = new WeakSet();
16
17
  constructor(driver, log) {
18
+ this.#initDone = false;
17
19
  this.#driver = driver;
18
20
  this.#log = log;
19
21
  }
20
22
  async init() {
23
+ if (this.#destroyPromise) {
24
+ throw new Error('driver has already been destroyed');
25
+ }
21
26
  if (!this.#initPromise) {
22
- this.#initPromise = this.#driver.init().catch((err) => {
27
+ this.#initPromise = this.#driver
28
+ .init()
29
+ .then(() => {
30
+ this.#initDone = true;
31
+ })
32
+ .catch((err) => {
23
33
  this.#initPromise = undefined;
24
34
  return Promise.reject(err);
25
35
  });
@@ -27,7 +37,12 @@ class RuntimeDriver {
27
37
  await this.#initPromise;
28
38
  }
29
39
  async acquireConnection() {
30
- await this.init();
40
+ if (this.#destroyPromise) {
41
+ throw new Error('driver has already been destroyed');
42
+ }
43
+ if (!this.#initDone) {
44
+ await this.init();
45
+ }
31
46
  const connection = await this.#driver.acquireConnection();
32
47
  if (!this.#connections.has(connection)) {
33
48
  if (this.#needsLogging()) {
@@ -3,14 +3,17 @@ import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable,
3
3
  import { FunctionModule } from '../query-builder/function-module.js';
4
4
  import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
5
  import { QueryExecutor } from '../query-executor/query-executor.js';
6
- import { BinaryOperatorExpression, ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
6
+ import { BinaryOperatorExpression, ComparisonOperatorExpression, FilterObject, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
7
7
  import { Expression } from './expression.js';
8
8
  import { ExpressionWrapper } from './expression-wrapper.js';
9
9
  import { ComparisonOperator, JSONOperatorWith$, UnaryOperator } from '../operation-node/operator-node.js';
10
10
  import { SqlBool } from '../util/type-utils.js';
11
- import { ExtractTypeFromValueExpressionOrList } from '../parser/value-parser.js';
11
+ import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
12
12
  import { CaseBuilder } from '../query-builder/case-builder.js';
13
13
  import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
14
+ import { OperandExpression } from '../parser/expression-parser.js';
15
+ import { CallbackSelection, SelectCallback, SelectExpression, Selection } from '../parser/select-parser.js';
16
+ import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js';
14
17
  export interface ExpressionBuilder<DB, TB extends keyof DB> {
15
18
  /**
16
19
  * Creates a binary expression.
@@ -20,31 +23,45 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
20
23
  *
21
24
  * ### Examples
22
25
  *
23
- * In the following example `eb` is used to increment an integer column:
26
+ * A simple comparison:
24
27
  *
25
28
  * ```ts
26
- * db.updateTable('person')
27
- * .set((eb) => ({
28
- * age: eb('age', '+', 1)
29
- * }))
30
- * .where('id', '=', id)
29
+ * eb.selectFrom('person')
30
+ * .selectAll()
31
+ * .where((eb) => eb('first_name', '=', 'Jennifer'))
31
32
  * ```
32
33
  *
33
34
  * The generated SQL (PostgreSQL):
34
35
  *
35
36
  * ```sql
36
- * update "person"
37
- * set "age" = "age" + $1
38
- * where "id" = $2
37
+ * select *
38
+ * from "person"
39
+ * where "first_name" = $1
40
+ * ```
41
+ *
42
+ * By default the third argument is interpreted as a value. To pass in
43
+ * a column reference, you can use {@link ref}:
44
+ *
45
+ * ```ts
46
+ * eb.selectFrom('person')
47
+ * .selectAll()
48
+ * .where((eb) => eb('first_name', '=', eb.ref('last_name')))
49
+ * ```
50
+ *
51
+ * The generated SQL (PostgreSQL):
52
+ *
53
+ * ```sql
54
+ * select *
55
+ * from "person"
56
+ * where "first_name" = "last_name"
39
57
  * ```
40
58
  *
41
- * By default the third argument is a value. {@link ref} can be used to
42
- * pass in a column reference instead:
59
+ * In the following example `eb` is used to increment an integer column:
43
60
  *
44
61
  * ```ts
45
62
  * db.updateTable('person')
46
63
  * .set((eb) => ({
47
- * age: eb('age', '+', eb.ref('age'))
64
+ * age: eb('age', '+', 1)
48
65
  * }))
49
66
  * .where('id', '=', id)
50
67
  * ```
@@ -53,8 +70,23 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
53
70
  *
54
71
  * ```sql
55
72
  * update "person"
56
- * set "age" = "age" + "age"
57
- * where "id" = $1
73
+ * set "age" = "age" + $1
74
+ * where "id" = $2
75
+ * ```
76
+ *
77
+ * As always, expressions can be nested. Both the first and the third argument
78
+ * can be any expression:
79
+ *
80
+ * ```ts
81
+ * eb.selectFrom('person')
82
+ * .selectAll()
83
+ * .where((eb) => eb(
84
+ * eb.fn('lower', ['first_name']),
85
+ * 'in',
86
+ * eb.selectFrom('pet')
87
+ * .select('pet.name')
88
+ * .where('pet.species', '=', 'cat')
89
+ * ))
58
90
  * ```
59
91
  */
60
92
  <RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
@@ -81,7 +113,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
81
113
  * )
82
114
  * ```
83
115
  */
84
- eb: ExpressionBuilder<DB, TB>;
116
+ get eb(): ExpressionBuilder<DB, TB>;
85
117
  /**
86
118
  * Returns a {@link FunctionModule} that can be used to write type safe function
87
119
  * calls.
@@ -163,6 +195,18 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
163
195
  selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
164
196
  selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
165
197
  selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
198
+ /**
199
+ * Creates a `select` expression without a `from` clause.
200
+ *
201
+ * If you want to create a `select from` query, use the `selectFrom` method instead.
202
+ * This one can be used to create a plain `select` statement without a `from` clause.
203
+ *
204
+ * This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
205
+ * documentation for examples.
206
+ */
207
+ selectNoFrom<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
208
+ selectNoFrom<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, CallbackSelection<DB, TB, CB>>;
209
+ selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
166
210
  /**
167
211
  * Creates a `case` statement/operator.
168
212
  *
@@ -322,7 +366,144 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
322
366
  * $1 = "age"
323
367
  * ```
324
368
  */
325
- val<VE>(value: VE): ExpressionWrapper<DB, TB, ExtractTypeFromValueExpressionOrList<VE>>;
369
+ val<VE>(value: VE): ExpressionWrapper<DB, TB, ExtractTypeFromValueExpression<VE>>;
370
+ /**
371
+ * Creates a tuple expression.
372
+ *
373
+ * This creates a tuple using column references by default. See {@link tuple}
374
+ * if you need to create value tuples.
375
+ *
376
+ * ### Examples
377
+ *
378
+ * ```ts
379
+ * db.selectFrom('person')
380
+ * .selectAll('person')
381
+ * .where(({ eb, refTuple, tuple }) => eb(
382
+ * refTuple('first_name', 'last_name'),
383
+ * 'in',
384
+ * [
385
+ * tuple('Jennifer', 'Aniston'),
386
+ * tuple('Sylvester', 'Stallone')
387
+ * ]
388
+ * ))
389
+ * ```
390
+ *
391
+ * The generated SQL (PostgreSQL):
392
+ *
393
+ * ```sql
394
+ * select
395
+ * "person".*
396
+ * from
397
+ * "person"
398
+ * where
399
+ * ("first_name", "last_name")
400
+ * in
401
+ * (
402
+ * ($1, $2),
403
+ * ($3, $4)
404
+ * )
405
+ * ```
406
+ *
407
+ * In the next example a reference tuple is compared to a subquery. Note that
408
+ * in this case you need to use the {@link @SelectQueryBuilder.$asTuple | $asTuple}
409
+ * function:
410
+ *
411
+ * ```ts
412
+ * db.selectFrom('person')
413
+ * .selectAll('person')
414
+ * .where(({ eb, refTuple, selectFrom }) => eb(
415
+ * refTuple('first_name', 'last_name'),
416
+ * 'in',
417
+ * selectFrom('pet')
418
+ * .select(['name', 'species'])
419
+ * .where('species', '!=', 'cat')
420
+ * .$asTuple('name', 'species')
421
+ * ))
422
+ * ```
423
+ *
424
+ * The generated SQL (PostgreSQL):
425
+ *
426
+ * ```sql
427
+ * select
428
+ * "person".*
429
+ * from
430
+ * "person"
431
+ * where
432
+ * ("first_name", "last_name")
433
+ * in
434
+ * (
435
+ * select "name", "species"
436
+ * from "pet"
437
+ * where "species" != $1
438
+ * )
439
+ * ```
440
+ */
441
+ refTuple<R1 extends ReferenceExpression<DB, TB>, R2 extends ReferenceExpression<DB, TB>>(value1: R1, value2: R2): ExpressionWrapper<DB, TB, RefTuple2<DB, TB, R1, R2>>;
442
+ refTuple<R1 extends ReferenceExpression<DB, TB>, R2 extends ReferenceExpression<DB, TB>, R3 extends ReferenceExpression<DB, TB>>(value1: R1, value2: R2, value3: R3): ExpressionWrapper<DB, TB, RefTuple3<DB, TB, R1, R2, R3>>;
443
+ refTuple<R1 extends ReferenceExpression<DB, TB>, R2 extends ReferenceExpression<DB, TB>, R3 extends ReferenceExpression<DB, TB>, R4 extends ReferenceExpression<DB, TB>>(value1: R1, value2: R2, value3: R3, value4: R4): ExpressionWrapper<DB, TB, RefTuple4<DB, TB, R1, R2, R3, R4>>;
444
+ refTuple<R1 extends ReferenceExpression<DB, TB>, R2 extends ReferenceExpression<DB, TB>, R3 extends ReferenceExpression<DB, TB>, R4 extends ReferenceExpression<DB, TB>, R5 extends ReferenceExpression<DB, TB>>(value1: R1, value2: R2, value3: R3, value4: R4, value5: R5): ExpressionWrapper<DB, TB, RefTuple5<DB, TB, R1, R2, R3, R4, R5>>;
445
+ /**
446
+ * Creates a value tuple expression.
447
+ *
448
+ * This creates a tuple using values by default. See {@link refTuple} if you need to create
449
+ * tuples using column references.
450
+ *
451
+ * ### Examples
452
+ *
453
+ * ```ts
454
+ * db.selectFrom('person')
455
+ * .selectAll('person')
456
+ * .where(({ eb, refTuple, tuple }) => eb(
457
+ * refTuple('first_name', 'last_name'),
458
+ * 'in',
459
+ * [
460
+ * tuple('Jennifer', 'Aniston'),
461
+ * tuple('Sylvester', 'Stallone')
462
+ * ]
463
+ * ))
464
+ * ```
465
+ *
466
+ * The generated SQL (PostgreSQL):
467
+ *
468
+ * ```sql
469
+ * select
470
+ * "person".*
471
+ * from
472
+ * "person"
473
+ * where
474
+ * ("first_name", "last_name")
475
+ * in
476
+ * (
477
+ * ($1, $2),
478
+ * ($3, $4)
479
+ * )
480
+ * ```
481
+ */
482
+ tuple<V1, V2>(value1: V1, value2: V2): ExpressionWrapper<DB, TB, ValTuple2<V1, V2>>;
483
+ tuple<V1, V2, V3>(value1: V1, value2: V2, value3: V3): ExpressionWrapper<DB, TB, ValTuple3<V1, V2, V3>>;
484
+ tuple<V1, V2, V3, V4>(value1: V1, value2: V2, value3: V3, value4: V4): ExpressionWrapper<DB, TB, ValTuple4<V1, V2, V3, V4>>;
485
+ tuple<V1, V2, V3, V4, V5>(value1: V1, value2: V2, value3: V3, value4: V4, value5: V5): ExpressionWrapper<DB, TB, ValTuple5<V1, V2, V3, V4, V5>>;
486
+ /**
487
+ * Returns a literal value expression.
488
+ *
489
+ * Just like `val` but creates a literal value that gets merged in the SQL.
490
+ * To prevent SQL injections, only `boolean`, `number` and `null` values
491
+ * are accepted. If you need `string` or other literals, use `sql.lit` instead.
492
+ *
493
+ * ### Examples
494
+ *
495
+ * ```ts
496
+ * db.selectFrom('person')
497
+ * .select((eb) => eb.lit(1).as('one'))
498
+ * ```
499
+ *
500
+ * The generated SQL (PostgreSQL):
501
+ *
502
+ * ```sql
503
+ * select 1 as "one" from "person"
504
+ * ```
505
+ */
506
+ lit<VE extends number | boolean | null>(literal: VE): ExpressionWrapper<DB, TB, VE>;
326
507
  /**
327
508
  * @deprecated Use the expression builder as a function instead.
328
509
  *
@@ -423,9 +604,47 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
423
604
  * @see {@link unary}
424
605
  */
425
606
  neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
607
+ /**
608
+ * Creates a `between` expression.
609
+ *
610
+ * ### Examples
611
+ *
612
+ * ```ts
613
+ * db.selectFrom('person')
614
+ * .selectAll()
615
+ * .where((eb) => eb.between('age', 40, 60))
616
+ * ```
617
+ *
618
+ * The generated SQL (PostgreSQL):
619
+ *
620
+ * ```sql
621
+ * select * from "person" where "age" between $1 and $2
622
+ * ```
623
+ */
624
+ between<RE extends ReferenceExpression<DB, TB>>(expr: RE, start: OperandValueExpression<DB, TB, RE>, end: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, SqlBool>;
625
+ /**
626
+ * Creates a `between symmetric` expression.
627
+ *
628
+ * ### Examples
629
+ *
630
+ * ```ts
631
+ * db.selectFrom('person')
632
+ * .selectAll()
633
+ * .where((eb) => eb.betweenSymmetric('age', 40, 60))
634
+ * ```
635
+ *
636
+ * The generated SQL (PostgreSQL):
637
+ *
638
+ * ```sql
639
+ * select * from "person" where "age" between symmetric $1 and $2
640
+ * ```
641
+ */
642
+ betweenSymmetric<RE extends ReferenceExpression<DB, TB>>(expr: RE, start: OperandValueExpression<DB, TB, RE>, end: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, SqlBool>;
426
643
  /**
427
644
  * Combines two or more expressions using the logical `and` operator.
428
645
  *
646
+ * An empty array produces a `true` expression.
647
+ *
429
648
  * This function returns an {@link Expression} and can be used pretty much anywhere.
430
649
  * See the examples for a couple of possible use cases.
431
650
  *
@@ -449,15 +668,43 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
449
668
  * ```sql
450
669
  * select "person".*
451
670
  * from "person"
452
- * where "first_name" = $1
453
- * and "first_name" = $2
454
- * and "first_name" = $3
671
+ * where (
672
+ * "first_name" = $1
673
+ * and "first_name" = $2
674
+ * and "first_name" = $3
675
+ * )
676
+ * ```
677
+ *
678
+ * Optionally you can use the simpler object notation if you only need
679
+ * equality comparisons:
680
+ *
681
+ * ```ts
682
+ * db.selectFrom('person')
683
+ * .selectAll('person')
684
+ * .where((eb) => eb.and({
685
+ * first_name: 'Jennifer',
686
+ * last_name: 'Aniston'
687
+ * }))
688
+ * ```
689
+ *
690
+ * The generated SQL (PostgreSQL):
691
+ *
692
+ * ```sql
693
+ * select "person".*
694
+ * from "person"
695
+ * where (
696
+ * "first_name" = $1
697
+ * and "last_name" = $2
698
+ * )
455
699
  * ```
456
700
  */
457
- and(exprs: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
701
+ and(exprs: ReadonlyArray<OperandExpression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
702
+ and(exprs: Readonly<FilterObject<DB, TB>>): ExpressionWrapper<DB, TB, SqlBool>;
458
703
  /**
459
704
  * Combines two or more expressions using the logical `or` operator.
460
705
  *
706
+ * An empty array produces a `false` expression.
707
+ *
461
708
  * This function returns an {@link Expression} and can be used pretty much anywhere.
462
709
  * See the examples for a couple of possible use cases.
463
710
  *
@@ -469,7 +716,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
469
716
  * ```ts
470
717
  * db.selectFrom('person')
471
718
  * .selectAll('person')
472
- * .where((eb) => or([
719
+ * .where((eb) => eb.or([
473
720
  * eb('first_name', '=', 'Jennifer'),
474
721
  * eb('fist_name', '=', 'Arnold'),
475
722
  * eb('fist_name', '=', 'Sylvester')
@@ -481,12 +728,38 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
481
728
  * ```sql
482
729
  * select "person".*
483
730
  * from "person"
484
- * where "first_name" = $1
485
- * or "first_name" = $2
486
- * or "first_name" = $3
731
+ * where (
732
+ * "first_name" = $1
733
+ * or "first_name" = $2
734
+ * or "first_name" = $3
735
+ * )
736
+ * ```
737
+ *
738
+ * Optionally you can use the simpler object notation if you only need
739
+ * equality comparisons:
740
+ *
741
+ * ```ts
742
+ * db.selectFrom('person')
743
+ * .selectAll('person')
744
+ * .where((eb) => eb.or({
745
+ * first_name: 'Jennifer',
746
+ * last_name: 'Aniston'
747
+ * }))
748
+ * ```
749
+ *
750
+ * The generated SQL (PostgreSQL):
751
+ *
752
+ * ```sql
753
+ * select "person".*
754
+ * from "person"
755
+ * where (
756
+ * "first_name" = $1
757
+ * or "last_name" = $2
758
+ * )
487
759
  * ```
488
760
  */
489
- or(exprs: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
761
+ or(exprs: ReadonlyArray<OperandExpression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
762
+ or(exprs: Readonly<FilterObject<DB, TB>>): ExpressionWrapper<DB, TB, SqlBool>;
490
763
  /**
491
764
  * Wraps the expression in parentheses.
492
765
  *