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
@@ -28,6 +28,8 @@ export class MysqlIntrospector {
28
28
  'extra',
29
29
  ])
30
30
  .where('table_schema', '=', sql `database()`)
31
+ .orderBy('table_name')
32
+ .orderBy('column_name')
31
33
  .castTo();
32
34
  if (!options.withInternalKyselyTables) {
33
35
  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
  }
@@ -1,13 +1,29 @@
1
1
  /// <reference types="./mysql-query-compiler.d.ts" />
2
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
3
+ const ID_WRAP_REGEX = /`/g;
3
4
  export class MysqlQueryCompiler extends DefaultQueryCompiler {
4
5
  getCurrentParameterPlaceholder() {
5
6
  return '?';
6
7
  }
8
+ getLeftExplainOptionsWrapper() {
9
+ return '';
10
+ }
11
+ getExplainOptionAssignment() {
12
+ return '=';
13
+ }
14
+ getExplainOptionsDelimiter() {
15
+ return ' ';
16
+ }
17
+ getRightExplainOptionsWrapper() {
18
+ return '';
19
+ }
7
20
  getLeftIdentifierWrapper() {
8
21
  return '`';
9
22
  }
10
23
  getRightIdentifierWrapper() {
11
24
  return '`';
12
25
  }
26
+ sanitizeIdentifier(identifier) {
27
+ return identifier.replace(ID_WRAP_REGEX, '``');
28
+ }
13
29
  }
@@ -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
  }
@@ -87,18 +87,23 @@ class PostgresConnection {
87
87
  if (!this.#options.cursor) {
88
88
  throw new Error("'cursor' is not present in your postgres dialect config. It's required to make streaming work in postgres.");
89
89
  }
90
- const cursor = this.#client.query(new this.#options.cursor(compiledQuery.sql, compiledQuery.parameters));
91
- while (true) {
92
- if (cursor.state === 'done') {
93
- break;
94
- }
95
- if (cursor.state === 'error') {
96
- throw cursor._error;
90
+ if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
91
+ throw new Error('chunkSize must be a positive integer');
92
+ }
93
+ const cursor = this.#client.query(new this.#options.cursor(compiledQuery.sql, compiledQuery.parameters.slice()));
94
+ try {
95
+ while (true) {
96
+ const rows = await cursor.read(chunkSize);
97
+ if (rows.length === 0) {
98
+ break;
99
+ }
100
+ yield {
101
+ rows,
102
+ };
97
103
  }
98
- const rows = await cursor.read(chunkSize);
99
- yield {
100
- rows,
101
- };
104
+ }
105
+ finally {
106
+ await cursor.close();
102
107
  }
103
108
  }
104
109
  [PRIVATE_RELEASE_METHOD]() {
@@ -19,33 +19,41 @@ export class PostgresIntrospector {
19
19
  let query = this.#db
20
20
  .selectFrom('pg_catalog.pg_attribute as a')
21
21
  .innerJoin('pg_catalog.pg_class as c', 'a.attrelid', 'c.oid')
22
- .innerJoin('pg_catalog.pg_tables as t', 't.tablename', 'c.relname')
22
+ .innerJoin('pg_catalog.pg_namespace as ns', 'c.relnamespace', 'ns.oid')
23
23
  .innerJoin('pg_catalog.pg_type as typ', 'a.atttypid', 'typ.oid')
24
24
  .select([
25
25
  'a.attname as column',
26
26
  'a.attnotnull as not_null',
27
27
  'a.atthasdef as has_default',
28
- 't.tablename as table',
29
- 't.schemaname as schema',
28
+ 'c.relname as table',
29
+ 'ns.nspname as schema',
30
30
  'typ.typname as type',
31
31
  // Detect if the column is auto incrementing by finding the sequence
32
32
  // that is created for `serial` and `bigserial` columns.
33
33
  this.#db
34
34
  .selectFrom('pg_class')
35
35
  .select(sql `true`.as('auto_incrementing'))
36
+ // Make sure the sequence is in the same schema as the table.
37
+ .whereRef('relnamespace', '=', 'c.relnamespace')
36
38
  .where('relkind', '=', 'S')
37
- .where('relname', '=', sql `t.tablename || '_' || a.attname || '_seq'`)
39
+ .where('relname', '=', sql `c.relname || '_' || a.attname || '_seq'`)
38
40
  .as('auto_incrementing'),
39
41
  ])
40
- .where('t.schemaname', '!~', '^pg_')
41
- .where('t.schemaname', '!=', 'information_schema')
42
- .where('a.attnum', '>=', 0) // No system columns
42
+ // r == normal table
43
+ .where('c.relkind', '=', 'r')
44
+ .where('ns.nspname', '!~', '^pg_')
45
+ .where('ns.nspname', '!=', 'information_schema')
46
+ // No system columns
47
+ .where('a.attnum', '>=', 0)
43
48
  .where('a.attisdropped', '!=', true)
49
+ .orderBy('ns.nspname')
50
+ .orderBy('c.relname')
51
+ .orderBy('a.attname')
44
52
  .castTo();
45
53
  if (!options.withInternalKyselyTables) {
46
54
  query = query
47
- .where('t.tablename', '!=', DEFAULT_MIGRATION_TABLE)
48
- .where('t.tablename', '!=', DEFAULT_MIGRATION_LOCK_TABLE);
55
+ .where('c.relname', '!=', DEFAULT_MIGRATION_TABLE)
56
+ .where('c.relname', '!=', DEFAULT_MIGRATION_LOCK_TABLE);
49
57
  }
50
58
  const rawColumns = await query.execute();
51
59
  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
  }
@@ -1,13 +1,8 @@
1
1
  /// <reference types="./postgres-query-compiler.d.ts" />
2
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
3
+ const ID_WRAP_REGEX = /"/g;
3
4
  export class PostgresQueryCompiler extends DefaultQueryCompiler {
4
- getCurrentParameterPlaceholder() {
5
- return '$' + this.numParameters;
6
- }
7
- getLeftIdentifierWrapper() {
8
- return '"';
9
- }
10
- getRightIdentifierWrapper() {
11
- return '"';
5
+ sanitizeIdentifier(identifier) {
6
+ return identifier.replace(ID_WRAP_REGEX, '""');
12
7
  }
13
8
  }
@@ -16,6 +16,7 @@ export class SqliteIntrospector {
16
16
  .where('type', '=', 'table')
17
17
  .where('name', 'not like', 'sqlite_%')
18
18
  .select('name')
19
+ .orderBy('name')
19
20
  .castTo();
20
21
  if (!options.withInternalKyselyTables) {
21
22
  query = query
@@ -48,6 +49,7 @@ export class SqliteIntrospector {
48
49
  const columns = await db
49
50
  .selectFrom(sql `pragma_table_info(${table})`.as('table_info'))
50
51
  .select(['name', 'type', 'notnull', 'dflt_value'])
52
+ .orderBy('name')
51
53
  .execute();
52
54
  return {
53
55
  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
  }
@@ -1,9 +1,16 @@
1
1
  /// <reference types="./sqlite-query-compiler.d.ts" />
2
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
3
+ const ID_WRAP_REGEX = /"/g;
3
4
  export class SqliteQueryCompiler extends DefaultQueryCompiler {
4
5
  getCurrentParameterPlaceholder() {
5
6
  return '?';
6
7
  }
8
+ getLeftExplainOptionsWrapper() {
9
+ return '';
10
+ }
11
+ getRightExplainOptionsWrapper() {
12
+ return '';
13
+ }
7
14
  getLeftIdentifierWrapper() {
8
15
  return '"';
9
16
  }
@@ -13,4 +20,7 @@ export class SqliteQueryCompiler extends DefaultQueryCompiler {
13
20
  getAutoIncrement() {
14
21
  return 'autoincrement';
15
22
  }
23
+ sanitizeIdentifier(identifier) {
24
+ return identifier.replace(ID_WRAP_REGEX, '""');
25
+ }
16
26
  }
@@ -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/esm/index.js CHANGED
@@ -74,6 +74,7 @@ export * from './migration/file-migration-provider.js';
74
74
  export * from './plugin/kysely-plugin.js';
75
75
  export * from './plugin/camel-case/camel-case-plugin.js';
76
76
  export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
77
+ export * from './plugin/with-schema/with-schema-plugin.js';
77
78
  export * from './operation-node/add-column-node.js';
78
79
  export * from './operation-node/add-constraint-node.js';
79
80
  export * from './operation-node/alias-node.js';
@@ -150,6 +151,8 @@ export * from './operation-node/value-node.js';
150
151
  export * from './operation-node/values-node.js';
151
152
  export * from './operation-node/where-node.js';
152
153
  export * from './operation-node/with-node.js';
154
+ export * from './operation-node/explain-node.js';
153
155
  export * from './util/column-type.js';
154
156
  export * from './util/compilable.js';
157
+ export * from './util/explainable.js';
155
158
  export * from './util/log.js';
@@ -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
  }>;
@@ -29,6 +29,22 @@ export const CreateTableNode = freeze({
29
29
  : freeze([constraint]),
30
30
  });
31
31
  },
32
+ cloneWithFrontModifier(createTable, modifier) {
33
+ return freeze({
34
+ ...createTable,
35
+ frontModifiers: createTable.frontModifiers
36
+ ? freeze([...createTable.frontModifiers, modifier])
37
+ : freeze([modifier]),
38
+ });
39
+ },
40
+ cloneWithEndModifier(createTable, modifier) {
41
+ return freeze({
42
+ ...createTable,
43
+ endModifiers: createTable.endModifiers
44
+ ? freeze([...createTable.endModifiers, modifier])
45
+ : freeze([modifier]),
46
+ });
47
+ },
32
48
  cloneWith(createTable, params) {
33
49
  return freeze({
34
50
  ...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
  /**
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./create-type-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { IdentifierNode } from './identifier-node.js';
3
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
4
4
  import { ValueListNode } from './value-list-node.js';
5
5
  import { ValueNode } from './value-node.js';
6
6
  /**
@@ -13,7 +13,7 @@ export const CreateTypeNode = freeze({
13
13
  create(name) {
14
14
  return freeze({
15
15
  kind: 'CreateTypeNode',
16
- name: IdentifierNode.create(name),
16
+ name: SchemableIdentifierNode.create(name),
17
17
  });
18
18
  },
19
19
  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;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./create-view-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { IdentifierNode } from './identifier-node.js';
3
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
4
4
  /**
5
5
  * @internal
6
6
  */
@@ -11,7 +11,7 @@ export const CreateViewNode = freeze({
11
11
  create(name) {
12
12
  return freeze({
13
13
  kind: 'CreateViewNode',
14
- name: IdentifierNode.create(name),
14
+ name: SchemableIdentifierNode.create(name),
15
15
  });
16
16
  },
17
17
  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
  }>;
@@ -30,4 +30,10 @@ export const DeleteQueryNode = freeze({
30
30
  limit,
31
31
  });
32
32
  },
33
+ cloneWithExplain(deleteNode, explain) {
34
+ return freeze({
35
+ ...deleteNode,
36
+ explain,
37
+ });
38
+ },
33
39
  });
@@ -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
  }
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./drop-index-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { IdentifierNode } from './identifier-node.js';
3
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
4
4
  /**
5
5
  * @internal
6
6
  */
@@ -11,7 +11,7 @@ export const DropIndexNode = freeze({
11
11
  create(name, params) {
12
12
  return freeze({
13
13
  kind: 'DropIndexNode',
14
- name: IdentifierNode.create(name),
14
+ name: SchemableIdentifierNode.create(name),
15
15
  ...params,
16
16
  });
17
17
  },
@@ -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
  /**
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./drop-type-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { IdentifierNode } from './identifier-node.js';
3
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
4
4
  /**
5
5
  * @internal
6
6
  */
@@ -11,7 +11,7 @@ export const DropTypeNode = freeze({
11
11
  create(name) {
12
12
  return freeze({
13
13
  kind: 'DropTypeNode',
14
- name: IdentifierNode.create(name),
14
+ name: SchemableIdentifierNode.create(name),
15
15
  });
16
16
  },
17
17
  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
  }
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./drop-view-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { IdentifierNode } from './identifier-node.js';
3
+ import { SchemableIdentifierNode } from './schemable-identifier-node.js';
4
4
  /**
5
5
  * @internal
6
6
  */
@@ -11,7 +11,7 @@ export const DropViewNode = freeze({
11
11
  create(name) {
12
12
  return freeze({
13
13
  kind: 'DropViewNode',
14
- name: IdentifierNode.create(name),
14
+ name: SchemableIdentifierNode.create(name),
15
15
  });
16
16
  },
17
17
  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,17 @@
1
+ /// <reference types="./explain-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const ExplainNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'ExplainNode';
9
+ },
10
+ create(format, options) {
11
+ return freeze({
12
+ kind: 'ExplainNode',
13
+ format,
14
+ options: options?.toOperationNode(),
15
+ });
16
+ },
17
+ });
@@ -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
  }>;
@@ -7,10 +7,10 @@ export const IdentifierNode = freeze({
7
7
  is(node) {
8
8
  return node.kind === 'IdentifierNode';
9
9
  },
10
- create(identifier) {
10
+ create(name) {
11
11
  return freeze({
12
12
  kind: 'IdentifierNode',
13
- identifier,
13
+ name,
14
14
  });
15
15
  },
16
16
  });
@@ -1,4 +1,5 @@
1
1
  import { ColumnNode } from './column-node.js';
2
+ import { ExplainNode } from './explain-node.js';
2
3
  import { OnConflictNode } from './on-conflict-node.js';
3
4
  import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
4
5
  import { OperationNode } from './operation-node.js';
@@ -20,6 +21,7 @@ export interface InsertQueryNode extends OperationNode {
20
21
  readonly with?: WithNode;
21
22
  readonly ignore?: boolean;
22
23
  readonly replace?: boolean;
24
+ readonly explain?: ExplainNode;
23
25
  }
24
26
  /**
25
27
  * @internal