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
@@ -13,13 +13,16 @@ export interface PostgresDialectConfig {
13
13
  pool: PostgresPool | (() => Promise<PostgresPool>);
14
14
  /**
15
15
  * https://github.com/brianc/node-postgres/tree/master/packages/pg-cursor
16
+ *
16
17
  * ```ts
18
+ * import { PostgresDialect } from 'kysely'
19
+ * import { Pool } from 'pg'
17
20
  * import Cursor from 'pg-cursor'
18
- * // or
19
- * import * as Cursor from 'pg-cursor'
21
+ * // or import * as Cursor from 'pg-cursor'
20
22
  *
21
23
  * new PostgresDialect({
22
- * cursor: Cursor
24
+ * cursor: Cursor,
25
+ * pool: new Pool('postgres://localhost:5432/mydb')
23
26
  * })
24
27
  * ```
25
28
  */
@@ -28,6 +31,10 @@ export interface PostgresDialectConfig {
28
31
  * Called once for each created connection.
29
32
  */
30
33
  onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
34
+ /**
35
+ * Called every time a connection is acquired from the pool.
36
+ */
37
+ onReserveConnection?: (connection: DatabaseConnection) => Promise<void>;
31
38
  }
32
39
  /**
33
40
  * This interface is the subset of pg driver's `Pool` class that
@@ -30,6 +30,9 @@ export class PostgresDriver {
30
30
  await this.#config.onCreateConnection(connection);
31
31
  }
32
32
  }
33
+ if (this.#config.onReserveConnection) {
34
+ await this.#config.onReserveConnection(connection);
35
+ }
33
36
  return connection;
34
37
  }
35
38
  async beginTransaction(connection, settings) {
@@ -49,7 +49,11 @@ export class PostgresIntrospector {
49
49
  .as('auto_incrementing'),
50
50
  ])
51
51
  // r == normal table
52
- .where((eb) => eb.or([eb('c.relkind', '=', 'r'), eb('c.relkind', '=', 'v'), eb('c.relkind', '=', 'p')]))
52
+ .where((eb) => eb.or([
53
+ eb('c.relkind', '=', 'r'),
54
+ eb('c.relkind', '=', 'v'),
55
+ eb('c.relkind', '=', 'p'),
56
+ ]))
53
57
  .where('ns.nspname', '!~', '^pg_')
54
58
  .where('ns.nspname', '!=', 'information_schema')
55
59
  // No system columns
@@ -33,8 +33,13 @@ export declare class SqliteAdapter extends DialectAdapterBase {
33
33
  * have explicit locks but supports `FOR UPDATE` row locks and transactional DDL:
34
34
  *
35
35
  * ```ts
36
- * {
37
- * async acquireMigrationLock(db, options): Promise<void> {
36
+ * import { DialectAdapterBase, type MigrationLockOptions, Kysely } from 'kysely'
37
+ *
38
+ * export class MyAdapter extends DialectAdapterBase {
39
+ * override async acquireMigrationLock(
40
+ * db: Kysely<any>,
41
+ * options: MigrationLockOptions
42
+ * ): Promise<void> {
38
43
  * const queryDb = options.lockTableSchema
39
44
  * ? db.withSchema(options.lockTableSchema)
40
45
  * : db
@@ -50,6 +55,10 @@ export declare class SqliteAdapter extends DialectAdapterBase {
50
55
  * .forUpdate()
51
56
  * .execute()
52
57
  * }
58
+ *
59
+ * override async releaseMigrationLock() {
60
+ * // noop
61
+ * }
53
62
  * }
54
63
  * ```
55
64
  *
@@ -11,58 +11,80 @@ export class SqliteIntrospector {
11
11
  return [];
12
12
  }
13
13
  async getTables(options = { withInternalKyselyTables: false }) {
14
- let query = this.#db
14
+ return await this.#getTableMetadata(options);
15
+ }
16
+ async getMetadata(options) {
17
+ return {
18
+ tables: await this.getTables(options),
19
+ };
20
+ }
21
+ #tablesQuery(qb, options) {
22
+ let tablesQuery = qb
15
23
  .selectFrom('sqlite_master')
16
24
  .where('type', 'in', ['table', 'view'])
17
25
  .where('name', 'not like', 'sqlite_%')
18
- .select('name')
19
- .orderBy('name')
20
- .$castTo();
26
+ .select(['name', 'sql', 'type'])
27
+ .orderBy('name');
21
28
  if (!options.withInternalKyselyTables) {
22
- query = query
29
+ tablesQuery = tablesQuery
23
30
  .where('name', '!=', DEFAULT_MIGRATION_TABLE)
24
31
  .where('name', '!=', DEFAULT_MIGRATION_LOCK_TABLE);
25
32
  }
26
- const tables = await query.execute();
27
- return Promise.all(tables.map(({ name }) => this.#getTableMetadata(name)));
33
+ return tablesQuery;
28
34
  }
29
- async getMetadata(options) {
30
- return {
31
- tables: await this.getTables(options),
32
- };
33
- }
34
- async #getTableMetadata(table) {
35
- const db = this.#db;
36
- // Get the SQL that was used to create the table.
37
- const tableDefinition = await db
38
- .selectFrom('sqlite_master')
39
- .where('name', '=', table)
40
- .select(['sql', 'type'])
41
- .$castTo()
42
- .executeTakeFirstOrThrow();
43
- // Try to find the name of the column that has `autoincrement` 🤦
44
- const autoIncrementCol = tableDefinition.sql
45
- ?.split(/[\(\),]/)
46
- ?.find((it) => it.toLowerCase().includes('autoincrement'))
47
- ?.trimStart()
48
- ?.split(/\s+/)?.[0]
49
- ?.replace(/["`]/g, '');
50
- const columns = await db
51
- .selectFrom(sql `pragma_table_info(${table})`.as('table_info'))
52
- .select(['name', 'type', 'notnull', 'dflt_value'])
53
- .orderBy('cid')
35
+ async #getTableMetadata(options) {
36
+ const tablesResult = await this.#tablesQuery(this.#db, options).execute();
37
+ const tableMetadata = await this.#db
38
+ .with('table_list', (qb) => this.#tablesQuery(qb, options))
39
+ .selectFrom([
40
+ 'table_list as tl',
41
+ sql `pragma_table_info(tl.name)`.as('p'),
42
+ ])
43
+ .select([
44
+ 'tl.name as table',
45
+ 'p.cid',
46
+ 'p.name',
47
+ 'p.type',
48
+ 'p.notnull',
49
+ 'p.dflt_value',
50
+ 'p.pk',
51
+ ])
52
+ .orderBy(['tl.name', 'p.cid'])
54
53
  .execute();
55
- return {
56
- name: table,
57
- isView: tableDefinition.type === 'view',
58
- columns: columns.map((col) => ({
59
- name: col.name,
60
- dataType: col.type,
61
- isNullable: !col.notnull,
62
- isAutoIncrementing: col.name === autoIncrementCol,
63
- hasDefaultValue: col.dflt_value != null,
64
- comment: undefined,
65
- })),
66
- };
54
+ const columnsByTable = {};
55
+ for (const row of tableMetadata) {
56
+ columnsByTable[row.table] ??= [];
57
+ columnsByTable[row.table].push(row);
58
+ }
59
+ return tablesResult.map(({ name, sql, type }) => {
60
+ // // Try to find the name of the column that has `autoincrement` 🤦
61
+ let autoIncrementCol = sql
62
+ ?.split(/[\(\),]/)
63
+ ?.find((it) => it.toLowerCase().includes('autoincrement'))
64
+ ?.trimStart()
65
+ ?.split(/\s+/)?.[0]
66
+ ?.replace(/["`]/g, '');
67
+ const columns = columnsByTable[name] ?? [];
68
+ // Otherwise, check for an INTEGER PRIMARY KEY
69
+ // https://www.sqlite.org/autoinc.html
70
+ if (!autoIncrementCol) {
71
+ const pkCols = columns.filter((r) => r.pk > 0);
72
+ if (pkCols.length === 1 && pkCols[0].type.toLowerCase() === 'integer') {
73
+ autoIncrementCol = pkCols[0].name;
74
+ }
75
+ }
76
+ return {
77
+ name: name,
78
+ isView: type === 'view',
79
+ columns: columns.map((col) => ({
80
+ name: col.name,
81
+ dataType: col.type,
82
+ isNullable: !col.notnull,
83
+ isAutoIncrementing: col.name === autoIncrementCol,
84
+ hasDefaultValue: col.dflt_value != null,
85
+ comment: undefined,
86
+ })),
87
+ };
88
+ });
67
89
  }
68
90
  }
@@ -10,20 +10,21 @@ import { Driver } from './driver.js';
10
10
  * This example creates a Kysely instance for building postgres queries:
11
11
  *
12
12
  * ```ts
13
+ * import {
14
+ * DummyDriver,
15
+ * Kysely,
16
+ * PostgresAdapter,
17
+ * PostgresIntrospector,
18
+ * PostgresQueryCompiler
19
+ * } from 'kysely'
20
+ * import type { Database } from 'type-editor' // imaginary module
21
+ *
13
22
  * const db = new Kysely<Database>({
14
23
  * dialect: {
15
- * createAdapter() {
16
- * return new PostgresAdapter()
17
- * },
18
- * createDriver() {
19
- * return new DummyDriver()
20
- * },
21
- * createIntrospector(db: Kysely<any>) {
22
- * return new PostgresIntrospector(db)
23
- * },
24
- * createQueryCompiler() {
25
- * return new PostgresQueryCompiler()
26
- * },
24
+ * createAdapter: () => new PostgresAdapter(),
25
+ * createDriver: () => new DummyDriver(),
26
+ * createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
27
+ * createQueryCompiler: () => new PostgresQueryCompiler(),
27
28
  * },
28
29
  * })
29
30
  * ```
@@ -9,20 +9,21 @@
9
9
  * This example creates a Kysely instance for building postgres queries:
10
10
  *
11
11
  * ```ts
12
+ * import {
13
+ * DummyDriver,
14
+ * Kysely,
15
+ * PostgresAdapter,
16
+ * PostgresIntrospector,
17
+ * PostgresQueryCompiler
18
+ * } from 'kysely'
19
+ * import type { Database } from 'type-editor' // imaginary module
20
+ *
12
21
  * const db = new Kysely<Database>({
13
22
  * dialect: {
14
- * createAdapter() {
15
- * return new PostgresAdapter()
16
- * },
17
- * createDriver() {
18
- * return new DummyDriver()
19
- * },
20
- * createIntrospector(db: Kysely<any>) {
21
- * return new PostgresIntrospector(db)
22
- * },
23
- * createQueryCompiler() {
24
- * return new PostgresQueryCompiler()
25
- * },
23
+ * createAdapter: () => new PostgresAdapter(),
24
+ * createDriver: () => new DummyDriver(),
25
+ * createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
26
+ * createQueryCompiler: () => new PostgresQueryCompiler(),
26
27
  * },
27
28
  * })
28
29
  * ```
@@ -61,11 +61,11 @@ export declare class DynamicModule {
61
61
  * const { ref } = db.dynamic
62
62
  *
63
63
  * // Some column name provided by the user. Value not known at compile time.
64
- * const columnFromUserInput = req.query.select;
64
+ * const columnFromUserInput: PossibleColumns = 'birthdate';
65
65
  *
66
66
  * // A type that lists all possible values `columnFromUserInput` can have.
67
67
  * // You can use `keyof Person` if any column of an interface is allowed.
68
- * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
68
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
69
69
  *
70
70
  * const [person] = await db.selectFrom('person')
71
71
  * .select([
@@ -77,12 +77,12 @@ export declare class DynamicModule {
77
77
  * // The resulting type contains all `PossibleColumns` as optional fields
78
78
  * // because we cannot know which field was actually selected before
79
79
  * // running the code.
80
- * const lastName: string | undefined = person.last_name
81
- * const firstName: string | undefined = person.first_name
82
- * const birthDate: string | undefined = person.birth_date
80
+ * const lastName: string | null | undefined = person?.last_name
81
+ * const firstName: string | undefined = person?.first_name
82
+ * const birthDate: Date | null | undefined = person?.birthdate
83
83
  *
84
84
  * // The result type also contains the compile time selection `id`.
85
- * person.id
85
+ * person?.id
86
86
  * ```
87
87
  */
88
88
  ref<R extends string = never>(reference: string): DynamicReferenceBuilder<R>;
@@ -62,11 +62,11 @@ export class DynamicModule {
62
62
  * const { ref } = db.dynamic
63
63
  *
64
64
  * // Some column name provided by the user. Value not known at compile time.
65
- * const columnFromUserInput = req.query.select;
65
+ * const columnFromUserInput: PossibleColumns = 'birthdate';
66
66
  *
67
67
  * // A type that lists all possible values `columnFromUserInput` can have.
68
68
  * // You can use `keyof Person` if any column of an interface is allowed.
69
- * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
69
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birthdate'
70
70
  *
71
71
  * const [person] = await db.selectFrom('person')
72
72
  * .select([
@@ -78,12 +78,12 @@ export class DynamicModule {
78
78
  * // The resulting type contains all `PossibleColumns` as optional fields
79
79
  * // because we cannot know which field was actually selected before
80
80
  * // running the code.
81
- * const lastName: string | undefined = person.last_name
82
- * const firstName: string | undefined = person.first_name
83
- * const birthDate: string | undefined = person.birth_date
81
+ * const lastName: string | null | undefined = person?.last_name
82
+ * const firstName: string | undefined = person?.first_name
83
+ * const birthDate: Date | null | undefined = person?.birthdate
84
84
  *
85
85
  * // The result type also contains the compile time selection `id`.
86
- * person.id
86
+ * person?.id
87
87
  * ```
88
88
  */
89
89
  ref(reference) {