@mikro-orm/knex 6.0.0-dev.267 → 6.0.0-dev.269
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.
- package/AbstractSqlConnection.d.ts +1 -1
- package/AbstractSqlConnection.js +3 -3
- package/AbstractSqlDriver.d.ts +2 -2
- package/AbstractSqlDriver.js +15 -7
- package/SqlEntityManager.d.ts +3 -3
- package/SqlEntityManager.js +4 -4
- package/package.json +2 -2
- package/query/QueryBuilder.d.ts +2 -2
- package/query/QueryBuilder.js +4 -4
|
@@ -40,7 +40,7 @@ export declare abstract class AbstractSqlConnection extends Connection {
|
|
|
40
40
|
}): Promise<Knex.Transaction>;
|
|
41
41
|
commit(ctx: Knex.Transaction, eventBroadcaster?: TransactionEventBroadcaster): Promise<void>;
|
|
42
42
|
rollback(ctx: Knex.Transaction, eventBroadcaster?: TransactionEventBroadcaster): Promise<void>;
|
|
43
|
-
execute<T extends QueryResult | EntityData<AnyEntity> | EntityData<AnyEntity>[] = EntityData<AnyEntity>[]>(queryOrKnex: string | Knex.QueryBuilder | Knex.Raw, params?: unknown[], method?: 'all' | 'get' | 'run', ctx?: Transaction,
|
|
43
|
+
execute<T extends QueryResult | EntityData<AnyEntity> | EntityData<AnyEntity>[] = EntityData<AnyEntity>[]>(queryOrKnex: string | Knex.QueryBuilder | Knex.Raw, params?: unknown[], method?: 'all' | 'get' | 'run', ctx?: Transaction, loggerContext?: LoggingOptions): Promise<T>;
|
|
44
44
|
/**
|
|
45
45
|
* Execute raw SQL queries from file
|
|
46
46
|
*/
|
package/AbstractSqlConnection.js
CHANGED
|
@@ -106,7 +106,7 @@ class AbstractSqlConnection extends core_1.Connection {
|
|
|
106
106
|
await eventBroadcaster?.dispatchEvent(core_1.EventType.afterTransactionRollback, ctx);
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
|
-
async execute(queryOrKnex, params = [], method = 'all', ctx,
|
|
109
|
+
async execute(queryOrKnex, params = [], method = 'all', ctx, loggerContext) {
|
|
110
110
|
await this.ensureConnection();
|
|
111
111
|
if (core_1.Utils.isObject(queryOrKnex)) {
|
|
112
112
|
ctx ??= (queryOrKnex.client.transacting ? queryOrKnex : null);
|
|
@@ -115,7 +115,7 @@ class AbstractSqlConnection extends core_1.Connection {
|
|
|
115
115
|
params = q.bindings;
|
|
116
116
|
}
|
|
117
117
|
const formatted = this.platform.formatQuery(queryOrKnex, params);
|
|
118
|
-
const sql = this.getSql(queryOrKnex, formatted,
|
|
118
|
+
const sql = this.getSql(queryOrKnex, formatted, loggerContext);
|
|
119
119
|
return this.executeQuery(sql, async () => {
|
|
120
120
|
const query = this.getKnex().raw(formatted);
|
|
121
121
|
if (ctx) {
|
|
@@ -123,7 +123,7 @@ class AbstractSqlConnection extends core_1.Connection {
|
|
|
123
123
|
}
|
|
124
124
|
const res = await query;
|
|
125
125
|
return this.transformRawResult(res, method);
|
|
126
|
-
}, { query: queryOrKnex, params, ...
|
|
126
|
+
}, { query: queryOrKnex, params, ...loggerContext });
|
|
127
127
|
}
|
|
128
128
|
/**
|
|
129
129
|
* Execute raw SQL queries from file
|
package/AbstractSqlDriver.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export declare abstract class AbstractSqlDriver<Connection extends AbstractSqlCo
|
|
|
35
35
|
/**
|
|
36
36
|
* 1:1 owner side needs to be marked for population so QB auto-joins the owner id
|
|
37
37
|
*/
|
|
38
|
-
protected autoJoinOneToOneOwner<T extends object, P extends string = never>(meta: EntityMetadata<T>, populate: PopulateOptions<T>[], fields?: readonly EntityField<T,
|
|
38
|
+
protected autoJoinOneToOneOwner<T extends object, P extends string = never>(meta: EntityMetadata<T>, populate: PopulateOptions<T>[], fields?: readonly EntityField<T, any>[]): PopulateOptions<T>[];
|
|
39
39
|
/**
|
|
40
40
|
* @internal
|
|
41
41
|
*/
|
|
@@ -55,7 +55,7 @@ export declare abstract class AbstractSqlDriver<Connection extends AbstractSqlCo
|
|
|
55
55
|
*/
|
|
56
56
|
mapPropToFieldNames<T extends object>(qb: QueryBuilder<T>, prop: EntityProperty<T>, tableAlias?: string): Field<T>[];
|
|
57
57
|
/** @internal */
|
|
58
|
-
createQueryBuilder<T extends object>(entityName: EntityName<T> | QueryBuilder<T>, ctx?: Transaction<Knex.Transaction>, preferredConnectionType?: ConnectionType, convertCustomTypes?: boolean,
|
|
58
|
+
createQueryBuilder<T extends object>(entityName: EntityName<T> | QueryBuilder<T>, ctx?: Transaction<Knex.Transaction>, preferredConnectionType?: ConnectionType, convertCustomTypes?: boolean, loggerContext?: LoggingOptions): QueryBuilder<T>;
|
|
59
59
|
protected resolveConnectionType(args: {
|
|
60
60
|
ctx?: Transaction<Knex.Transaction>;
|
|
61
61
|
connectionType?: ConnectionType;
|
package/AbstractSqlDriver.js
CHANGED
|
@@ -217,9 +217,9 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
|
|
|
217
217
|
}
|
|
218
218
|
return;
|
|
219
219
|
}
|
|
220
|
-
|
|
220
|
+
let relationPojo = {};
|
|
221
221
|
meta2.props
|
|
222
|
-
.filter(prop => prop.persist === false && prop.fieldNames)
|
|
222
|
+
.filter(prop => !ref && prop.persist === false && prop.fieldNames)
|
|
223
223
|
.filter(prop => !prop.lazy || populate.some(p => p.field === prop.name || p.all))
|
|
224
224
|
.forEach(prop => {
|
|
225
225
|
/* istanbul ignore if */
|
|
@@ -231,7 +231,9 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
|
|
|
231
231
|
relationPojo[prop.name] = root[alias];
|
|
232
232
|
}
|
|
233
233
|
});
|
|
234
|
-
const props =
|
|
234
|
+
const props = ref
|
|
235
|
+
? meta2.getPrimaryProps()
|
|
236
|
+
: meta2.props.filter(prop => this.platform.shouldHaveColumn(prop, hint.children || []));
|
|
235
237
|
for (const prop1 of props) {
|
|
236
238
|
if (prop1.fieldNames.length > 1) { // composite keys
|
|
237
239
|
const fk = prop1.fieldNames.map(name => root[`${relationAlias}__${name}`]);
|
|
@@ -251,6 +253,10 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
|
|
|
251
253
|
for (const prop1 of props) {
|
|
252
254
|
prop1.fieldNames.map(name => delete root[`${relationAlias}__${name}`]);
|
|
253
255
|
}
|
|
256
|
+
if (ref) {
|
|
257
|
+
const tmp = Object.values(relationPojo);
|
|
258
|
+
relationPojo = meta2.compositePK ? tmp : tmp[0];
|
|
259
|
+
}
|
|
254
260
|
if ([core_1.ReferenceKind.MANY_TO_MANY, core_1.ReferenceKind.ONE_TO_MANY].includes(prop.kind)) {
|
|
255
261
|
result[prop.name] ??= [];
|
|
256
262
|
result[prop.name].push(relationPojo);
|
|
@@ -764,8 +770,7 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
|
|
|
764
770
|
return false;
|
|
765
771
|
}
|
|
766
772
|
if (ref) {
|
|
767
|
-
|
|
768
|
-
return prop.kind === core_1.ReferenceKind.MANY_TO_MANY;
|
|
773
|
+
return [core_1.ReferenceKind.MANY_TO_MANY, core_1.ReferenceKind.ONE_TO_MANY].includes(prop.kind);
|
|
769
774
|
}
|
|
770
775
|
return ![core_1.ReferenceKind.SCALAR, core_1.ReferenceKind.EMBEDDED].includes(prop.kind);
|
|
771
776
|
});
|
|
@@ -847,6 +852,9 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
|
|
|
847
852
|
if (pivotRefJoin) {
|
|
848
853
|
fields.push(...prop.joinColumns.map(col => qb.helper.mapper(`${tableAlias}.${col}`, qb.type, undefined, `${tableAlias}__${col}`)), ...prop.inverseJoinColumns.map(col => qb.helper.mapper(`${tableAlias}.${col}`, qb.type, undefined, `${tableAlias}__${col}`)));
|
|
849
854
|
}
|
|
855
|
+
if (prop.kind === core_1.ReferenceKind.ONE_TO_MANY && ref) {
|
|
856
|
+
fields.push(...this.getFieldsForJoinedLoad(qb, meta2, prop.referencedColumnNames, hint.children, options, tableAlias, path));
|
|
857
|
+
}
|
|
850
858
|
const childExplicitFields = explicitFields?.filter(f => core_1.Utils.isPlainObject(f)).map(o => o[prop.name])[0] || [];
|
|
851
859
|
explicitFields?.forEach(f => {
|
|
852
860
|
if (typeof f === 'string' && f.startsWith(`${prop.name}.`)) {
|
|
@@ -889,9 +897,9 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
|
|
|
889
897
|
return prop.fieldNames;
|
|
890
898
|
}
|
|
891
899
|
/** @internal */
|
|
892
|
-
createQueryBuilder(entityName, ctx, preferredConnectionType, convertCustomTypes,
|
|
900
|
+
createQueryBuilder(entityName, ctx, preferredConnectionType, convertCustomTypes, loggerContext) {
|
|
893
901
|
const connectionType = this.resolveConnectionType({ ctx, connectionType: preferredConnectionType });
|
|
894
|
-
const qb = new query_1.QueryBuilder(entityName, this.metadata, this, ctx, undefined, connectionType, undefined,
|
|
902
|
+
const qb = new query_1.QueryBuilder(entityName, this.metadata, this, ctx, undefined, connectionType, undefined, loggerContext);
|
|
895
903
|
if (!convertCustomTypes) {
|
|
896
904
|
qb.unsetFlag(core_1.QueryFlag.CONVERT_CUSTOM_TYPES);
|
|
897
905
|
}
|
package/SqlEntityManager.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
|
-
import { EntityManager, type AnyEntity, type ConnectionType, type EntityData, type EntityName, type EntityRepository, type GetRepository, type QueryResult, type FilterQuery } from '@mikro-orm/core';
|
|
2
|
+
import { EntityManager, type AnyEntity, type ConnectionType, type EntityData, type EntityName, type EntityRepository, type GetRepository, type QueryResult, type FilterQuery, type LoggingOptions } from '@mikro-orm/core';
|
|
3
3
|
import type { AbstractSqlDriver } from './AbstractSqlDriver';
|
|
4
4
|
import { QueryBuilder } from './query';
|
|
5
5
|
import type { SqlEntityRepository } from './SqlEntityRepository';
|
|
@@ -10,11 +10,11 @@ export declare class SqlEntityManager<D extends AbstractSqlDriver = AbstractSqlD
|
|
|
10
10
|
/**
|
|
11
11
|
* Creates a QueryBuilder instance
|
|
12
12
|
*/
|
|
13
|
-
createQueryBuilder<T extends object>(entityName: EntityName<T> | QueryBuilder<T>, alias?: string, type?: ConnectionType): QueryBuilder<T>;
|
|
13
|
+
createQueryBuilder<T extends object>(entityName: EntityName<T> | QueryBuilder<T>, alias?: string, type?: ConnectionType, loggerContext?: LoggingOptions): QueryBuilder<T>;
|
|
14
14
|
/**
|
|
15
15
|
* Shortcut for `createQueryBuilder()`
|
|
16
16
|
*/
|
|
17
|
-
qb<T extends object>(entityName: EntityName<T>, alias?: string, type?: ConnectionType): QueryBuilder<T>;
|
|
17
|
+
qb<T extends object>(entityName: EntityName<T>, alias?: string, type?: ConnectionType, loggerContext?: LoggingOptions): QueryBuilder<T>;
|
|
18
18
|
/**
|
|
19
19
|
* Returns configured knex instance.
|
|
20
20
|
*/
|
package/SqlEntityManager.js
CHANGED
|
@@ -10,15 +10,15 @@ class SqlEntityManager extends core_1.EntityManager {
|
|
|
10
10
|
/**
|
|
11
11
|
* Creates a QueryBuilder instance
|
|
12
12
|
*/
|
|
13
|
-
createQueryBuilder(entityName, alias, type) {
|
|
13
|
+
createQueryBuilder(entityName, alias, type, loggerContext) {
|
|
14
14
|
const context = this.getContext();
|
|
15
|
-
return new query_1.QueryBuilder(entityName, this.getMetadata(), this.getDriver(), context.getTransactionContext(), alias, type, context);
|
|
15
|
+
return new query_1.QueryBuilder(entityName, this.getMetadata(), this.getDriver(), context.getTransactionContext(), alias, type, context, loggerContext ?? context.loggerContext);
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Shortcut for `createQueryBuilder()`
|
|
19
19
|
*/
|
|
20
|
-
qb(entityName, alias, type) {
|
|
21
|
-
return this.createQueryBuilder(entityName, alias, type);
|
|
20
|
+
qb(entityName, alias, type, loggerContext) {
|
|
21
|
+
return this.createQueryBuilder(entityName, alias, type, loggerContext);
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* Returns configured knex instance.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikro-orm/knex",
|
|
3
|
-
"version": "6.0.0-dev.
|
|
3
|
+
"version": "6.0.0-dev.269",
|
|
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",
|
|
@@ -66,6 +66,6 @@
|
|
|
66
66
|
"@mikro-orm/core": "^5.9.2"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
|
-
"@mikro-orm/core": "6.0.0-dev.
|
|
69
|
+
"@mikro-orm/core": "6.0.0-dev.269"
|
|
70
70
|
}
|
|
71
71
|
}
|
package/query/QueryBuilder.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
|
|
|
38
38
|
private readonly context?;
|
|
39
39
|
private connectionType?;
|
|
40
40
|
private readonly em?;
|
|
41
|
-
private readonly
|
|
41
|
+
private readonly loggerContext?;
|
|
42
42
|
get mainAlias(): Alias<T>;
|
|
43
43
|
get alias(): string;
|
|
44
44
|
get helper(): QueryBuilderHelper;
|
|
@@ -87,7 +87,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
|
|
|
87
87
|
/**
|
|
88
88
|
* @internal
|
|
89
89
|
*/
|
|
90
|
-
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,
|
|
90
|
+
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, loggerContext?: LoggingOptions | undefined);
|
|
91
91
|
select(fields: Field<T> | Field<T>[], distinct?: boolean): SelectQueryBuilder<T>;
|
|
92
92
|
addSelect(fields: Field<T> | Field<T>[]): SelectQueryBuilder<T>;
|
|
93
93
|
distinct(): SelectQueryBuilder<T>;
|
package/query/QueryBuilder.js
CHANGED
|
@@ -31,7 +31,7 @@ class QueryBuilder {
|
|
|
31
31
|
context;
|
|
32
32
|
connectionType;
|
|
33
33
|
em;
|
|
34
|
-
|
|
34
|
+
loggerContext;
|
|
35
35
|
get mainAlias() {
|
|
36
36
|
this.ensureFromClause();
|
|
37
37
|
return this._mainAlias;
|
|
@@ -88,13 +88,13 @@ class QueryBuilder {
|
|
|
88
88
|
/**
|
|
89
89
|
* @internal
|
|
90
90
|
*/
|
|
91
|
-
constructor(entityName, metadata, driver, context, alias, connectionType, em,
|
|
91
|
+
constructor(entityName, metadata, driver, context, alias, connectionType, em, loggerContext) {
|
|
92
92
|
this.metadata = metadata;
|
|
93
93
|
this.driver = driver;
|
|
94
94
|
this.context = context;
|
|
95
95
|
this.connectionType = connectionType;
|
|
96
96
|
this.em = em;
|
|
97
|
-
this.
|
|
97
|
+
this.loggerContext = loggerContext;
|
|
98
98
|
this.platform = this.driver.getPlatform();
|
|
99
99
|
this.knex = this.driver.getConnection(this.connectionType).getKnex();
|
|
100
100
|
if (alias) {
|
|
@@ -587,7 +587,7 @@ class QueryBuilder {
|
|
|
587
587
|
}
|
|
588
588
|
const write = method === 'run' || !this.platform.getConfig().get('preferReadReplicas');
|
|
589
589
|
const type = this.connectionType || (write ? 'write' : 'read');
|
|
590
|
-
const res = await this.driver.getConnection(type).execute(query.sql, query.bindings, method, this.context, this.
|
|
590
|
+
const res = await this.driver.getConnection(type).execute(query.sql, query.bindings, method, this.context, this.loggerContext);
|
|
591
591
|
const meta = this.mainAlias.metadata;
|
|
592
592
|
if (!options.mapResults || !meta) {
|
|
593
593
|
await this.em?.storeCache(this._cache, cached, res);
|