kysely 0.9.7 → 0.10.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 (120) hide show
  1. package/README.md +15 -13
  2. package/dist/cjs/driver/runtime-driver.js +3 -4
  3. package/dist/cjs/index.d.ts +2 -0
  4. package/dist/cjs/index.js +2 -0
  5. package/dist/cjs/operation-node/column-definition-node.d.ts +8 -6
  6. package/dist/cjs/operation-node/column-definition-node.js +4 -4
  7. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -2
  8. package/dist/cjs/operation-node/create-table-node.d.ts +2 -3
  9. package/dist/cjs/operation-node/create-table-node.js +2 -2
  10. package/dist/cjs/operation-node/create-view-node.d.ts +22 -0
  11. package/dist/cjs/operation-node/create-view-node.js +25 -0
  12. package/dist/cjs/operation-node/default-value-node.d.ts +14 -0
  13. package/dist/cjs/operation-node/default-value-node.js +18 -0
  14. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -2
  15. package/dist/cjs/operation-node/drop-schema-node.d.ts +2 -3
  16. package/dist/cjs/operation-node/drop-schema-node.js +3 -3
  17. package/dist/cjs/operation-node/drop-table-node.d.ts +2 -3
  18. package/dist/cjs/operation-node/drop-table-node.js +2 -2
  19. package/dist/cjs/operation-node/drop-view-node.d.ts +17 -0
  20. package/dist/cjs/operation-node/drop-view-node.js +25 -0
  21. package/dist/cjs/operation-node/generated-always-as-node.d.ts +16 -0
  22. package/dist/cjs/operation-node/generated-always-as-node.js +25 -0
  23. package/dist/cjs/operation-node/operation-node-transformer.d.ts +8 -0
  24. package/dist/cjs/operation-node/operation-node-transformer.js +47 -11
  25. package/dist/cjs/operation-node/operation-node-visitor.d.ts +8 -0
  26. package/dist/cjs/operation-node/operation-node-visitor.js +7 -2
  27. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  28. package/dist/cjs/operation-node/operator-node.d.ts +1 -1
  29. package/dist/cjs/operation-node/operator-node.js +5 -0
  30. package/dist/cjs/operation-node/raw-node.d.ts +1 -1
  31. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  32. package/dist/cjs/operation-node/select-query-node.js +1 -1
  33. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
  34. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +22 -0
  35. package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
  36. package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.js +21 -0
  37. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  38. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +6 -0
  39. package/dist/cjs/query-compiler/default-query-compiler.d.ts +8 -0
  40. package/dist/cjs/query-compiler/default-query-compiler.js +59 -11
  41. package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
  42. package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
  43. package/dist/cjs/schema/alter-table-builder.d.ts +6 -2
  44. package/dist/cjs/schema/alter-table-builder.js +28 -4
  45. package/dist/cjs/schema/column-definition-builder.d.ts +43 -2
  46. package/dist/cjs/schema/column-definition-builder.js +23 -6
  47. package/dist/cjs/schema/create-schema-builder.js +1 -1
  48. package/dist/cjs/schema/create-table-builder.d.ts +7 -8
  49. package/dist/cjs/schema/create-table-builder.js +8 -9
  50. package/dist/cjs/schema/create-view-builder.d.ts +24 -0
  51. package/dist/cjs/schema/create-view-builder.js +73 -0
  52. package/dist/cjs/schema/drop-index-builder.js +1 -1
  53. package/dist/cjs/schema/drop-schema-builder.js +3 -1
  54. package/dist/cjs/schema/drop-table-builder.js +3 -1
  55. package/dist/cjs/schema/drop-view-builder.d.ts +20 -0
  56. package/dist/cjs/schema/drop-view-builder.js +39 -0
  57. package/dist/cjs/schema/schema.d.ts +30 -3
  58. package/dist/cjs/schema/schema.js +44 -3
  59. package/dist/cjs/util/performance-now.d.ts +1 -0
  60. package/dist/cjs/util/performance-now.js +13 -0
  61. package/dist/esm/driver/runtime-driver.js +3 -4
  62. package/dist/esm/index.d.ts +2 -0
  63. package/dist/esm/index.js +2 -0
  64. package/dist/esm/operation-node/column-definition-node.d.ts +8 -6
  65. package/dist/esm/operation-node/column-definition-node.js +4 -4
  66. package/dist/esm/operation-node/create-schema-node.d.ts +1 -2
  67. package/dist/esm/operation-node/create-table-node.d.ts +2 -3
  68. package/dist/esm/operation-node/create-table-node.js +2 -2
  69. package/dist/esm/operation-node/create-view-node.d.ts +22 -0
  70. package/dist/esm/operation-node/create-view-node.js +22 -0
  71. package/dist/esm/operation-node/default-value-node.d.ts +14 -0
  72. package/dist/esm/operation-node/default-value-node.js +15 -0
  73. package/dist/esm/operation-node/drop-index-node.d.ts +1 -2
  74. package/dist/esm/operation-node/drop-schema-node.d.ts +2 -3
  75. package/dist/esm/operation-node/drop-schema-node.js +3 -3
  76. package/dist/esm/operation-node/drop-table-node.d.ts +2 -3
  77. package/dist/esm/operation-node/drop-table-node.js +2 -2
  78. package/dist/esm/operation-node/drop-view-node.d.ts +17 -0
  79. package/dist/esm/operation-node/drop-view-node.js +22 -0
  80. package/dist/esm/operation-node/generated-always-as-node.d.ts +16 -0
  81. package/dist/esm/operation-node/generated-always-as-node.js +22 -0
  82. package/dist/esm/operation-node/operation-node-transformer.d.ts +8 -0
  83. package/dist/esm/operation-node/operation-node-transformer.js +47 -11
  84. package/dist/esm/operation-node/operation-node-visitor.d.ts +8 -0
  85. package/dist/esm/operation-node/operation-node-visitor.js +7 -2
  86. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  87. package/dist/esm/operation-node/operator-node.d.ts +1 -1
  88. package/dist/esm/operation-node/operator-node.js +5 -0
  89. package/dist/esm/operation-node/raw-node.d.ts +1 -1
  90. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  91. package/dist/esm/operation-node/select-query-node.js +1 -1
  92. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
  93. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +18 -0
  94. package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
  95. package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.js +17 -0
  96. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  97. package/dist/esm/plugin/with-schema/with-schema-transformer.js +6 -0
  98. package/dist/esm/query-compiler/default-query-compiler.d.ts +8 -0
  99. package/dist/esm/query-compiler/default-query-compiler.js +59 -11
  100. package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
  101. package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
  102. package/dist/esm/schema/alter-table-builder.d.ts +6 -2
  103. package/dist/esm/schema/alter-table-builder.js +28 -4
  104. package/dist/esm/schema/column-definition-builder.d.ts +43 -2
  105. package/dist/esm/schema/column-definition-builder.js +23 -6
  106. package/dist/esm/schema/create-schema-builder.js +1 -1
  107. package/dist/esm/schema/create-table-builder.d.ts +7 -8
  108. package/dist/esm/schema/create-table-builder.js +8 -9
  109. package/dist/esm/schema/create-view-builder.d.ts +24 -0
  110. package/dist/esm/schema/create-view-builder.js +69 -0
  111. package/dist/esm/schema/drop-index-builder.js +1 -1
  112. package/dist/esm/schema/drop-schema-builder.js +3 -1
  113. package/dist/esm/schema/drop-table-builder.js +3 -1
  114. package/dist/esm/schema/drop-view-builder.d.ts +20 -0
  115. package/dist/esm/schema/drop-view-builder.js +35 -0
  116. package/dist/esm/schema/schema.d.ts +30 -3
  117. package/dist/esm/schema/schema.js +44 -3
  118. package/dist/esm/util/performance-now.d.ts +1 -0
  119. package/dist/esm/util/performance-now.js +9 -0
  120. package/package.json +3 -3
@@ -26,9 +26,9 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
26
26
  * ```ts
27
27
  * await db.schema
28
28
  * .createTable('person')
29
- * .addColumn('id', 'integer', (col) => col.increments().primaryKey()),
30
- * .addColumn('first_name', 'varchar(50), (col) => col.notNull())
31
- * .addColumn('last_name', 'varchar')
29
+ * .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
30
+ * .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
31
+ * .addColumn('last_name', 'varchar(255)')
32
32
  * .addColumn('bank_balance', 'numeric(8, 2)')
33
33
  * .addColumn('data', db.raw('customtype'))
34
34
  * .addColumn('parent_id', 'integer', (col) =>
@@ -37,11 +37,10 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
37
37
  * ```
38
38
  *
39
39
  * With this method, it's once again good to remember that Kysely just builds the query
40
- * that's as close to the structure of your builder method calls as possible, and doesn't
41
- * provide the same API for all databses. For example, some databases like older MySQL
42
- * don't support `references` statement in the column definition. Instead foreign key
43
- * constraints need to be defined in at the level of the `create table` query. See
44
- * the next example:
40
+ * and doesn't provide the same API for all databses. For example, some databases like
41
+ * older MySQL don't support `references` statement in the column definition. Instead
42
+ * foreign key constraints need to be defined in at the level of the `create table`
43
+ * query. See the next example:
45
44
  *
46
45
  * @example
47
46
  * ```ts
@@ -30,7 +30,7 @@ class CreateTableBuilder {
30
30
  ifNotExists() {
31
31
  return new CreateTableBuilder({
32
32
  ...this.#props,
33
- createTableNode: create_table_node_js_1.CreateTableNode.cloneWithModifier(this.#props.createTableNode, 'IfNotExists'),
33
+ createTableNode: create_table_node_js_1.CreateTableNode.cloneWithIfNotExists(this.#props.createTableNode, true),
34
34
  });
35
35
  }
36
36
  /**
@@ -40,9 +40,9 @@ class CreateTableBuilder {
40
40
  * ```ts
41
41
  * await db.schema
42
42
  * .createTable('person')
43
- * .addColumn('id', 'integer', (col) => col.increments().primaryKey()),
44
- * .addColumn('first_name', 'varchar(50), (col) => col.notNull())
45
- * .addColumn('last_name', 'varchar')
43
+ * .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
44
+ * .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
45
+ * .addColumn('last_name', 'varchar(255)')
46
46
  * .addColumn('bank_balance', 'numeric(8, 2)')
47
47
  * .addColumn('data', db.raw('customtype'))
48
48
  * .addColumn('parent_id', 'integer', (col) =>
@@ -51,11 +51,10 @@ class CreateTableBuilder {
51
51
  * ```
52
52
  *
53
53
  * With this method, it's once again good to remember that Kysely just builds the query
54
- * that's as close to the structure of your builder method calls as possible, and doesn't
55
- * provide the same API for all databses. For example, some databases like older MySQL
56
- * don't support `references` statement in the column definition. Instead foreign key
57
- * constraints need to be defined in at the level of the `create table` query. See
58
- * the next example:
54
+ * and doesn't provide the same API for all databses. For example, some databases like
55
+ * older MySQL don't support `references` statement in the column definition. Instead
56
+ * foreign key constraints need to be defined in at the level of the `create table`
57
+ * query. See the next example:
59
58
  *
60
59
  * @example
61
60
  * ```ts
@@ -0,0 +1,24 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
+ import { Compilable } from '../util/compilable.js';
4
+ import { QueryExecutor } from '../query-executor/query-executor.js';
5
+ import { QueryId } from '../util/query-id.js';
6
+ import { CreateViewNode } from '../operation-node/create-view-node.js';
7
+ import { AnyQueryBuilder } from '../index.js';
8
+ import { AnyRawBuilder } from '../util/type-utils.js';
9
+ export declare class CreateViewBuilder implements OperationNodeSource, Compilable {
10
+ #private;
11
+ constructor(props: CreateViewBuilderProps);
12
+ materialized(): CreateViewBuilder;
13
+ orReplace(): CreateViewBuilder;
14
+ columns(columns: string[]): CreateViewBuilder;
15
+ as(query: AnyQueryBuilder | AnyRawBuilder): CreateViewBuilder;
16
+ toOperationNode(): CreateViewNode;
17
+ compile(): CompiledQuery;
18
+ execute(): Promise<void>;
19
+ }
20
+ export interface CreateViewBuilderProps {
21
+ readonly queryId: QueryId;
22
+ readonly executor: QueryExecutor;
23
+ readonly createViewNode: CreateViewNode;
24
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateViewBuilder = void 0;
4
+ const prevent_await_js_1 = require("../util/prevent-await.js");
5
+ const object_utils_js_1 = require("../util/object-utils.js");
6
+ const create_view_node_js_1 = require("../operation-node/create-view-node.js");
7
+ const reference_parser_js_1 = require("../parser/reference-parser.js");
8
+ const index_js_1 = require("../index.js");
9
+ const immediate_value_plugin_js_1 = require("../plugin/immediate-value.ts/immediate-value-plugin.js");
10
+ class CreateViewBuilder {
11
+ #props;
12
+ constructor(props) {
13
+ this.#props = (0, object_utils_js_1.freeze)({
14
+ ...props,
15
+ // The select statement (defined using the `as` method) can't have parameters on some
16
+ // dialects. We add the `ImmediateValuePlugin` to make all parameters "immediate"
17
+ // meaning they are interpolated into the SQL instead of added as parameters.
18
+ //
19
+ // The values are therefore not escaped at all, which leads to SQL injection
20
+ // vulnerabilities if user input is passed into the query. However, the use
21
+ // case where user input is passed into a `create view` statement is a weird
22
+ // one, and we can pretty safely just ignore it.
23
+ executor: props.executor.withPlugin(new immediate_value_plugin_js_1.ImmediateValuePlugin()),
24
+ });
25
+ }
26
+ materialized() {
27
+ return new CreateViewBuilder({
28
+ ...this.#props,
29
+ createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
30
+ materialized: true,
31
+ }),
32
+ });
33
+ }
34
+ orReplace() {
35
+ return new CreateViewBuilder({
36
+ ...this.#props,
37
+ createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
38
+ orReplace: true,
39
+ }),
40
+ });
41
+ }
42
+ columns(columns) {
43
+ return new CreateViewBuilder({
44
+ ...this.#props,
45
+ createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
46
+ columns: columns.map(reference_parser_js_1.parseColumnName),
47
+ }),
48
+ });
49
+ }
50
+ as(query) {
51
+ const queryNode = query.toOperationNode();
52
+ if (index_js_1.QueryNode.isMutating(queryNode)) {
53
+ throw new Error('only select statements are allowd in views');
54
+ }
55
+ return new CreateViewBuilder({
56
+ ...this.#props,
57
+ createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
58
+ as: queryNode,
59
+ }),
60
+ });
61
+ }
62
+ toOperationNode() {
63
+ return this.#props.executor.transformQuery(this.#props.createViewNode, this.#props.queryId);
64
+ }
65
+ compile() {
66
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
67
+ }
68
+ async execute() {
69
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
70
+ }
71
+ }
72
+ exports.CreateViewBuilder = CreateViewBuilder;
73
+ (0, prevent_await_js_1.preventAwait)(CreateViewBuilder, "don't await CreateViewBuilder instances directly. To execute the query you need to call `execute`");
@@ -26,7 +26,7 @@ class DropIndexBuilder {
26
26
  return new DropIndexBuilder({
27
27
  ...this.#props,
28
28
  dropIndexNode: drop_index_node_js_1.DropIndexNode.cloneWith(this.#props.dropIndexNode, {
29
- modifier: 'IfExists',
29
+ ifExists: true,
30
30
  }),
31
31
  });
32
32
  }
@@ -12,7 +12,9 @@ class DropSchemaBuilder {
12
12
  ifExists() {
13
13
  return new DropSchemaBuilder({
14
14
  ...this.#props,
15
- dropSchemaNode: drop_schema_node_js_1.DropSchemaNode.cloneWithModifier(this.#props.dropSchemaNode, 'IfExists'),
15
+ dropSchemaNode: drop_schema_node_js_1.DropSchemaNode.cloneWith(this.#props.dropSchemaNode, {
16
+ ifExists: true,
17
+ }),
16
18
  });
17
19
  }
18
20
  toOperationNode() {
@@ -12,7 +12,9 @@ class DropTableBuilder {
12
12
  ifExists() {
13
13
  return new DropTableBuilder({
14
14
  ...this.#props,
15
- dropTableNode: drop_table_node_js_1.DropTableNode.cloneWithModifier(this.#props.dropTableNode, 'IfExists'),
15
+ dropTableNode: drop_table_node_js_1.DropTableNode.cloneWith(this.#props.dropTableNode, {
16
+ ifExists: true,
17
+ }),
16
18
  });
17
19
  }
18
20
  toOperationNode() {
@@ -0,0 +1,20 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
+ import { Compilable } from '../util/compilable.js';
4
+ import { QueryExecutor } from '../query-executor/query-executor.js';
5
+ import { QueryId } from '../util/query-id.js';
6
+ import { DropViewNode } from '../operation-node/drop-view-node.js';
7
+ export declare class DropViewBuilder implements OperationNodeSource, Compilable {
8
+ #private;
9
+ constructor(props: DropViewBuilderProps);
10
+ materialized(): DropViewBuilder;
11
+ ifExists(): DropViewBuilder;
12
+ toOperationNode(): DropViewNode;
13
+ compile(): CompiledQuery;
14
+ execute(): Promise<void>;
15
+ }
16
+ export interface DropViewBuilderProps {
17
+ readonly queryId: QueryId;
18
+ readonly executor: QueryExecutor;
19
+ readonly dropViewNode: DropViewNode;
20
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DropViewBuilder = void 0;
4
+ const prevent_await_js_1 = require("../util/prevent-await.js");
5
+ const object_utils_js_1 = require("../util/object-utils.js");
6
+ const drop_view_node_js_1 = require("../operation-node/drop-view-node.js");
7
+ class DropViewBuilder {
8
+ #props;
9
+ constructor(props) {
10
+ this.#props = (0, object_utils_js_1.freeze)(props);
11
+ }
12
+ materialized() {
13
+ return new DropViewBuilder({
14
+ ...this.#props,
15
+ dropViewNode: drop_view_node_js_1.DropViewNode.cloneWith(this.#props.dropViewNode, {
16
+ materialized: true,
17
+ }),
18
+ });
19
+ }
20
+ ifExists() {
21
+ return new DropViewBuilder({
22
+ ...this.#props,
23
+ dropViewNode: drop_view_node_js_1.DropViewNode.cloneWith(this.#props.dropViewNode, {
24
+ ifExists: true,
25
+ }),
26
+ });
27
+ }
28
+ toOperationNode() {
29
+ return this.#props.executor.transformQuery(this.#props.dropViewNode, this.#props.queryId);
30
+ }
31
+ compile() {
32
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
33
+ }
34
+ async execute() {
35
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
36
+ }
37
+ }
38
+ exports.DropViewBuilder = DropViewBuilder;
39
+ (0, prevent_await_js_1.preventAwait)(DropViewBuilder, "don't await DropViewBuilder instances directly. To execute the query you need to call `execute`");
@@ -6,6 +6,8 @@ import { CreateTableBuilder } from './create-table-builder.js';
6
6
  import { DropIndexBuilder } from './drop-index-builder.js';
7
7
  import { DropSchemaBuilder } from './drop-schema-builder.js';
8
8
  import { DropTableBuilder } from './drop-table-builder.js';
9
+ import { CreateViewBuilder } from './create-view-builder.js';
10
+ import { DropViewBuilder } from './drop-view-builder.js';
9
11
  /**
10
12
  * Provides methods for building database schema.
11
13
  */
@@ -22,7 +24,7 @@ export declare class SchemaModule {
22
24
  * ```ts
23
25
  * await db.schema
24
26
  * .createTable('person')
25
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
27
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
26
28
  * .addColumn('first_name', 'varchar', col => col.notNull())
27
29
  * .addColumn('last_name', 'varchar', col => col.notNull())
28
30
  * .addColumn('gender', 'varchar')
@@ -38,7 +40,7 @@ export declare class SchemaModule {
38
40
  * ```ts
39
41
  * await db.schema
40
42
  * .createTable('pet')
41
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
43
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
42
44
  * .addColumn('owner_id', 'integer', col => col
43
45
  * .references('person.id')
44
46
  * .onDelete('cascade')
@@ -55,7 +57,7 @@ export declare class SchemaModule {
55
57
  * ```ts
56
58
  * await db.schema
57
59
  * .createTable('pet')
58
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
60
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
59
61
  * .addColumn('owner_id', 'integer')
60
62
  * .addForeignKeyConstraint(
61
63
  * 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
@@ -135,6 +137,31 @@ export declare class SchemaModule {
135
137
  * ```
136
138
  */
137
139
  alterTable(table: string): AlterTableBuilder;
140
+ /**
141
+ * Create a new view.
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * await db.schema
146
+ * .createView('dogs')
147
+ * .orReplace()
148
+ * .as(db.selectFrom('pet').selectAll().where('species', '=', 'dog'))
149
+ * .execute()
150
+ * ```
151
+ */
152
+ createView(viewName: string): CreateViewBuilder;
153
+ /**
154
+ * Drop a view.
155
+ *
156
+ * @example
157
+ * ```ts
158
+ * await db.schema
159
+ * .dropView('dogs')
160
+ * .ifExists()
161
+ * .execute()
162
+ * ```
163
+ */
164
+ dropView(viewName: string): DropViewBuilder;
138
165
  /**
139
166
  * See {@link QueryCreator.withSchema}
140
167
  */
@@ -18,6 +18,10 @@ const drop_schema_builder_js_1 = require("./drop-schema-builder.js");
18
18
  const drop_table_builder_js_1 = require("./drop-table-builder.js");
19
19
  const query_id_js_1 = require("../util/query-id.js");
20
20
  const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
21
+ const create_view_builder_js_1 = require("./create-view-builder.js");
22
+ const create_view_node_js_1 = require("../operation-node/create-view-node.js");
23
+ const drop_view_builder_js_1 = require("./drop-view-builder.js");
24
+ const drop_view_node_js_1 = require("../operation-node/drop-view-node.js");
21
25
  /**
22
26
  * Provides methods for building database schema.
23
27
  */
@@ -36,7 +40,7 @@ class SchemaModule {
36
40
  * ```ts
37
41
  * await db.schema
38
42
  * .createTable('person')
39
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
43
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
40
44
  * .addColumn('first_name', 'varchar', col => col.notNull())
41
45
  * .addColumn('last_name', 'varchar', col => col.notNull())
42
46
  * .addColumn('gender', 'varchar')
@@ -52,7 +56,7 @@ class SchemaModule {
52
56
  * ```ts
53
57
  * await db.schema
54
58
  * .createTable('pet')
55
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
59
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
56
60
  * .addColumn('owner_id', 'integer', col => col
57
61
  * .references('person.id')
58
62
  * .onDelete('cascade')
@@ -69,7 +73,7 @@ class SchemaModule {
69
73
  * ```ts
70
74
  * await db.schema
71
75
  * .createTable('pet')
72
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
76
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
73
77
  * .addColumn('owner_id', 'integer')
74
78
  * .addForeignKeyConstraint(
75
79
  * 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
@@ -191,6 +195,43 @@ class SchemaModule {
191
195
  alterTableNode: alter_table_node_js_1.AlterTableNode.create(table),
192
196
  });
193
197
  }
198
+ /**
199
+ * Create a new view.
200
+ *
201
+ * @example
202
+ * ```ts
203
+ * await db.schema
204
+ * .createView('dogs')
205
+ * .orReplace()
206
+ * .as(db.selectFrom('pet').selectAll().where('species', '=', 'dog'))
207
+ * .execute()
208
+ * ```
209
+ */
210
+ createView(viewName) {
211
+ return new create_view_builder_js_1.CreateViewBuilder({
212
+ queryId: (0, query_id_js_1.createQueryId)(),
213
+ executor: this.#executor,
214
+ createViewNode: create_view_node_js_1.CreateViewNode.create(viewName),
215
+ });
216
+ }
217
+ /**
218
+ * Drop a view.
219
+ *
220
+ * @example
221
+ * ```ts
222
+ * await db.schema
223
+ * .dropView('dogs')
224
+ * .ifExists()
225
+ * .execute()
226
+ * ```
227
+ */
228
+ dropView(viewName) {
229
+ return new drop_view_builder_js_1.DropViewBuilder({
230
+ queryId: (0, query_id_js_1.createQueryId)(),
231
+ executor: this.#executor,
232
+ dropViewNode: drop_view_node_js_1.DropViewNode.create(viewName),
233
+ });
234
+ }
194
235
  /**
195
236
  * See {@link QueryCreator.withSchema}
196
237
  */
@@ -0,0 +1 @@
1
+ export declare function performanceNow(): number;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.performanceNow = void 0;
4
+ const object_utils_js_1 = require("./object-utils.js");
5
+ function performanceNow() {
6
+ if (typeof performance !== 'undefined' && (0, object_utils_js_1.isFunction)(performance.now)) {
7
+ return performance.now();
8
+ }
9
+ else {
10
+ return Date.now();
11
+ }
12
+ }
13
+ exports.performanceNow = performanceNow;
@@ -1,3 +1,4 @@
1
+ import { performanceNow } from '../util/performance-now.js';
1
2
  /**
2
3
  * A small wrapper around {@link Driver} that makes sure the driver is
3
4
  * initialized before it is used, only initialized and destroyed
@@ -71,7 +72,7 @@ class RuntimeConnection {
71
72
  this.#log = log;
72
73
  }
73
74
  async executeQuery(compiledQuery) {
74
- const startTime = process.hrtime.bigint();
75
+ const startTime = performanceNow();
75
76
  try {
76
77
  return await this.#connection.executeQuery(compiledQuery);
77
78
  }
@@ -97,8 +98,6 @@ class RuntimeConnection {
97
98
  }));
98
99
  }
99
100
  #calculateDurationMillis(startTime) {
100
- const endTime = process.hrtime.bigint();
101
- const durationNanos = Number(endTime - startTime);
102
- return durationNanos / 1_000_000;
101
+ return performanceNow() - startTime;
103
102
  }
104
103
  }
@@ -19,6 +19,8 @@ export * from './schema/drop-schema-builder.js';
19
19
  export * from './schema/column-definition-builder.js';
20
20
  export * from './schema/foreign-key-constraint-builder.js';
21
21
  export * from './schema/alter-table-builder.js';
22
+ export * from './schema/create-view-builder.js';
23
+ export * from './schema/drop-view-builder.js';
22
24
  export * from './dynamic/dynamic.js';
23
25
  export * from './driver/driver.js';
24
26
  export * from './driver/database-connection.js';
package/dist/esm/index.js CHANGED
@@ -19,6 +19,8 @@ export * from './schema/drop-schema-builder.js';
19
19
  export * from './schema/column-definition-builder.js';
20
20
  export * from './schema/foreign-key-constraint-builder.js';
21
21
  export * from './schema/alter-table-builder.js';
22
+ export * from './schema/create-view-builder.js';
23
+ export * from './schema/drop-view-builder.js';
22
24
  export * from './dynamic/dynamic.js';
23
25
  export * from './driver/driver.js';
24
26
  export * from './driver/database-connection.js';
@@ -1,10 +1,11 @@
1
1
  import { CheckConstraintNode } from './check-constraint-node.js';
2
2
  import { ColumnNode } from './column-node.js';
3
3
  import { DataTypeNode } from './data-type-node.js';
4
+ import { DefaultValueNode } from './default-value-node.js';
5
+ import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
4
6
  import { OperationNode } from './operation-node.js';
5
7
  import { RawNode } from './raw-node.js';
6
8
  import { ReferencesNode } from './references-node.js';
7
- import { ValueNode } from './value-node.js';
8
9
  export declare type ColumnDefinitionNodeProps = Omit<Partial<ColumnDefinitionNode>, 'kind'>;
9
10
  export declare type ColumnDataTypeNode = DataTypeNode | RawNode;
10
11
  export interface ColumnDefinitionNode extends OperationNode {
@@ -12,12 +13,13 @@ export interface ColumnDefinitionNode extends OperationNode {
12
13
  readonly column: ColumnNode;
13
14
  readonly dataType: ColumnDataTypeNode;
14
15
  readonly references?: ReferencesNode;
15
- readonly isPrimaryKey: boolean;
16
- readonly isAutoIncrementing: boolean;
17
- readonly isUnique: boolean;
18
- readonly isNullable: boolean;
19
- readonly defaultTo?: ValueNode | RawNode;
16
+ readonly primaryKey: boolean;
17
+ readonly autoIncrement: boolean;
18
+ readonly unique: boolean;
19
+ readonly nullable: boolean;
20
+ readonly defaultTo?: DefaultValueNode;
20
21
  readonly check?: CheckConstraintNode;
22
+ readonly generatedAlwaysAs?: GeneratedAlwaysAsNode;
21
23
  }
22
24
  /**
23
25
  * @internal
@@ -12,10 +12,10 @@ export const ColumnDefinitionNode = freeze({
12
12
  kind: 'ColumnDefinitionNode',
13
13
  column: ColumnNode.create(column),
14
14
  dataType,
15
- isPrimaryKey: false,
16
- isAutoIncrementing: false,
17
- isUnique: false,
18
- isNullable: true,
15
+ primaryKey: false,
16
+ autoIncrement: false,
17
+ unique: false,
18
+ nullable: true,
19
19
  });
20
20
  },
21
21
  cloneWith(node, props) {
@@ -1,11 +1,10 @@
1
1
  import { IdentifierNode } from './identifier-node.js';
2
2
  import { OperationNode } from './operation-node.js';
3
- export declare type CreateSchemaNodeModifier = 'IfNotExists';
4
3
  export declare type CreateSchemaNodeParams = Omit<Partial<CreateSchemaNode>, 'kind' | 'schema'>;
5
4
  export interface CreateSchemaNode extends OperationNode {
6
5
  readonly kind: 'CreateSchemaNode';
7
6
  readonly schema: IdentifierNode;
8
- readonly modifier?: CreateSchemaNodeModifier;
7
+ readonly ifNotExists?: boolean;
9
8
  }
10
9
  /**
11
10
  * @internal
@@ -2,12 +2,11 @@ import { OperationNode } from './operation-node.js';
2
2
  import { TableNode } from './table-node.js';
3
3
  import { ConstraintNode } from './constraint-node.js';
4
4
  import { ColumnDefinitionNode } from './column-definition-node.js';
5
- export declare type CreateTableNodeModifier = 'IfNotExists';
6
5
  export interface CreateTableNode extends OperationNode {
7
6
  readonly kind: 'CreateTableNode';
8
7
  readonly table: TableNode;
9
8
  readonly columns: ReadonlyArray<ColumnDefinitionNode>;
10
- readonly modifier?: CreateTableNodeModifier;
9
+ readonly ifNotExists?: boolean;
11
10
  readonly constraints?: ReadonlyArray<ConstraintNode>;
12
11
  }
13
12
  /**
@@ -17,6 +16,6 @@ export declare const CreateTableNode: Readonly<{
17
16
  is(node: OperationNode): node is CreateTableNode;
18
17
  create(table: TableNode): CreateTableNode;
19
18
  cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
20
- cloneWithModifier(createTable: CreateTableNode, modifier: CreateTableNodeModifier): CreateTableNode;
19
+ cloneWithIfNotExists(createTable: CreateTableNode, ifNotExists: boolean): CreateTableNode;
21
20
  cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
22
21
  }>;
@@ -19,10 +19,10 @@ export const CreateTableNode = freeze({
19
19
  columns: freeze([...createTable.columns, column]),
20
20
  });
21
21
  },
22
- cloneWithModifier(createTable, modifier) {
22
+ cloneWithIfNotExists(createTable, ifNotExists) {
23
23
  return freeze({
24
24
  ...createTable,
25
- modifier,
25
+ ifNotExists,
26
26
  });
27
27
  },
28
28
  cloneWithConstraint(createTable, constraint) {
@@ -0,0 +1,22 @@
1
+ import { ColumnNode } from './column-node.js';
2
+ import { IdentifierNode } from './identifier-node.js';
3
+ import { OperationNode } from './operation-node.js';
4
+ import { RawNode } from './raw-node.js';
5
+ import { SelectQueryNode } from './select-query-node.js';
6
+ export declare type CreateViewNodeParams = Omit<Partial<CreateViewNode>, 'kind' | 'name'>;
7
+ export interface CreateViewNode extends OperationNode {
8
+ readonly kind: 'CreateViewNode';
9
+ readonly name: IdentifierNode;
10
+ readonly materialized?: boolean;
11
+ readonly orReplace?: boolean;
12
+ readonly columns?: ReadonlyArray<ColumnNode>;
13
+ readonly as?: SelectQueryNode | RawNode;
14
+ }
15
+ /**
16
+ * @internal
17
+ */
18
+ export declare const CreateViewNode: Readonly<{
19
+ is(node: OperationNode): node is CreateViewNode;
20
+ create(name: string): CreateViewNode;
21
+ cloneWith(createView: CreateViewNode, params: CreateViewNodeParams): CreateViewNode;
22
+ }>;
@@ -0,0 +1,22 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ import { IdentifierNode } from './identifier-node.js';
3
+ /**
4
+ * @internal
5
+ */
6
+ export const CreateViewNode = freeze({
7
+ is(node) {
8
+ return node.kind === 'CreateViewNode';
9
+ },
10
+ create(name) {
11
+ return freeze({
12
+ kind: 'CreateViewNode',
13
+ name: IdentifierNode.create(name),
14
+ });
15
+ },
16
+ cloneWith(createView, params) {
17
+ return freeze({
18
+ ...createView,
19
+ ...params,
20
+ });
21
+ },
22
+ });
@@ -0,0 +1,14 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { RawNode } from './raw-node.js';
3
+ import { ValueNode } from './value-node.js';
4
+ export interface DefaultValueNode extends OperationNode {
5
+ readonly kind: 'DefaultValueNode';
6
+ readonly defaultValue: ValueNode | RawNode;
7
+ }
8
+ /**
9
+ * @internal
10
+ */
11
+ export declare const DefaultValueNode: Readonly<{
12
+ is(node: OperationNode): node is DefaultValueNode;
13
+ create(defaultValue: ValueNode | RawNode): DefaultValueNode;
14
+ }>;
@@ -0,0 +1,15 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ /**
3
+ * @internal
4
+ */
5
+ export const DefaultValueNode = freeze({
6
+ is(node) {
7
+ return node.kind === 'DefaultValueNode';
8
+ },
9
+ create(defaultValue) {
10
+ return freeze({
11
+ kind: 'DefaultValueNode',
12
+ defaultValue,
13
+ });
14
+ },
15
+ });