@mikro-orm/sql 7.0.2 → 7.0.3-dev.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 (86) hide show
  1. package/AbstractSqlConnection.d.ts +58 -94
  2. package/AbstractSqlConnection.js +238 -235
  3. package/AbstractSqlDriver.d.ts +155 -411
  4. package/AbstractSqlDriver.js +1937 -2061
  5. package/AbstractSqlPlatform.d.ts +73 -83
  6. package/AbstractSqlPlatform.js +158 -162
  7. package/PivotCollectionPersister.d.ts +15 -33
  8. package/PivotCollectionPersister.js +160 -158
  9. package/SqlEntityManager.d.ts +22 -67
  10. package/SqlEntityManager.js +38 -54
  11. package/SqlEntityRepository.d.ts +14 -14
  12. package/SqlEntityRepository.js +23 -23
  13. package/dialects/mssql/MsSqlNativeQueryBuilder.d.ts +12 -12
  14. package/dialects/mssql/MsSqlNativeQueryBuilder.js +194 -192
  15. package/dialects/mysql/BaseMySqlPlatform.d.ts +45 -64
  16. package/dialects/mysql/BaseMySqlPlatform.js +131 -134
  17. package/dialects/mysql/MySqlExceptionConverter.d.ts +6 -6
  18. package/dialects/mysql/MySqlExceptionConverter.js +77 -91
  19. package/dialects/mysql/MySqlNativeQueryBuilder.d.ts +3 -3
  20. package/dialects/mysql/MySqlNativeQueryBuilder.js +69 -66
  21. package/dialects/mysql/MySqlSchemaHelper.d.ts +39 -39
  22. package/dialects/mysql/MySqlSchemaHelper.js +319 -327
  23. package/dialects/oracledb/OracleDialect.d.ts +52 -81
  24. package/dialects/oracledb/OracleDialect.js +149 -155
  25. package/dialects/oracledb/OracleNativeQueryBuilder.d.ts +12 -12
  26. package/dialects/oracledb/OracleNativeQueryBuilder.js +236 -232
  27. package/dialects/postgresql/BasePostgreSqlPlatform.d.ts +105 -108
  28. package/dialects/postgresql/BasePostgreSqlPlatform.js +350 -351
  29. package/dialects/postgresql/FullTextType.d.ts +6 -10
  30. package/dialects/postgresql/FullTextType.js +51 -51
  31. package/dialects/postgresql/PostgreSqlExceptionConverter.d.ts +5 -5
  32. package/dialects/postgresql/PostgreSqlExceptionConverter.js +43 -55
  33. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.d.ts +1 -1
  34. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.js +4 -4
  35. package/dialects/postgresql/PostgreSqlSchemaHelper.d.ts +82 -102
  36. package/dialects/postgresql/PostgreSqlSchemaHelper.js +683 -711
  37. package/dialects/sqlite/BaseSqliteConnection.d.ts +5 -3
  38. package/dialects/sqlite/BaseSqliteConnection.js +19 -21
  39. package/dialects/sqlite/NodeSqliteDialect.d.ts +1 -1
  40. package/dialects/sqlite/NodeSqliteDialect.js +23 -23
  41. package/dialects/sqlite/SqliteDriver.d.ts +1 -1
  42. package/dialects/sqlite/SqliteDriver.js +3 -3
  43. package/dialects/sqlite/SqliteExceptionConverter.d.ts +6 -6
  44. package/dialects/sqlite/SqliteExceptionConverter.js +51 -67
  45. package/dialects/sqlite/SqliteNativeQueryBuilder.d.ts +2 -2
  46. package/dialects/sqlite/SqliteNativeQueryBuilder.js +7 -7
  47. package/dialects/sqlite/SqlitePlatform.d.ts +72 -63
  48. package/dialects/sqlite/SqlitePlatform.js +139 -139
  49. package/dialects/sqlite/SqliteSchemaHelper.d.ts +60 -70
  50. package/dialects/sqlite/SqliteSchemaHelper.js +520 -533
  51. package/package.json +2 -2
  52. package/plugin/index.d.ts +35 -42
  53. package/plugin/index.js +36 -43
  54. package/plugin/transformer.d.ts +94 -117
  55. package/plugin/transformer.js +881 -890
  56. package/query/ArrayCriteriaNode.d.ts +4 -4
  57. package/query/ArrayCriteriaNode.js +18 -18
  58. package/query/CriteriaNode.d.ts +25 -35
  59. package/query/CriteriaNode.js +123 -133
  60. package/query/CriteriaNodeFactory.d.ts +6 -49
  61. package/query/CriteriaNodeFactory.js +94 -97
  62. package/query/NativeQueryBuilder.d.ts +118 -118
  63. package/query/NativeQueryBuilder.js +480 -484
  64. package/query/ObjectCriteriaNode.d.ts +12 -12
  65. package/query/ObjectCriteriaNode.js +282 -298
  66. package/query/QueryBuilder.d.ts +904 -1546
  67. package/query/QueryBuilder.js +2145 -2270
  68. package/query/QueryBuilderHelper.d.ts +72 -153
  69. package/query/QueryBuilderHelper.js +1028 -1079
  70. package/query/ScalarCriteriaNode.d.ts +3 -3
  71. package/query/ScalarCriteriaNode.js +46 -53
  72. package/query/enums.d.ts +14 -14
  73. package/query/enums.js +14 -14
  74. package/query/raw.d.ts +6 -16
  75. package/query/raw.js +10 -10
  76. package/schema/DatabaseSchema.d.ts +50 -73
  77. package/schema/DatabaseSchema.js +307 -331
  78. package/schema/DatabaseTable.d.ts +73 -96
  79. package/schema/DatabaseTable.js +927 -1012
  80. package/schema/SchemaComparator.d.ts +66 -58
  81. package/schema/SchemaComparator.js +740 -744
  82. package/schema/SchemaHelper.d.ts +95 -109
  83. package/schema/SchemaHelper.js +659 -675
  84. package/schema/SqlSchemaGenerator.d.ts +58 -78
  85. package/schema/SqlSchemaGenerator.js +501 -535
  86. package/typings.d.ts +266 -380
@@ -1,44 +1,4 @@
1
- import {
2
- type AnyEntity,
3
- type Collection,
4
- type Configuration,
5
- type ConnectionType,
6
- type Constructor,
7
- type CountOptions,
8
- DatabaseDriver,
9
- type DeleteOptions,
10
- type Dictionary,
11
- type DriverMethodOptions,
12
- type EntityData,
13
- type EntityDictionary,
14
- type EntityField,
15
- EntityManagerType,
16
- type EntityMetadata,
17
- type EntityName,
18
- type EntityProperty,
19
- type FilterQuery,
20
- type FindOneOptions,
21
- type FindOptions,
22
- type FormulaTable,
23
- type LockOptions,
24
- type LoggingOptions,
25
- type NativeInsertUpdateManyOptions,
26
- type NativeInsertUpdateOptions,
27
- type ObjectQuery,
28
- type Options,
29
- type OrderDefinition,
30
- type PopulateOptions,
31
- type PopulatePath,
32
- type Primary,
33
- type QueryOrderMap,
34
- type QueryResult,
35
- type Raw,
36
- RawQueryFragment,
37
- type StreamOptions,
38
- type Transaction,
39
- type UpsertManyOptions,
40
- type UpsertOptions,
41
- } from '@mikro-orm/core';
1
+ import { type AnyEntity, type Collection, type Configuration, type ConnectionType, type Constructor, type CountOptions, DatabaseDriver, type DeleteOptions, type Dictionary, type DriverMethodOptions, type EntityData, type EntityDictionary, type EntityField, EntityManagerType, type EntityMetadata, type EntityName, type EntityProperty, type FilterQuery, type FindOneOptions, type FindOptions, type FormulaTable, type LockOptions, type LoggingOptions, type NativeInsertUpdateManyOptions, type NativeInsertUpdateOptions, type ObjectQuery, type Options, type OrderDefinition, type PopulateOptions, type PopulatePath, type Primary, type QueryOrderMap, type QueryResult, type Raw, RawQueryFragment, type StreamOptions, type Transaction, type UpsertManyOptions, type UpsertOptions } from '@mikro-orm/core';
42
2
  import type { AbstractSqlConnection } from './AbstractSqlConnection.js';
43
3
  import type { AbstractSqlPlatform } from './AbstractSqlPlatform.js';
44
4
  import { type AnyQueryBuilder } from './query/QueryBuilder.js';
@@ -47,377 +7,161 @@ import { QueryType } from './query/enums.js';
47
7
  import { SqlEntityManager } from './SqlEntityManager.js';
48
8
  import type { InternalField } from './typings.js';
49
9
  /** Base class for SQL database drivers, implementing find/insert/update/delete using QueryBuilder. */
50
- export declare abstract class AbstractSqlDriver<
51
- Connection extends AbstractSqlConnection = AbstractSqlConnection,
52
- Platform extends AbstractSqlPlatform = AbstractSqlPlatform,
53
- > extends DatabaseDriver<Connection> {
54
- [EntityManagerType]: SqlEntityManager<this>;
55
- protected readonly connection: Connection;
56
- protected readonly replicas: Connection[];
57
- protected readonly platform: Platform;
58
- protected constructor(
59
- config: Configuration,
60
- platform: Platform,
61
- connection: Constructor<Connection>,
62
- connector: string[],
63
- );
64
- getPlatform(): Platform;
65
- /** Evaluates a formula callback, handling both string and Raw return values. */
66
- evaluateFormula(formula: (...args: any[]) => string | Raw, columns: any, table: FormulaTable): string;
67
- /** For TPT entities, returns ownProps (columns in this table); otherwise returns all props. */
68
- private getTableProps;
69
- /** Creates a FormulaTable object for use in formula callbacks. */
70
- private createFormulaTable;
71
- private validateSqlOptions;
72
- createEntityManager(useContext?: boolean): this[typeof EntityManagerType];
73
- private createQueryBuilderFromOptions;
74
- find<T extends object, P extends string = never, F extends string = PopulatePath.ALL, E extends string = never>(
75
- entityName: EntityName<T>,
76
- where: ObjectQuery<T>,
77
- options?: FindOptions<T, P, F, E>,
78
- ): Promise<EntityData<T>[]>;
79
- findOne<T extends object, P extends string = never, F extends string = PopulatePath.ALL, E extends string = never>(
80
- entityName: EntityName<T>,
81
- where: ObjectQuery<T>,
82
- options?: FindOneOptions<T, P, F, E>,
83
- ): Promise<EntityData<T> | null>;
84
- protected hasToManyJoins<T extends object>(hint: PopulateOptions<T>, meta: EntityMetadata<T>): boolean;
85
- findVirtual<T extends object>(
86
- entityName: EntityName<T>,
87
- where: ObjectQuery<T>,
88
- options: FindOptions<T, any, any, any>,
89
- ): Promise<EntityData<T>[]>;
90
- countVirtual<T extends object>(
91
- entityName: EntityName<T>,
92
- where: ObjectQuery<T>,
93
- options: CountOptions<T, any>,
94
- ): Promise<number>;
95
- protected findFromVirtual<T extends object>(
96
- entityName: EntityName<T>,
97
- where: ObjectQuery<T>,
98
- options: FindOptions<T, any> | CountOptions<T, any>,
99
- type: QueryType,
100
- ): Promise<EntityData<T>[] | number>;
101
- protected streamFromVirtual<T extends object>(
102
- entityName: EntityName<T>,
103
- where: FilterQuery<T>,
104
- options: StreamOptions<T, any>,
105
- ): AsyncIterableIterator<EntityData<T>>;
106
- protected wrapVirtualExpressionInSubquery<T extends object>(
107
- meta: EntityMetadata<T>,
108
- expression: string,
109
- where: FilterQuery<T>,
110
- options: FindOptions<T, any>,
111
- type: QueryType,
112
- ): Promise<T[] | number>;
113
- protected wrapVirtualExpressionInSubqueryStream<T extends object>(
114
- meta: EntityMetadata<T>,
115
- expression: string,
116
- where: FilterQuery<T>,
117
- options: FindOptions<T, any, any, any>,
118
- type: QueryType.SELECT,
119
- ): AsyncIterableIterator<T>;
120
- /**
121
- * Virtual entities have no PKs, so to-many populate joins can't be deduplicated.
122
- * Force balanced strategy to load to-many relations via separate queries.
123
- */
124
- private forceBalancedStrategy;
125
- mapResult<T extends object>(
126
- result: EntityData<T>,
127
- meta: EntityMetadata<T>,
128
- populate?: PopulateOptions<T>[],
129
- qb?: AnyQueryBuilder<T>,
130
- map?: Dictionary,
131
- ): EntityData<T> | null;
132
- /**
133
- * Maps aliased columns from TPT parent tables back to their original field names.
134
- * TPT parent columns are selected with aliases like `parent_alias__column_name`,
135
- * and need to be renamed back to `column_name` for the result mapper to work.
136
- */
137
- private mapTPTColumns;
138
- private mapJoinedProps;
139
- /**
140
- * Maps a single property from a joined result row into the relation pojo.
141
- * Handles polymorphic FKs, composite keys, Date parsing, and embedded objects.
142
- */
143
- private mapJoinedProp;
144
- count<T extends object>(entityName: EntityName<T>, where: any, options?: CountOptions<T>): Promise<number>;
145
- nativeInsert<T extends object>(
146
- entityName: EntityName<T>,
147
- data: EntityDictionary<T>,
148
- options?: NativeInsertUpdateOptions<T>,
149
- ): Promise<QueryResult<T>>;
150
- nativeInsertMany<T extends object>(
151
- entityName: EntityName<T>,
152
- data: EntityDictionary<T>[],
153
- options?: NativeInsertUpdateManyOptions<T>,
154
- transform?: (sql: string) => string,
155
- ): Promise<QueryResult<T>>;
156
- nativeUpdate<T extends object>(
157
- entityName: EntityName<T>,
158
- where: FilterQuery<T>,
159
- data: EntityDictionary<T>,
160
- options?: NativeInsertUpdateOptions<T> & UpsertOptions<T>,
161
- ): Promise<QueryResult<T>>;
162
- nativeUpdateMany<T extends object>(
163
- entityName: EntityName<T>,
164
- where: FilterQuery<T>[],
165
- data: EntityDictionary<T>[],
166
- options?: NativeInsertUpdateManyOptions<T> & UpsertManyOptions<T>,
167
- transform?: (sql: string, params: any[]) => string,
168
- ): Promise<QueryResult<T>>;
169
- nativeDelete<T extends object>(
170
- entityName: EntityName<T>,
171
- where: FilterQuery<T> | string | any,
172
- options?: DeleteOptions<T>,
173
- ): Promise<QueryResult<T>>;
174
- /**
175
- * Fast comparison for collection snapshots that are represented by PK arrays.
176
- * Compares scalars via `===` and fallbacks to Utils.equals()` for more complex types like Buffer.
177
- * Always expects the same length of the arrays, since we only compare PKs of the same entity type.
178
- */
179
- private comparePrimaryKeyArrays;
180
- syncCollections<T extends object, O extends object>(
181
- collections: Iterable<Collection<T, O>>,
182
- options?: DriverMethodOptions,
183
- ): Promise<void>;
184
- loadFromPivotTable<T extends object, O extends object>(
185
- prop: EntityProperty,
186
- owners: Primary<O>[][],
187
- where?: FilterQuery<any>,
188
- orderBy?: OrderDefinition<T>,
189
- ctx?: Transaction,
190
- options?: FindOptions<T, any, any, any>,
191
- pivotJoin?: boolean,
192
- ): Promise<Dictionary<T[]>>;
193
- /**
194
- * Load from a polymorphic M:N pivot table.
195
- */
196
- protected loadFromPolymorphicPivotTable<T extends object, O extends object>(
197
- prop: EntityProperty,
198
- owners: Primary<O>[][],
199
- where?: FilterQuery<any>,
200
- orderBy?: OrderDefinition<T>,
201
- ctx?: Transaction,
202
- options?: FindOptions<T, any, any, any>,
203
- pivotJoin?: boolean,
204
- ): Promise<Dictionary<T[]>>;
205
- /**
206
- * Load from owner side of polymorphic M:N (e.g., Post -> Tags)
207
- */
208
- protected loadPolymorphicPivotOwnerSide<T extends object, O extends object>(
209
- prop: EntityProperty,
210
- owners: Primary<O>[][],
211
- where: FilterQuery<any>,
212
- orderBy?: OrderDefinition<T>,
213
- ctx?: Transaction,
214
- options?: FindOptions<T, any, any, any>,
215
- pivotJoin?: boolean,
216
- inverseProp?: EntityProperty,
217
- ): Promise<Dictionary<T[]>>;
218
- /**
219
- * Load from inverse side of polymorphic M:N (e.g., Tag -> Posts)
220
- * Uses single query with join via virtual relation on pivot.
221
- */
222
- protected loadPolymorphicPivotInverseSide<T extends object, O extends object>(
223
- prop: EntityProperty,
224
- owners: Primary<O>[][],
225
- where: FilterQuery<any>,
226
- orderBy?: OrderDefinition<T>,
227
- ctx?: Transaction,
228
- options?: FindOptions<T, any, any, any>,
229
- ): Promise<Dictionary<T[]>>;
230
- /**
231
- * Build a map from owner PKs to their related entities from pivot table results.
232
- */
233
- private buildPivotResultMap;
234
- private wrapPopulateFilter;
235
- private getPivotOrderBy;
236
- execute<T extends QueryResult | EntityData<AnyEntity> | EntityData<AnyEntity>[] = EntityData<AnyEntity>[]>(
237
- query: string | NativeQueryBuilder | RawQueryFragment,
238
- params?: any[],
239
- method?: 'all' | 'get' | 'run',
240
- ctx?: Transaction,
241
- loggerContext?: LoggingOptions,
242
- ): Promise<T>;
243
- stream<T extends object>(
244
- entityName: EntityName<T>,
245
- where: FilterQuery<T>,
246
- options: StreamOptions<T, any, any, any>,
247
- ): AsyncIterableIterator<T>;
248
- /**
249
- * 1:1 owner side needs to be marked for population so QB auto-joins the owner id
250
- */
251
- protected autoJoinOneToOneOwner<T extends object>(
252
- meta: EntityMetadata<T>,
253
- populate: PopulateOptions<T>[],
254
- fields?: readonly EntityField<T, any>[],
255
- ): PopulateOptions<T>[];
256
- /**
257
- * @internal
258
- */
259
- joinedProps<T>(
260
- meta: EntityMetadata,
261
- populate: readonly PopulateOptions<T>[],
262
- options?: {
263
- strategy?: Options['loadStrategy'];
264
- },
265
- ): PopulateOptions<T>[];
266
- /**
267
- * @internal
268
- */
269
- mergeJoinedResult<T extends object>(
270
- rawResults: EntityData<T>[],
271
- meta: EntityMetadata<T>,
272
- joinedProps: PopulateOptions<T>[],
273
- ): EntityData<T>[];
274
- protected shouldHaveColumn<T, U>(
275
- meta: EntityMetadata<T>,
276
- prop: EntityProperty<U>,
277
- populate: readonly PopulateOptions<U>[],
278
- fields?: readonly InternalField<U>[],
279
- exclude?: readonly InternalField<U>[],
280
- ): boolean;
281
- protected getFieldsForJoinedLoad<T extends object>(
282
- qb: AnyQueryBuilder<T>,
283
- meta: EntityMetadata<T>,
284
- options: FieldsForJoinedLoadOptions<T>,
285
- ): InternalField<T>[];
286
- /**
287
- * Adds LEFT JOINs and fields for TPT polymorphic loading when populating a relation to a TPT base class.
288
- * @internal
289
- */
290
- protected addTPTPolymorphicJoinsForRelation<T extends object>(
291
- qb: AnyQueryBuilder<T>,
292
- meta: EntityMetadata<T>,
293
- baseAlias: string,
294
- fields: InternalField<T>[],
295
- ): void;
296
- /**
297
- * Find the alias for a TPT child table in the query builder.
298
- * @internal
299
- */
300
- protected findTPTChildAlias<T extends object>(qb: AnyQueryBuilder<T>, childMeta: EntityMetadata): string | undefined;
301
- /**
302
- * Builds a CASE WHEN expression for TPT discriminator.
303
- * Determines concrete entity type based on which child table has a non-null PK.
304
- * @internal
305
- */
306
- buildTPTDiscriminatorExpression(
307
- meta: EntityMetadata,
308
- descendants: EntityMetadata[],
309
- aliasMap: Dictionary<string>,
310
- baseAlias: string,
311
- ): Raw;
312
- /**
313
- * Maps TPT child-specific fields during hydration.
314
- * When a relation points to a TPT base class, the actual entity might be a child class.
315
- * This method reads the discriminator to determine the concrete type and maps child-specific fields.
316
- * @internal
317
- */
318
- protected mapTPTChildFields<T extends object>(
319
- relationPojo: EntityData<T>,
320
- meta: EntityMetadata<T>,
321
- relationAlias: string,
322
- qb: AnyQueryBuilder<T>,
323
- root: EntityData<T>,
324
- ): void;
325
- /**
326
- * @internal
327
- */
328
- mapPropToFieldNames<T extends object>(
329
- qb: AnyQueryBuilder<T>,
330
- prop: EntityProperty<T>,
331
- tableAlias: string,
332
- meta: EntityMetadata<T>,
333
- schema?: string,
334
- explicitFields?: readonly InternalField<T>[],
335
- ): InternalField<T>[];
336
- /** @internal */
337
- createQueryBuilder<T extends object>(
338
- entityName: EntityName<T> | AnyQueryBuilder<T>,
339
- ctx?: Transaction,
340
- preferredConnectionType?: ConnectionType,
341
- convertCustomTypes?: boolean,
342
- loggerContext?: LoggingOptions,
343
- alias?: string,
344
- em?: SqlEntityManager,
345
- ): AnyQueryBuilder<T>;
346
- protected resolveConnectionType(args: { ctx?: Transaction; connectionType?: ConnectionType }): ConnectionType;
347
- protected extractManyToMany<T>(meta: EntityMetadata<T>, data: EntityDictionary<T>): EntityData<T>;
348
- protected processManyToMany<T extends object>(
349
- meta: EntityMetadata<T>,
350
- pks: Primary<T>[],
351
- collections: EntityData<T>,
352
- clear: boolean,
353
- options?: DriverMethodOptions,
354
- ): Promise<void>;
355
- lockPessimistic<T extends object>(entity: T, options: LockOptions): Promise<void>;
356
- protected buildPopulateWhere<T extends object>(
357
- meta: EntityMetadata<T>,
358
- joinedProps: PopulateOptions<T>[],
359
- options: Pick<FindOptions<any>, 'populateWhere'>,
360
- ): ObjectQuery<T>;
361
- /**
362
- * Builds a UNION ALL (or UNION) subquery from `unionWhere` branches and merges it
363
- * into the main WHERE as `pk IN (branch_1 UNION ALL branch_2 ...)`.
364
- * Each branch is planned independently by the database, enabling per-table index usage.
365
- */
366
- protected applyUnionWhere<T extends object>(
367
- meta: EntityMetadata<T>,
368
- where: ObjectQuery<T>,
369
- options: FindOptions<T, any, any, any> | CountOptions<T> | NativeInsertUpdateOptions<T> | DeleteOptions<T>,
370
- forDml?: boolean,
371
- ): Promise<ObjectQuery<T>>;
372
- protected buildOrderBy<T extends object>(
373
- qb: AnyQueryBuilder<T>,
374
- meta: EntityMetadata<T>,
375
- populate: PopulateOptions<T>[],
376
- options: Pick<FindOptions<any>, 'strategy' | 'orderBy' | 'populateOrderBy'>,
377
- ): QueryOrderMap<T>[];
378
- protected buildPopulateOrderBy<T extends object>(
379
- qb: AnyQueryBuilder<T>,
380
- meta: EntityMetadata<T>,
381
- populateOrderBy: QueryOrderMap<T>[],
382
- parentPath: string,
383
- explicit: boolean,
384
- parentAlias?: string,
385
- ): QueryOrderMap<T>[];
386
- protected buildJoinedPropsOrderBy<T extends object>(
387
- qb: AnyQueryBuilder<T>,
388
- meta: EntityMetadata<T>,
389
- populate: PopulateOptions<T>[],
390
- options?: Pick<FindOptions<any>, 'strategy' | 'orderBy' | 'populateOrderBy'>,
391
- parentPath?: string,
392
- ): QueryOrderMap<T>[];
393
- private buildToManyOrderBy;
394
- protected normalizeFields<T extends object>(fields: InternalField<T>[], prefix?: string): string[];
395
- protected processField<T extends object>(
396
- meta: EntityMetadata<T>,
397
- prop: EntityProperty<T> | undefined,
398
- field: string,
399
- ret: InternalField<T>[],
400
- ): void;
401
- protected buildFields<T extends object>(
402
- meta: EntityMetadata<T>,
403
- populate: PopulateOptions<T>[],
404
- joinedProps: PopulateOptions<T>[],
405
- qb: AnyQueryBuilder<T>,
406
- alias: string,
407
- options: Pick<FindOptions<T, any, any, any>, 'strategy' | 'fields' | 'exclude'>,
408
- schema?: string,
409
- ): InternalField<T>[];
10
+ export declare abstract class AbstractSqlDriver<Connection extends AbstractSqlConnection = AbstractSqlConnection, Platform extends AbstractSqlPlatform = AbstractSqlPlatform> extends DatabaseDriver<Connection> {
11
+ [EntityManagerType]: SqlEntityManager<this>;
12
+ protected readonly connection: Connection;
13
+ protected readonly replicas: Connection[];
14
+ protected readonly platform: Platform;
15
+ protected constructor(config: Configuration, platform: Platform, connection: Constructor<Connection>, connector: string[]);
16
+ getPlatform(): Platform;
17
+ /** Evaluates a formula callback, handling both string and Raw return values. */
18
+ evaluateFormula(formula: (...args: any[]) => string | Raw, columns: any, table: FormulaTable): string;
19
+ /** For TPT entities, returns ownProps (columns in this table); otherwise returns all props. */
20
+ private getTableProps;
21
+ /** Creates a FormulaTable object for use in formula callbacks. */
22
+ private createFormulaTable;
23
+ private validateSqlOptions;
24
+ createEntityManager(useContext?: boolean): this[typeof EntityManagerType];
25
+ private createQueryBuilderFromOptions;
26
+ find<T extends object, P extends string = never, F extends string = PopulatePath.ALL, E extends string = never>(entityName: EntityName<T>, where: ObjectQuery<T>, options?: FindOptions<T, P, F, E>): Promise<EntityData<T>[]>;
27
+ findOne<T extends object, P extends string = never, F extends string = PopulatePath.ALL, E extends string = never>(entityName: EntityName<T>, where: ObjectQuery<T>, options?: FindOneOptions<T, P, F, E>): Promise<EntityData<T> | null>;
28
+ protected hasToManyJoins<T extends object>(hint: PopulateOptions<T>, meta: EntityMetadata<T>): boolean;
29
+ findVirtual<T extends object>(entityName: EntityName<T>, where: ObjectQuery<T>, options: FindOptions<T, any, any, any>): Promise<EntityData<T>[]>;
30
+ countVirtual<T extends object>(entityName: EntityName<T>, where: ObjectQuery<T>, options: CountOptions<T, any>): Promise<number>;
31
+ protected findFromVirtual<T extends object>(entityName: EntityName<T>, where: ObjectQuery<T>, options: FindOptions<T, any> | CountOptions<T, any>, type: QueryType): Promise<EntityData<T>[] | number>;
32
+ protected streamFromVirtual<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, options: StreamOptions<T, any>): AsyncIterableIterator<EntityData<T>>;
33
+ protected wrapVirtualExpressionInSubquery<T extends object>(meta: EntityMetadata<T>, expression: string, where: FilterQuery<T>, options: FindOptions<T, any>, type: QueryType): Promise<T[] | number>;
34
+ protected wrapVirtualExpressionInSubqueryStream<T extends object>(meta: EntityMetadata<T>, expression: string, where: FilterQuery<T>, options: FindOptions<T, any, any, any>, type: QueryType.SELECT): AsyncIterableIterator<T>;
35
+ /**
36
+ * Virtual entities have no PKs, so to-many populate joins can't be deduplicated.
37
+ * Force balanced strategy to load to-many relations via separate queries.
38
+ */
39
+ private forceBalancedStrategy;
40
+ mapResult<T extends object>(result: EntityData<T>, meta: EntityMetadata<T>, populate?: PopulateOptions<T>[], qb?: AnyQueryBuilder<T>, map?: Dictionary): EntityData<T> | null;
41
+ /**
42
+ * Maps aliased columns from TPT parent tables back to their original field names.
43
+ * TPT parent columns are selected with aliases like `parent_alias__column_name`,
44
+ * and need to be renamed back to `column_name` for the result mapper to work.
45
+ */
46
+ private mapTPTColumns;
47
+ private mapJoinedProps;
48
+ /**
49
+ * Maps a single property from a joined result row into the relation pojo.
50
+ * Handles polymorphic FKs, composite keys, Date parsing, and embedded objects.
51
+ */
52
+ private mapJoinedProp;
53
+ count<T extends object>(entityName: EntityName<T>, where: any, options?: CountOptions<T>): Promise<number>;
54
+ nativeInsert<T extends object>(entityName: EntityName<T>, data: EntityDictionary<T>, options?: NativeInsertUpdateOptions<T>): Promise<QueryResult<T>>;
55
+ nativeInsertMany<T extends object>(entityName: EntityName<T>, data: EntityDictionary<T>[], options?: NativeInsertUpdateManyOptions<T>, transform?: (sql: string) => string): Promise<QueryResult<T>>;
56
+ nativeUpdate<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, data: EntityDictionary<T>, options?: NativeInsertUpdateOptions<T> & UpsertOptions<T>): Promise<QueryResult<T>>;
57
+ nativeUpdateMany<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>[], data: EntityDictionary<T>[], options?: NativeInsertUpdateManyOptions<T> & UpsertManyOptions<T>, transform?: (sql: string, params: any[]) => string): Promise<QueryResult<T>>;
58
+ nativeDelete<T extends object>(entityName: EntityName<T>, where: FilterQuery<T> | string | any, options?: DeleteOptions<T>): Promise<QueryResult<T>>;
59
+ /**
60
+ * Fast comparison for collection snapshots that are represented by PK arrays.
61
+ * Compares scalars via `===` and fallbacks to Utils.equals()` for more complex types like Buffer.
62
+ * Always expects the same length of the arrays, since we only compare PKs of the same entity type.
63
+ */
64
+ private comparePrimaryKeyArrays;
65
+ syncCollections<T extends object, O extends object>(collections: Iterable<Collection<T, O>>, options?: DriverMethodOptions): Promise<void>;
66
+ loadFromPivotTable<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where?: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>, pivotJoin?: boolean): Promise<Dictionary<T[]>>;
67
+ /**
68
+ * Load from a polymorphic M:N pivot table.
69
+ */
70
+ protected loadFromPolymorphicPivotTable<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where?: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>, pivotJoin?: boolean): Promise<Dictionary<T[]>>;
71
+ /**
72
+ * Load from owner side of polymorphic M:N (e.g., Post -> Tags)
73
+ */
74
+ protected loadPolymorphicPivotOwnerSide<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>, pivotJoin?: boolean, inverseProp?: EntityProperty): Promise<Dictionary<T[]>>;
75
+ /**
76
+ * Load from inverse side of polymorphic M:N (e.g., Tag -> Posts)
77
+ * Uses single query with join via virtual relation on pivot.
78
+ */
79
+ protected loadPolymorphicPivotInverseSide<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>): Promise<Dictionary<T[]>>;
80
+ /**
81
+ * Build a map from owner PKs to their related entities from pivot table results.
82
+ */
83
+ private buildPivotResultMap;
84
+ private wrapPopulateFilter;
85
+ private getPivotOrderBy;
86
+ execute<T extends QueryResult | EntityData<AnyEntity> | EntityData<AnyEntity>[] = EntityData<AnyEntity>[]>(query: string | NativeQueryBuilder | RawQueryFragment, params?: any[], method?: 'all' | 'get' | 'run', ctx?: Transaction, loggerContext?: LoggingOptions): Promise<T>;
87
+ stream<T extends object>(entityName: EntityName<T>, where: FilterQuery<T>, options: StreamOptions<T, any, any, any>): AsyncIterableIterator<T>;
88
+ /**
89
+ * 1:1 owner side needs to be marked for population so QB auto-joins the owner id
90
+ */
91
+ protected autoJoinOneToOneOwner<T extends object>(meta: EntityMetadata<T>, populate: PopulateOptions<T>[], fields?: readonly EntityField<T, any>[]): PopulateOptions<T>[];
92
+ /**
93
+ * @internal
94
+ */
95
+ joinedProps<T>(meta: EntityMetadata, populate: readonly PopulateOptions<T>[], options?: {
96
+ strategy?: Options['loadStrategy'];
97
+ }): PopulateOptions<T>[];
98
+ /**
99
+ * @internal
100
+ */
101
+ mergeJoinedResult<T extends object>(rawResults: EntityData<T>[], meta: EntityMetadata<T>, joinedProps: PopulateOptions<T>[]): EntityData<T>[];
102
+ protected shouldHaveColumn<T, U>(meta: EntityMetadata<T>, prop: EntityProperty<U>, populate: readonly PopulateOptions<U>[], fields?: readonly InternalField<U>[], exclude?: readonly InternalField<U>[]): boolean;
103
+ protected getFieldsForJoinedLoad<T extends object>(qb: AnyQueryBuilder<T>, meta: EntityMetadata<T>, options: FieldsForJoinedLoadOptions<T>): InternalField<T>[];
104
+ /**
105
+ * Adds LEFT JOINs and fields for TPT polymorphic loading when populating a relation to a TPT base class.
106
+ * @internal
107
+ */
108
+ protected addTPTPolymorphicJoinsForRelation<T extends object>(qb: AnyQueryBuilder<T>, meta: EntityMetadata<T>, baseAlias: string, fields: InternalField<T>[]): void;
109
+ /**
110
+ * Find the alias for a TPT child table in the query builder.
111
+ * @internal
112
+ */
113
+ protected findTPTChildAlias<T extends object>(qb: AnyQueryBuilder<T>, childMeta: EntityMetadata): string | undefined;
114
+ /**
115
+ * Builds a CASE WHEN expression for TPT discriminator.
116
+ * Determines concrete entity type based on which child table has a non-null PK.
117
+ * @internal
118
+ */
119
+ buildTPTDiscriminatorExpression(meta: EntityMetadata, descendants: EntityMetadata[], aliasMap: Dictionary<string>, baseAlias: string): Raw;
120
+ /**
121
+ * Maps TPT child-specific fields during hydration.
122
+ * When a relation points to a TPT base class, the actual entity might be a child class.
123
+ * This method reads the discriminator to determine the concrete type and maps child-specific fields.
124
+ * @internal
125
+ */
126
+ protected mapTPTChildFields<T extends object>(relationPojo: EntityData<T>, meta: EntityMetadata<T>, relationAlias: string, qb: AnyQueryBuilder<T>, root: EntityData<T>): void;
127
+ /**
128
+ * @internal
129
+ */
130
+ mapPropToFieldNames<T extends object>(qb: AnyQueryBuilder<T>, prop: EntityProperty<T>, tableAlias: string, meta: EntityMetadata<T>, schema?: string, explicitFields?: readonly InternalField<T>[]): InternalField<T>[];
131
+ /** @internal */
132
+ createQueryBuilder<T extends object>(entityName: EntityName<T> | AnyQueryBuilder<T>, ctx?: Transaction, preferredConnectionType?: ConnectionType, convertCustomTypes?: boolean, loggerContext?: LoggingOptions, alias?: string, em?: SqlEntityManager): AnyQueryBuilder<T>;
133
+ protected resolveConnectionType(args: {
134
+ ctx?: Transaction;
135
+ connectionType?: ConnectionType;
136
+ }): ConnectionType;
137
+ protected extractManyToMany<T>(meta: EntityMetadata<T>, data: EntityDictionary<T>): EntityData<T>;
138
+ protected processManyToMany<T extends object>(meta: EntityMetadata<T>, pks: Primary<T>[], collections: EntityData<T>, clear: boolean, options?: DriverMethodOptions): Promise<void>;
139
+ lockPessimistic<T extends object>(entity: T, options: LockOptions): Promise<void>;
140
+ protected buildPopulateWhere<T extends object>(meta: EntityMetadata<T>, joinedProps: PopulateOptions<T>[], options: Pick<FindOptions<any>, 'populateWhere'>): ObjectQuery<T>;
141
+ /**
142
+ * Builds a UNION ALL (or UNION) subquery from `unionWhere` branches and merges it
143
+ * into the main WHERE as `pk IN (branch_1 UNION ALL branch_2 ...)`.
144
+ * Each branch is planned independently by the database, enabling per-table index usage.
145
+ */
146
+ protected applyUnionWhere<T extends object>(meta: EntityMetadata<T>, where: ObjectQuery<T>, options: FindOptions<T, any, any, any> | CountOptions<T> | NativeInsertUpdateOptions<T> | DeleteOptions<T>, forDml?: boolean): Promise<ObjectQuery<T>>;
147
+ protected buildOrderBy<T extends object>(qb: AnyQueryBuilder<T>, meta: EntityMetadata<T>, populate: PopulateOptions<T>[], options: Pick<FindOptions<any>, 'strategy' | 'orderBy' | 'populateOrderBy'>): QueryOrderMap<T>[];
148
+ protected buildPopulateOrderBy<T extends object>(qb: AnyQueryBuilder<T>, meta: EntityMetadata<T>, populateOrderBy: QueryOrderMap<T>[], parentPath: string, explicit: boolean, parentAlias?: string): QueryOrderMap<T>[];
149
+ protected buildJoinedPropsOrderBy<T extends object>(qb: AnyQueryBuilder<T>, meta: EntityMetadata<T>, populate: PopulateOptions<T>[], options?: Pick<FindOptions<any>, 'strategy' | 'orderBy' | 'populateOrderBy'>, parentPath?: string): QueryOrderMap<T>[];
150
+ private buildToManyOrderBy;
151
+ protected normalizeFields<T extends object>(fields: InternalField<T>[], prefix?: string): string[];
152
+ protected processField<T extends object>(meta: EntityMetadata<T>, prop: EntityProperty<T> | undefined, field: string, ret: InternalField<T>[]): void;
153
+ protected buildFields<T extends object>(meta: EntityMetadata<T>, populate: PopulateOptions<T>[], joinedProps: PopulateOptions<T>[], qb: AnyQueryBuilder<T>, alias: string, options: Pick<FindOptions<T, any, any, any>, 'strategy' | 'fields' | 'exclude'>, schema?: string): InternalField<T>[];
410
154
  }
411
155
  interface FieldsForJoinedLoadOptions<T extends object> {
412
- explicitFields?: readonly InternalField<T>[];
413
- exclude?: readonly InternalField<T>[];
414
- populate?: readonly PopulateOptions<T>[];
415
- strategy?: Options['loadStrategy'];
416
- populateWhere?: FindOptions<any>['populateWhere'];
417
- populateFilter?: FindOptions<any>['populateFilter'];
418
- parentTableAlias: string;
419
- parentJoinPath?: string;
420
- count?: boolean;
421
- schema?: string;
156
+ explicitFields?: readonly InternalField<T>[];
157
+ exclude?: readonly InternalField<T>[];
158
+ populate?: readonly PopulateOptions<T>[];
159
+ strategy?: Options['loadStrategy'];
160
+ populateWhere?: FindOptions<any>['populateWhere'];
161
+ populateFilter?: FindOptions<any>['populateFilter'];
162
+ parentTableAlias: string;
163
+ parentJoinPath?: string;
164
+ count?: boolean;
165
+ schema?: string;
422
166
  }
423
167
  export {};