kysely 0.7.9 → 0.9.1

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 (70) hide show
  1. package/README.md +47 -8
  2. package/dist/cjs/dialect/mysql/mysql-driver.js +5 -5
  3. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  4. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -29
  5. package/dist/cjs/dialect/postgres/postgres-driver.js +5 -5
  6. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
  7. package/dist/cjs/operation-node/create-schema-node.js +2 -2
  8. package/dist/cjs/operation-node/create-table-node.d.ts +1 -5
  9. package/dist/cjs/operation-node/create-table-node.js +1 -31
  10. package/dist/cjs/operation-node/operation-node-source.d.ts +1 -1
  11. package/dist/cjs/operation-node/operation-node-transformer.js +2 -1
  12. package/dist/cjs/operation-node/primitive-value-list-node.js +1 -1
  13. package/dist/cjs/parser/join-parser.d.ts +6 -3
  14. package/dist/cjs/parser/table-parser.d.ts +18 -7
  15. package/dist/cjs/query-builder/function-builder.d.ts +6 -6
  16. package/dist/cjs/query-builder/function-builder.js +7 -7
  17. package/dist/cjs/query-builder/query-builder.d.ts +7 -7
  18. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  19. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -2
  20. package/dist/cjs/query-compiler/default-query-compiler.js +22 -28
  21. package/dist/cjs/query-creator.d.ts +14 -11
  22. package/dist/cjs/query-creator.js +14 -11
  23. package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
  24. package/dist/cjs/raw-builder/raw-builder.js +6 -6
  25. package/dist/cjs/schema/alter-table-builder.d.ts +3 -0
  26. package/dist/cjs/schema/alter-table-builder.js +3 -0
  27. package/dist/cjs/schema/column-definition-builder.d.ts +14 -5
  28. package/dist/cjs/schema/create-schema-builder.js +1 -1
  29. package/dist/cjs/schema/create-table-builder.d.ts +55 -10
  30. package/dist/cjs/schema/create-table-builder.js +59 -17
  31. package/dist/cjs/schema/schema.d.ts +37 -2
  32. package/dist/cjs/schema/schema.js +36 -1
  33. package/dist/cjs/util/object-utils.d.ts +1 -0
  34. package/dist/cjs/util/object-utils.js +5 -1
  35. package/dist/cjs/util/type-utils.d.ts +3 -0
  36. package/dist/esm/dialect/mysql/mysql-driver.js +5 -5
  37. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  38. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -29
  39. package/dist/esm/dialect/postgres/postgres-driver.js +5 -5
  40. package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
  41. package/dist/esm/operation-node/create-schema-node.js +2 -2
  42. package/dist/esm/operation-node/create-table-node.d.ts +1 -5
  43. package/dist/esm/operation-node/create-table-node.js +1 -31
  44. package/dist/esm/operation-node/operation-node-source.d.ts +1 -1
  45. package/dist/esm/operation-node/operation-node-transformer.js +2 -1
  46. package/dist/esm/operation-node/primitive-value-list-node.js +1 -1
  47. package/dist/esm/parser/join-parser.d.ts +6 -3
  48. package/dist/esm/parser/table-parser.d.ts +18 -7
  49. package/dist/esm/query-builder/function-builder.d.ts +6 -6
  50. package/dist/esm/query-builder/function-builder.js +7 -7
  51. package/dist/esm/query-builder/query-builder.d.ts +7 -7
  52. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  53. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -2
  54. package/dist/esm/query-compiler/default-query-compiler.js +22 -28
  55. package/dist/esm/query-creator.d.ts +14 -11
  56. package/dist/esm/query-creator.js +14 -11
  57. package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
  58. package/dist/esm/raw-builder/raw-builder.js +6 -6
  59. package/dist/esm/schema/alter-table-builder.d.ts +3 -0
  60. package/dist/esm/schema/alter-table-builder.js +3 -0
  61. package/dist/esm/schema/column-definition-builder.d.ts +14 -5
  62. package/dist/esm/schema/create-schema-builder.js +1 -1
  63. package/dist/esm/schema/create-table-builder.d.ts +55 -10
  64. package/dist/esm/schema/create-table-builder.js +60 -18
  65. package/dist/esm/schema/schema.d.ts +37 -2
  66. package/dist/esm/schema/schema.js +36 -1
  67. package/dist/esm/util/object-utils.d.ts +1 -0
  68. package/dist/esm/util/object-utils.js +3 -0
  69. package/dist/esm/util/type-utils.d.ts +3 -0
  70. package/package.json +6 -6
package/README.md CHANGED
@@ -4,7 +4,8 @@
4
4
  # [Kysely](https://koskimas.github.io/kysely/index.html)
5
5
 
6
6
  A type-safe and autocompletion-friendly typescript SQL query builder for node.js. Inspired by
7
- [knex](http://knexjs.org/).
7
+ [knex](http://knexjs.org/). [Here's](https://www.jakso.me/blog/kysely-a-type-safe-sql-query-builder-for-typescript)
8
+ an introductory blog post for you.
8
9
 
9
10
  ![](https://github.com/koskimas/kysely/blob/master/assets/demo.gif)
10
11
 
@@ -25,9 +26,8 @@ type-safety! See the [DynamicModule](https://koskimas.github.io/kysely/classes/D
25
26
  for more info.
26
27
 
27
28
  Kysely is still young and some useful features are propably not yet implemented. If you start
28
- using Kysely and can't find something you'd want to use, please open an issue.
29
-
30
- [Here](https://www.jakso.me/blog/kysely-a-type-safe-sql-query-builder-for-typescript)'s an introductory blog post about Kysely.
29
+ using Kysely and can't find something you'd want to use, please open an issue or join our
30
+ [discord server](https://discord.gg/C9aJ49mCra).
31
31
 
32
32
  # Table of contents
33
33
 
@@ -114,8 +114,6 @@ async function demo() {
114
114
 
115
115
  # Query examples
116
116
 
117
- The [API documentation](https://koskimas.github.io/kysely/index.html) is full of examples.
118
-
119
117
  ## Select queries
120
118
 
121
119
  You can find examples of select queries in the documentation of the
@@ -165,13 +163,15 @@ changes completely. Migrations need to be "frozen in time".
165
163
  The migrations can use the [Kysely.schema](https://koskimas.github.io/kysely/classes/SchemaModule.html)
166
164
  module to modify the schema. Migrations can also run normal queries to modify the data.
167
165
 
166
+ ### PostgreSQL migration example
167
+
168
168
  ```ts
169
169
  import { Kysely } from 'kysely'
170
170
 
171
171
  export async function up(db: Kysely<any>): Promise<void> {
172
172
  await db.schema
173
173
  .createTable('person')
174
- .addColumn('id', 'integer', (col) => col.increments().primaryKey())
174
+ .addColumn('id', 'serial', (col) => col.primaryKey())
175
175
  .addColumn('first_name', 'varchar')
176
176
  .addColumn('last_name', 'varchar')
177
177
  .addColumn('gender', 'varchar(50)')
@@ -179,7 +179,7 @@ export async function up(db: Kysely<any>): Promise<void> {
179
179
 
180
180
  await db.schema
181
181
  .createTable('pet')
182
- .addColumn('id', 'integer', (col) => col.increments().primaryKey())
182
+ .addColumn('id', 'serial', (col) => col.primaryKey())
183
183
  .addColumn('name', 'varchar', (col) => col.notNull().unique())
184
184
  .addColumn('owner_id', 'integer', (col) =>
185
185
  col.references('person.id').onDelete('cascade')
@@ -200,6 +200,45 @@ export async function down(db: Kysely<any>): Promise<void> {
200
200
  }
201
201
  ```
202
202
 
203
+ ### MySQL migration example
204
+
205
+ ```ts
206
+ import { Kysely } from 'kysely'
207
+
208
+ export async function up(db: Kysely<any>): Promise<void> {
209
+ await db.schema
210
+ .createTable('person')
211
+ .addColumn('id', 'integer', (col) => col.increments().primaryKey())
212
+ .addColumn('first_name', 'varchar')
213
+ .addColumn('last_name', 'varchar')
214
+ .addColumn('gender', 'varchar(50)')
215
+ .execute()
216
+
217
+ await db.schema
218
+ .createTable('pet')
219
+ .addColumn('id', 'integer', (col) => col.increments().primaryKey())
220
+ .addColumn('name', 'varchar', (col) => col.notNull().unique())
221
+ .addColumn('owner_id', 'integer')
222
+ .addColumn('species', 'varchar')
223
+ .addForeignKeyConstraint(
224
+ 'pet_owner_id_fk', ['owner_id'], 'person', ['id'],
225
+ (cb) => cb.onDelete('cascade')
226
+ )
227
+ .execute()
228
+
229
+ await db.schema
230
+ .createIndex('pet_owner_id_index')
231
+ .on('pet')
232
+ .column('owner_id')
233
+ .execute()
234
+ }
235
+
236
+ export async function down(db: Kysely<any>): Promise<void> {
237
+ await db.schema.dropTable('pet').execute()
238
+ await db.schema.dropTable('person').execute()
239
+ }
240
+ ```
241
+
203
242
  You can then use
204
243
 
205
244
  ```ts
@@ -53,16 +53,16 @@ class MysqlDriver {
53
53
  // On mysql this sets the isolation level of the next transaction.
54
54
  await connection.executeQuery({
55
55
  sql: `set transaction isolation level ${settings.isolationLevel}`,
56
- bindings: [],
56
+ parameters: [],
57
57
  });
58
58
  }
59
- await connection.executeQuery({ sql: 'begin', bindings: [] });
59
+ await connection.executeQuery({ sql: 'begin', parameters: [] });
60
60
  }
61
61
  async commitTransaction(connection) {
62
- await connection.executeQuery({ sql: 'commit', bindings: [] });
62
+ await connection.executeQuery({ sql: 'commit', parameters: [] });
63
63
  }
64
64
  async rollbackTransaction(connection) {
65
- await connection.executeQuery({ sql: 'rollback', bindings: [] });
65
+ await connection.executeQuery({ sql: 'rollback', parameters: [] });
66
66
  }
67
67
  async releaseConnection(connection) {
68
68
  const mysqlConnection = connection;
@@ -131,7 +131,7 @@ class MysqlConnection {
131
131
  }
132
132
  #executeQuery(compiledQuery) {
133
133
  return new Promise((resolve, reject) => {
134
- this.#rawConnection.query(compiledQuery.sql, compiledQuery.bindings, (err, result) => {
134
+ this.#rawConnection.query(compiledQuery.sql, compiledQuery.parameters, (err, result) => {
135
135
  if (err) {
136
136
  reject(err);
137
137
  }
@@ -1,7 +1,5 @@
1
- import { ColumnDefinitionNode } from '../../operation-node/column-definition-node.js';
2
1
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
3
2
  export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
4
- protected visitColumnDefinition(node: ColumnDefinitionNode): void;
5
3
  protected visitReturning(): void;
6
4
  protected getSql(): string;
7
5
  protected getCurrentParameterPlaceholder(): string;
@@ -3,35 +3,6 @@ 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
5
  class MysqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
6
- visitColumnDefinition(node) {
7
- this.visitNode(node.column);
8
- this.append(' ');
9
- this.visitNode(node.dataType);
10
- if (node.defaultTo) {
11
- this.append(' default ');
12
- this.visitNode(node.defaultTo);
13
- }
14
- if (!node.isNullable || node.isAutoIncrementing) {
15
- this.append(' not null');
16
- }
17
- if (node.isAutoIncrementing) {
18
- this.append(' auto_increment');
19
- }
20
- if (node.isUnique) {
21
- this.append(' unique');
22
- }
23
- if (node.isPrimaryKey) {
24
- this.append(' primary key');
25
- }
26
- if (node.references) {
27
- this.append(' ');
28
- this.visitNode(node.references);
29
- }
30
- if (node.check) {
31
- this.append(' ');
32
- this.visitNode(node.check);
33
- }
34
- }
35
6
  visitReturning() {
36
7
  // Do nothing.
37
8
  }
@@ -40,18 +40,18 @@ class PostgresDriver {
40
40
  if (settings.isolationLevel) {
41
41
  await connection.executeQuery({
42
42
  sql: `start transaction isolation level ${settings.isolationLevel}`,
43
- bindings: [],
43
+ parameters: [],
44
44
  });
45
45
  }
46
46
  else {
47
- await connection.executeQuery({ sql: 'begin', bindings: [] });
47
+ await connection.executeQuery({ sql: 'begin', parameters: [] });
48
48
  }
49
49
  }
50
50
  async commitTransaction(connection) {
51
- await connection.executeQuery({ sql: 'commit', bindings: [] });
51
+ await connection.executeQuery({ sql: 'commit', parameters: [] });
52
52
  }
53
53
  async rollbackTransaction(connection) {
54
- await connection.executeQuery({ sql: 'rollback', bindings: [] });
54
+ await connection.executeQuery({ sql: 'rollback', parameters: [] });
55
55
  }
56
56
  async releaseConnection(connection) {
57
57
  const pgConnection = connection;
@@ -90,7 +90,7 @@ class PostgresConnection {
90
90
  }
91
91
  async executeQuery(compiledQuery) {
92
92
  const result = await this.#client.query(compiledQuery.sql, [
93
- ...compiledQuery.bindings,
93
+ ...compiledQuery.parameters,
94
94
  ]);
95
95
  if (result.command === 'UPDATE' || result.command === 'DELETE') {
96
96
  return {
@@ -13,5 +13,5 @@ export interface CreateSchemaNode extends OperationNode {
13
13
  export declare const CreateSchemaNode: Readonly<{
14
14
  is(node: OperationNode): node is CreateSchemaNode;
15
15
  create(schema: string, params?: CreateSchemaNodeParams | undefined): CreateSchemaNode;
16
- cloneWithModifier(createSchema: CreateSchemaNode, modifier: CreateSchemaNodeModifier): CreateSchemaNode;
16
+ cloneWith(createSchema: CreateSchemaNode, params: CreateSchemaNodeParams): CreateSchemaNode;
17
17
  }>;
@@ -17,10 +17,10 @@ exports.CreateSchemaNode = (0, object_utils_js_1.freeze)({
17
17
  ...params,
18
18
  });
19
19
  },
20
- cloneWithModifier(createSchema, modifier) {
20
+ cloneWith(createSchema, params) {
21
21
  return (0, object_utils_js_1.freeze)({
22
22
  ...createSchema,
23
- modifier,
23
+ ...params,
24
24
  });
25
25
  },
26
26
  });
@@ -1,6 +1,5 @@
1
1
  import { OperationNode } from './operation-node.js';
2
2
  import { TableNode } from './table-node.js';
3
- import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
4
3
  import { ConstraintNode } from './constraint-node.js';
5
4
  import { ColumnDefinitionNode } from './column-definition-node.js';
6
5
  export declare type CreateTableNodeModifier = 'IfNotExists';
@@ -19,8 +18,5 @@ export declare const CreateTableNode: Readonly<{
19
18
  create(table: TableNode): CreateTableNode;
20
19
  cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
21
20
  cloneWithModifier(createTable: CreateTableNode, modifier: CreateTableNodeModifier): CreateTableNode;
22
- cloneWithPrimaryKeyConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
23
- cloneWithUniqueConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
24
- cloneWithCheckConstraint(createTable: CreateTableNode, constraintName: string, sql: string): CreateTableNode;
25
- cloneWithForeignKeyConstraint(createTable: CreateTableNode, constraint: ForeignKeyConstraintNode): CreateTableNode;
21
+ cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
26
22
  }>;
@@ -2,9 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CreateTableNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const check_constraint_node_js_1 = require("./check-constraint-node.js");
6
- const primary_constraint_node_js_1 = require("./primary-constraint-node.js");
7
- const unique_constraint_node_js_1 = require("./unique-constraint-node.js");
8
5
  /**
9
6
  * @internal
10
7
  */
@@ -31,34 +28,7 @@ exports.CreateTableNode = (0, object_utils_js_1.freeze)({
31
28
  modifier,
32
29
  });
33
30
  },
34
- cloneWithPrimaryKeyConstraint(createTable, constraintName, columns) {
35
- const constraint = primary_constraint_node_js_1.PrimaryConstraintNode.create(columns, constraintName);
36
- return (0, object_utils_js_1.freeze)({
37
- ...createTable,
38
- constraints: createTable.constraints
39
- ? (0, object_utils_js_1.freeze)([...createTable.constraints, constraint])
40
- : (0, object_utils_js_1.freeze)([constraint]),
41
- });
42
- },
43
- cloneWithUniqueConstraint(createTable, constraintName, columns) {
44
- const constraint = unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName);
45
- return (0, object_utils_js_1.freeze)({
46
- ...createTable,
47
- constraints: createTable.constraints
48
- ? (0, object_utils_js_1.freeze)([...createTable.constraints, constraint])
49
- : (0, object_utils_js_1.freeze)([constraint]),
50
- });
51
- },
52
- cloneWithCheckConstraint(createTable, constraintName, sql) {
53
- const constraint = check_constraint_node_js_1.CheckConstraintNode.create(sql, constraintName);
54
- return (0, object_utils_js_1.freeze)({
55
- ...createTable,
56
- constraints: createTable.constraints
57
- ? (0, object_utils_js_1.freeze)([...createTable.constraints, constraint])
58
- : (0, object_utils_js_1.freeze)([constraint]),
59
- });
60
- },
61
- cloneWithForeignKeyConstraint(createTable, constraint) {
31
+ cloneWithConstraint(createTable, constraint) {
62
32
  return (0, object_utils_js_1.freeze)({
63
33
  ...createTable,
64
34
  constraints: createTable.constraints
@@ -2,4 +2,4 @@ import { OperationNode } from './operation-node.js';
2
2
  export interface OperationNodeSource {
3
3
  toOperationNode(): OperationNode;
4
4
  }
5
- export declare function isOperationNodeSource(obj: any): obj is OperationNodeSource;
5
+ export declare function isOperationNodeSource(obj: unknown): obj is OperationNodeSource;
@@ -456,11 +456,12 @@ class OperationNodeTransformer {
456
456
  kind: 'AlterTableNode',
457
457
  table: this.transformNode(node.table),
458
458
  renameTo: this.transformNode(node.renameTo),
459
- renameColumn: this.transformNode(node.renameColumn),
460
459
  setSchema: this.transformNode(node.setSchema),
460
+ renameColumn: this.transformNode(node.renameColumn),
461
461
  addColumn: this.transformNode(node.addColumn),
462
462
  dropColumn: this.transformNode(node.dropColumn),
463
463
  alterColumn: this.transformNode(node.alterColumn),
464
+ modifyColumn: this.transformNode(node.modifyColumn),
464
465
  addConstraint: this.transformNode(node.addConstraint),
465
466
  dropConstraint: this.transformNode(node.dropConstraint),
466
467
  };
@@ -12,7 +12,7 @@ exports.PrimitiveValueListNode = (0, object_utils_js_1.freeze)({
12
12
  create(values) {
13
13
  return (0, object_utils_js_1.freeze)({
14
14
  kind: 'PrimitiveValueListNode',
15
- values: (0, object_utils_js_1.freeze)(values),
15
+ values: (0, object_utils_js_1.freeze)([...values]),
16
16
  });
17
17
  },
18
18
  });
@@ -1,8 +1,11 @@
1
1
  import { JoinNode, JoinType } from '../operation-node/join-node.js';
2
2
  import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
3
- import { ExtractAliasFromTableExpression, TableExpressionDatabaseType } from './table-parser.js';
3
+ import { ExtractAliasFromTableExpression, TableExpressionDatabase } from './table-parser.js';
4
4
  import { JoinBuilder } from '../query-builder/join-builder.js';
5
5
  import { ParseContext } from './parse-context.js';
6
- export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>> | AnyColumnWithTable<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
7
- export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
6
+ export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyJoinColumn<DB, TB, F> | AnyJoinColumnWithTable<DB, TB, F>;
7
+ export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
8
+ declare type AnyJoinColumn<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
9
+ declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, F> = AnyColumnWithTable<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
8
10
  export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
11
+ export {};
@@ -1,21 +1,32 @@
1
1
  import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
2
2
  import { TableNode } from '../operation-node/table-node.js';
3
- import { AliasedQueryBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder } from '../util/type-utils.js';
3
+ import { AliasedQueryBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, Nullable } from '../util/type-utils.js';
4
4
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
5
5
  import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
6
6
  import { ParseContext } from './parse-context.js';
7
7
  export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB>;
8
8
  export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
9
9
  export declare type TableReference<DB> = AnyAliasedTable<DB, any, any> | AnyTable<DB> | AnyAliasedRawBuilder;
10
- export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabaseType<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
11
- export declare type TableExpressionDatabaseType<DB, TE> = DB extends ExtractDatabaseTypeFromTableExpression<DB, TE> ? DB : DB & ExtractDatabaseTypeFromTableExpression<DB, TE>;
10
+ export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
11
+ export declare type TableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
12
+ [C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
13
+ };
14
+ export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
15
+ export declare type LeftJoinTableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
16
+ [C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? DB[C] : never;
17
+ };
18
+ export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
19
+ export declare type RightJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
20
+ [C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
21
+ };
22
+ export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
23
+ export declare type FullJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
24
+ [C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
25
+ };
12
26
  export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
27
+ declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : never;
13
28
  declare type AnyAliasedTable<DB, TB extends keyof DB, A extends string> = TB extends string ? `${TB} as ${A}` : never;
14
29
  declare type AnyTable<DB> = keyof DB;
15
- declare type ExtractDatabaseTypeFromTableExpression<DB, TE> = {
16
- [A in ExtractAliasFromTableExpression<DB, TE>]: ExtractRowTypeFromTableExpression<DB, TE, A>;
17
- };
18
- declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : never;
19
30
  export declare function parseTableExpressionOrList(ctx: ParseContext, table: TableExpressionOrList<any, any>): TableExpressionNode[];
20
31
  export declare function parseTableExpression(ctx: ParseContext, table: TableExpression<any, any>): TableExpressionNode;
21
32
  export declare function parseAliasedTable(from: string): TableExpressionNode;
@@ -66,9 +66,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
66
66
  * Calls the `sum` function for the column given as the argument.
67
67
  *
68
68
  * If this is used in a `select` statement the type of the selected expression
69
- * will be `number | string` by default. This is because Kysely can't know the
70
- * type the db driver outputs. Sometimes the output can be larger than the
71
- * largest javascript number and a string is returned instead. Most drivers
69
+ * will be `number | string | BigInt` by default. This is because Kysely can't
70
+ * know the type the db driver outputs. Sometimes the output can be larger than
71
+ * the largest javascript number and a string is returned instead. Most drivers
72
72
  * allow you to configure the output type of large numbers and Kysely can't
73
73
  * know if you've done so.
74
74
  *
@@ -88,9 +88,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
88
88
  * Calls the `count` function for the column given as the argument.
89
89
  *
90
90
  * If this is used in a `select` statement the type of the selected expression
91
- * will be `number | string` by default. This is because Kysely can't know the
92
- * type the db driver outputs. Sometimes the output can be larger than the
93
- * largest javascript number and a string is returned instead. Most drivers
91
+ * will be `number | string | BigInt` by default. This is because Kysely can't
92
+ * know the type the db driver outputs. Sometimes the output can be larger than
93
+ * the largest javascript number and a string is returned instead. Most drivers
94
94
  * allow you to configure the output type of large numbers and Kysely can't
95
95
  * know if you've done so.
96
96
  *
@@ -82,9 +82,9 @@ class FunctionBuilder {
82
82
  * Calls the `sum` function for the column given as the argument.
83
83
  *
84
84
  * If this is used in a `select` statement the type of the selected expression
85
- * will be `number | string` by default. This is because Kysely can't know the
86
- * type the db driver outputs. Sometimes the output can be larger than the
87
- * largest javascript number and a string is returned instead. Most drivers
85
+ * will be `number | string | BigInt` by default. This is because Kysely can't
86
+ * know the type the db driver outputs. Sometimes the output can be larger than
87
+ * the largest javascript number and a string is returned instead. Most drivers
88
88
  * allow you to configure the output type of large numbers and Kysely can't
89
89
  * know if you've done so.
90
90
  *
@@ -106,9 +106,9 @@ class FunctionBuilder {
106
106
  * Calls the `count` function for the column given as the argument.
107
107
  *
108
108
  * If this is used in a `select` statement the type of the selected expression
109
- * will be `number | string` by default. This is because Kysely can't know the
110
- * type the db driver outputs. Sometimes the output can be larger than the
111
- * largest javascript number and a string is returned instead. Most drivers
109
+ * will be `number | string | BigInt` by default. This is because Kysely can't
110
+ * know the type the db driver outputs. Sometimes the output can be larger than
111
+ * the largest javascript number and a string is returned instead. Most drivers
112
112
  * allow you to configure the output type of large numbers and Kysely can't
113
113
  * know if you've done so.
114
114
  *
@@ -131,7 +131,7 @@ class FunctionBuilder {
131
131
  queryId: (0, query_id_js_1.createQueryId)(),
132
132
  executor: this.#props.executor,
133
133
  sql: `${fn}(??)`,
134
- params: [column],
134
+ parameters: [column],
135
135
  });
136
136
  }
137
137
  }
@@ -2,7 +2,7 @@ import { AliasNode } from '../operation-node/alias-node.js';
2
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
3
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
4
4
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
5
- import { TableExpression, QueryBuilderWithTable } from '../parser/table-parser.js';
5
+ import { TableExpression, QueryBuilderWithTable, QueryBuilderWithLeftJoin, QueryBuilderWithRightJoin, QueryBuilderWithFullJoin } from '../parser/table-parser.js';
6
6
  import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
7
7
  import { ExistsExpression, FilterOperator } from '../parser/filter-parser.js';
8
8
  import { InsertObject } from '../parser/insert-values-parser.js';
@@ -869,20 +869,20 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
869
869
  * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a left join
870
870
  * instead of an inner join.
871
871
  */
872
- leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
873
- leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
872
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithLeftJoin<DB, TB, O, TE>;
873
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithLeftJoin<DB, TB, O, TE>;
874
874
  /**
875
875
  * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a right join
876
876
  * instead of an inner join.
877
877
  */
878
- rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
879
- rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
878
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithRightJoin<DB, TB, O, TE>;
879
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithRightJoin<DB, TB, O, TE>;
880
880
  /**
881
881
  * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a full join
882
882
  * instead of an inner join.
883
883
  */
884
- fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
885
- fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
884
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithFullJoin<DB, TB, O, TE>;
885
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithFullJoin<DB, TB, O, TE>;
886
886
  /**
887
887
  * Sets the values to insert for an {@link Kysely.insertInto | insert} query.
888
888
  *
@@ -1,4 +1,4 @@
1
1
  export interface CompiledQuery {
2
2
  readonly sql: string;
3
- readonly bindings: ReadonlyArray<any>;
3
+ readonly parameters: ReadonlyArray<any>;
4
4
  }
@@ -62,7 +62,7 @@ import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
62
62
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
63
63
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
64
64
  #private;
65
- protected get numBindings(): number;
65
+ protected get numParameters(): number;
66
66
  compileQuery(node: RootOperationNode): CompiledQuery;
67
67
  protected getSql(): string;
68
68
  protected visitSelectQuery(node: SelectQueryNode): void;
@@ -92,6 +92,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
92
92
  protected visitTable(node: TableNode): void;
93
93
  protected visitCreateTable(node: CreateTableNode): void;
94
94
  protected visitColumnDefinition(node: ColumnDefinitionNode): void;
95
+ protected getAutoIncrement(): string;
95
96
  protected visitReferences(node: ReferencesNode): void;
96
97
  protected visitDropTable(node: DropTableNode): void;
97
98
  protected visitDataType(node: DataTypeNode): void;
@@ -129,6 +130,6 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
129
130
  protected getLeftIdentifierWrapper(): string;
130
131
  protected getRightIdentifierWrapper(): string;
131
132
  protected getCurrentParameterPlaceholder(): string;
132
- protected addBinding(binding: any): void;
133
+ protected addParameter(parameter: any): void;
133
134
  protected appendImmediateValue(value: PrimitiveValue): void;
134
135
  }
@@ -1,28 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultQueryCompiler = void 0;
4
- const data_type_node_js_1 = require("../operation-node/data-type-node.js");
5
4
  const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js");
6
5
  const query_node_js_1 = require("../operation-node/query-node.js");
7
6
  const raw_node_js_1 = require("../operation-node/raw-node.js");
8
7
  const object_utils_js_1 = require("../util/object-utils.js");
9
8
  class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisitor {
10
- #sqlFragments = [];
11
- #bindings = [];
12
- get numBindings() {
13
- return this.#bindings.length;
9
+ #sql = '';
10
+ #parameters = [];
11
+ get numParameters() {
12
+ return this.#parameters.length;
14
13
  }
15
14
  compileQuery(node) {
16
- this.#sqlFragments = [];
17
- this.#bindings = [];
15
+ this.#sql = '';
16
+ this.#parameters = [];
18
17
  this.visitNode(node);
19
18
  return (0, object_utils_js_1.freeze)({
20
19
  sql: this.getSql(),
21
- bindings: this.#bindings,
20
+ parameters: this.#parameters,
22
21
  });
23
22
  }
24
23
  getSql() {
25
- return this.#sqlFragments.join('');
24
+ return this.#sql;
26
25
  }
27
26
  visitSelectQuery(node) {
28
27
  // This is a sub query if this is not the root node.
@@ -292,19 +291,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
292
291
  visitColumnDefinition(node) {
293
292
  this.visitNode(node.column);
294
293
  this.append(' ');
295
- if (node.isAutoIncrementing) {
296
- // Postgres overrides the data type for autoincrementing columns.
297
- if (data_type_node_js_1.DataTypeNode.is(node.dataType) &&
298
- node.dataType.dataType === 'bigint') {
299
- this.append('bigserial');
300
- }
301
- else {
302
- this.append('serial');
303
- }
304
- }
305
- else {
306
- this.visitNode(node.dataType);
307
- }
294
+ this.visitNode(node.dataType);
308
295
  if (node.defaultTo) {
309
296
  this.append(' default ');
310
297
  this.visitNode(node.defaultTo);
@@ -312,6 +299,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
312
299
  if (!node.isNullable) {
313
300
  this.append(' not null');
314
301
  }
302
+ if (node.isAutoIncrementing) {
303
+ this.append(' ');
304
+ this.append(this.getAutoIncrement());
305
+ }
315
306
  if (node.isUnique) {
316
307
  this.append(' unique');
317
308
  }
@@ -327,6 +318,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
327
318
  this.visitNode(node.check);
328
319
  }
329
320
  }
321
+ getAutoIncrement() {
322
+ return 'auto_increment';
323
+ }
330
324
  visitReferences(node) {
331
325
  this.append('references ');
332
326
  this.visitNode(node.table);
@@ -637,10 +631,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
637
631
  this.visitNode(node.constraintName);
638
632
  }
639
633
  append(str) {
640
- this.#sqlFragments.push(str);
634
+ this.#sql += str;
641
635
  }
642
636
  appendValue(value) {
643
- this.addBinding(value);
637
+ this.addParameter(value);
644
638
  this.append(this.getCurrentParameterPlaceholder());
645
639
  }
646
640
  getLeftIdentifierWrapper() {
@@ -650,10 +644,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
650
644
  return '"';
651
645
  }
652
646
  getCurrentParameterPlaceholder() {
653
- return '$' + this.numBindings;
647
+ return '$' + this.numParameters;
654
648
  }
655
- addBinding(binding) {
656
- this.#bindings.push(binding);
649
+ addParameter(parameter) {
650
+ this.#parameters.push(parameter);
657
651
  }
658
652
  appendImmediateValue(value) {
659
653
  if ((0, object_utils_js_1.isString)(value)) {
@@ -682,7 +676,7 @@ const SELECT_MODIFIER_SQL = {
682
676
  ForNoKeyUpdate: 'for no key update',
683
677
  ForUpdate: 'for update',
684
678
  ForShare: 'for share',
685
- NoWait: 'no wait',
679
+ NoWait: 'nowait',
686
680
  SkipLocked: 'skip locked',
687
681
  };
688
682
  const JOIN_TYPE_SQL = {