@mikro-orm/knex 6.0.0-dev.6 → 6.0.0-dev.61

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 (42) hide show
  1. package/AbstractSqlConnection.d.ts +5 -2
  2. package/AbstractSqlConnection.js +18 -10
  3. package/AbstractSqlDriver.d.ts +17 -17
  4. package/AbstractSqlDriver.js +110 -47
  5. package/AbstractSqlPlatform.d.ts +2 -2
  6. package/AbstractSqlPlatform.js +14 -7
  7. package/MonkeyPatchable.d.ts +1 -0
  8. package/MonkeyPatchable.js +3 -0
  9. package/README.md +64 -107
  10. package/SqlEntityManager.d.ts +0 -4
  11. package/SqlEntityManager.js +1 -9
  12. package/SqlEntityRepository.d.ts +0 -1
  13. package/SqlEntityRepository.js +0 -1
  14. package/index.d.ts +1 -0
  15. package/index.js +1 -0
  16. package/index.mjs +176 -0
  17. package/package.json +5 -5
  18. package/query/ArrayCriteriaNode.d.ts +3 -3
  19. package/query/CriteriaNode.d.ts +8 -8
  20. package/query/CriteriaNode.js +8 -8
  21. package/query/CriteriaNodeFactory.d.ts +6 -6
  22. package/query/CriteriaNodeFactory.js +11 -11
  23. package/query/ObjectCriteriaNode.d.ts +3 -3
  24. package/query/ObjectCriteriaNode.js +12 -8
  25. package/query/QueryBuilder.d.ts +19 -5
  26. package/query/QueryBuilder.js +191 -47
  27. package/query/QueryBuilderHelper.d.ts +3 -5
  28. package/query/QueryBuilderHelper.js +85 -71
  29. package/query/ScalarCriteriaNode.d.ts +3 -2
  30. package/query/ScalarCriteriaNode.js +9 -6
  31. package/schema/DatabaseSchema.js +3 -3
  32. package/schema/DatabaseTable.d.ts +9 -9
  33. package/schema/DatabaseTable.js +21 -22
  34. package/schema/SchemaComparator.d.ts +4 -4
  35. package/schema/SchemaComparator.js +4 -2
  36. package/schema/SchemaHelper.d.ts +11 -11
  37. package/schema/SchemaHelper.js +3 -3
  38. package/schema/{SchemaGenerator.d.ts → SqlSchemaGenerator.d.ts} +3 -7
  39. package/schema/{SchemaGenerator.js → SqlSchemaGenerator.js} +17 -24
  40. package/schema/index.d.ts +1 -1
  41. package/schema/index.js +1 -1
  42. package/typings.d.ts +14 -13
package/index.mjs CHANGED
@@ -1,26 +1,202 @@
1
1
  import mod from "./index.js";
2
2
 
3
3
  export default mod;
4
+ export const ALIAS_REPLACEMENT = mod.ALIAS_REPLACEMENT;
5
+ export const ALIAS_REPLACEMENT_RE = mod.ALIAS_REPLACEMENT_RE;
6
+ export const ARRAY_OPERATORS = mod.ARRAY_OPERATORS;
7
+ export const AbstractNamingStrategy = mod.AbstractNamingStrategy;
8
+ export const AbstractSchemaGenerator = mod.AbstractSchemaGenerator;
4
9
  export const AbstractSqlConnection = mod.AbstractSqlConnection;
5
10
  export const AbstractSqlDriver = mod.AbstractSqlDriver;
6
11
  export const AbstractSqlPlatform = mod.AbstractSqlPlatform;
12
+ export const AfterCreate = mod.AfterCreate;
13
+ export const AfterDelete = mod.AfterDelete;
14
+ export const AfterUpdate = mod.AfterUpdate;
15
+ export const ArrayCollection = mod.ArrayCollection;
7
16
  export const ArrayCriteriaNode = mod.ArrayCriteriaNode;
17
+ export const ArrayType = mod.ArrayType;
18
+ export const BaseEntity = mod.BaseEntity;
19
+ export const BeforeCreate = mod.BeforeCreate;
20
+ export const BeforeDelete = mod.BeforeDelete;
21
+ export const BeforeUpdate = mod.BeforeUpdate;
22
+ export const BigIntType = mod.BigIntType;
23
+ export const BlobType = mod.BlobType;
24
+ export const BooleanType = mod.BooleanType;
25
+ export const Cascade = mod.Cascade;
26
+ export const ChangeSet = mod.ChangeSet;
27
+ export const ChangeSetComputer = mod.ChangeSetComputer;
28
+ export const ChangeSetPersister = mod.ChangeSetPersister;
29
+ export const ChangeSetType = mod.ChangeSetType;
30
+ export const Check = mod.Check;
31
+ export const CheckConstraintViolationException = mod.CheckConstraintViolationException;
32
+ export const Collection = mod.Collection;
33
+ export const CommitOrderCalculator = mod.CommitOrderCalculator;
34
+ export const Configuration = mod.Configuration;
35
+ export const ConfigurationLoader = mod.ConfigurationLoader;
36
+ export const Connection = mod.Connection;
37
+ export const ConnectionException = mod.ConnectionException;
38
+ export const ConstraintViolationException = mod.ConstraintViolationException;
39
+ export const CreateRequestContext = mod.CreateRequestContext;
8
40
  export const CriteriaNode = mod.CriteriaNode;
9
41
  export const CriteriaNodeFactory = mod.CriteriaNodeFactory;
42
+ export const Cursor = mod.Cursor;
43
+ export const DatabaseDriver = mod.DatabaseDriver;
44
+ export const DatabaseObjectExistsException = mod.DatabaseObjectExistsException;
45
+ export const DatabaseObjectNotFoundException = mod.DatabaseObjectNotFoundException;
10
46
  export const DatabaseSchema = mod.DatabaseSchema;
11
47
  export const DatabaseTable = mod.DatabaseTable;
48
+ export const DateTimeType = mod.DateTimeType;
49
+ export const DateType = mod.DateType;
50
+ export const DeadlockException = mod.DeadlockException;
51
+ export const DecimalType = mod.DecimalType;
52
+ export const DefaultLogger = mod.DefaultLogger;
53
+ export const DoubleType = mod.DoubleType;
54
+ export const DriverException = mod.DriverException;
55
+ export const EagerProps = mod.EagerProps;
56
+ export const Embeddable = mod.Embeddable;
57
+ export const Embedded = mod.Embedded;
58
+ export const EnsureRequestContext = mod.EnsureRequestContext;
59
+ export const Entity = mod.Entity;
60
+ export const EntityAssigner = mod.EntityAssigner;
61
+ export const EntityCaseNamingStrategy = mod.EntityCaseNamingStrategy;
62
+ export const EntityComparator = mod.EntityComparator;
63
+ export const EntityFactory = mod.EntityFactory;
64
+ export const EntityHelper = mod.EntityHelper;
65
+ export const EntityIdentifier = mod.EntityIdentifier;
66
+ export const EntityLoader = mod.EntityLoader;
12
67
  export const EntityManager = mod.EntityManager;
68
+ export const EntityManagerType = mod.EntityManagerType;
69
+ export const EntityMetadata = mod.EntityMetadata;
13
70
  export const EntityRepository = mod.EntityRepository;
71
+ export const EntityRepositoryType = mod.EntityRepositoryType;
72
+ export const EntitySchema = mod.EntitySchema;
73
+ export const EntitySerializer = mod.EntitySerializer;
74
+ export const EntityTransformer = mod.EntityTransformer;
75
+ export const EntityValidator = mod.EntityValidator;
76
+ export const Enum = mod.Enum;
77
+ export const EnumArrayType = mod.EnumArrayType;
78
+ export const EnumType = mod.EnumType;
79
+ export const EventManager = mod.EventManager;
80
+ export const EventType = mod.EventType;
81
+ export const EventTypeMap = mod.EventTypeMap;
82
+ export const ExceptionConverter = mod.ExceptionConverter;
83
+ export const FileCacheAdapter = mod.FileCacheAdapter;
84
+ export const Filter = mod.Filter;
85
+ export const FloatType = mod.FloatType;
86
+ export const FlushMode = mod.FlushMode;
87
+ export const ForeignKeyConstraintViolationException = mod.ForeignKeyConstraintViolationException;
88
+ export const Formula = mod.Formula;
89
+ export const GeneratedCacheAdapter = mod.GeneratedCacheAdapter;
90
+ export const GroupOperator = mod.GroupOperator;
91
+ export const HiddenProps = mod.HiddenProps;
92
+ export const Hydrator = mod.Hydrator;
93
+ export const IdentityMap = mod.IdentityMap;
94
+ export const Index = mod.Index;
95
+ export const IntegerType = mod.IntegerType;
96
+ export const InvalidFieldNameException = mod.InvalidFieldNameException;
97
+ export const IsolationLevel = mod.IsolationLevel;
98
+ export const JsonProperty = mod.JsonProperty;
99
+ export const JsonType = mod.JsonType;
14
100
  export const Knex = mod.Knex;
101
+ export const LoadStrategy = mod.LoadStrategy;
102
+ export const LockMode = mod.LockMode;
103
+ export const LockWaitTimeoutException = mod.LockWaitTimeoutException;
104
+ export const ManyToMany = mod.ManyToMany;
105
+ export const ManyToOne = mod.ManyToOne;
106
+ export const MediumIntType = mod.MediumIntType;
107
+ export const MemoryCacheAdapter = mod.MemoryCacheAdapter;
108
+ export const MetadataDiscovery = mod.MetadataDiscovery;
109
+ export const MetadataError = mod.MetadataError;
110
+ export const MetadataProvider = mod.MetadataProvider;
111
+ export const MetadataStorage = mod.MetadataStorage;
112
+ export const MetadataValidator = mod.MetadataValidator;
113
+ export const MikroORM = mod.MikroORM;
114
+ export const MongoNamingStrategy = mod.MongoNamingStrategy;
15
115
  export const MonkeyPatchable = mod.MonkeyPatchable;
116
+ export const NodeState = mod.NodeState;
117
+ export const NonUniqueFieldNameException = mod.NonUniqueFieldNameException;
118
+ export const NotFoundError = mod.NotFoundError;
119
+ export const NotNullConstraintViolationException = mod.NotNullConstraintViolationException;
120
+ export const NullCacheAdapter = mod.NullCacheAdapter;
121
+ export const NullHighlighter = mod.NullHighlighter;
122
+ export const ObjectBindingPattern = mod.ObjectBindingPattern;
16
123
  export const ObjectCriteriaNode = mod.ObjectCriteriaNode;
124
+ export const ObjectHydrator = mod.ObjectHydrator;
125
+ export const OnInit = mod.OnInit;
126
+ export const OnLoad = mod.OnLoad;
127
+ export const OneToMany = mod.OneToMany;
128
+ export const OneToOne = mod.OneToOne;
129
+ export const OptimisticLockError = mod.OptimisticLockError;
130
+ export const OptionalProps = mod.OptionalProps;
131
+ export const PlainObject = mod.PlainObject;
132
+ export const Platform = mod.Platform;
133
+ export const PopulateHint = mod.PopulateHint;
134
+ export const PrimaryKey = mod.PrimaryKey;
135
+ export const PrimaryKeyProp = mod.PrimaryKeyProp;
136
+ export const Property = mod.Property;
17
137
  export const QueryBuilder = mod.QueryBuilder;
18
138
  export const QueryBuilderHelper = mod.QueryBuilderHelper;
139
+ export const QueryFlag = mod.QueryFlag;
140
+ export const QueryHelper = mod.QueryHelper;
141
+ export const QueryOperator = mod.QueryOperator;
142
+ export const QueryOrder = mod.QueryOrder;
143
+ export const QueryOrderNumeric = mod.QueryOrderNumeric;
19
144
  export const QueryType = mod.QueryType;
145
+ export const RawQueryFragment = mod.RawQueryFragment;
146
+ export const ReadOnlyException = mod.ReadOnlyException;
147
+ export const Reference = mod.Reference;
148
+ export const ReferenceKind = mod.ReferenceKind;
149
+ export const ReflectMetadataProvider = mod.ReflectMetadataProvider;
150
+ export const RequestContext = mod.RequestContext;
151
+ export const SCALAR_TYPES = mod.SCALAR_TYPES;
20
152
  export const ScalarCriteriaNode = mod.ScalarCriteriaNode;
21
153
  export const SchemaComparator = mod.SchemaComparator;
22
154
  export const SchemaGenerator = mod.SchemaGenerator;
23
155
  export const SchemaHelper = mod.SchemaHelper;
156
+ export const SerializationContext = mod.SerializationContext;
157
+ export const SerializedPrimaryKey = mod.SerializedPrimaryKey;
158
+ export const ServerException = mod.ServerException;
159
+ export const SimpleLogger = mod.SimpleLogger;
160
+ export const SmallIntType = mod.SmallIntType;
24
161
  export const SqlEntityManager = mod.SqlEntityManager;
25
162
  export const SqlEntityRepository = mod.SqlEntityRepository;
163
+ export const SqlSchemaGenerator = mod.SqlSchemaGenerator;
164
+ export const StringType = mod.StringType;
165
+ export const Subscriber = mod.Subscriber;
166
+ export const SyntaxErrorException = mod.SyntaxErrorException;
167
+ export const TableExistsException = mod.TableExistsException;
168
+ export const TableNotFoundException = mod.TableNotFoundException;
169
+ export const TextType = mod.TextType;
170
+ export const TimeType = mod.TimeType;
171
+ export const TinyIntType = mod.TinyIntType;
172
+ export const TransactionContext = mod.TransactionContext;
173
+ export const TransactionEventBroadcaster = mod.TransactionEventBroadcaster;
174
+ export const Type = mod.Type;
175
+ export const UnderscoreNamingStrategy = mod.UnderscoreNamingStrategy;
176
+ export const Unique = mod.Unique;
177
+ export const UniqueConstraintViolationException = mod.UniqueConstraintViolationException;
178
+ export const UnitOfWork = mod.UnitOfWork;
179
+ export const UnknownType = mod.UnknownType;
180
+ export const Utils = mod.Utils;
181
+ export const UuidType = mod.UuidType;
182
+ export const ValidationError = mod.ValidationError;
183
+ export const WrappedEntity = mod.WrappedEntity;
184
+ export const assign = mod.assign;
185
+ export const colors = mod.colors;
186
+ export const compareArrays = mod.compareArrays;
187
+ export const compareBooleans = mod.compareBooleans;
188
+ export const compareBuffers = mod.compareBuffers;
189
+ export const compareObjects = mod.compareObjects;
190
+ export const defineConfig = mod.defineConfig;
191
+ export const equals = mod.equals;
192
+ export const helper = mod.helper;
26
193
  export const knex = mod.knex;
194
+ export const parseJsonSafe = mod.parseJsonSafe;
195
+ export const raw = mod.raw;
196
+ export const ref = mod.ref;
197
+ export const rel = mod.rel;
198
+ export const serialize = mod.serialize;
199
+ export const sql = mod.sql;
200
+ export const t = mod.t;
201
+ export const types = mod.types;
202
+ export const wrap = mod.wrap;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/knex",
3
- "version": "6.0.0-dev.6",
3
+ "version": "6.0.0-dev.61",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -58,14 +58,14 @@
58
58
  "access": "public"
59
59
  },
60
60
  "dependencies": {
61
- "fs-extra": "11.1.0",
62
- "knex": "2.3.0",
61
+ "fs-extra": "11.1.1",
62
+ "knex": "2.4.2",
63
63
  "sqlstring": "2.3.3"
64
64
  },
65
65
  "devDependencies": {
66
- "@mikro-orm/core": "^5.5.3"
66
+ "@mikro-orm/core": "^5.6.16"
67
67
  },
68
68
  "peerDependencies": {
69
- "@mikro-orm/core": "~6.0.0-dev.6"
69
+ "@mikro-orm/core": "~6.0.0-dev.61"
70
70
  }
71
71
  }
@@ -3,7 +3,7 @@ import type { IQueryBuilder } from '../typings';
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export declare class ArrayCriteriaNode extends CriteriaNode {
7
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
8
- willAutoJoin<T>(qb: IQueryBuilder<T>, alias?: string): any;
6
+ export declare class ArrayCriteriaNode<T extends object> extends CriteriaNode<T> {
7
+ process(qb: IQueryBuilder<T>, alias?: string): any;
8
+ willAutoJoin(qb: IQueryBuilder<T>, alias?: string): any;
9
9
  }
@@ -1,24 +1,24 @@
1
1
  /// <reference types="node" />
2
2
  import { inspect } from 'util';
3
- import type { EntityProperty, MetadataStorage } from '@mikro-orm/core';
3
+ import type { EntityKey, EntityProperty, MetadataStorage } from '@mikro-orm/core';
4
4
  import type { ICriteriaNode, IQueryBuilder } from '../typings';
5
5
  /**
6
6
  * Helper for working with deeply nested where/orderBy/having criteria. Uses composite pattern to build tree from the payload.
7
7
  * Auto-joins relations and converts payload from { books: { publisher: { name: '...' } } } to { 'publisher_alias.name': '...' }
8
8
  * @internal
9
9
  */
10
- export declare class CriteriaNode implements ICriteriaNode {
10
+ export declare class CriteriaNode<T extends object> implements ICriteriaNode<T> {
11
11
  protected readonly metadata: MetadataStorage;
12
12
  readonly entityName: string;
13
- readonly parent?: ICriteriaNode | undefined;
14
- readonly key?: string | undefined;
13
+ readonly parent?: ICriteriaNode<T> | undefined;
14
+ readonly key?: EntityKey<T> | undefined;
15
15
  payload: any;
16
- prop?: EntityProperty;
16
+ prop?: EntityProperty<T>;
17
17
  index?: number;
18
- constructor(metadata: MetadataStorage, entityName: string, parent?: ICriteriaNode | undefined, key?: string | undefined, validate?: boolean);
19
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
18
+ constructor(metadata: MetadataStorage, entityName: string, parent?: ICriteriaNode<T> | undefined, key?: EntityKey<T> | undefined, validate?: boolean);
19
+ process(qb: IQueryBuilder<T>, alias?: string): any;
20
20
  shouldInline(payload: any): boolean;
21
- willAutoJoin<T>(qb: IQueryBuilder<T>, alias?: string): boolean;
21
+ willAutoJoin(qb: IQueryBuilder<T>, alias?: string): boolean;
22
22
  shouldRename(payload: any): boolean;
23
23
  renameFieldToPK<T>(qb: IQueryBuilder<T>): string;
24
24
  getPath(addIndex?: boolean): string;
@@ -40,7 +40,7 @@ class CriteriaNode {
40
40
  return false;
41
41
  }
42
42
  shouldRename(payload) {
43
- const type = this.prop ? this.prop.reference : null;
43
+ const type = this.prop ? this.prop.kind : null;
44
44
  const composite = this.prop?.joinColumns ? this.prop.joinColumns.length > 1 : false;
45
45
  const customExpression = CriteriaNode.isCustomExpression(this.key);
46
46
  const scalar = payload === null || core_1.Utils.isPrimaryKey(payload) || payload instanceof RegExp || payload instanceof Date || customExpression;
@@ -49,17 +49,17 @@ class CriteriaNode {
49
49
  return true;
50
50
  }
51
51
  switch (type) {
52
- case core_1.ReferenceType.MANY_TO_ONE: return false;
53
- case core_1.ReferenceType.ONE_TO_ONE: return !this.prop.owner;
54
- case core_1.ReferenceType.ONE_TO_MANY: return scalar || operator;
55
- case core_1.ReferenceType.MANY_TO_MANY: return scalar || operator;
52
+ case core_1.ReferenceKind.MANY_TO_ONE: return false;
53
+ case core_1.ReferenceKind.ONE_TO_ONE: return !this.prop.owner;
54
+ case core_1.ReferenceKind.ONE_TO_MANY: return scalar || operator;
55
+ case core_1.ReferenceKind.MANY_TO_MANY: return scalar || operator;
56
56
  default: return false;
57
57
  }
58
58
  }
59
59
  renameFieldToPK(qb) {
60
60
  const joinAlias = qb.getAliasForJoinPath(this.getPath());
61
61
  const alias = joinAlias ?? qb.alias;
62
- if (this.prop.reference === core_1.ReferenceType.MANY_TO_MANY) {
62
+ if (this.prop.kind === core_1.ReferenceKind.MANY_TO_MANY) {
63
63
  return core_1.Utils.getPrimaryKeyHash(this.prop.inverseJoinColumns.map(col => `${alias}.${col}`));
64
64
  }
65
65
  // if we found a matching join, we need to use the target table column names, as we use that alias instead of the root
@@ -70,7 +70,7 @@ class CriteriaNode {
70
70
  }
71
71
  getPath(addIndex = false) {
72
72
  // use index on parent only if we are processing to-many relation
73
- const addParentIndex = this.prop && [core_1.ReferenceType.ONE_TO_MANY, core_1.ReferenceType.MANY_TO_MANY].includes(this.prop.reference);
73
+ const addParentIndex = this.prop && [core_1.ReferenceKind.ONE_TO_MANY, core_1.ReferenceKind.MANY_TO_MANY].includes(this.prop.kind);
74
74
  const parentPath = this.parent?.getPath(addParentIndex) ?? this.entityName;
75
75
  const index = addIndex && this.index != null ? `[${this.index}]` : '';
76
76
  // ignore group operators to allow easier mapping (e.g. for orderBy)
@@ -89,7 +89,7 @@ class CriteriaNode {
89
89
  const customExpression = CriteriaNode.isCustomExpression(this.key);
90
90
  const scalar = this.payload === null || core_1.Utils.isPrimaryKey(this.payload) || this.payload instanceof RegExp || this.payload instanceof Date || customExpression;
91
91
  const operator = core_1.Utils.isObject(this.payload) && Object.keys(this.payload).every(k => core_1.Utils.isOperator(k, false));
92
- return this.prop.reference === core_1.ReferenceType.MANY_TO_MANY && (scalar || operator);
92
+ return this.prop.kind === core_1.ReferenceKind.MANY_TO_MANY && (scalar || operator);
93
93
  }
94
94
  getPivotPath(path) {
95
95
  return `${path}[pivot]`;
@@ -1,12 +1,12 @@
1
- import type { Dictionary, EntityMetadata, MetadataStorage } from '@mikro-orm/core';
1
+ import type { Dictionary, EntityKey, EntityMetadata, MetadataStorage } from '@mikro-orm/core';
2
2
  import type { ICriteriaNode } from '../typings';
3
3
  /**
4
4
  * @internal
5
5
  */
6
6
  export declare class CriteriaNodeFactory {
7
- static createNode(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode, key?: string): ICriteriaNode;
8
- static createScalarNode(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode, key?: string): ICriteriaNode;
9
- static createArrayNode(metadata: MetadataStorage, entityName: string, payload: any[], parent?: ICriteriaNode, key?: string): ICriteriaNode;
10
- static createObjectNode(metadata: MetadataStorage, entityName: string, payload: Dictionary, parent?: ICriteriaNode, key?: string): ICriteriaNode;
11
- static createObjectItemNode(metadata: MetadataStorage, entityName: string, node: ICriteriaNode, payload: Dictionary, item: string, meta?: EntityMetadata): ICriteriaNode;
7
+ static createNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
8
+ static createScalarNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
9
+ static createArrayNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: any[], parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
10
+ static createObjectNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: Dictionary, parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
11
+ static createObjectItemNode<T extends object>(metadata: MetadataStorage, entityName: string, node: ICriteriaNode<T>, payload: Dictionary, key: EntityKey<T>, meta?: EntityMetadata<T>): ICriteriaNode<T>;
12
12
  }
@@ -12,7 +12,7 @@ const CriteriaNode_1 = require("./CriteriaNode");
12
12
  class CriteriaNodeFactory {
13
13
  static createNode(metadata, entityName, payload, parent, key) {
14
14
  const customExpression = CriteriaNode_1.CriteriaNode.isCustomExpression(key || '');
15
- const scalar = core_1.Utils.isPrimaryKey(payload) || payload instanceof RegExp || payload instanceof Date || customExpression;
15
+ const scalar = core_1.Utils.isPrimaryKey(payload) || core_1.Utils.isRawSql(payload) || payload instanceof RegExp || payload instanceof Date || customExpression;
16
16
  if (Array.isArray(payload) && !scalar) {
17
17
  return this.createArrayNode(metadata, entityName, payload, parent, key);
18
18
  }
@@ -37,7 +37,7 @@ class CriteriaNodeFactory {
37
37
  }
38
38
  static createObjectNode(metadata, entityName, payload, parent, key) {
39
39
  const meta = metadata.find(entityName);
40
- if (!parent && Object.keys(payload).every(k => meta?.properties[k]?.reference === core_1.ReferenceType.SCALAR)) {
40
+ if (!parent && Object.keys(payload).every(k => meta?.properties[k]?.kind === core_1.ReferenceKind.SCALAR)) {
41
41
  return this.createScalarNode(metadata, entityName, payload, parent, key);
42
42
  }
43
43
  const node = new ObjectCriteriaNode_1.ObjectCriteriaNode(metadata, entityName, parent, key);
@@ -47,24 +47,24 @@ class CriteriaNodeFactory {
47
47
  }, {});
48
48
  return node;
49
49
  }
50
- static createObjectItemNode(metadata, entityName, node, payload, item, meta) {
51
- const prop = meta?.properties[item];
52
- if (prop?.reference !== core_1.ReferenceType.EMBEDDED) {
53
- const childEntity = prop && prop.reference !== core_1.ReferenceType.SCALAR ? prop.type : entityName;
54
- return this.createNode(metadata, childEntity, payload[item], node, item);
50
+ static createObjectItemNode(metadata, entityName, node, payload, key, meta) {
51
+ const prop = meta?.properties[key];
52
+ if (prop?.kind !== core_1.ReferenceKind.EMBEDDED) {
53
+ const childEntity = prop && prop.kind !== core_1.ReferenceKind.SCALAR ? prop.type : entityName;
54
+ return this.createNode(metadata, childEntity, payload[key], node, key);
55
55
  }
56
- const operator = Object.keys(payload[item]).some(f => core_1.Utils.isOperator(f));
56
+ const operator = Object.keys(payload[key]).some(f => core_1.Utils.isOperator(f));
57
57
  if (operator) {
58
58
  throw core_1.ValidationError.cannotUseOperatorsInsideEmbeddables(entityName, prop.name, payload);
59
59
  }
60
- const map = Object.keys(payload[item]).reduce((oo, k) => {
60
+ const map = Object.keys(payload[key]).reduce((oo, k) => {
61
61
  if (!prop.embeddedProps[k]) {
62
62
  throw core_1.ValidationError.invalidEmbeddableQuery(entityName, k, prop.type);
63
63
  }
64
- oo[prop.embeddedProps[k].name] = payload[item][k];
64
+ oo[prop.embeddedProps[k].name] = payload[key][k];
65
65
  return oo;
66
66
  }, {});
67
- return this.createNode(metadata, entityName, map, node, item);
67
+ return this.createNode(metadata, entityName, map, node, key);
68
68
  }
69
69
  }
70
70
  exports.CriteriaNodeFactory = CriteriaNodeFactory;
@@ -3,9 +3,9 @@ import type { IQueryBuilder } from '../typings';
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export declare class ObjectCriteriaNode extends CriteriaNode {
7
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
8
- willAutoJoin<T>(qb: IQueryBuilder<T>, alias?: string): boolean;
6
+ export declare class ObjectCriteriaNode<T extends object> extends CriteriaNode<T> {
7
+ process(qb: IQueryBuilder<T>, alias?: string): any;
8
+ willAutoJoin(qb: IQueryBuilder<T>, alias?: string): boolean;
9
9
  shouldInline(payload: any): boolean;
10
10
  private inlineChildPayload;
11
11
  private shouldAutoJoin;
@@ -21,7 +21,7 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
21
21
  const childNode = this.payload[field];
22
22
  const payload = childNode.process(qb, this.prop ? alias : ownerAlias);
23
23
  const operator = core_1.Utils.isOperator(field);
24
- const customExpression = ObjectCriteriaNode.isCustomExpression(field);
24
+ const isRawField = core_1.RawQueryFragment.isKnownFragment(field);
25
25
  // we need to keep the prefixing for formulas otherwise we would lose aliasing context when nesting inside group operators
26
26
  const virtual = childNode.prop?.persist === false && !childNode.prop?.formula;
27
27
  // if key is missing, we are inside group operator and we need to prefix with alias
@@ -33,8 +33,12 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
33
33
  else if (childNode.shouldRename(payload)) {
34
34
  o[childNode.renameFieldToPK(qb)] = payload;
35
35
  }
36
- else if (primaryKey || virtual || operator || customExpression || field.includes('.') || ![enums_1.QueryType.SELECT, enums_1.QueryType.COUNT].includes(qb.type ?? enums_1.QueryType.SELECT)) {
37
- o[field.replace(/\[::alias::]/g, alias)] = payload;
36
+ else if (isRawField) {
37
+ const rawField = core_1.RawQueryFragment.getKnownFragment(field);
38
+ o[(0, core_1.raw)(rawField.sql.replaceAll(core_1.ALIAS_REPLACEMENT, alias), rawField.params)] = payload;
39
+ }
40
+ else if (primaryKey || virtual || operator || field.includes('.') || ![enums_1.QueryType.SELECT, enums_1.QueryType.COUNT].includes(qb.type ?? enums_1.QueryType.SELECT)) {
41
+ o[field.replaceAll(core_1.ALIAS_REPLACEMENT, alias)] = payload;
38
42
  }
39
43
  else {
40
44
  o[`${alias}.${field}`] = payload;
@@ -60,7 +64,7 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
60
64
  const customExpression = ObjectCriteriaNode.isCustomExpression(this.key);
61
65
  const scalar = core_1.Utils.isPrimaryKey(payload) || payload instanceof RegExp || payload instanceof Date || customExpression;
62
66
  const operator = core_1.Utils.isObject(payload) && Object.keys(payload).every(k => core_1.Utils.isOperator(k, false));
63
- return !!this.prop && this.prop.reference !== core_1.ReferenceType.SCALAR && !scalar && !operator;
67
+ return !!this.prop && this.prop.kind !== core_1.ReferenceKind.SCALAR && !scalar && !operator;
64
68
  }
65
69
  inlineChildPayload(o, payload, field, alias, childAlias) {
66
70
  const prop = this.metadata.find(this.entityName).properties[field];
@@ -104,15 +108,15 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
104
108
  if (!this.prop || !this.parent) {
105
109
  return false;
106
110
  }
107
- const embeddable = this.prop.reference === core_1.ReferenceType.EMBEDDED;
108
- const knownKey = [core_1.ReferenceType.SCALAR, core_1.ReferenceType.MANY_TO_ONE, core_1.ReferenceType.EMBEDDED].includes(this.prop.reference) || (this.prop.reference === core_1.ReferenceType.ONE_TO_ONE && this.prop.owner);
111
+ const embeddable = this.prop.kind === core_1.ReferenceKind.EMBEDDED;
112
+ const knownKey = [core_1.ReferenceKind.SCALAR, core_1.ReferenceKind.MANY_TO_ONE, core_1.ReferenceKind.EMBEDDED].includes(this.prop.kind) || (this.prop.kind === core_1.ReferenceKind.ONE_TO_ONE && this.prop.owner);
109
113
  const operatorKeys = knownKey && Object.keys(this.payload).every(key => core_1.Utils.isOperator(key, false));
110
114
  const primaryKeys = knownKey && Object.keys(this.payload).every(key => {
111
115
  const meta = this.metadata.find(this.entityName);
112
116
  if (!meta.primaryKeys.includes(key)) {
113
117
  return false;
114
118
  }
115
- if (!core_1.Utils.isPlainObject(this.payload[key].payload) || ![core_1.ReferenceType.ONE_TO_ONE, core_1.ReferenceType.MANY_TO_ONE].includes(meta.properties[key].reference)) {
119
+ if (!core_1.Utils.isPlainObject(this.payload[key].payload) || ![core_1.ReferenceKind.ONE_TO_ONE, core_1.ReferenceKind.MANY_TO_ONE].includes(meta.properties[key].kind)) {
116
120
  return true;
117
121
  }
118
122
  return Object.keys(this.payload[key].payload).every(k => meta.properties[key].targetMeta.primaryKeys.includes(k));
@@ -125,7 +129,7 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
125
129
  const scalar = core_1.Utils.isPrimaryKey(this.payload) || this.payload instanceof RegExp || this.payload instanceof Date || customExpression;
126
130
  const operator = core_1.Utils.isPlainObject(this.payload) && Object.keys(this.payload).every(k => core_1.Utils.isOperator(k, false));
127
131
  const field = `${alias}.${this.prop.name}`;
128
- if (this.prop.reference === core_1.ReferenceType.MANY_TO_MANY && (scalar || operator)) {
132
+ if (this.prop.kind === core_1.ReferenceKind.MANY_TO_MANY && (scalar || operator)) {
129
133
  qb.join(field, nestedAlias, undefined, 'pivotJoin', this.getPath());
130
134
  }
131
135
  else {
@@ -1,10 +1,12 @@
1
+ /// <reference types="node" />
2
+ import { inspect } from 'util';
1
3
  import type { Knex } from 'knex';
2
- import type { AnyEntity, ConnectionType, Dictionary, EntityData, EntityName, EntityProperty, FlushMode, GroupOperator, MetadataStorage, ObjectQuery, PopulateOptions, QBFilterQuery, QBQueryOrderMap, QueryResult, RequiredEntityData } from '@mikro-orm/core';
4
+ import type { AnyEntity, ConnectionType, Dictionary, EntityData, EntityName, EntityProperty, FlushMode, GroupOperator, LoggerContext, MetadataStorage, ObjectQuery, PopulateOptions, QBFilterQuery, QBQueryOrderMap, QueryResult, RequiredEntityData } from '@mikro-orm/core';
3
5
  import { LockMode, PopulateHint, QueryFlag } from '@mikro-orm/core';
4
6
  import { QueryType } from './enums';
5
7
  import type { AbstractSqlDriver } from '../AbstractSqlDriver';
6
- import { QueryBuilderHelper } from './QueryBuilderHelper';
7
8
  import type { Alias } from './QueryBuilderHelper';
9
+ import { QueryBuilderHelper } from './QueryBuilderHelper';
8
10
  import type { SqlEntityManager } from '../SqlEntityManager';
9
11
  import type { Field } from '../typings';
10
12
  /**
@@ -27,11 +29,13 @@ import type { Field } from '../typings';
27
29
  * ```
28
30
  */
29
31
  export declare class QueryBuilder<T extends object = AnyEntity> {
32
+ #private;
30
33
  private readonly metadata;
31
34
  private readonly driver;
32
35
  private readonly context?;
33
36
  private connectionType?;
34
37
  private readonly em?;
38
+ private readonly loggerContext?;
35
39
  get mainAlias(): Alias;
36
40
  get alias(): string;
37
41
  get helper(): QueryBuilderHelper;
@@ -75,7 +79,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
75
79
  /**
76
80
  * @internal
77
81
  */
78
- constructor(entityName: EntityName<T> | QueryBuilder<T>, metadata: MetadataStorage, driver: AbstractSqlDriver, context?: Knex.Transaction<any, any[]> | undefined, alias?: string, connectionType?: ConnectionType | undefined, em?: SqlEntityManager<AbstractSqlDriver<import("../AbstractSqlConnection").AbstractSqlConnection>> | undefined);
82
+ constructor(entityName: EntityName<T> | QueryBuilder<T>, metadata: MetadataStorage, driver: AbstractSqlDriver, context?: Knex.Transaction<any, any[]> | undefined, alias?: string, connectionType?: ConnectionType | undefined, em?: SqlEntityManager<AbstractSqlDriver<import("..").AbstractSqlConnection, import("..").AbstractSqlPlatform>> | undefined, loggerContext?: LoggerContext | undefined);
79
83
  select(fields: Field<T> | Field<T>[], distinct?: boolean): SelectQueryBuilder<T>;
80
84
  addSelect(fields: Field<T> | Field<T>[]): SelectQueryBuilder<T>;
81
85
  distinct(): SelectQueryBuilder<T>;
@@ -90,7 +94,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
90
94
  leftJoin(field: string, alias: string, cond?: QBFilterQuery): this;
91
95
  joinAndSelect(field: string, alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string): SelectQueryBuilder<T>;
92
96
  leftJoinAndSelect(field: string, alias: string, cond?: QBFilterQuery): SelectQueryBuilder<T>;
93
- protected getFieldsForJoinedLoad<U extends object>(prop: EntityProperty<U>, alias: string): Field<U>[];
97
+ protected getFieldsForJoinedLoad(prop: EntityProperty<T>, alias: string): Field<T>[];
94
98
  withSubQuery(subQuery: Knex.QueryBuilder, alias: string): this;
95
99
  where(cond: QBFilterQuery<T>, operator?: keyof typeof GroupOperator): this;
96
100
  where(cond: string, params?: any[], operator?: keyof typeof GroupOperator): this;
@@ -114,7 +118,6 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
114
118
  ref(field: string): Knex.Ref<string, {
115
119
  [x: string]: string;
116
120
  }>;
117
- raw<R = Knex.Raw>(sql: string, bindings?: Knex.RawBinding[] | Knex.ValueDict): R;
118
121
  limit(limit?: number, offset?: number): this;
119
122
  offset(offset?: number): this;
120
123
  withSchema(schema?: string): this;
@@ -138,6 +141,11 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
138
141
  * Returns the query with parameters as wildcards.
139
142
  */
140
143
  getQuery(): string;
144
+ toQuery(): {
145
+ sql: string;
146
+ _sql: Knex.Sql;
147
+ params: readonly unknown[];
148
+ };
141
149
  /**
142
150
  * Returns the list of all parameters for this query.
143
151
  */
@@ -179,6 +187,10 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
179
187
  * Executes count query (without offset and limit), returning total count of results
180
188
  */
181
189
  getCount(field?: string | string[], distinct?: boolean): Promise<number>;
190
+ /**
191
+ * Executes the query, returning both array of results and total count query (without offset and limit).
192
+ */
193
+ getResultAndCount(): Promise<[T[], number]>;
182
194
  /**
183
195
  * Provides promise-like interface so we can await the QB instance.
184
196
  */
@@ -195,6 +207,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
195
207
  private init;
196
208
  private getQueryBase;
197
209
  private finalize;
210
+ private processPopulateWhere;
198
211
  private hasToManyJoins;
199
212
  private wrapPaginateSubQuery;
200
213
  private wrapModifySubQuery;
@@ -207,6 +220,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
207
220
  private createQueryBuilderHelper;
208
221
  private ensureFromClause;
209
222
  private ensureNotFinalized;
223
+ [inspect.custom](depth: number): string;
210
224
  }
211
225
  export interface RunQueryBuilder<T extends object> extends Omit<QueryBuilder<T>, 'getResult' | 'getSingleResult' | 'getResultList' | 'where'> {
212
226
  where(cond: QBFilterQuery<T> | string, params?: keyof typeof GroupOperator | any[], operator?: keyof typeof GroupOperator): this;