kysely 0.27.0 → 0.27.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 (64) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/mssql/mssql-introspector.js +8 -6
  3. package/dist/cjs/expression/expression-wrapper.d.ts +13 -3
  4. package/dist/cjs/expression/expression-wrapper.js +12 -0
  5. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  6. package/dist/cjs/operation-node/limit-node.d.ts +2 -3
  7. package/dist/cjs/operation-node/limit-node.js +1 -2
  8. package/dist/cjs/operation-node/offset-node.d.ts +2 -3
  9. package/dist/cjs/operation-node/offset-node.js +1 -2
  10. package/dist/cjs/operation-node/operation-node-transformer.js +2 -0
  11. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -1
  12. package/dist/cjs/operation-node/select-modifier-node.js +2 -1
  13. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +17 -0
  14. package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
  15. package/dist/cjs/query-builder/case-builder.d.ts +2 -2
  16. package/dist/cjs/query-builder/delete-query-builder.d.ts +5 -4
  17. package/dist/cjs/query-builder/delete-query-builder.js +4 -3
  18. package/dist/cjs/query-builder/function-module.d.ts +1 -1
  19. package/dist/cjs/query-builder/insert-query-builder.d.ts +7 -3
  20. package/dist/cjs/query-builder/insert-query-builder.js +13 -2
  21. package/dist/cjs/query-builder/json-path-builder.d.ts +2 -1
  22. package/dist/cjs/query-builder/json-path-builder.js +3 -0
  23. package/dist/cjs/query-builder/select-query-builder.d.ts +11 -9
  24. package/dist/cjs/query-builder/select-query-builder.js +12 -10
  25. package/dist/cjs/query-builder/update-query-builder.d.ts +3 -3
  26. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  27. package/dist/cjs/query-compiler/default-query-compiler.js +8 -0
  28. package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
  29. package/dist/cjs/raw-builder/raw-builder.js +3 -0
  30. package/dist/cjs/raw-builder/sql.js +9 -2
  31. package/dist/cjs/util/object-utils.d.ts +1 -1
  32. package/dist/cjs/util/object-utils.js +1 -1
  33. package/dist/esm/dialect/mssql/mssql-introspector.js +8 -6
  34. package/dist/esm/expression/expression-wrapper.d.ts +13 -3
  35. package/dist/esm/expression/expression-wrapper.js +12 -0
  36. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  37. package/dist/esm/operation-node/limit-node.d.ts +2 -3
  38. package/dist/esm/operation-node/limit-node.js +1 -2
  39. package/dist/esm/operation-node/offset-node.d.ts +2 -3
  40. package/dist/esm/operation-node/offset-node.js +1 -2
  41. package/dist/esm/operation-node/operation-node-transformer.js +2 -0
  42. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -1
  43. package/dist/esm/operation-node/select-modifier-node.js +2 -1
  44. package/dist/esm/query-builder/aggregate-function-builder.d.ts +17 -0
  45. package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
  46. package/dist/esm/query-builder/case-builder.d.ts +2 -2
  47. package/dist/esm/query-builder/delete-query-builder.d.ts +5 -4
  48. package/dist/esm/query-builder/delete-query-builder.js +4 -3
  49. package/dist/esm/query-builder/function-module.d.ts +1 -1
  50. package/dist/esm/query-builder/insert-query-builder.d.ts +7 -3
  51. package/dist/esm/query-builder/insert-query-builder.js +13 -2
  52. package/dist/esm/query-builder/json-path-builder.d.ts +2 -1
  53. package/dist/esm/query-builder/json-path-builder.js +3 -0
  54. package/dist/esm/query-builder/select-query-builder.d.ts +11 -9
  55. package/dist/esm/query-builder/select-query-builder.js +13 -11
  56. package/dist/esm/query-builder/update-query-builder.d.ts +3 -3
  57. package/dist/esm/query-builder/update-query-builder.js +2 -2
  58. package/dist/esm/query-compiler/default-query-compiler.js +8 -0
  59. package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
  60. package/dist/esm/raw-builder/raw-builder.js +3 -0
  61. package/dist/esm/raw-builder/sql.js +9 -2
  62. package/dist/esm/util/object-utils.d.ts +1 -1
  63. package/dist/esm/util/object-utils.js +1 -1
  64. package/package.json +5 -11
@@ -2,6 +2,7 @@
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { SelectModifierNode } from '../operation-node/select-modifier-node.js';
4
4
  import { parseJoin, } from '../parser/join-parser.js';
5
+ import { parseTable } from '../parser/table-parser.js';
5
6
  import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
6
7
  import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
7
8
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
@@ -10,13 +11,14 @@ import { parseOrderBy, } from '../parser/order-by-parser.js';
10
11
  import { preventAwait } from '../util/prevent-await.js';
11
12
  import { LimitNode } from '../operation-node/limit-node.js';
12
13
  import { OffsetNode } from '../operation-node/offset-node.js';
13
- import { freeze } from '../util/object-utils.js';
14
+ import { asArray, freeze } from '../util/object-utils.js';
14
15
  import { parseGroupBy } from '../parser/group-by-parser.js';
15
16
  import { isNoResultErrorConstructor, NoResultError, } from './no-result-error.js';
16
17
  import { IdentifierNode } from '../operation-node/identifier-node.js';
17
18
  import { parseSetOperations, } from '../parser/set-operation-parser.js';
18
19
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
19
20
  import { ExpressionWrapper } from '../expression/expression-wrapper.js';
21
+ import { parseValueExpression, } from '../parser/value-parser.js';
20
22
  class SelectQueryBuilderImpl {
21
23
  #props;
22
24
  constructor(props) {
@@ -82,28 +84,28 @@ class SelectQueryBuilderImpl {
82
84
  queryNode: SelectQueryNode.cloneWithFrontModifier(this.#props.queryNode, SelectModifierNode.create('Distinct')),
83
85
  });
84
86
  }
85
- forUpdate() {
87
+ forUpdate(of) {
86
88
  return new SelectQueryBuilderImpl({
87
89
  ...this.#props,
88
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForUpdate')),
90
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForUpdate', of ? asArray(of).map(parseTable) : undefined)),
89
91
  });
90
92
  }
91
- forShare() {
93
+ forShare(of) {
92
94
  return new SelectQueryBuilderImpl({
93
95
  ...this.#props,
94
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForShare')),
96
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForShare', of ? asArray(of).map(parseTable) : undefined)),
95
97
  });
96
98
  }
97
- forKeyShare() {
99
+ forKeyShare(of) {
98
100
  return new SelectQueryBuilderImpl({
99
101
  ...this.#props,
100
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForKeyShare')),
102
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForKeyShare', of ? asArray(of).map(parseTable) : undefined)),
101
103
  });
102
104
  }
103
- forNoKeyUpdate() {
105
+ forNoKeyUpdate(of) {
104
106
  return new SelectQueryBuilderImpl({
105
107
  ...this.#props,
106
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForNoKeyUpdate')),
108
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForNoKeyUpdate', of ? asArray(of).map(parseTable) : undefined)),
107
109
  });
108
110
  }
109
111
  skipLocked() {
@@ -175,13 +177,13 @@ class SelectQueryBuilderImpl {
175
177
  limit(limit) {
176
178
  return new SelectQueryBuilderImpl({
177
179
  ...this.#props,
178
- queryNode: SelectQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(limit)),
180
+ queryNode: SelectQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(parseValueExpression(limit))),
179
181
  });
180
182
  }
181
183
  offset(offset) {
182
184
  return new SelectQueryBuilderImpl({
183
185
  ...this.#props,
184
- queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(offset)),
186
+ queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(parseValueExpression(offset))),
185
187
  });
186
188
  }
187
189
  union(expression) {
@@ -829,10 +829,10 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
829
829
  /**
830
830
  * Change the output type of the query.
831
831
  *
832
- * You should only use this method as the last resort if the types
833
- * don't support your use case.
832
+ * This method call doesn't change the SQL in any way. This methods simply
833
+ * returns a copy of this `UpdateQueryBuilder` with a new output type.
834
834
  */
835
- $castTo<T>(): UpdateQueryBuilder<DB, UT, TB, T>;
835
+ $castTo<C>(): UpdateQueryBuilder<DB, UT, TB, C>;
836
836
  /**
837
837
  * Narrows (parts of) the output type of the query.
838
838
  *
@@ -154,8 +154,8 @@ export class UpdateQueryBuilder {
154
154
  /**
155
155
  * Change the output type of the query.
156
156
  *
157
- * You should only use this method as the last resort if the types
158
- * don't support your use case.
157
+ * This method call doesn't change the SQL in any way. This methods simply
158
+ * returns a copy of this `UpdateQueryBuilder` with a new output type.
159
159
  */
160
160
  $castTo() {
161
161
  return new UpdateQueryBuilder(this.#props);
@@ -162,6 +162,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
162
162
  this.append(' ');
163
163
  this.visitNode(node.values);
164
164
  }
165
+ if (node.defaultValues) {
166
+ this.append(' ');
167
+ this.append('default values');
168
+ }
165
169
  if (node.onConflict) {
166
170
  this.append(' ');
167
171
  this.visitNode(node.onConflict);
@@ -867,6 +871,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
867
871
  else {
868
872
  this.append(SELECT_MODIFIER_SQL[node.modifier]);
869
873
  }
874
+ if (node.of) {
875
+ this.append(' of ');
876
+ this.compileList(node.of, ', ');
877
+ }
870
878
  }
871
879
  visitCreateType(node) {
872
880
  this.append('create type ');
@@ -130,7 +130,17 @@ export interface RawBuilder<O> extends AliasableExpression<O> {
130
130
  * This method call doesn't change the SQL in any way. This methods simply
131
131
  * returns a copy of this `RawBuilder` with a new output type.
132
132
  */
133
- $castTo<T>(): RawBuilder<T>;
133
+ $castTo<C>(): RawBuilder<C>;
134
+ /**
135
+ * Omit null from the expression's type.
136
+ *
137
+ * This function can be useful in cases where you know an expression can't be
138
+ * null, but Kysely is unable to infer it.
139
+ *
140
+ * This method call doesn't change the SQL in any way. This methods simply
141
+ * returns a copy of `this` with a new output type.
142
+ */
143
+ $notNull(): RawBuilder<Exclude<O, null>>;
134
144
  /**
135
145
  * Adds a plugin for this SQL snippet.
136
146
  */
@@ -22,6 +22,9 @@ class RawBuilderImpl {
22
22
  $castTo() {
23
23
  return new RawBuilderImpl({ ...this.#props });
24
24
  }
25
+ $notNull() {
26
+ return new RawBuilderImpl(this.#props);
27
+ }
25
28
  withPlugin(plugin) {
26
29
  return new RawBuilderImpl({
27
30
  ...this.#props,
@@ -1,5 +1,6 @@
1
1
  /// <reference types="./sql.d.ts" />
2
2
  import { IdentifierNode } from '../operation-node/identifier-node.js';
3
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
3
4
  import { RawNode } from '../operation-node/raw-node.js';
4
5
  import { ValueNode } from '../operation-node/value-node.js';
5
6
  import { parseStringReference } from '../parser/reference-parser.js';
@@ -10,7 +11,7 @@ import { createRawBuilder } from './raw-builder.js';
10
11
  export const sql = Object.assign((sqlFragments, ...parameters) => {
11
12
  return createRawBuilder({
12
13
  queryId: createQueryId(),
13
- rawNode: RawNode.create(sqlFragments, parameters?.map(parseValueExpression) ?? []),
14
+ rawNode: RawNode.create(sqlFragments, parameters?.map(parseParameter) ?? []),
14
15
  });
15
16
  }, {
16
17
  ref(columnReference) {
@@ -62,7 +63,7 @@ export const sql = Object.assign((sqlFragments, ...parameters) => {
62
63
  const nodes = new Array(2 * array.length - 1);
63
64
  const sep = separator.toOperationNode();
64
65
  for (let i = 0; i < array.length; ++i) {
65
- nodes[2 * i] = parseValueExpression(array[i]);
66
+ nodes[2 * i] = parseParameter(array[i]);
66
67
  if (i !== array.length - 1) {
67
68
  nodes[2 * i + 1] = sep;
68
69
  }
@@ -73,3 +74,9 @@ export const sql = Object.assign((sqlFragments, ...parameters) => {
73
74
  });
74
75
  },
75
76
  });
77
+ function parseParameter(param) {
78
+ if (isOperationNodeSource(param)) {
79
+ return param.toOperationNode();
80
+ }
81
+ return parseValueExpression(param);
82
+ }
@@ -16,7 +16,7 @@ export declare function isArrayBufferOrView(obj: unknown): obj is ArrayBuffer |
16
16
  export declare function isPlainObject(obj: unknown): obj is Record<string, unknown>;
17
17
  export declare function getLast<T>(arr: ArrayLike<T>): T | undefined;
18
18
  export declare function freeze<T>(obj: T): Readonly<T>;
19
- export declare function asArray<T>(arg: T | T[]): T[];
19
+ export declare function asArray<T>(arg: T | ReadonlyArray<T>): ReadonlyArray<T>;
20
20
  export declare function asReadonlyArray<T>(arg: T | ReadonlyArray<T>): ReadonlyArray<T>;
21
21
  export declare function isReadonlyArray(arg: unknown): arg is ReadonlyArray<unknown>;
22
22
  export declare function noop<T>(obj: T): T;
@@ -57,7 +57,7 @@ export function freeze(obj) {
57
57
  return Object.freeze(obj);
58
58
  }
59
59
  export function asArray(arg) {
60
- if (Array.isArray(arg)) {
60
+ if (isReadonlyArray(arg)) {
61
61
  return arg;
62
62
  }
63
63
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.27.0",
3
+ "version": "0.27.1",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,14 +40,10 @@
40
40
  },
41
41
  "scripts": {
42
42
  "clean": "rm -rf dist & rm -rf test/node/dist & rm -rf test/browser/bundle.js & rm -rf helpers",
43
- "test": "npm run build && npm run test:node:build && concurrently -n node,typings,esmimports \"npm run test:node\" \"npm run test:typings\" \"npm run test:esmimports\"",
43
+ "test": "npm run build && npm run test:node:build && npm run test:node:run && npm run test:typings && npm run test:esmimports",
44
44
  "test:node:build": "tsc -p test/node",
45
- "test:node": "concurrently -n postgres,mysql,mssql,sqlite \"npm run test:node:postgres\" \"npm run test:node:mysql\" \"npm run test:node:mssql\" \"npm run test:node:sqlite\"",
46
- "test:node:postgres": "cross-env DIALECT=postgres npm run test:node:run",
47
- "test:node:mysql": "cross-env DIALECT=mysql npm run test:node:run",
48
- "test:node:mssql": "cross-env DIALECT=mssql npm run test:node:run",
49
- "test:node:sqlite": "cross-env DIALECT=sqlite npm run test:node:run",
50
- "test:node:run": "mocha --reporter min --timeout 15000 test/node/dist/**/*.test.js",
45
+ "test:node": "npm run build && npm run test:node:build && npm run test:node:run",
46
+ "test:node:run": "mocha --timeout 15000 test/node/dist/**/*.test.js",
51
47
  "test:browser:build": "rm -rf test/browser/bundle.js && esbuild test/browser/main.ts --bundle --outfile=test/browser/bundle.js",
52
48
  "test:browser": "npm run build && npm run test:browser:build && node test/browser/test.js",
53
49
  "test:bun": "npm run build && cd test/bun && bun install && bun run test",
@@ -57,7 +53,7 @@
57
53
  "test:esmimports": "node scripts/check-esm-imports.js",
58
54
  "test:esbuild": "esbuild --bundle --platform=node --external:pg-native dist/esm/index.js --outfile=/dev/null",
59
55
  "prettier": "prettier --write 'src/**/*.ts' 'test/**/*.ts'",
60
- "build": "npm run clean && concurrently -n esm,cjs \"npm run build:esm\" \"npm run build:cjs\" && concurrently -n modulefix,docfix \"npm run script:module-fixup\" \"npm run script:copy-interface-doc\"",
56
+ "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run script:module-fixup && npm run script:copy-interface-doc",
61
57
  "build:esm": "tsc -p tsconfig.json && npm run script:add-deno-type-references",
62
58
  "build:cjs": "tsc -p tsconfig-cjs.json",
63
59
  "script:module-fixup": "node scripts/module-fixup.js",
@@ -87,8 +83,6 @@
87
83
  "chai": "^4.3.7",
88
84
  "chai-as-promised": "^7.1.1",
89
85
  "chai-subset": "^1.6.0",
90
- "concurrently": "^8.1.0",
91
- "cross-env": "^7.0.3",
92
86
  "esbuild": "^0.17.19",
93
87
  "mocha": "^10.2.0",
94
88
  "mysql2": "^3.3.3",