kysely 0.19.12 → 0.21.0

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 (144) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  3. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +5 -0
  4. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +16 -0
  5. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +5 -12
  6. package/dist/cjs/dialect/postgres/postgres-driver.js +16 -11
  7. package/dist/cjs/dialect/postgres/postgres-introspector.js +17 -9
  8. package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +1 -3
  9. package/dist/cjs/dialect/postgres/postgres-query-compiler.js +3 -8
  10. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -0
  11. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +10 -0
  13. package/dist/cjs/index.d.ts +3 -0
  14. package/dist/cjs/index.js +3 -0
  15. package/dist/cjs/operation-node/create-table-node.d.ts +6 -1
  16. package/dist/cjs/operation-node/create-table-node.js +16 -0
  17. package/dist/cjs/operation-node/create-type-node.d.ts +2 -2
  18. package/dist/cjs/operation-node/create-type-node.js +2 -2
  19. package/dist/cjs/operation-node/create-view-node.d.ts +2 -2
  20. package/dist/cjs/operation-node/create-view-node.js +2 -2
  21. package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
  22. package/dist/cjs/operation-node/delete-query-node.js +6 -0
  23. package/dist/cjs/operation-node/drop-index-node.d.ts +2 -2
  24. package/dist/cjs/operation-node/drop-index-node.js +2 -2
  25. package/dist/cjs/operation-node/drop-type-node.d.ts +2 -2
  26. package/dist/cjs/operation-node/drop-type-node.js +2 -2
  27. package/dist/cjs/operation-node/drop-view-node.d.ts +2 -2
  28. package/dist/cjs/operation-node/drop-view-node.js +2 -2
  29. package/dist/cjs/operation-node/explain-node.d.ts +16 -0
  30. package/dist/cjs/operation-node/explain-node.js +19 -0
  31. package/dist/cjs/operation-node/identifier-node.d.ts +2 -2
  32. package/dist/cjs/operation-node/identifier-node.js +2 -2
  33. package/dist/cjs/operation-node/insert-query-node.d.ts +2 -0
  34. package/dist/cjs/operation-node/operation-node-transformer.d.ts +7 -3
  35. package/dist/cjs/operation-node/operation-node-transformer.js +30 -6
  36. package/dist/cjs/operation-node/operation-node-visitor.d.ts +8 -4
  37. package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
  38. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/reference-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/reference-node.js +1 -2
  41. package/dist/cjs/operation-node/schemable-identifier-node.d.ts +15 -0
  42. package/dist/cjs/operation-node/schemable-identifier-node.js +26 -0
  43. package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
  44. package/dist/cjs/operation-node/select-query-node.js +6 -0
  45. package/dist/cjs/operation-node/selection-node.d.ts +2 -1
  46. package/dist/cjs/operation-node/table-node.d.ts +2 -3
  47. package/dist/cjs/operation-node/table-node.js +3 -4
  48. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  49. package/dist/cjs/operation-node/update-query-node.js +6 -0
  50. package/dist/cjs/parser/select-parser.js +2 -1
  51. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +1 -1
  52. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -28
  53. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +72 -78
  54. package/dist/cjs/query-builder/delete-query-builder.d.ts +19 -1
  55. package/dist/cjs/query-builder/delete-query-builder.js +24 -0
  56. package/dist/cjs/query-builder/function-builder.d.ts +3 -3
  57. package/dist/cjs/query-builder/insert-query-builder.d.ts +20 -2
  58. package/dist/cjs/query-builder/insert-query-builder.js +26 -0
  59. package/dist/cjs/query-builder/select-query-builder.d.ts +38 -1
  60. package/dist/cjs/query-builder/select-query-builder.js +45 -2
  61. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -1
  62. package/dist/cjs/query-builder/update-query-builder.js +25 -0
  63. package/dist/cjs/query-compiler/default-query-compiler.d.ts +8 -0
  64. package/dist/cjs/query-compiler/default-query-compiler.js +63 -5
  65. package/dist/cjs/raw-builder/sql.d.ts +96 -96
  66. package/dist/cjs/raw-builder/sql.js +0 -96
  67. package/dist/cjs/schema/alter-table-builder.d.ts +6 -6
  68. package/dist/cjs/schema/column-definition-builder.d.ts +6 -6
  69. package/dist/cjs/schema/create-table-builder.d.ts +54 -0
  70. package/dist/cjs/schema/create-table-builder.js +64 -0
  71. package/dist/cjs/util/explainable.d.ts +5 -0
  72. package/dist/cjs/util/explainable.js +2 -0
  73. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  74. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +5 -0
  75. package/dist/esm/dialect/mysql/mysql-query-compiler.js +16 -0
  76. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +5 -12
  77. package/dist/esm/dialect/postgres/postgres-driver.js +16 -11
  78. package/dist/esm/dialect/postgres/postgres-introspector.js +17 -9
  79. package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +1 -3
  80. package/dist/esm/dialect/postgres/postgres-query-compiler.js +3 -8
  81. package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -0
  82. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
  83. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +10 -0
  84. package/dist/esm/index.d.ts +3 -0
  85. package/dist/esm/index.js +3 -0
  86. package/dist/esm/operation-node/create-table-node.d.ts +6 -1
  87. package/dist/esm/operation-node/create-table-node.js +16 -0
  88. package/dist/esm/operation-node/create-type-node.d.ts +2 -2
  89. package/dist/esm/operation-node/create-type-node.js +2 -2
  90. package/dist/esm/operation-node/create-view-node.d.ts +2 -2
  91. package/dist/esm/operation-node/create-view-node.js +2 -2
  92. package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
  93. package/dist/esm/operation-node/delete-query-node.js +6 -0
  94. package/dist/esm/operation-node/drop-index-node.d.ts +2 -2
  95. package/dist/esm/operation-node/drop-index-node.js +2 -2
  96. package/dist/esm/operation-node/drop-type-node.d.ts +2 -2
  97. package/dist/esm/operation-node/drop-type-node.js +2 -2
  98. package/dist/esm/operation-node/drop-view-node.d.ts +2 -2
  99. package/dist/esm/operation-node/drop-view-node.js +2 -2
  100. package/dist/esm/operation-node/explain-node.d.ts +16 -0
  101. package/dist/esm/operation-node/explain-node.js +17 -0
  102. package/dist/esm/operation-node/identifier-node.d.ts +2 -2
  103. package/dist/esm/operation-node/identifier-node.js +2 -2
  104. package/dist/esm/operation-node/insert-query-node.d.ts +2 -0
  105. package/dist/esm/operation-node/operation-node-transformer.d.ts +7 -3
  106. package/dist/esm/operation-node/operation-node-transformer.js +30 -6
  107. package/dist/esm/operation-node/operation-node-visitor.d.ts +8 -4
  108. package/dist/esm/operation-node/operation-node-visitor.js +2 -0
  109. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  110. package/dist/esm/operation-node/reference-node.d.ts +1 -1
  111. package/dist/esm/operation-node/reference-node.js +1 -2
  112. package/dist/esm/operation-node/schemable-identifier-node.d.ts +15 -0
  113. package/dist/esm/operation-node/schemable-identifier-node.js +24 -0
  114. package/dist/esm/operation-node/select-query-node.d.ts +3 -0
  115. package/dist/esm/operation-node/select-query-node.js +6 -0
  116. package/dist/esm/operation-node/selection-node.d.ts +2 -1
  117. package/dist/esm/operation-node/table-node.d.ts +2 -3
  118. package/dist/esm/operation-node/table-node.js +3 -4
  119. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  120. package/dist/esm/operation-node/update-query-node.js +6 -0
  121. package/dist/esm/parser/select-parser.js +2 -1
  122. package/dist/esm/plugin/camel-case/camel-case-transformer.js +1 -1
  123. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -28
  124. package/dist/esm/plugin/with-schema/with-schema-transformer.js +72 -78
  125. package/dist/esm/query-builder/delete-query-builder.d.ts +19 -1
  126. package/dist/esm/query-builder/delete-query-builder.js +24 -0
  127. package/dist/esm/query-builder/function-builder.d.ts +3 -3
  128. package/dist/esm/query-builder/insert-query-builder.d.ts +20 -2
  129. package/dist/esm/query-builder/insert-query-builder.js +26 -0
  130. package/dist/esm/query-builder/select-query-builder.d.ts +38 -1
  131. package/dist/esm/query-builder/select-query-builder.js +45 -2
  132. package/dist/esm/query-builder/update-query-builder.d.ts +20 -1
  133. package/dist/esm/query-builder/update-query-builder.js +25 -0
  134. package/dist/esm/query-compiler/default-query-compiler.d.ts +8 -0
  135. package/dist/esm/query-compiler/default-query-compiler.js +63 -5
  136. package/dist/esm/raw-builder/sql.d.ts +96 -96
  137. package/dist/esm/raw-builder/sql.js +0 -96
  138. package/dist/esm/schema/alter-table-builder.d.ts +6 -6
  139. package/dist/esm/schema/column-definition-builder.d.ts +6 -6
  140. package/dist/esm/schema/create-table-builder.d.ts +54 -0
  141. package/dist/esm/schema/create-table-builder.js +64 -0
  142. package/dist/esm/util/explainable.d.ts +5 -0
  143. package/dist/esm/util/explainable.js +2 -0
  144. package/package.json +4 -1
package/README.md CHANGED
@@ -21,7 +21,7 @@ column names, aliases and types from selected subqueries, joined subqueries, `wi
21
21
  much anything you can think of.
22
22
 
23
23
  Of course there are cases where things cannot be typed at compile time, and Kysely offers escape
24
- hatches for these situations. See the [sql template tag](https://koskimas.github.io/kysely/modules.html#sql)
24
+ hatches for these situations. See the [sql template tag](https://koskimas.github.io/kysely/functions/sql.html)
25
25
  and the [DynamicModule](https://koskimas.github.io/kysely/classes/DynamicModule.html#ref) for more info.
26
26
 
27
27
  If you start using Kysely and can't find something you'd want to use, please open an issue or join our
@@ -30,6 +30,8 @@ class MysqlIntrospector {
30
30
  'extra',
31
31
  ])
32
32
  .where('table_schema', '=', (0, sql_js_1.sql) `database()`)
33
+ .orderBy('table_name')
34
+ .orderBy('column_name')
33
35
  .castTo();
34
36
  if (!options.withInternalKyselyTables) {
35
37
  query = query
@@ -1,6 +1,11 @@
1
1
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
2
2
  export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
3
3
  protected getCurrentParameterPlaceholder(): string;
4
+ protected getLeftExplainOptionsWrapper(): string;
5
+ protected getExplainOptionAssignment(): string;
6
+ protected getExplainOptionsDelimiter(): string;
7
+ protected getRightExplainOptionsWrapper(): string;
4
8
  protected getLeftIdentifierWrapper(): string;
5
9
  protected getRightIdentifierWrapper(): string;
10
+ protected sanitizeIdentifier(identifier: string): string;
6
11
  }
@@ -2,15 +2,31 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MysqlQueryCompiler = void 0;
4
4
  const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
5
+ const ID_WRAP_REGEX = /`/g;
5
6
  class MysqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
6
7
  getCurrentParameterPlaceholder() {
7
8
  return '?';
8
9
  }
10
+ getLeftExplainOptionsWrapper() {
11
+ return '';
12
+ }
13
+ getExplainOptionAssignment() {
14
+ return '=';
15
+ }
16
+ getExplainOptionsDelimiter() {
17
+ return ' ';
18
+ }
19
+ getRightExplainOptionsWrapper() {
20
+ return '';
21
+ }
9
22
  getLeftIdentifierWrapper() {
10
23
  return '`';
11
24
  }
12
25
  getRightIdentifierWrapper() {
13
26
  return '`';
14
27
  }
28
+ sanitizeIdentifier(identifier) {
29
+ return identifier.replace(ID_WRAP_REGEX, '``');
30
+ }
15
31
  }
16
32
  exports.MysqlQueryCompiler = MysqlQueryCompiler;
@@ -1,14 +1,4 @@
1
1
  import { DatabaseConnection } from '../../driver/database-connection.js';
2
- export declare type PostgresCursorConstructor = new <T>(sql: string, parameters: readonly unknown[]) => PostgresCursor<T>;
3
- export declare type PostgresCursor<T> = {
4
- state: 'initialized' | 'idle' | 'submitted' | 'busy';
5
- read: (rowsCount: number) => Promise<T[]>;
6
- } | {
7
- state: 'done';
8
- } | {
9
- state: 'error';
10
- _error: Error;
11
- };
12
2
  /**
13
3
  * Config for the PostgreSQL dialect.
14
4
  */
@@ -56,13 +46,16 @@ export interface PostgresPoolClient {
56
46
  query<R>(cursor: PostgresCursor<R>): PostgresCursor<R>;
57
47
  release(): void;
58
48
  }
49
+ export interface PostgresCursor<T> {
50
+ read(rowsCount: number): Promise<T[]>;
51
+ close(): Promise<void>;
52
+ }
53
+ export declare type PostgresCursorConstructor = new <T>(sql: string, parameters: unknown[]) => PostgresCursor<T>;
59
54
  export interface PostgresQueryResult<R> {
60
55
  command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT';
61
56
  rowCount: number;
62
57
  rows: R[];
63
58
  }
64
- export interface PostgresStreamOptions {
65
- }
66
59
  export interface PostgresStream<T> {
67
60
  [Symbol.asyncIterator](): AsyncIterableIterator<T>;
68
61
  }
@@ -90,18 +90,23 @@ class PostgresConnection {
90
90
  if (!this.#options.cursor) {
91
91
  throw new Error("'cursor' is not present in your postgres dialect config. It's required to make streaming work in postgres.");
92
92
  }
93
- const cursor = this.#client.query(new this.#options.cursor(compiledQuery.sql, compiledQuery.parameters));
94
- while (true) {
95
- if (cursor.state === 'done') {
96
- break;
97
- }
98
- if (cursor.state === 'error') {
99
- throw cursor._error;
93
+ if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
94
+ throw new Error('chunkSize must be a positive integer');
95
+ }
96
+ const cursor = this.#client.query(new this.#options.cursor(compiledQuery.sql, compiledQuery.parameters.slice()));
97
+ try {
98
+ while (true) {
99
+ const rows = await cursor.read(chunkSize);
100
+ if (rows.length === 0) {
101
+ break;
102
+ }
103
+ yield {
104
+ rows,
105
+ };
100
106
  }
101
- const rows = await cursor.read(chunkSize);
102
- yield {
103
- rows,
104
- };
107
+ }
108
+ finally {
109
+ await cursor.close();
105
110
  }
106
111
  }
107
112
  [PRIVATE_RELEASE_METHOD]() {
@@ -21,33 +21,41 @@ class PostgresIntrospector {
21
21
  let query = this.#db
22
22
  .selectFrom('pg_catalog.pg_attribute as a')
23
23
  .innerJoin('pg_catalog.pg_class as c', 'a.attrelid', 'c.oid')
24
- .innerJoin('pg_catalog.pg_tables as t', 't.tablename', 'c.relname')
24
+ .innerJoin('pg_catalog.pg_namespace as ns', 'c.relnamespace', 'ns.oid')
25
25
  .innerJoin('pg_catalog.pg_type as typ', 'a.atttypid', 'typ.oid')
26
26
  .select([
27
27
  'a.attname as column',
28
28
  'a.attnotnull as not_null',
29
29
  'a.atthasdef as has_default',
30
- 't.tablename as table',
31
- 't.schemaname as schema',
30
+ 'c.relname as table',
31
+ 'ns.nspname as schema',
32
32
  'typ.typname as type',
33
33
  // Detect if the column is auto incrementing by finding the sequence
34
34
  // that is created for `serial` and `bigserial` columns.
35
35
  this.#db
36
36
  .selectFrom('pg_class')
37
37
  .select((0, sql_js_1.sql) `true`.as('auto_incrementing'))
38
+ // Make sure the sequence is in the same schema as the table.
39
+ .whereRef('relnamespace', '=', 'c.relnamespace')
38
40
  .where('relkind', '=', 'S')
39
- .where('relname', '=', (0, sql_js_1.sql) `t.tablename || '_' || a.attname || '_seq'`)
41
+ .where('relname', '=', (0, sql_js_1.sql) `c.relname || '_' || a.attname || '_seq'`)
40
42
  .as('auto_incrementing'),
41
43
  ])
42
- .where('t.schemaname', '!~', '^pg_')
43
- .where('t.schemaname', '!=', 'information_schema')
44
- .where('a.attnum', '>=', 0) // No system columns
44
+ // r == normal table
45
+ .where('c.relkind', '=', 'r')
46
+ .where('ns.nspname', '!~', '^pg_')
47
+ .where('ns.nspname', '!=', 'information_schema')
48
+ // No system columns
49
+ .where('a.attnum', '>=', 0)
45
50
  .where('a.attisdropped', '!=', true)
51
+ .orderBy('ns.nspname')
52
+ .orderBy('c.relname')
53
+ .orderBy('a.attname')
46
54
  .castTo();
47
55
  if (!options.withInternalKyselyTables) {
48
56
  query = query
49
- .where('t.tablename', '!=', migrator_js_1.DEFAULT_MIGRATION_TABLE)
50
- .where('t.tablename', '!=', migrator_js_1.DEFAULT_MIGRATION_LOCK_TABLE);
57
+ .where('c.relname', '!=', migrator_js_1.DEFAULT_MIGRATION_TABLE)
58
+ .where('c.relname', '!=', migrator_js_1.DEFAULT_MIGRATION_LOCK_TABLE);
51
59
  }
52
60
  const rawColumns = await query.execute();
53
61
  return this.#parseTableMetadata(rawColumns);
@@ -1,6 +1,4 @@
1
1
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
2
2
  export declare class PostgresQueryCompiler extends DefaultQueryCompiler {
3
- protected getCurrentParameterPlaceholder(): string;
4
- protected getLeftIdentifierWrapper(): string;
5
- protected getRightIdentifierWrapper(): string;
3
+ protected sanitizeIdentifier(identifier: string): string;
6
4
  }
@@ -2,15 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PostgresQueryCompiler = void 0;
4
4
  const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
5
+ const ID_WRAP_REGEX = /"/g;
5
6
  class PostgresQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
6
- getCurrentParameterPlaceholder() {
7
- return '$' + this.numParameters;
8
- }
9
- getLeftIdentifierWrapper() {
10
- return '"';
11
- }
12
- getRightIdentifierWrapper() {
13
- return '"';
7
+ sanitizeIdentifier(identifier) {
8
+ return identifier.replace(ID_WRAP_REGEX, '""');
14
9
  }
15
10
  }
16
11
  exports.PostgresQueryCompiler = PostgresQueryCompiler;
@@ -18,6 +18,7 @@ class SqliteIntrospector {
18
18
  .where('type', '=', 'table')
19
19
  .where('name', 'not like', 'sqlite_%')
20
20
  .select('name')
21
+ .orderBy('name')
21
22
  .castTo();
22
23
  if (!options.withInternalKyselyTables) {
23
24
  query = query
@@ -50,6 +51,7 @@ class SqliteIntrospector {
50
51
  const columns = await db
51
52
  .selectFrom((0, sql_js_1.sql) `pragma_table_info(${table})`.as('table_info'))
52
53
  .select(['name', 'type', 'notnull', 'dflt_value'])
54
+ .orderBy('name')
53
55
  .execute();
54
56
  return {
55
57
  name: table,
@@ -1,7 +1,10 @@
1
1
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
2
2
  export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
3
3
  protected getCurrentParameterPlaceholder(): string;
4
+ protected getLeftExplainOptionsWrapper(): string;
5
+ protected getRightExplainOptionsWrapper(): string;
4
6
  protected getLeftIdentifierWrapper(): string;
5
7
  protected getRightIdentifierWrapper(): string;
6
8
  protected getAutoIncrement(): string;
9
+ protected sanitizeIdentifier(identifier: string): string;
7
10
  }
@@ -2,10 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SqliteQueryCompiler = void 0;
4
4
  const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
5
+ const ID_WRAP_REGEX = /"/g;
5
6
  class SqliteQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
6
7
  getCurrentParameterPlaceholder() {
7
8
  return '?';
8
9
  }
10
+ getLeftExplainOptionsWrapper() {
11
+ return '';
12
+ }
13
+ getRightExplainOptionsWrapper() {
14
+ return '';
15
+ }
9
16
  getLeftIdentifierWrapper() {
10
17
  return '"';
11
18
  }
@@ -15,5 +22,8 @@ class SqliteQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompil
15
22
  getAutoIncrement() {
16
23
  return 'autoincrement';
17
24
  }
25
+ sanitizeIdentifier(identifier) {
26
+ return identifier.replace(ID_WRAP_REGEX, '""');
27
+ }
18
28
  }
19
29
  exports.SqliteQueryCompiler = SqliteQueryCompiler;
@@ -73,6 +73,7 @@ export * from './migration/file-migration-provider.js';
73
73
  export * from './plugin/kysely-plugin.js';
74
74
  export * from './plugin/camel-case/camel-case-plugin.js';
75
75
  export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
76
+ export * from './plugin/with-schema/with-schema-plugin.js';
76
77
  export * from './operation-node/add-column-node.js';
77
78
  export * from './operation-node/add-constraint-node.js';
78
79
  export * from './operation-node/alias-node.js';
@@ -149,8 +150,10 @@ export * from './operation-node/value-node.js';
149
150
  export * from './operation-node/values-node.js';
150
151
  export * from './operation-node/where-node.js';
151
152
  export * from './operation-node/with-node.js';
153
+ export * from './operation-node/explain-node.js';
152
154
  export * from './util/column-type.js';
153
155
  export * from './util/compilable.js';
156
+ export * from './util/explainable.js';
154
157
  export * from './util/log.js';
155
158
  export { AnyColumn, UnknownRow, AnySelectQueryBuilder, } from './util/type-utils.js';
156
159
  export { SelectExpression, SelectExpressionOrList, Selection, } from './parser/select-parser.js';
package/dist/cjs/index.js CHANGED
@@ -89,6 +89,7 @@ __exportStar(require("./migration/file-migration-provider.js"), exports);
89
89
  __exportStar(require("./plugin/kysely-plugin.js"), exports);
90
90
  __exportStar(require("./plugin/camel-case/camel-case-plugin.js"), exports);
91
91
  __exportStar(require("./plugin/deduplicate-joins/deduplicate-joins-plugin.js"), exports);
92
+ __exportStar(require("./plugin/with-schema/with-schema-plugin.js"), exports);
92
93
  __exportStar(require("./operation-node/add-column-node.js"), exports);
93
94
  __exportStar(require("./operation-node/add-constraint-node.js"), exports);
94
95
  __exportStar(require("./operation-node/alias-node.js"), exports);
@@ -165,6 +166,8 @@ __exportStar(require("./operation-node/value-node.js"), exports);
165
166
  __exportStar(require("./operation-node/values-node.js"), exports);
166
167
  __exportStar(require("./operation-node/where-node.js"), exports);
167
168
  __exportStar(require("./operation-node/with-node.js"), exports);
169
+ __exportStar(require("./operation-node/explain-node.js"), exports);
168
170
  __exportStar(require("./util/column-type.js"), exports);
169
171
  __exportStar(require("./util/compilable.js"), exports);
172
+ __exportStar(require("./util/explainable.js"), exports);
170
173
  __exportStar(require("./util/log.js"), exports);
@@ -3,9 +3,10 @@ import { TableNode } from './table-node.js';
3
3
  import { ConstraintNode } from './constraint-node.js';
4
4
  import { ColumnDefinitionNode } from './column-definition-node.js';
5
5
  import { ArrayItemType } from '../util/type-utils.js';
6
+ import { RawNode } from './raw-node.js';
6
7
  export declare const ON_COMMIT_ACTIONS: string[];
7
8
  export declare type OnCommitAction = ArrayItemType<typeof ON_COMMIT_ACTIONS>;
8
- export declare type CreateTableNodeParams = Omit<CreateTableNode, 'kind' | 'table' | 'columns' | 'constraints'>;
9
+ export declare type CreateTableNodeParams = Omit<CreateTableNode, 'kind' | 'table' | 'columns' | 'constraints' | 'frontModifiers' | 'endModifiers'>;
9
10
  export interface CreateTableNode extends OperationNode {
10
11
  readonly kind: 'CreateTableNode';
11
12
  readonly table: TableNode;
@@ -14,6 +15,8 @@ export interface CreateTableNode extends OperationNode {
14
15
  readonly temporary?: boolean;
15
16
  readonly ifNotExists?: boolean;
16
17
  readonly onCommit?: OnCommitAction;
18
+ readonly frontModifiers?: ReadonlyArray<RawNode>;
19
+ readonly endModifiers?: ReadonlyArray<RawNode>;
17
20
  }
18
21
  /**
19
22
  * @internal
@@ -23,5 +26,7 @@ export declare const CreateTableNode: Readonly<{
23
26
  create(table: TableNode): CreateTableNode;
24
27
  cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
25
28
  cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
29
+ cloneWithFrontModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
30
+ cloneWithEndModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
26
31
  cloneWith(createTable: CreateTableNode, params: CreateTableNodeParams): CreateTableNode;
27
32
  }>;
@@ -31,6 +31,22 @@ exports.CreateTableNode = (0, object_utils_js_1.freeze)({
31
31
  : (0, object_utils_js_1.freeze)([constraint]),
32
32
  });
33
33
  },
34
+ cloneWithFrontModifier(createTable, modifier) {
35
+ return (0, object_utils_js_1.freeze)({
36
+ ...createTable,
37
+ frontModifiers: createTable.frontModifiers
38
+ ? (0, object_utils_js_1.freeze)([...createTable.frontModifiers, modifier])
39
+ : (0, object_utils_js_1.freeze)([modifier]),
40
+ });
41
+ },
42
+ cloneWithEndModifier(createTable, modifier) {
43
+ return (0, object_utils_js_1.freeze)({
44
+ ...createTable,
45
+ endModifiers: createTable.endModifiers
46
+ ? (0, object_utils_js_1.freeze)([...createTable.endModifiers, modifier])
47
+ : (0, object_utils_js_1.freeze)([modifier]),
48
+ });
49
+ },
34
50
  cloneWith(createTable, params) {
35
51
  return (0, object_utils_js_1.freeze)({
36
52
  ...createTable,
@@ -1,10 +1,10 @@
1
- import { IdentifierNode } from './identifier-node.js';
2
1
  import { OperationNode } from './operation-node.js';
2
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
3
3
  import { ValueListNode } from './value-list-node.js';
4
4
  export declare type CreateTypeNodeParams = Omit<Partial<CreateTypeNode>, 'kind'>;
5
5
  export interface CreateTypeNode extends OperationNode {
6
6
  readonly kind: 'CreateTypeNode';
7
- readonly name: IdentifierNode;
7
+ readonly name: SchemableIdentifierNode;
8
8
  readonly enum?: ValueListNode;
9
9
  }
10
10
  /**
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CreateTypeNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const identifier_node_js_1 = require("./identifier-node.js");
5
+ const schemable_identifier_node_js_1 = require("./schemable-identifier-node.js");
6
6
  const value_list_node_js_1 = require("./value-list-node.js");
7
7
  const value_node_js_1 = require("./value-node.js");
8
8
  /**
@@ -15,7 +15,7 @@ exports.CreateTypeNode = (0, object_utils_js_1.freeze)({
15
15
  create(name) {
16
16
  return (0, object_utils_js_1.freeze)({
17
17
  kind: 'CreateTypeNode',
18
- name: identifier_node_js_1.IdentifierNode.create(name),
18
+ name: schemable_identifier_node_js_1.SchemableIdentifierNode.create(name),
19
19
  });
20
20
  },
21
21
  cloneWithEnum(createType, values) {
@@ -1,12 +1,12 @@
1
1
  import { ColumnNode } from './column-node.js';
2
- import { IdentifierNode } from './identifier-node.js';
3
2
  import { OperationNode } from './operation-node.js';
4
3
  import { RawNode } from './raw-node.js';
4
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
5
5
  import { SelectQueryNode } from './select-query-node.js';
6
6
  export declare type CreateViewNodeParams = Omit<Partial<CreateViewNode>, 'kind' | 'name'>;
7
7
  export interface CreateViewNode extends OperationNode {
8
8
  readonly kind: 'CreateViewNode';
9
- readonly name: IdentifierNode;
9
+ readonly name: SchemableIdentifierNode;
10
10
  readonly temporary?: boolean;
11
11
  readonly materialized?: boolean;
12
12
  readonly orReplace?: boolean;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CreateViewNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const identifier_node_js_1 = require("./identifier-node.js");
5
+ const schemable_identifier_node_js_1 = require("./schemable-identifier-node.js");
6
6
  /**
7
7
  * @internal
8
8
  */
@@ -13,7 +13,7 @@ exports.CreateViewNode = (0, object_utils_js_1.freeze)({
13
13
  create(name) {
14
14
  return (0, object_utils_js_1.freeze)({
15
15
  kind: 'CreateViewNode',
16
- name: identifier_node_js_1.IdentifierNode.create(name),
16
+ name: schemable_identifier_node_js_1.SchemableIdentifierNode.create(name),
17
17
  });
18
18
  },
19
19
  cloneWith(createView, params) {
@@ -8,6 +8,7 @@ import { WithNode } from './with-node.js';
8
8
  import { LimitNode } from './limit-node.js';
9
9
  import { OrderByNode } from './order-by-node.js';
10
10
  import { OrderByItemNode } from './order-by-item-node.js';
11
+ import { ExplainNode } from './explain-node.js';
11
12
  export interface DeleteQueryNode extends OperationNode {
12
13
  readonly kind: 'DeleteQueryNode';
13
14
  readonly from: FromNode;
@@ -17,6 +18,7 @@ export interface DeleteQueryNode extends OperationNode {
17
18
  readonly with?: WithNode;
18
19
  readonly orderBy?: OrderByNode;
19
20
  readonly limit?: LimitNode;
21
+ readonly explain?: ExplainNode;
20
22
  }
21
23
  /**
22
24
  * @internal
@@ -26,4 +28,5 @@ export declare const DeleteQueryNode: Readonly<{
26
28
  create(fromItem: TableExpressionNode, withNode?: WithNode): DeleteQueryNode;
27
29
  cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
28
30
  cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
31
+ cloneWithExplain(deleteNode: DeleteQueryNode, explain: ExplainNode): DeleteQueryNode;
29
32
  }>;
@@ -32,4 +32,10 @@ exports.DeleteQueryNode = (0, object_utils_js_1.freeze)({
32
32
  limit,
33
33
  });
34
34
  },
35
+ cloneWithExplain(deleteNode, explain) {
36
+ return (0, object_utils_js_1.freeze)({
37
+ ...deleteNode,
38
+ explain,
39
+ });
40
+ },
35
41
  });
@@ -1,10 +1,10 @@
1
- import { IdentifierNode } from './identifier-node.js';
2
1
  import { OperationNode } from './operation-node.js';
2
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
3
3
  import { TableNode } from './table-node.js';
4
4
  export declare type DropIndexNodeProps = Omit<DropIndexNode, 'kind' | 'name'>;
5
5
  export interface DropIndexNode extends OperationNode {
6
6
  readonly kind: 'DropIndexNode';
7
- readonly name: IdentifierNode;
7
+ readonly name: SchemableIdentifierNode;
8
8
  readonly table?: TableNode;
9
9
  readonly ifExists?: boolean;
10
10
  }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DropIndexNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const identifier_node_js_1 = require("./identifier-node.js");
5
+ const schemable_identifier_node_js_1 = require("./schemable-identifier-node.js");
6
6
  /**
7
7
  * @internal
8
8
  */
@@ -13,7 +13,7 @@ exports.DropIndexNode = (0, object_utils_js_1.freeze)({
13
13
  create(name, params) {
14
14
  return (0, object_utils_js_1.freeze)({
15
15
  kind: 'DropIndexNode',
16
- name: identifier_node_js_1.IdentifierNode.create(name),
16
+ name: schemable_identifier_node_js_1.SchemableIdentifierNode.create(name),
17
17
  ...params,
18
18
  });
19
19
  },
@@ -1,9 +1,9 @@
1
- import { IdentifierNode } from './identifier-node.js';
2
1
  import { OperationNode } from './operation-node.js';
2
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
3
3
  export declare type DropTypeNodeParams = Omit<Partial<DropTypeNode>, 'kind' | 'name'>;
4
4
  export interface DropTypeNode extends OperationNode {
5
5
  readonly kind: 'DropTypeNode';
6
- readonly name: IdentifierNode;
6
+ readonly name: SchemableIdentifierNode;
7
7
  readonly ifExists?: boolean;
8
8
  }
9
9
  /**
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DropTypeNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const identifier_node_js_1 = require("./identifier-node.js");
5
+ const schemable_identifier_node_js_1 = require("./schemable-identifier-node.js");
6
6
  /**
7
7
  * @internal
8
8
  */
@@ -13,7 +13,7 @@ exports.DropTypeNode = (0, object_utils_js_1.freeze)({
13
13
  create(name) {
14
14
  return (0, object_utils_js_1.freeze)({
15
15
  kind: 'DropTypeNode',
16
- name: identifier_node_js_1.IdentifierNode.create(name),
16
+ name: schemable_identifier_node_js_1.SchemableIdentifierNode.create(name),
17
17
  });
18
18
  },
19
19
  cloneWith(dropType, params) {
@@ -1,9 +1,9 @@
1
- import { IdentifierNode } from './identifier-node.js';
2
1
  import { OperationNode } from './operation-node.js';
2
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
3
3
  export declare type DropViewNodeParams = Omit<Partial<DropViewNode>, 'kind' | 'name'>;
4
4
  export interface DropViewNode extends OperationNode {
5
5
  readonly kind: 'DropViewNode';
6
- readonly name: IdentifierNode;
6
+ readonly name: SchemableIdentifierNode;
7
7
  readonly ifExists?: boolean;
8
8
  readonly materialized?: boolean;
9
9
  }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DropViewNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const identifier_node_js_1 = require("./identifier-node.js");
5
+ const schemable_identifier_node_js_1 = require("./schemable-identifier-node.js");
6
6
  /**
7
7
  * @internal
8
8
  */
@@ -13,7 +13,7 @@ exports.DropViewNode = (0, object_utils_js_1.freeze)({
13
13
  create(name) {
14
14
  return (0, object_utils_js_1.freeze)({
15
15
  kind: 'DropViewNode',
16
- name: identifier_node_js_1.IdentifierNode.create(name),
16
+ name: schemable_identifier_node_js_1.SchemableIdentifierNode.create(name),
17
17
  });
18
18
  },
19
19
  cloneWith(dropView, params) {
@@ -0,0 +1,16 @@
1
+ import { ExplainFormat } from '../util/explainable.js';
2
+ import { AnyRawBuilder } from '../util/type-utils.js';
3
+ import { OperationNode } from './operation-node.js';
4
+ import { RawNode } from './raw-node.js';
5
+ export interface ExplainNode extends OperationNode {
6
+ readonly kind: 'ExplainNode';
7
+ readonly format?: ExplainFormat;
8
+ readonly options?: RawNode;
9
+ }
10
+ /**
11
+ * @internal
12
+ */
13
+ export declare const ExplainNode: Readonly<{
14
+ is(node: OperationNode): node is ExplainNode;
15
+ create(format?: ExplainFormat, options?: AnyRawBuilder): ExplainNode;
16
+ }>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExplainNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.ExplainNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'ExplainNode';
11
+ },
12
+ create(format, options) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'ExplainNode',
15
+ format,
16
+ options: options?.toOperationNode(),
17
+ });
18
+ },
19
+ });
@@ -1,12 +1,12 @@
1
1
  import { OperationNode } from './operation-node.js';
2
2
  export interface IdentifierNode extends OperationNode {
3
3
  readonly kind: 'IdentifierNode';
4
- readonly identifier: string;
4
+ readonly name: string;
5
5
  }
6
6
  /**
7
7
  * @internal
8
8
  */
9
9
  export declare const IdentifierNode: Readonly<{
10
10
  is(node: OperationNode): node is IdentifierNode;
11
- create(identifier: string): IdentifierNode;
11
+ create(name: string): IdentifierNode;
12
12
  }>;
@@ -9,10 +9,10 @@ exports.IdentifierNode = (0, object_utils_js_1.freeze)({
9
9
  is(node) {
10
10
  return node.kind === 'IdentifierNode';
11
11
  },
12
- create(identifier) {
12
+ create(name) {
13
13
  return (0, object_utils_js_1.freeze)({
14
14
  kind: 'IdentifierNode',
15
- identifier,
15
+ name,
16
16
  });
17
17
  },
18
18
  });