@mikro-orm/knex 6.0.0-dev.12 → 6.0.0-dev.121

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 (41) hide show
  1. package/AbstractSqlConnection.d.ts +8 -4
  2. package/AbstractSqlConnection.js +30 -18
  3. package/AbstractSqlDriver.d.ts +21 -23
  4. package/AbstractSqlDriver.js +378 -221
  5. package/AbstractSqlPlatform.d.ts +5 -4
  6. package/AbstractSqlPlatform.js +34 -5
  7. package/MonkeyPatchable.d.ts +1 -0
  8. package/MonkeyPatchable.js +3 -0
  9. package/PivotCollectionPersister.d.ts +17 -0
  10. package/PivotCollectionPersister.js +128 -0
  11. package/README.md +64 -107
  12. package/SqlEntityManager.d.ts +2 -6
  13. package/SqlEntityManager.js +5 -9
  14. package/SqlEntityRepository.d.ts +7 -6
  15. package/SqlEntityRepository.js +11 -8
  16. package/index.mjs +23 -6
  17. package/package.json +8 -8
  18. package/query/ArrayCriteriaNode.d.ts +3 -3
  19. package/query/CriteriaNode.d.ts +8 -8
  20. package/query/CriteriaNode.js +16 -9
  21. package/query/CriteriaNodeFactory.d.ts +6 -6
  22. package/query/CriteriaNodeFactory.js +17 -13
  23. package/query/ObjectCriteriaNode.d.ts +3 -3
  24. package/query/ObjectCriteriaNode.js +12 -8
  25. package/query/QueryBuilder.d.ts +44 -20
  26. package/query/QueryBuilder.js +371 -130
  27. package/query/QueryBuilderHelper.d.ts +10 -15
  28. package/query/QueryBuilderHelper.js +197 -158
  29. package/query/ScalarCriteriaNode.d.ts +3 -2
  30. package/query/ScalarCriteriaNode.js +9 -6
  31. package/query/enums.js +1 -1
  32. package/schema/DatabaseSchema.d.ts +5 -2
  33. package/schema/DatabaseSchema.js +27 -9
  34. package/schema/DatabaseTable.d.ts +4 -2
  35. package/schema/DatabaseTable.js +66 -32
  36. package/schema/SchemaComparator.js +15 -3
  37. package/schema/SchemaHelper.d.ts +6 -4
  38. package/schema/SchemaHelper.js +11 -4
  39. package/schema/SqlSchemaGenerator.d.ts +3 -6
  40. package/schema/SqlSchemaGenerator.js +61 -28
  41. package/typings.d.ts +13 -7
@@ -1,14 +1,17 @@
1
1
  /// <reference types="node" />
2
2
  import { inspect } from 'util';
3
3
  import type { Knex } from 'knex';
4
- import type { AnyEntity, ConnectionType, Dictionary, EntityData, EntityName, EntityProperty, FlushMode, GroupOperator, MetadataStorage, ObjectQuery, PopulateOptions, QBFilterQuery, QBQueryOrderMap, QueryResult, RequiredEntityData } from '@mikro-orm/core';
5
- import { LockMode, PopulateHint, QueryFlag } from '@mikro-orm/core';
4
+ import { type AnyEntity, type ConnectionType, type Dictionary, type EntityData, type EntityName, type EntityProperty, type FlushMode, type GroupOperator, LockMode, type LoggingOptions, type MetadataStorage, type ObjectQuery, PopulateHint, type PopulateOptions, type QBFilterQuery, type QBQueryOrderMap, QueryFlag, type QueryResult, type RequiredEntityData } from '@mikro-orm/core';
6
5
  import { QueryType } from './enums';
7
6
  import type { AbstractSqlDriver } from '../AbstractSqlDriver';
8
- import { QueryBuilderHelper } from './QueryBuilderHelper';
9
- import type { Alias } from './QueryBuilderHelper';
7
+ import { type Alias, QueryBuilderHelper } from './QueryBuilderHelper';
10
8
  import type { SqlEntityManager } from '../SqlEntityManager';
11
9
  import type { Field } from '../typings';
10
+ import type { AbstractSqlPlatform } from '../AbstractSqlPlatform';
11
+ export interface ExecuteOptions {
12
+ mapResults?: boolean;
13
+ mergeResults?: boolean;
14
+ }
12
15
  /**
13
16
  * SQL query builder with fluent interface.
14
17
  *
@@ -29,12 +32,14 @@ import type { Field } from '../typings';
29
32
  * ```
30
33
  */
31
34
  export declare class QueryBuilder<T extends object = AnyEntity> {
35
+ #private;
32
36
  private readonly metadata;
33
37
  private readonly driver;
34
38
  private readonly context?;
35
39
  private connectionType?;
36
40
  private readonly em?;
37
- get mainAlias(): Alias;
41
+ private readonly logging?;
42
+ get mainAlias(): Alias<T>;
38
43
  get alias(): string;
39
44
  get helper(): QueryBuilderHelper;
40
45
  /** @internal */
@@ -58,6 +63,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
58
63
  private _orderBy;
59
64
  private _groupBy;
60
65
  private _having;
66
+ private _returning?;
61
67
  private _onConflict?;
62
68
  private _limit?;
63
69
  private _offset?;
@@ -65,6 +71,8 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
65
71
  private _joinedProps;
66
72
  private _cache?;
67
73
  private _indexHint?;
74
+ private _comments;
75
+ private _hintComments;
68
76
  private flushMode?;
69
77
  private lockMode?;
70
78
  private lockTables?;
@@ -77,7 +85,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
77
85
  /**
78
86
  * @internal
79
87
  */
80
- 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, import("../AbstractSqlPlatform").AbstractSqlPlatform>> | undefined);
88
+ 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, AbstractSqlPlatform>> | undefined, logging?: LoggingOptions | undefined);
81
89
  select(fields: Field<T> | Field<T>[], distinct?: boolean): SelectQueryBuilder<T>;
82
90
  addSelect(fields: Field<T> | Field<T>[]): SelectQueryBuilder<T>;
83
91
  distinct(): SelectQueryBuilder<T>;
@@ -88,11 +96,13 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
88
96
  delete(cond?: QBFilterQuery): DeleteQueryBuilder<T>;
89
97
  truncate(): TruncateQueryBuilder<T>;
90
98
  count(field?: string | string[], distinct?: boolean): CountQueryBuilder<T>;
91
- join(field: string, alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string): this;
92
- leftJoin(field: string, alias: string, cond?: QBFilterQuery): this;
93
- joinAndSelect(field: string, alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string): SelectQueryBuilder<T>;
94
- leftJoinAndSelect(field: string, alias: string, cond?: QBFilterQuery): SelectQueryBuilder<T>;
95
- protected getFieldsForJoinedLoad<U extends object>(prop: EntityProperty<U>, alias: string): Field<U>[];
99
+ join(field: string | Knex.QueryBuilder | QueryBuilder<any>, alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string, schema?: string): this;
100
+ innerJoin(field: string | Knex.QueryBuilder | QueryBuilder<any>, alias: string, cond?: QBFilterQuery, schema?: string): this;
101
+ leftJoin(field: string | Knex.QueryBuilder | QueryBuilder<any>, alias: string, cond?: QBFilterQuery, schema?: string): this;
102
+ joinAndSelect(field: string | [field: string, Knex.QueryBuilder | QueryBuilder<any>], alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string, fields?: string[], schema?: string): SelectQueryBuilder<T>;
103
+ leftJoinAndSelect(field: string | [field: string, Knex.QueryBuilder | QueryBuilder<any>], alias: string, cond?: QBFilterQuery, fields?: string[], schema?: string): SelectQueryBuilder<T>;
104
+ innerJoinAndSelect(field: string | [field: string, Knex.QueryBuilder | QueryBuilder<any>], alias: string, cond?: QBFilterQuery, fields?: string[], schema?: string): SelectQueryBuilder<T>;
105
+ protected getFieldsForJoinedLoad(prop: EntityProperty<T>, alias: string, explicitFields?: string[]): Field<T>[];
96
106
  withSubQuery(subQuery: Knex.QueryBuilder, alias: string): this;
97
107
  where(cond: QBFilterQuery<T>, operator?: keyof typeof GroupOperator): this;
98
108
  where(cond: string, params?: any[], operator?: keyof typeof GroupOperator): this;
@@ -106,17 +116,11 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
106
116
  onConflict(fields?: Field<T> | Field<T>[]): this;
107
117
  ignore(): this;
108
118
  merge(data?: EntityData<T> | Field<T>[]): this;
119
+ returning(fields?: Field<T> | Field<T>[]): this;
109
120
  /**
110
121
  * @internal
111
122
  */
112
123
  populate(populate: PopulateOptions<T>[], populateWhere?: ObjectQuery<T> | PopulateHint): this;
113
- /**
114
- * @internal
115
- */
116
- ref(field: string): Knex.Ref<string, {
117
- [x: string]: string;
118
- }>;
119
- raw<R = Knex.Raw>(sql: string, bindings?: Knex.RawBinding[] | Knex.ValueDict): R;
120
124
  limit(limit?: number, offset?: number): this;
121
125
  offset(offset?: number): this;
122
126
  withSchema(schema?: string): this;
@@ -129,6 +133,16 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
129
133
  * Adds index hint to the FROM clause.
130
134
  */
131
135
  indexHint(sql: string): this;
136
+ /**
137
+ * Prepend comment to the sql query using the syntax `/* ... *&#8205;/`. Some characters are forbidden such as `/*, *&#8205;/` and `?`.
138
+ */
139
+ comment(comment: string | string[]): this;
140
+ /**
141
+ * Add hints to the query using comment-like syntax `/*+ ... *&#8205;/`. MySQL and Oracle use this syntax for optimizer hints.
142
+ * Also various DB proxies and routers use this syntax to pass hints to alter their behavior. In other dialects the hints
143
+ * are ignored as simple comments.
144
+ */
145
+ hintComment(comment: string | string[]): this;
132
146
  /**
133
147
  * Specifies FROM which entity's table select/update/delete will be executed, removing all previously set FROM-s.
134
148
  * Allows setting a main string alias of the selection data.
@@ -140,6 +154,11 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
140
154
  * Returns the query with parameters as wildcards.
141
155
  */
142
156
  getQuery(): string;
157
+ toQuery(): {
158
+ sql: string;
159
+ _sql: Knex.Sql;
160
+ params: readonly unknown[];
161
+ };
143
162
  /**
144
163
  * Returns the list of all parameters for this query.
145
164
  */
@@ -164,7 +183,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
164
183
  * Executes this QB and returns the raw results, mapped to the property names (unless disabled via last parameter).
165
184
  * Use `method` to specify what kind of result you want to get (array/single/meta).
166
185
  */
167
- execute<U = any>(method?: 'all' | 'get' | 'run', mapResults?: boolean): Promise<U>;
186
+ execute<U = any>(method?: 'all' | 'get' | 'run', options?: ExecuteOptions | boolean): Promise<U>;
168
187
  /**
169
188
  * Alias for `qb.getResultList()`
170
189
  */
@@ -181,6 +200,10 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
181
200
  * Executes count query (without offset and limit), returning total count of results
182
201
  */
183
202
  getCount(field?: string | string[], distinct?: boolean): Promise<number>;
203
+ /**
204
+ * Executes the query, returning both array of results and total count query (without offset and limit).
205
+ */
206
+ getResultAndCount(): Promise<[T[], number]>;
184
207
  /**
185
208
  * Provides promise-like interface so we can await the QB instance.
186
209
  */
@@ -196,11 +219,12 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
196
219
  private prepareFields;
197
220
  private init;
198
221
  private getQueryBase;
222
+ private applyDiscriminatorCondition;
199
223
  private finalize;
224
+ private processPopulateWhere;
200
225
  private hasToManyJoins;
201
226
  private wrapPaginateSubQuery;
202
227
  private wrapModifySubQuery;
203
- private autoJoinPivotTable;
204
228
  private getSchema;
205
229
  private createAlias;
206
230
  private createMainAlias;