@mikro-orm/knex 6.0.0-dev.10 → 6.0.0-dev.11
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/AbstractSqlDriver.d.ts +6 -6
- package/AbstractSqlDriver.js +8 -0
- package/package.json +2 -2
- package/query/QueryBuilder.d.ts +4 -1
- package/query/QueryBuilder.js +23 -0
package/AbstractSqlDriver.d.ts
CHANGED
|
@@ -6,13 +6,13 @@ import type { AbstractSqlPlatform } from './AbstractSqlPlatform';
|
|
|
6
6
|
import { QueryBuilder, QueryType } from './query';
|
|
7
7
|
import { SqlEntityManager } from './SqlEntityManager';
|
|
8
8
|
import type { Field } from './typings';
|
|
9
|
-
export declare abstract class AbstractSqlDriver<
|
|
9
|
+
export declare abstract class AbstractSqlDriver<Connection extends AbstractSqlConnection = AbstractSqlConnection, Platform extends AbstractSqlPlatform = AbstractSqlPlatform> extends DatabaseDriver<Connection> {
|
|
10
10
|
[EntityManagerType]: SqlEntityManager<this>;
|
|
11
|
-
protected readonly connection:
|
|
12
|
-
protected readonly replicas:
|
|
13
|
-
protected readonly platform:
|
|
14
|
-
protected constructor(config: Configuration, platform:
|
|
15
|
-
getPlatform():
|
|
11
|
+
protected readonly connection: Connection;
|
|
12
|
+
protected readonly replicas: Connection[];
|
|
13
|
+
protected readonly platform: Platform;
|
|
14
|
+
protected constructor(config: Configuration, platform: Platform, connection: Constructor<Connection>, connector: string[]);
|
|
15
|
+
getPlatform(): Platform;
|
|
16
16
|
createEntityManager<D extends IDatabaseDriver = IDatabaseDriver>(useContext?: boolean): D[typeof EntityManagerType];
|
|
17
17
|
find<T extends object, P extends string = never>(entityName: string, where: FilterQuery<T>, options?: FindOptions<T, P>): Promise<EntityData<T>[]>;
|
|
18
18
|
findOne<T extends object, P extends string = never>(entityName: string, where: FilterQuery<T>, options?: FindOneOptions<T, P>): Promise<EntityData<T> | null>;
|
package/AbstractSqlDriver.js
CHANGED
|
@@ -334,6 +334,14 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
|
|
|
334
334
|
options.processCollections ?? (options.processCollections = true);
|
|
335
335
|
options.convertCustomTypes ?? (options.convertCustomTypes = true);
|
|
336
336
|
const meta = this.metadata.get(entityName);
|
|
337
|
+
if (options.upsert) {
|
|
338
|
+
const uniqueFields = core_1.Utils.isPlainObject(where[0]) ? Object.keys(where[0]) : meta.primaryKeys;
|
|
339
|
+
const qb = this.createQueryBuilder(entityName, options.ctx, 'write', options.convertCustomTypes).withSchema(this.getSchemaName(meta, options));
|
|
340
|
+
qb.insert(data)
|
|
341
|
+
.onConflict(uniqueFields.map(p => meta?.properties[p]?.fieldNames[0] ?? p))
|
|
342
|
+
.merge(Object.keys(data[0]).filter(f => !uniqueFields.includes(f)));
|
|
343
|
+
return qb.execute('run', false);
|
|
344
|
+
}
|
|
337
345
|
const collections = options.processCollections ? data.map(d => this.extractManyToMany(entityName, d)) : [];
|
|
338
346
|
const keys = new Set();
|
|
339
347
|
data.forEach(row => Object.keys(row).forEach(k => keys.add(k)));
|
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.11",
|
|
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.5.3"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
|
-
"@mikro-orm/core": "~6.0.0-dev.
|
|
69
|
+
"@mikro-orm/core": "~6.0.0-dev.11"
|
|
70
70
|
}
|
|
71
71
|
}
|
package/query/QueryBuilder.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { inspect } from 'util';
|
|
1
3
|
import type { Knex } from 'knex';
|
|
2
4
|
import type { AnyEntity, ConnectionType, Dictionary, EntityData, EntityName, EntityProperty, FlushMode, GroupOperator, MetadataStorage, ObjectQuery, PopulateOptions, QBFilterQuery, QBQueryOrderMap, QueryResult, RequiredEntityData } from '@mikro-orm/core';
|
|
3
5
|
import { LockMode, PopulateHint, QueryFlag } from '@mikro-orm/core';
|
|
@@ -75,7 +77,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
|
|
|
75
77
|
/**
|
|
76
78
|
* @internal
|
|
77
79
|
*/
|
|
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);
|
|
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);
|
|
79
81
|
select(fields: Field<T> | Field<T>[], distinct?: boolean): SelectQueryBuilder<T>;
|
|
80
82
|
addSelect(fields: Field<T> | Field<T>[]): SelectQueryBuilder<T>;
|
|
81
83
|
distinct(): SelectQueryBuilder<T>;
|
|
@@ -207,6 +209,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
|
|
|
207
209
|
private createQueryBuilderHelper;
|
|
208
210
|
private ensureFromClause;
|
|
209
211
|
private ensureNotFinalized;
|
|
212
|
+
[inspect.custom](depth: number): string;
|
|
210
213
|
}
|
|
211
214
|
export interface RunQueryBuilder<T extends object> extends Omit<QueryBuilder<T>, 'getResult' | 'getSingleResult' | 'getResultList' | 'where'> {
|
|
212
215
|
where(cond: QBFilterQuery<T> | string, params?: keyof typeof GroupOperator | any[], operator?: keyof typeof GroupOperator): this;
|
package/query/QueryBuilder.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.QueryBuilder = void 0;
|
|
4
|
+
const util_1 = require("util");
|
|
4
5
|
const core_1 = require("@mikro-orm/core");
|
|
5
6
|
const enums_1 = require("./enums");
|
|
6
7
|
const QueryBuilderHelper_1 = require("./QueryBuilderHelper");
|
|
@@ -885,5 +886,27 @@ class QueryBuilder {
|
|
|
885
886
|
throw new Error('This QueryBuilder instance is already finalized, clone it first if you want to modify it.');
|
|
886
887
|
}
|
|
887
888
|
}
|
|
889
|
+
/* istanbul ignore next */
|
|
890
|
+
[util_1.inspect.custom](depth) {
|
|
891
|
+
const object = { ...this };
|
|
892
|
+
const hidden = ['metadata', 'driver', 'context', 'platform', 'knex', 'type'];
|
|
893
|
+
Object.keys(object).filter(k => k.startsWith('_')).forEach(k => delete object[k]);
|
|
894
|
+
Object.keys(object).filter(k => object[k] == null).forEach(k => delete object[k]);
|
|
895
|
+
hidden.forEach(k => delete object[k]);
|
|
896
|
+
let prefix = this.type ? this.type.substring(0, 1) + this.type.toLowerCase().substring(1) : '';
|
|
897
|
+
if (this._data) {
|
|
898
|
+
object.data = this._data;
|
|
899
|
+
}
|
|
900
|
+
if (!core_1.Utils.isEmpty(this._cond)) {
|
|
901
|
+
object.where = this._cond;
|
|
902
|
+
}
|
|
903
|
+
if (this._onConflict?.[0]) {
|
|
904
|
+
prefix = 'Upsert';
|
|
905
|
+
object.onConflict = this._onConflict[0];
|
|
906
|
+
}
|
|
907
|
+
const name = this._mainAlias ? `${prefix}QueryBuilder<${this._mainAlias?.entityName}>` : 'QueryBuilder';
|
|
908
|
+
const ret = (0, util_1.inspect)(object, { depth });
|
|
909
|
+
return ret === '[Object]' ? `[${name}]` : name + ' ' + ret;
|
|
910
|
+
}
|
|
888
911
|
}
|
|
889
912
|
exports.QueryBuilder = QueryBuilder;
|