@mikro-orm/knex 6.6.8-dev.5 → 6.6.8-dev.6
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/package.json +2 -2
- package/query/ObjectCriteriaNode.js +23 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikro-orm/knex",
|
|
3
|
-
"version": "6.6.8-dev.
|
|
3
|
+
"version": "6.6.8-dev.6",
|
|
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,7 +66,7 @@
|
|
|
66
66
|
"@mikro-orm/core": "^6.6.7"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
|
-
"@mikro-orm/core": "6.6.8-dev.
|
|
69
|
+
"@mikro-orm/core": "6.6.8-dev.6",
|
|
70
70
|
"better-sqlite3": "*",
|
|
71
71
|
"libsql": "*",
|
|
72
72
|
"mariadb": "*"
|
|
@@ -137,7 +137,13 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
137
137
|
shouldInline(payload) {
|
|
138
138
|
const customExpression = core_1.RawQueryFragment.isKnownFragment(this.key);
|
|
139
139
|
const scalar = core_1.Utils.isPrimaryKey(payload) || payload instanceof RegExp || payload instanceof Date || customExpression;
|
|
140
|
-
const operator = core_1.Utils.isObject(payload) && Object.keys(payload).every(k =>
|
|
140
|
+
const operator = core_1.Utils.isObject(payload) && Object.keys(payload).every(k => {
|
|
141
|
+
if (k === '$not' && core_1.Utils.isPlainObject(payload[k])) {
|
|
142
|
+
// $not wrapping non-operator conditions (entity props) should be inlined
|
|
143
|
+
return Object.keys(payload[k]).every(ik => core_1.Utils.isOperator(ik, false));
|
|
144
|
+
}
|
|
145
|
+
return core_1.Utils.isOperator(k, false);
|
|
146
|
+
});
|
|
141
147
|
return !!this.prop && this.prop.kind !== core_1.ReferenceKind.SCALAR && !scalar && !operator;
|
|
142
148
|
}
|
|
143
149
|
getChildKey(k, prop, childAlias, alias) {
|
|
@@ -158,7 +164,11 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
158
164
|
inlineChildPayload(o, payload, field, alias, childAlias) {
|
|
159
165
|
const prop = this.metadata.find(this.entityName).properties[field];
|
|
160
166
|
for (const k of Object.keys(payload)) {
|
|
161
|
-
if (core_1.Utils.isOperator(
|
|
167
|
+
if (k === '$not' && core_1.Utils.isPlainObject(payload[k]) && Object.keys(payload[k]).some(ik => !core_1.Utils.isOperator(ik, false))) {
|
|
168
|
+
// $not wraps entity conditions (from auto-join), inline at current level
|
|
169
|
+
this.inlineCondition(k, o, payload[k]);
|
|
170
|
+
}
|
|
171
|
+
else if (core_1.Utils.isOperator(k, false)) {
|
|
162
172
|
const tmp = payload[k];
|
|
163
173
|
delete payload[k];
|
|
164
174
|
o[this.aliased(field, alias)] = { [k]: tmp, ...o[this.aliased(field, alias)] };
|
|
@@ -207,7 +217,17 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
|
|
|
207
217
|
const meta = this.metadata.find(this.entityName);
|
|
208
218
|
const embeddable = this.prop.kind === core_1.ReferenceKind.EMBEDDED;
|
|
209
219
|
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);
|
|
210
|
-
const operatorKeys = knownKey && keys.every(key =>
|
|
220
|
+
const operatorKeys = knownKey && keys.every(key => {
|
|
221
|
+
if (key === '$not') {
|
|
222
|
+
// $not wraps conditions like $and/$or, check if it wraps entity property conditions (needs auto-join)
|
|
223
|
+
// vs simple operator conditions on the FK (doesn't need auto-join)
|
|
224
|
+
const childPayload = this.payload[key].payload;
|
|
225
|
+
if (core_1.Utils.isPlainObject(childPayload)) {
|
|
226
|
+
return Object.keys(childPayload).every(k => core_1.Utils.isOperator(k, false));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return core_1.Utils.isOperator(key, false);
|
|
230
|
+
});
|
|
211
231
|
const primaryKeys = knownKey && keys.every(key => {
|
|
212
232
|
if (!meta.primaryKeys.includes(key)) {
|
|
213
233
|
return false;
|