@mikro-orm/knex 6.0.0-dev.4 → 6.0.0-dev.40
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/{dist/AbstractSqlConnection.d.ts → AbstractSqlConnection.d.ts} +0 -0
- package/{dist/AbstractSqlConnection.js → AbstractSqlConnection.js} +6 -1
- package/AbstractSqlDriver.d.ts +66 -0
- package/{dist/AbstractSqlDriver.js → AbstractSqlDriver.js} +268 -93
- package/{dist/AbstractSqlPlatform.d.ts → AbstractSqlPlatform.d.ts} +7 -7
- package/{dist/AbstractSqlPlatform.js → AbstractSqlPlatform.js} +12 -14
- package/{dist/MonkeyPatchable.d.ts → MonkeyPatchable.d.ts} +0 -0
- package/{dist/MonkeyPatchable.js → MonkeyPatchable.js} +0 -0
- package/{dist/README.md → README.md} +2 -2
- package/{dist/SqlEntityManager.d.ts → SqlEntityManager.d.ts} +5 -5
- package/{dist/SqlEntityManager.js → SqlEntityManager.js} +1 -2
- package/{dist/SqlEntityRepository.d.ts → SqlEntityRepository.d.ts} +3 -4
- package/{dist/SqlEntityRepository.js → SqlEntityRepository.js} +1 -2
- package/{dist/index.d.ts → index.d.ts} +1 -0
- package/{dist/index.js → index.js} +6 -1
- package/index.mjs +194 -0
- package/package.json +18 -47
- package/query/ArrayCriteriaNode.d.ts +9 -0
- package/{dist/query → query}/ArrayCriteriaNode.js +0 -0
- package/{dist/query → query}/CriteriaNode.d.ts +8 -8
- package/{dist/query → query}/CriteriaNode.js +15 -12
- package/query/CriteriaNodeFactory.d.ts +12 -0
- package/{dist/query → query}/CriteriaNodeFactory.js +10 -10
- package/{dist/query → query}/ObjectCriteriaNode.d.ts +3 -3
- package/{dist/query → query}/ObjectCriteriaNode.js +19 -6
- package/{dist/query → query}/QueryBuilder.d.ts +66 -24
- package/{dist/query → query}/QueryBuilder.js +381 -94
- package/{dist/query → query}/QueryBuilderHelper.d.ts +19 -11
- package/{dist/query → query}/QueryBuilderHelper.js +227 -116
- package/{dist/query → query}/ScalarCriteriaNode.d.ts +2 -2
- package/{dist/query → query}/ScalarCriteriaNode.js +6 -6
- package/{dist/query → query}/enums.d.ts +0 -0
- package/{dist/query → query}/enums.js +0 -0
- package/{dist/query → query}/index.d.ts +0 -0
- package/{dist/query → query}/index.js +5 -1
- package/{dist/schema → schema}/DatabaseSchema.d.ts +1 -1
- package/{dist/schema → schema}/DatabaseSchema.js +11 -19
- package/{dist/schema → schema}/DatabaseTable.d.ts +9 -9
- package/{dist/schema → schema}/DatabaseTable.js +22 -22
- package/{dist/schema → schema}/SchemaComparator.d.ts +7 -5
- package/{dist/schema → schema}/SchemaComparator.js +60 -10
- package/{dist/schema → schema}/SchemaHelper.d.ts +15 -10
- package/{dist/schema → schema}/SchemaHelper.js +46 -8
- package/{dist/schema/SchemaGenerator.d.ts → schema/SqlSchemaGenerator.d.ts} +10 -12
- package/{dist/schema/SchemaGenerator.js → schema/SqlSchemaGenerator.js} +89 -45
- package/{dist/schema → schema}/index.d.ts +1 -1
- package/{dist/schema → schema}/index.js +6 -2
- package/{dist/typings.d.ts → typings.d.ts} +21 -16
- package/{dist/typings.js → typings.js} +0 -0
- package/CHANGELOG.md +0 -661
- package/dist/AbstractSqlDriver.d.ts +0 -55
- package/dist/LICENSE +0 -21
- package/dist/index.mjs +0 -26
- package/dist/package.json +0 -99
- package/dist/query/ArrayCriteriaNode.d.ts +0 -9
- package/dist/query/CriteriaNodeFactory.d.ts +0 -12
|
@@ -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]?.
|
|
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,
|
|
51
|
-
const prop = meta?.properties[
|
|
52
|
-
if (prop?.
|
|
53
|
-
const childEntity = prop && prop.
|
|
54
|
-
return this.createNode(metadata, childEntity, payload[
|
|
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[
|
|
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[
|
|
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[
|
|
64
|
+
oo[prop.embeddedProps[k].name] = payload[key][k];
|
|
65
65
|
return oo;
|
|
66
66
|
}, {});
|
|
67
|
-
return this.createNode(metadata, entityName, map, node,
|
|
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
|
|
8
|
-
willAutoJoin
|
|
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;
|
|
@@ -22,7 +22,8 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
22
22
|
const payload = childNode.process(qb, this.prop ? alias : ownerAlias);
|
|
23
23
|
const operator = core_1.Utils.isOperator(field);
|
|
24
24
|
const customExpression = ObjectCriteriaNode.isCustomExpression(field);
|
|
25
|
-
|
|
25
|
+
// we need to keep the prefixing for formulas otherwise we would lose aliasing context when nesting inside group operators
|
|
26
|
+
const virtual = childNode.prop?.persist === false && !childNode.prop?.formula;
|
|
26
27
|
// if key is missing, we are inside group operator and we need to prefix with alias
|
|
27
28
|
const primaryKey = this.key && this.metadata.find(this.entityName).primaryKeys.includes(field);
|
|
28
29
|
if (childNode.shouldInline(payload)) {
|
|
@@ -59,7 +60,7 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
59
60
|
const customExpression = ObjectCriteriaNode.isCustomExpression(this.key);
|
|
60
61
|
const scalar = core_1.Utils.isPrimaryKey(payload) || payload instanceof RegExp || payload instanceof Date || customExpression;
|
|
61
62
|
const operator = core_1.Utils.isObject(payload) && Object.keys(payload).every(k => core_1.Utils.isOperator(k, false));
|
|
62
|
-
return !!this.prop && this.prop.
|
|
63
|
+
return !!this.prop && this.prop.kind !== core_1.ReferenceKind.SCALAR && !scalar && !operator;
|
|
63
64
|
}
|
|
64
65
|
inlineChildPayload(o, payload, field, alias, childAlias) {
|
|
65
66
|
const prop = this.metadata.find(this.entityName).properties[field];
|
|
@@ -78,10 +79,22 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
78
79
|
delete o[key];
|
|
79
80
|
o.$and = $and;
|
|
80
81
|
}
|
|
82
|
+
else if (core_1.Utils.isOperator(k) && Array.isArray(payload[k])) {
|
|
83
|
+
o[key] = payload[k].map((child) => Object.keys(child).reduce((o, childKey) => {
|
|
84
|
+
const key = (this.isPrefixed(childKey) || core_1.Utils.isOperator(childKey))
|
|
85
|
+
? childKey
|
|
86
|
+
: `${childAlias}.${childKey}`;
|
|
87
|
+
o[key] = child[childKey];
|
|
88
|
+
return o;
|
|
89
|
+
}, {}));
|
|
90
|
+
}
|
|
81
91
|
else {
|
|
82
92
|
o[key] = payload[k];
|
|
83
93
|
}
|
|
84
94
|
}
|
|
95
|
+
else if (ObjectCriteriaNode.isCustomExpression(k)) {
|
|
96
|
+
o[k] = payload[k];
|
|
97
|
+
}
|
|
85
98
|
else {
|
|
86
99
|
o[`${childAlias}.${k}`] = payload[k];
|
|
87
100
|
}
|
|
@@ -91,15 +104,15 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
91
104
|
if (!this.prop || !this.parent) {
|
|
92
105
|
return false;
|
|
93
106
|
}
|
|
94
|
-
const embeddable = this.prop.
|
|
95
|
-
const knownKey = [core_1.
|
|
107
|
+
const embeddable = this.prop.kind === core_1.ReferenceKind.EMBEDDED;
|
|
108
|
+
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);
|
|
96
109
|
const operatorKeys = knownKey && Object.keys(this.payload).every(key => core_1.Utils.isOperator(key, false));
|
|
97
110
|
const primaryKeys = knownKey && Object.keys(this.payload).every(key => {
|
|
98
111
|
const meta = this.metadata.find(this.entityName);
|
|
99
112
|
if (!meta.primaryKeys.includes(key)) {
|
|
100
113
|
return false;
|
|
101
114
|
}
|
|
102
|
-
if (!core_1.Utils.isPlainObject(this.payload[key].payload) || ![core_1.
|
|
115
|
+
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)) {
|
|
103
116
|
return true;
|
|
104
117
|
}
|
|
105
118
|
return Object.keys(this.payload[key].payload).every(k => meta.properties[key].targetMeta.primaryKeys.includes(k));
|
|
@@ -112,7 +125,7 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
112
125
|
const scalar = core_1.Utils.isPrimaryKey(this.payload) || this.payload instanceof RegExp || this.payload instanceof Date || customExpression;
|
|
113
126
|
const operator = core_1.Utils.isPlainObject(this.payload) && Object.keys(this.payload).every(k => core_1.Utils.isOperator(k, false));
|
|
114
127
|
const field = `${alias}.${this.prop.name}`;
|
|
115
|
-
if (this.prop.
|
|
128
|
+
if (this.prop.kind === core_1.ReferenceKind.MANY_TO_MANY && (scalar || operator)) {
|
|
116
129
|
qb.join(field, nestedAlias, undefined, 'pivotJoin', this.getPath());
|
|
117
130
|
}
|
|
118
131
|
else {
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { inspect } from 'util';
|
|
1
3
|
import type { Knex } from 'knex';
|
|
2
|
-
import type { AnyEntity, Dictionary, EntityData, EntityProperty,
|
|
3
|
-
import { LockMode, QueryFlag } from '@mikro-orm/core';
|
|
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
6
|
import { QueryType } from './enums';
|
|
5
7
|
import type { AbstractSqlDriver } from '../AbstractSqlDriver';
|
|
8
|
+
import { QueryBuilderHelper } from './QueryBuilderHelper';
|
|
9
|
+
import type { Alias } from './QueryBuilderHelper';
|
|
6
10
|
import type { SqlEntityManager } from '../SqlEntityManager';
|
|
7
11
|
import type { Field } from '../typings';
|
|
8
12
|
/**
|
|
@@ -24,27 +28,30 @@ import type { Field } from '../typings';
|
|
|
24
28
|
* const publisher = await qb.getSingleResult();
|
|
25
29
|
* ```
|
|
26
30
|
*/
|
|
27
|
-
export declare class QueryBuilder<T extends
|
|
28
|
-
private readonly entityName;
|
|
31
|
+
export declare class QueryBuilder<T extends object = AnyEntity> {
|
|
29
32
|
private readonly metadata;
|
|
30
33
|
private readonly driver;
|
|
31
34
|
private readonly context?;
|
|
32
35
|
private connectionType?;
|
|
33
36
|
private readonly em?;
|
|
34
|
-
|
|
37
|
+
get mainAlias(): Alias;
|
|
38
|
+
get alias(): string;
|
|
39
|
+
get helper(): QueryBuilderHelper;
|
|
35
40
|
/** @internal */
|
|
36
|
-
type
|
|
41
|
+
type?: QueryType;
|
|
37
42
|
/** @internal */
|
|
38
43
|
_fields?: Field<T>[];
|
|
39
44
|
/** @internal */
|
|
40
45
|
_populate: PopulateOptions<T>[];
|
|
41
46
|
/** @internal */
|
|
47
|
+
_populateWhere?: ObjectQuery<T> | PopulateHint;
|
|
48
|
+
/** @internal */
|
|
42
49
|
_populateMap: Dictionary<string>;
|
|
43
50
|
private aliasCounter;
|
|
44
51
|
private flags;
|
|
45
52
|
private finalized;
|
|
46
53
|
private _joins;
|
|
47
|
-
private
|
|
54
|
+
private _explicitAlias;
|
|
48
55
|
private _schema?;
|
|
49
56
|
private _cond;
|
|
50
57
|
private _data;
|
|
@@ -54,6 +61,7 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
54
61
|
private _onConflict?;
|
|
55
62
|
private _limit?;
|
|
56
63
|
private _offset?;
|
|
64
|
+
private _distinctOn?;
|
|
57
65
|
private _joinedProps;
|
|
58
66
|
private _cache?;
|
|
59
67
|
private _indexHint?;
|
|
@@ -61,16 +69,20 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
61
69
|
private lockMode?;
|
|
62
70
|
private lockTables?;
|
|
63
71
|
private subQueries;
|
|
64
|
-
private
|
|
72
|
+
private _mainAlias?;
|
|
73
|
+
private _aliases;
|
|
74
|
+
private _helper?;
|
|
65
75
|
private readonly platform;
|
|
66
76
|
private readonly knex;
|
|
67
|
-
private readonly helper;
|
|
68
77
|
/**
|
|
69
78
|
* @internal
|
|
70
79
|
*/
|
|
71
|
-
constructor(entityName:
|
|
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);
|
|
72
81
|
select(fields: Field<T> | Field<T>[], distinct?: boolean): SelectQueryBuilder<T>;
|
|
73
82
|
addSelect(fields: Field<T> | Field<T>[]): SelectQueryBuilder<T>;
|
|
83
|
+
distinct(): SelectQueryBuilder<T>;
|
|
84
|
+
/** postgres only */
|
|
85
|
+
distinctOn(fields: string | string[]): SelectQueryBuilder<T>;
|
|
74
86
|
insert(data: RequiredEntityData<T> | RequiredEntityData<T>[]): InsertQueryBuilder<T>;
|
|
75
87
|
update(data: EntityData<T>): UpdateQueryBuilder<T>;
|
|
76
88
|
delete(cond?: QBFilterQuery): DeleteQueryBuilder<T>;
|
|
@@ -78,9 +90,9 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
78
90
|
count(field?: string | string[], distinct?: boolean): CountQueryBuilder<T>;
|
|
79
91
|
join(field: string, alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string): this;
|
|
80
92
|
leftJoin(field: string, alias: string, cond?: QBFilterQuery): this;
|
|
81
|
-
joinAndSelect(field: string, alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string):
|
|
82
|
-
leftJoinAndSelect(field: string, alias: string, cond?: QBFilterQuery):
|
|
83
|
-
protected getFieldsForJoinedLoad
|
|
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(prop: EntityProperty<T>, alias: string): Field<T>[];
|
|
84
96
|
withSubQuery(subQuery: Knex.QueryBuilder, alias: string): this;
|
|
85
97
|
where(cond: QBFilterQuery<T>, operator?: keyof typeof GroupOperator): this;
|
|
86
98
|
where(cond: string, params?: any[], operator?: keyof typeof GroupOperator): this;
|
|
@@ -88,16 +100,16 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
88
100
|
andWhere(cond: string, params?: any[]): this;
|
|
89
101
|
orWhere(cond: QBFilterQuery<T>): this;
|
|
90
102
|
orWhere(cond: string, params?: any[]): this;
|
|
91
|
-
orderBy(orderBy:
|
|
103
|
+
orderBy(orderBy: QBQueryOrderMap<T> | QBQueryOrderMap<T>[]): this;
|
|
92
104
|
groupBy(fields: (string | keyof T) | readonly (string | keyof T)[]): this;
|
|
93
105
|
having(cond?: QBFilterQuery | string, params?: any[]): this;
|
|
94
|
-
onConflict(fields?:
|
|
106
|
+
onConflict(fields?: Field<T> | Field<T>[]): this;
|
|
95
107
|
ignore(): this;
|
|
96
108
|
merge(data?: EntityData<T> | Field<T>[]): this;
|
|
97
109
|
/**
|
|
98
110
|
* @internal
|
|
99
111
|
*/
|
|
100
|
-
populate(populate: PopulateOptions<T>[]): this;
|
|
112
|
+
populate(populate: PopulateOptions<T>[], populateWhere?: ObjectQuery<T> | PopulateHint): this;
|
|
101
113
|
/**
|
|
102
114
|
* @internal
|
|
103
115
|
*/
|
|
@@ -117,6 +129,12 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
117
129
|
* Adds index hint to the FROM clause.
|
|
118
130
|
*/
|
|
119
131
|
indexHint(sql: string): this;
|
|
132
|
+
/**
|
|
133
|
+
* Specifies FROM which entity's table select/update/delete will be executed, removing all previously set FROM-s.
|
|
134
|
+
* Allows setting a main string alias of the selection data.
|
|
135
|
+
*/
|
|
136
|
+
from<T extends AnyEntity<T> = AnyEntity>(target: QueryBuilder<T>, aliasName?: string): QueryBuilder<T>;
|
|
137
|
+
from<T extends AnyEntity<T> = AnyEntity>(target: EntityName<T>): QueryBuilder<T>;
|
|
120
138
|
getKnexQuery(): Knex.QueryBuilder;
|
|
121
139
|
/**
|
|
122
140
|
* Returns the query with parameters as wildcards.
|
|
@@ -130,8 +148,18 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
130
148
|
* Returns raw interpolated query string with all the parameters inlined.
|
|
131
149
|
*/
|
|
132
150
|
getFormattedQuery(): string;
|
|
151
|
+
/**
|
|
152
|
+
* @internal
|
|
153
|
+
*/
|
|
133
154
|
getAliasForJoinPath(path?: string): string | undefined;
|
|
155
|
+
/**
|
|
156
|
+
* @internal
|
|
157
|
+
*/
|
|
134
158
|
getNextAlias(entityName?: string): string;
|
|
159
|
+
/**
|
|
160
|
+
* @internal
|
|
161
|
+
*/
|
|
162
|
+
getAliasMap(): Dictionary<string>;
|
|
135
163
|
/**
|
|
136
164
|
* Executes this QB and returns the raw results, mapped to the property names (unless disabled via last parameter).
|
|
137
165
|
* Use `method` to specify what kind of result you want to get (array/single/meta).
|
|
@@ -153,11 +181,14 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
153
181
|
* Executes count query (without offset and limit), returning total count of results
|
|
154
182
|
*/
|
|
155
183
|
getCount(field?: string | string[], distinct?: boolean): Promise<number>;
|
|
184
|
+
/**
|
|
185
|
+
* Executes the query, returning both array of results and total count query (without offset and limit).
|
|
186
|
+
*/
|
|
187
|
+
getResultAndCount(): Promise<[T[], number]>;
|
|
156
188
|
/**
|
|
157
189
|
* Provides promise-like interface so we can await the QB instance.
|
|
158
190
|
*/
|
|
159
191
|
then<TResult1 = any, TResult2 = never>(onfulfilled?: ((value: any) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<T[] | number | QueryResult<T>>;
|
|
160
|
-
private getInnerPromise;
|
|
161
192
|
/**
|
|
162
193
|
* Returns knex instance with sub-query aliased with given alias.
|
|
163
194
|
* You can provide `EntityName.propName` as alias, then the field name will be used based on the metadata
|
|
@@ -170,23 +201,34 @@ export declare class QueryBuilder<T extends AnyEntity<T> = AnyEntity> {
|
|
|
170
201
|
private init;
|
|
171
202
|
private getQueryBase;
|
|
172
203
|
private finalize;
|
|
204
|
+
private processPopulateWhere;
|
|
205
|
+
private hasToManyJoins;
|
|
173
206
|
private wrapPaginateSubQuery;
|
|
174
207
|
private wrapModifySubQuery;
|
|
175
208
|
private autoJoinPivotTable;
|
|
209
|
+
private getSchema;
|
|
210
|
+
private createAlias;
|
|
211
|
+
private createMainAlias;
|
|
212
|
+
private fromSubQuery;
|
|
213
|
+
private fromEntityName;
|
|
214
|
+
private createQueryBuilderHelper;
|
|
215
|
+
private ensureFromClause;
|
|
216
|
+
private ensureNotFinalized;
|
|
217
|
+
[inspect.custom](depth: number): string;
|
|
176
218
|
}
|
|
177
|
-
export interface RunQueryBuilder<T> extends Omit<QueryBuilder<T>, 'getResult' | 'getSingleResult' | 'getResultList' | 'where'> {
|
|
219
|
+
export interface RunQueryBuilder<T extends object> extends Omit<QueryBuilder<T>, 'getResult' | 'getSingleResult' | 'getResultList' | 'where'> {
|
|
178
220
|
where(cond: QBFilterQuery<T> | string, params?: keyof typeof GroupOperator | any[], operator?: keyof typeof GroupOperator): this;
|
|
179
221
|
execute<U = QueryResult<T>>(method?: 'all' | 'get' | 'run', mapResults?: boolean): Promise<U>;
|
|
180
222
|
then<TResult1 = QueryResult<T>, TResult2 = never>(onfulfilled?: ((value: QueryResult<T>) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<QueryResult<T>>;
|
|
181
223
|
}
|
|
182
|
-
export interface SelectQueryBuilder<T> extends QueryBuilder<T> {
|
|
224
|
+
export interface SelectQueryBuilder<T extends object> extends QueryBuilder<T> {
|
|
183
225
|
execute<U = T[]>(method?: 'all' | 'get' | 'run', mapResults?: boolean): Promise<U>;
|
|
184
226
|
execute<U = T[]>(method: 'all', mapResults?: boolean): Promise<U>;
|
|
185
227
|
execute<U = T>(method: 'get', mapResults?: boolean): Promise<U>;
|
|
186
228
|
execute<U = QueryResult<T>>(method: 'run', mapResults?: boolean): Promise<U>;
|
|
187
229
|
then<TResult1 = T[], TResult2 = never>(onfulfilled?: ((value: T[]) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<T[]>;
|
|
188
230
|
}
|
|
189
|
-
export interface CountQueryBuilder<T> extends QueryBuilder<T> {
|
|
231
|
+
export interface CountQueryBuilder<T extends object> extends QueryBuilder<T> {
|
|
190
232
|
execute<U = {
|
|
191
233
|
count: number;
|
|
192
234
|
}[]>(method?: 'all' | 'get' | 'run', mapResults?: boolean): Promise<U>;
|
|
@@ -201,11 +243,11 @@ export interface CountQueryBuilder<T> extends QueryBuilder<T> {
|
|
|
201
243
|
}>>(method: 'run', mapResults?: boolean): Promise<U>;
|
|
202
244
|
then<TResult1 = number, TResult2 = never>(onfulfilled?: ((value: number) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<number>;
|
|
203
245
|
}
|
|
204
|
-
export interface InsertQueryBuilder<T> extends RunQueryBuilder<T> {
|
|
246
|
+
export interface InsertQueryBuilder<T extends object> extends RunQueryBuilder<T> {
|
|
205
247
|
}
|
|
206
|
-
export interface UpdateQueryBuilder<T> extends RunQueryBuilder<T> {
|
|
248
|
+
export interface UpdateQueryBuilder<T extends object> extends RunQueryBuilder<T> {
|
|
207
249
|
}
|
|
208
|
-
export interface DeleteQueryBuilder<T> extends RunQueryBuilder<T> {
|
|
250
|
+
export interface DeleteQueryBuilder<T extends object> extends RunQueryBuilder<T> {
|
|
209
251
|
}
|
|
210
|
-
export interface TruncateQueryBuilder<T> extends RunQueryBuilder<T> {
|
|
252
|
+
export interface TruncateQueryBuilder<T extends object> extends RunQueryBuilder<T> {
|
|
211
253
|
}
|