kysely 0.9.8 → 0.11.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 (220) hide show
  1. package/README.md +22 -16
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +3 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +3 -3
  5. package/dist/cjs/dialect/mysql/mysql-driver.js +25 -32
  6. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +8 -19
  8. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +18 -0
  10. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +33 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +14 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.js +116 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  15. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +31 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  17. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +19 -0
  18. package/dist/cjs/driver/database-connection.d.ts +2 -2
  19. package/dist/cjs/driver/runtime-driver.js +3 -4
  20. package/dist/cjs/index.d.ts +10 -0
  21. package/dist/cjs/index.js +10 -0
  22. package/dist/cjs/kysely.d.ts +6 -4
  23. package/dist/cjs/kysely.js +6 -4
  24. package/dist/cjs/migration/migration.d.ts +1 -1
  25. package/dist/cjs/migration/migration.js +3 -3
  26. package/dist/cjs/operation-node/column-definition-node.d.ts +8 -6
  27. package/dist/cjs/operation-node/column-definition-node.js +4 -4
  28. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -2
  29. package/dist/cjs/operation-node/create-table-node.d.ts +2 -3
  30. package/dist/cjs/operation-node/create-table-node.js +2 -2
  31. package/dist/cjs/operation-node/create-view-node.d.ts +23 -0
  32. package/dist/cjs/operation-node/create-view-node.js +25 -0
  33. package/dist/cjs/operation-node/default-value-node.d.ts +14 -0
  34. package/dist/cjs/operation-node/default-value-node.js +18 -0
  35. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -2
  36. package/dist/cjs/operation-node/drop-schema-node.d.ts +2 -3
  37. package/dist/cjs/operation-node/drop-schema-node.js +3 -3
  38. package/dist/cjs/operation-node/drop-table-node.d.ts +2 -3
  39. package/dist/cjs/operation-node/drop-table-node.js +2 -2
  40. package/dist/cjs/operation-node/drop-view-node.d.ts +17 -0
  41. package/dist/cjs/operation-node/drop-view-node.js +25 -0
  42. package/dist/cjs/operation-node/generated-always-as-node.d.ts +16 -0
  43. package/dist/cjs/operation-node/generated-always-as-node.js +25 -0
  44. package/dist/cjs/operation-node/having-node.d.ts +4 -8
  45. package/dist/cjs/operation-node/having-node.js +3 -3
  46. package/dist/cjs/operation-node/join-node.d.ts +6 -9
  47. package/dist/cjs/operation-node/join-node.js +10 -7
  48. package/dist/cjs/operation-node/on-node.d.ts +14 -0
  49. package/dist/cjs/operation-node/on-node.js +28 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
  51. package/dist/cjs/operation-node/operation-node-transformer.js +55 -11
  52. package/dist/cjs/operation-node/operation-node-visitor.d.ts +11 -0
  53. package/dist/cjs/operation-node/operation-node-visitor.js +11 -2
  54. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  55. package/dist/cjs/operation-node/query-node.d.ts +3 -3
  56. package/dist/cjs/operation-node/raw-node.d.ts +1 -1
  57. package/dist/cjs/operation-node/select-query-node.d.ts +5 -5
  58. package/dist/cjs/operation-node/select-query-node.js +1 -1
  59. package/dist/cjs/operation-node/where-node.d.ts +4 -8
  60. package/dist/cjs/operation-node/where-node.js +3 -3
  61. package/dist/cjs/parser/filter-parser.js +1 -1
  62. package/dist/cjs/parser/returning-parser.d.ts +4 -2
  63. package/dist/cjs/parser/select-parser.d.ts +2 -2
  64. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
  65. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +22 -0
  66. package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
  67. package/dist/cjs/plugin/immediate-value.ts/immediate-value-transformer.js +21 -0
  68. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  69. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +6 -0
  70. package/dist/cjs/query-builder/delete-result.d.ts +5 -0
  71. package/dist/cjs/query-builder/delete-result.js +13 -0
  72. package/dist/cjs/query-builder/expression-builder.d.ts +2 -2
  73. package/dist/cjs/query-builder/expression-builder.js +1 -1
  74. package/dist/cjs/query-builder/function-builder.d.ts +5 -5
  75. package/dist/cjs/query-builder/function-builder.js +3 -3
  76. package/dist/cjs/query-builder/insert-result.d.ts +27 -0
  77. package/dist/cjs/query-builder/insert-result.js +35 -0
  78. package/dist/cjs/query-builder/query-builder.d.ts +91 -81
  79. package/dist/cjs/query-builder/query-builder.js +38 -41
  80. package/dist/cjs/query-builder/update-result.d.ts +5 -0
  81. package/dist/cjs/query-builder/update-result.js +13 -0
  82. package/dist/cjs/query-compiler/compiled-query.d.ts +5 -0
  83. package/dist/cjs/query-compiler/compiled-query.js +12 -0
  84. package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
  85. package/dist/cjs/query-compiler/default-query-compiler.js +82 -23
  86. package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
  87. package/dist/cjs/query-creator.d.ts +36 -26
  88. package/dist/cjs/query-creator.js +25 -17
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
  90. package/dist/cjs/schema/alter-table-builder.d.ts +6 -2
  91. package/dist/cjs/schema/alter-table-builder.js +28 -4
  92. package/dist/cjs/schema/column-definition-builder.d.ts +43 -2
  93. package/dist/cjs/schema/column-definition-builder.js +23 -6
  94. package/dist/cjs/schema/create-schema-builder.js +1 -1
  95. package/dist/cjs/schema/create-table-builder.d.ts +7 -8
  96. package/dist/cjs/schema/create-table-builder.js +8 -9
  97. package/dist/cjs/schema/create-view-builder.d.ts +28 -0
  98. package/dist/cjs/schema/create-view-builder.js +84 -0
  99. package/dist/cjs/schema/drop-index-builder.js +1 -1
  100. package/dist/cjs/schema/drop-schema-builder.js +3 -1
  101. package/dist/cjs/schema/drop-table-builder.js +3 -1
  102. package/dist/cjs/schema/drop-view-builder.d.ts +20 -0
  103. package/dist/cjs/schema/drop-view-builder.js +39 -0
  104. package/dist/cjs/schema/schema.d.ts +30 -3
  105. package/dist/cjs/schema/schema.js +44 -3
  106. package/dist/cjs/util/dynamic-import.d.ts +2 -0
  107. package/dist/cjs/util/dynamic-import.js +32 -0
  108. package/dist/cjs/util/performance-now.d.ts +1 -0
  109. package/dist/cjs/util/performance-now.js +13 -0
  110. package/dist/cjs/util/type-utils.d.ts +4 -15
  111. package/dist/esm/dialect/dialect-adapter.d.ts +3 -2
  112. package/dist/esm/dialect/mysql/mysql-adapter.js +1 -1
  113. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +3 -3
  114. package/dist/esm/dialect/mysql/mysql-driver.js +26 -33
  115. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +2 -2
  116. package/dist/esm/dialect/postgres/postgres-driver.js +8 -19
  117. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  118. package/dist/esm/dialect/sqlite/sqlite-adapter.js +14 -0
  119. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  120. package/dist/esm/dialect/sqlite/sqlite-dialect.js +29 -0
  121. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +14 -0
  122. package/dist/esm/dialect/sqlite/sqlite-driver.js +112 -0
  123. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  124. package/dist/esm/dialect/sqlite/sqlite-introspector.js +27 -0
  125. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  126. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +15 -0
  127. package/dist/esm/driver/database-connection.d.ts +2 -2
  128. package/dist/esm/driver/runtime-driver.js +3 -4
  129. package/dist/esm/index.d.ts +10 -0
  130. package/dist/esm/index.js +10 -0
  131. package/dist/esm/kysely.d.ts +6 -4
  132. package/dist/esm/kysely.js +6 -4
  133. package/dist/esm/migration/migration.d.ts +1 -1
  134. package/dist/esm/migration/migration.js +3 -3
  135. package/dist/esm/operation-node/column-definition-node.d.ts +8 -6
  136. package/dist/esm/operation-node/column-definition-node.js +4 -4
  137. package/dist/esm/operation-node/create-schema-node.d.ts +1 -2
  138. package/dist/esm/operation-node/create-table-node.d.ts +2 -3
  139. package/dist/esm/operation-node/create-table-node.js +2 -2
  140. package/dist/esm/operation-node/create-view-node.d.ts +23 -0
  141. package/dist/esm/operation-node/create-view-node.js +22 -0
  142. package/dist/esm/operation-node/default-value-node.d.ts +14 -0
  143. package/dist/esm/operation-node/default-value-node.js +15 -0
  144. package/dist/esm/operation-node/drop-index-node.d.ts +1 -2
  145. package/dist/esm/operation-node/drop-schema-node.d.ts +2 -3
  146. package/dist/esm/operation-node/drop-schema-node.js +3 -3
  147. package/dist/esm/operation-node/drop-table-node.d.ts +2 -3
  148. package/dist/esm/operation-node/drop-table-node.js +2 -2
  149. package/dist/esm/operation-node/drop-view-node.d.ts +17 -0
  150. package/dist/esm/operation-node/drop-view-node.js +22 -0
  151. package/dist/esm/operation-node/generated-always-as-node.d.ts +16 -0
  152. package/dist/esm/operation-node/generated-always-as-node.js +22 -0
  153. package/dist/esm/operation-node/having-node.d.ts +4 -8
  154. package/dist/esm/operation-node/having-node.js +3 -3
  155. package/dist/esm/operation-node/join-node.d.ts +6 -9
  156. package/dist/esm/operation-node/join-node.js +10 -7
  157. package/dist/esm/operation-node/on-node.d.ts +14 -0
  158. package/dist/esm/operation-node/on-node.js +25 -0
  159. package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
  160. package/dist/esm/operation-node/operation-node-transformer.js +55 -11
  161. package/dist/esm/operation-node/operation-node-visitor.d.ts +11 -0
  162. package/dist/esm/operation-node/operation-node-visitor.js +11 -2
  163. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  164. package/dist/esm/operation-node/query-node.d.ts +3 -3
  165. package/dist/esm/operation-node/raw-node.d.ts +1 -1
  166. package/dist/esm/operation-node/select-query-node.d.ts +5 -5
  167. package/dist/esm/operation-node/select-query-node.js +1 -1
  168. package/dist/esm/operation-node/where-node.d.ts +4 -8
  169. package/dist/esm/operation-node/where-node.js +3 -3
  170. package/dist/esm/parser/filter-parser.js +1 -1
  171. package/dist/esm/parser/returning-parser.d.ts +4 -2
  172. package/dist/esm/parser/select-parser.d.ts +2 -2
  173. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +17 -0
  174. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +18 -0
  175. package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.d.ts +13 -0
  176. package/dist/esm/plugin/immediate-value.ts/immediate-value-transformer.js +17 -0
  177. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  178. package/dist/esm/plugin/with-schema/with-schema-transformer.js +6 -0
  179. package/dist/esm/query-builder/delete-result.d.ts +5 -0
  180. package/dist/esm/query-builder/delete-result.js +9 -0
  181. package/dist/esm/query-builder/expression-builder.d.ts +2 -2
  182. package/dist/esm/query-builder/expression-builder.js +1 -1
  183. package/dist/esm/query-builder/function-builder.d.ts +5 -5
  184. package/dist/esm/query-builder/function-builder.js +3 -3
  185. package/dist/esm/query-builder/insert-result.d.ts +27 -0
  186. package/dist/esm/query-builder/insert-result.js +31 -0
  187. package/dist/esm/query-builder/query-builder.d.ts +91 -81
  188. package/dist/esm/query-builder/query-builder.js +38 -41
  189. package/dist/esm/query-builder/update-result.d.ts +5 -0
  190. package/dist/esm/query-builder/update-result.js +9 -0
  191. package/dist/esm/query-compiler/compiled-query.d.ts +5 -0
  192. package/dist/esm/query-compiler/compiled-query.js +11 -1
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
  194. package/dist/esm/query-compiler/default-query-compiler.js +82 -23
  195. package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
  196. package/dist/esm/query-creator.d.ts +36 -26
  197. package/dist/esm/query-creator.js +25 -17
  198. package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
  199. package/dist/esm/schema/alter-table-builder.d.ts +6 -2
  200. package/dist/esm/schema/alter-table-builder.js +28 -4
  201. package/dist/esm/schema/column-definition-builder.d.ts +43 -2
  202. package/dist/esm/schema/column-definition-builder.js +23 -6
  203. package/dist/esm/schema/create-schema-builder.js +1 -1
  204. package/dist/esm/schema/create-table-builder.d.ts +7 -8
  205. package/dist/esm/schema/create-table-builder.js +8 -9
  206. package/dist/esm/schema/create-view-builder.d.ts +28 -0
  207. package/dist/esm/schema/create-view-builder.js +80 -0
  208. package/dist/esm/schema/drop-index-builder.js +1 -1
  209. package/dist/esm/schema/drop-schema-builder.js +3 -1
  210. package/dist/esm/schema/drop-table-builder.js +3 -1
  211. package/dist/esm/schema/drop-view-builder.d.ts +20 -0
  212. package/dist/esm/schema/drop-view-builder.js +35 -0
  213. package/dist/esm/schema/schema.d.ts +30 -3
  214. package/dist/esm/schema/schema.js +44 -3
  215. package/dist/esm/util/dynamic-import.d.ts +2 -0
  216. package/dist/esm/util/dynamic-import.js +27 -0
  217. package/dist/esm/util/performance-now.d.ts +1 -0
  218. package/dist/esm/util/performance-now.js +9 -0
  219. package/dist/esm/util/type-utils.d.ts +4 -15
  220. package/package.json +5 -3
@@ -0,0 +1,28 @@
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
+ /**
14
+ * Only implemented on some dialects like SQLite. On most dialects, use {@link orReplace}.
15
+ */
16
+ ifNotExists(): CreateViewBuilder;
17
+ orReplace(): CreateViewBuilder;
18
+ columns(columns: string[]): CreateViewBuilder;
19
+ as(query: AnyQueryBuilder | AnyRawBuilder): CreateViewBuilder;
20
+ toOperationNode(): CreateViewNode;
21
+ compile(): CompiledQuery;
22
+ execute(): Promise<void>;
23
+ }
24
+ export interface CreateViewBuilderProps {
25
+ readonly queryId: QueryId;
26
+ readonly executor: QueryExecutor;
27
+ readonly createViewNode: CreateViewNode;
28
+ }
@@ -0,0 +1,80 @@
1
+ import { preventAwait } from '../util/prevent-await.js';
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { CreateViewNode } from '../operation-node/create-view-node.js';
4
+ import { parseColumnName } from '../parser/reference-parser.js';
5
+ import { QueryNode } from '../index.js';
6
+ import { ImmediateValuePlugin } from '../plugin/immediate-value.ts/immediate-value-plugin.js';
7
+ export class CreateViewBuilder {
8
+ #props;
9
+ constructor(props) {
10
+ this.#props = freeze({
11
+ ...props,
12
+ // The select statement (defined using the `as` method) can't have parameters on some
13
+ // dialects. We add the `ImmediateValuePlugin` to make all parameters "immediate"
14
+ // meaning they are interpolated into the SQL instead of added as parameters.
15
+ //
16
+ // The values are therefore not escaped at all, which leads to SQL injection
17
+ // vulnerabilities if user input is passed into the query. However, the use
18
+ // case where user input is passed into a `create view` statement is a weird
19
+ // one, and we can pretty safely just ignore it.
20
+ executor: props.executor.withPlugin(new ImmediateValuePlugin()),
21
+ });
22
+ }
23
+ materialized() {
24
+ return new CreateViewBuilder({
25
+ ...this.#props,
26
+ createViewNode: CreateViewNode.cloneWith(this.#props.createViewNode, {
27
+ materialized: true,
28
+ }),
29
+ });
30
+ }
31
+ /**
32
+ * Only implemented on some dialects like SQLite. On most dialects, use {@link orReplace}.
33
+ */
34
+ ifNotExists() {
35
+ return new CreateViewBuilder({
36
+ ...this.#props,
37
+ createViewNode: CreateViewNode.cloneWith(this.#props.createViewNode, {
38
+ ifNotExists: true,
39
+ }),
40
+ });
41
+ }
42
+ orReplace() {
43
+ return new CreateViewBuilder({
44
+ ...this.#props,
45
+ createViewNode: CreateViewNode.cloneWith(this.#props.createViewNode, {
46
+ orReplace: true,
47
+ }),
48
+ });
49
+ }
50
+ columns(columns) {
51
+ return new CreateViewBuilder({
52
+ ...this.#props,
53
+ createViewNode: CreateViewNode.cloneWith(this.#props.createViewNode, {
54
+ columns: columns.map(parseColumnName),
55
+ }),
56
+ });
57
+ }
58
+ as(query) {
59
+ const queryNode = query.toOperationNode();
60
+ if (QueryNode.isMutating(queryNode)) {
61
+ throw new Error('only select statements are allowd in views');
62
+ }
63
+ return new CreateViewBuilder({
64
+ ...this.#props,
65
+ createViewNode: CreateViewNode.cloneWith(this.#props.createViewNode, {
66
+ as: queryNode,
67
+ }),
68
+ });
69
+ }
70
+ toOperationNode() {
71
+ return this.#props.executor.transformQuery(this.#props.createViewNode, this.#props.queryId);
72
+ }
73
+ compile() {
74
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
75
+ }
76
+ async execute() {
77
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
78
+ }
79
+ }
80
+ preventAwait(CreateViewBuilder, "don't await CreateViewBuilder instances directly. To execute the query you need to call `execute`");
@@ -23,7 +23,7 @@ export class DropIndexBuilder {
23
23
  return new DropIndexBuilder({
24
24
  ...this.#props,
25
25
  dropIndexNode: DropIndexNode.cloneWith(this.#props.dropIndexNode, {
26
- modifier: 'IfExists',
26
+ ifExists: true,
27
27
  }),
28
28
  });
29
29
  }
@@ -9,7 +9,9 @@ export class DropSchemaBuilder {
9
9
  ifExists() {
10
10
  return new DropSchemaBuilder({
11
11
  ...this.#props,
12
- dropSchemaNode: DropSchemaNode.cloneWithModifier(this.#props.dropSchemaNode, 'IfExists'),
12
+ dropSchemaNode: DropSchemaNode.cloneWith(this.#props.dropSchemaNode, {
13
+ ifExists: true,
14
+ }),
13
15
  });
14
16
  }
15
17
  toOperationNode() {
@@ -9,7 +9,9 @@ export class DropTableBuilder {
9
9
  ifExists() {
10
10
  return new DropTableBuilder({
11
11
  ...this.#props,
12
- dropTableNode: DropTableNode.cloneWithModifier(this.#props.dropTableNode, 'IfExists'),
12
+ dropTableNode: DropTableNode.cloneWith(this.#props.dropTableNode, {
13
+ ifExists: true,
14
+ }),
13
15
  });
14
16
  }
15
17
  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,35 @@
1
+ import { preventAwait } from '../util/prevent-await.js';
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { DropViewNode } from '../operation-node/drop-view-node.js';
4
+ export class DropViewBuilder {
5
+ #props;
6
+ constructor(props) {
7
+ this.#props = freeze(props);
8
+ }
9
+ materialized() {
10
+ return new DropViewBuilder({
11
+ ...this.#props,
12
+ dropViewNode: DropViewNode.cloneWith(this.#props.dropViewNode, {
13
+ materialized: true,
14
+ }),
15
+ });
16
+ }
17
+ ifExists() {
18
+ return new DropViewBuilder({
19
+ ...this.#props,
20
+ dropViewNode: DropViewNode.cloneWith(this.#props.dropViewNode, {
21
+ ifExists: true,
22
+ }),
23
+ });
24
+ }
25
+ toOperationNode() {
26
+ return this.#props.executor.transformQuery(this.#props.dropViewNode, this.#props.queryId);
27
+ }
28
+ compile() {
29
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
30
+ }
31
+ async execute() {
32
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
33
+ }
34
+ }
35
+ 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
  */
@@ -15,6 +15,10 @@ import { DropSchemaBuilder } from './drop-schema-builder.js';
15
15
  import { DropTableBuilder } from './drop-table-builder.js';
16
16
  import { createQueryId } from '../util/query-id.js';
17
17
  import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
18
+ import { CreateViewBuilder } from './create-view-builder.js';
19
+ import { CreateViewNode } from '../operation-node/create-view-node.js';
20
+ import { DropViewBuilder } from './drop-view-builder.js';
21
+ import { DropViewNode } from '../operation-node/drop-view-node.js';
18
22
  /**
19
23
  * Provides methods for building database schema.
20
24
  */
@@ -33,7 +37,7 @@ export class SchemaModule {
33
37
  * ```ts
34
38
  * await db.schema
35
39
  * .createTable('person')
36
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
40
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
37
41
  * .addColumn('first_name', 'varchar', col => col.notNull())
38
42
  * .addColumn('last_name', 'varchar', col => col.notNull())
39
43
  * .addColumn('gender', 'varchar')
@@ -49,7 +53,7 @@ export class SchemaModule {
49
53
  * ```ts
50
54
  * await db.schema
51
55
  * .createTable('pet')
52
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
56
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
53
57
  * .addColumn('owner_id', 'integer', col => col
54
58
  * .references('person.id')
55
59
  * .onDelete('cascade')
@@ -66,7 +70,7 @@ export class SchemaModule {
66
70
  * ```ts
67
71
  * await db.schema
68
72
  * .createTable('pet')
69
- * .addColumn('id', 'integer', col => col.primaryKey().increments())
73
+ * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
70
74
  * .addColumn('owner_id', 'integer')
71
75
  * .addForeignKeyConstraint(
72
76
  * 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'],
@@ -188,6 +192,43 @@ export class SchemaModule {
188
192
  alterTableNode: AlterTableNode.create(table),
189
193
  });
190
194
  }
195
+ /**
196
+ * Create a new view.
197
+ *
198
+ * @example
199
+ * ```ts
200
+ * await db.schema
201
+ * .createView('dogs')
202
+ * .orReplace()
203
+ * .as(db.selectFrom('pet').selectAll().where('species', '=', 'dog'))
204
+ * .execute()
205
+ * ```
206
+ */
207
+ createView(viewName) {
208
+ return new CreateViewBuilder({
209
+ queryId: createQueryId(),
210
+ executor: this.#executor,
211
+ createViewNode: CreateViewNode.create(viewName),
212
+ });
213
+ }
214
+ /**
215
+ * Drop a view.
216
+ *
217
+ * @example
218
+ * ```ts
219
+ * await db.schema
220
+ * .dropView('dogs')
221
+ * .ifExists()
222
+ * .execute()
223
+ * ```
224
+ */
225
+ dropView(viewName) {
226
+ return new DropViewBuilder({
227
+ queryId: createQueryId(),
228
+ executor: this.#executor,
229
+ dropViewNode: DropViewNode.create(viewName),
230
+ });
231
+ }
191
232
  /**
192
233
  * See {@link QueryCreator.withSchema}
193
234
  */
@@ -0,0 +1,2 @@
1
+ export declare function importFunction<T extends Function>(modulePath: string): Promise<T>;
2
+ export declare function importNamedFunction<T extends Function>(modulePath: string, exportName: string): Promise<T>;
@@ -0,0 +1,27 @@
1
+ import { isFunction, isObject } from './object-utils.js';
2
+ export async function importFunction(modulePath) {
3
+ const module = await import(modulePath);
4
+ const errorMessage = `module "${modulePath}" doesn export a function`;
5
+ if (isFunction(module)) {
6
+ return module;
7
+ }
8
+ else if (isObject(module) && isFunction(module.default)) {
9
+ return module.default;
10
+ }
11
+ throw new Error(errorMessage);
12
+ }
13
+ export async function importNamedFunction(modulePath, exportName) {
14
+ const module = await import(modulePath);
15
+ const errorMessage = `no function export named "${exportName}" found in module "${modulePath}"`;
16
+ if (!isObject(module)) {
17
+ throw new Error(errorMessage);
18
+ }
19
+ if (isFunction(module[exportName])) {
20
+ return module[exportName];
21
+ }
22
+ else if (isObject(module.default) &&
23
+ isFunction(module.default[exportName])) {
24
+ return module.default[exportName];
25
+ }
26
+ throw new Error(errorMessage);
27
+ }
@@ -0,0 +1 @@
1
+ export declare function performanceNow(): number;
@@ -0,0 +1,9 @@
1
+ import { isFunction } from './object-utils.js';
2
+ export function performanceNow() {
3
+ if (typeof performance !== 'undefined' && isFunction(performance.now)) {
4
+ return performance.now();
5
+ }
6
+ else {
7
+ return Date.now();
8
+ }
9
+ }
@@ -1,6 +1,9 @@
1
1
  import { AliasedRawBuilder, RawBuilder } from '../raw-builder/raw-builder.js';
2
2
  import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
3
3
  import { ExpressionBuilder } from '../query-builder/expression-builder.js';
4
+ import { InsertResult } from '../query-builder/insert-result.js';
5
+ import { DeleteResult } from '../query-builder/delete-result.js';
6
+ import { UpdateResult } from '../query-builder/update-result.js';
4
7
  /**
5
8
  * Given an object type, extracts the union of all value types.
6
9
  */
@@ -134,25 +137,11 @@ export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb: Expressi
134
137
  export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
135
138
  export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyRawBuilder;
136
139
  export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
137
- export interface InsertResultTypeTag {
138
- /** @internal */
139
- readonly __isInsertResultTypeTag__: true;
140
- }
141
- export interface DeleteResultTypeTag {
142
- /** @internal */
143
- readonly __isDeleteResultTypeTag__: true;
144
- }
145
- export interface UpdateResultTypeTag {
146
- /** @internal */
147
- readonly __isUpdateResultTypeTag__: true;
148
- }
149
140
  export interface GeneratedPlaceholder {
150
141
  /** @internal */
151
142
  readonly __isGeneratedPlaceholder__: true;
152
143
  }
153
- export declare type ManyResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
154
- export declare type SingleResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O | undefined;
155
- export declare type NonEmptySingleResultRowType<O> = O extends InsertResultTypeTag ? number : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
144
+ export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
156
145
  export declare type UnknownRow = Record<string, unknown>;
157
146
  export declare type Nullable<T> = {
158
147
  [P in keyof T]: T[P] | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.9.8",
3
+ "version": "0.11.0",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,18 +38,20 @@
38
38
  "@types/node": "^16.11.9"
39
39
  },
40
40
  "devDependencies": {
41
+ "@types/better-sqlite3": "^7.4.1",
41
42
  "@types/chai": "^4.2.22",
42
43
  "@types/chai-subset": "^1.3.3",
43
44
  "@types/mocha": "^9.0.0",
44
45
  "@types/pg": "^8.6.1",
46
+ "better-sqlite3": "^7.4.5",
45
47
  "chai": "^4.3.4",
46
48
  "chai-subset": "^1.6.0",
47
49
  "mocha": "^9.1.3",
48
50
  "mysql2": "^2.3.3",
49
51
  "pg": "^8.7.1",
50
- "prettier": "^2.4.1",
52
+ "prettier": "^2.5.1",
51
53
  "tsd": "^0.19.0",
52
- "typedoc": "^0.22.9",
54
+ "typedoc": "^0.22.10",
53
55
  "typescript": "4.5.2"
54
56
  }
55
57
  }