mythix-orm 1.5.5 → 1.5.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/lib/connection/connection-base.js +30 -0
- package/lib/connection/literals/field-literal.js +14 -0
- package/lib/connection/literals/index.js +15 -13
- package/lib/connection/query-generator-base.js +27 -20
- package/lib/query-engine/field-scope.js +1 -0
- package/lib/query-engine/query-engine-base.js +16 -0
- package/package.json +1 -1
|
@@ -121,6 +121,23 @@ class ConnectionBase extends EventEmitter {
|
|
|
121
121
|
return order.map((value) => ((value.indexOf(':') < 0) ? `${modelName}:${value}` : value));
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
isLimitSupportedInContext(options) {
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
isOrderSupportedInContext(_options) {
|
|
129
|
+
let options = _options || {};
|
|
130
|
+
if (options.isSubQuery) {
|
|
131
|
+
let subQueryOperator = options.subQueryOperator;
|
|
132
|
+
if (subQueryOperator === 'EXISTS' || subQueryOperator === 'NOT EXISTS')
|
|
133
|
+
return true;
|
|
134
|
+
|
|
135
|
+
return 'PROJECTION_ONLY';
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
|
|
124
141
|
_getFromModelCache(Model, key, defaultValue) {
|
|
125
142
|
let cache = this._modelCache.get(Model);
|
|
126
143
|
if (!cache)
|
|
@@ -324,6 +341,17 @@ class ConnectionBase extends EventEmitter {
|
|
|
324
341
|
return queryGenerator._distinctLiteralToString(literal, options);
|
|
325
342
|
}
|
|
326
343
|
|
|
344
|
+
_fieldLiteralToString(literal, options) {
|
|
345
|
+
if (!literal || !LiteralBase.isLiteral(literal))
|
|
346
|
+
return;
|
|
347
|
+
|
|
348
|
+
let queryGenerator = this.getQueryGenerator();
|
|
349
|
+
if (!queryGenerator)
|
|
350
|
+
return;
|
|
351
|
+
|
|
352
|
+
return queryGenerator._fieldLiteralToString(literal, options);
|
|
353
|
+
}
|
|
354
|
+
|
|
327
355
|
_maxLiteralToString(literal, options) {
|
|
328
356
|
if (!literal || !LiteralBase.isLiteral(literal))
|
|
329
357
|
return;
|
|
@@ -364,6 +392,8 @@ class ConnectionBase extends EventEmitter {
|
|
|
364
392
|
return this._countLiteralToString(literal, options);
|
|
365
393
|
else if (Literals.DistinctLiteral.isLiteralType(literal))
|
|
366
394
|
return this._distinctLiteralToString(literal, options);
|
|
395
|
+
else if (Literals.FieldLiteral.isLiteralType(literal))
|
|
396
|
+
return this._fieldLiteralToString(literal, options);
|
|
367
397
|
else if (Literals.MaxLiteral.isLiteralType(literal))
|
|
368
398
|
return this._maxLiteralToString(literal, options);
|
|
369
399
|
else if (Literals.MinLiteral.isLiteralType(literal))
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const LiteralFieldBase = require('./literal-field-base');
|
|
4
|
+
|
|
5
|
+
class FieldLiteral extends LiteralFieldBase {
|
|
6
|
+
toString(connection, options) {
|
|
7
|
+
if (!connection)
|
|
8
|
+
return `${this.constructor.name} {}`;
|
|
9
|
+
|
|
10
|
+
return connection.literalToString(this, options);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = FieldLiteral;
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
3
|
+
const AverageLiteral = require('./average-literal');
|
|
4
|
+
const CountLiteral = require('./count-literal');
|
|
5
|
+
const DistinctLiteral = require('./distinct-literal');
|
|
6
|
+
const FieldLiteral = require('./field-literal');
|
|
7
|
+
const Literal = require('./literal');
|
|
8
|
+
const LiteralBase = require('./literal-base');
|
|
9
|
+
const LiteralFieldBase = require('./literal-field-base');
|
|
10
|
+
const MaxLiteral = require('./max-literal');
|
|
11
|
+
const MinLiteral = require('./min-literal');
|
|
12
|
+
const SumLiteral = require('./sum-literal');
|
|
12
13
|
|
|
13
14
|
module.exports = {
|
|
14
|
-
LiteralBase,
|
|
15
|
-
LiteralFieldBase,
|
|
16
|
-
Literal,
|
|
17
15
|
AverageLiteral,
|
|
18
16
|
CountLiteral,
|
|
17
|
+
DistinctLiteral,
|
|
18
|
+
FieldLiteral,
|
|
19
|
+
Literal,
|
|
20
|
+
LiteralBase,
|
|
21
|
+
LiteralFieldBase,
|
|
19
22
|
MaxLiteral,
|
|
20
23
|
MinLiteral,
|
|
21
|
-
DistinctLiteral,
|
|
22
24
|
SumLiteral,
|
|
23
25
|
};
|
|
@@ -46,11 +46,6 @@ class QueryGeneratorBase {
|
|
|
46
46
|
return this.connection.escapeID(...args);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
getTableNameFromQueryPart(queryPart) {
|
|
50
|
-
let Model = queryPart.Model;
|
|
51
|
-
return Model.getTableName(this.connection);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
49
|
getEscapedFieldName(_Model, field, options) {
|
|
55
50
|
let isString = Nife.instanceOf(field, 'string');
|
|
56
51
|
let fieldName = (isString) ? field : field.fieldName;
|
|
@@ -73,10 +68,23 @@ class QueryGeneratorBase {
|
|
|
73
68
|
if (!Model && field && !isString)
|
|
74
69
|
Model = field.Model;
|
|
75
70
|
|
|
71
|
+
if (options && options.columnNamePrefix)
|
|
72
|
+
columnName = `${options.columnNamePrefix}${columnName}`;
|
|
73
|
+
|
|
76
74
|
if (!Model || (options && options.columnNameOnly === true))
|
|
77
75
|
return this.escapeID(columnName);
|
|
78
76
|
else
|
|
79
|
-
return `${this.
|
|
77
|
+
return `${this.getEscapedTableName(Model)}.${this.escapeID(columnName)}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
getEscapedTableName(_modelOrField, options) {
|
|
81
|
+
let Model = (_modelOrField.Model) ? _modelOrField.Model : _modelOrField;
|
|
82
|
+
let tableName = Model.getTableName(this.connection);
|
|
83
|
+
|
|
84
|
+
if (options && options.tableNamePrefix)
|
|
85
|
+
tableName = `${options.tableNamePrefix}${tableName}`;
|
|
86
|
+
|
|
87
|
+
return this.escapeID(tableName);
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
// eslint-disable-next-line no-unused-vars
|
|
@@ -361,7 +369,8 @@ class QueryGeneratorBase {
|
|
|
361
369
|
let projectedFields = _projectedFields;
|
|
362
370
|
let result;
|
|
363
371
|
|
|
364
|
-
|
|
372
|
+
let subQueryOperator = (options && options.subQueryOperator);
|
|
373
|
+
if (options && options.isSubQuery && !(subQueryOperator === 'EXISTS' || subQueryOperator === 'NOT EXISTS')) {
|
|
365
374
|
// If we are sub-selecting then only one
|
|
366
375
|
// field in the projection is allowed
|
|
367
376
|
|
|
@@ -773,19 +782,6 @@ class QueryGeneratorBase {
|
|
|
773
782
|
return orderLimitOffset;
|
|
774
783
|
}
|
|
775
784
|
|
|
776
|
-
queryHasConditions(query) {
|
|
777
|
-
for (let i = 0, il = query.length; i < il; i++) {
|
|
778
|
-
let queryPart = query[i];
|
|
779
|
-
if (!Object.prototype.hasOwnProperty.call(queryPart, 'condition'))
|
|
780
|
-
continue;
|
|
781
|
-
|
|
782
|
-
if (queryPart.condition === true)
|
|
783
|
-
return true;
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
return false;
|
|
787
|
-
}
|
|
788
|
-
|
|
789
785
|
getQuerySliceFromQueryPart(queryPart) {
|
|
790
786
|
let queryRoot = queryPart.queryRoot;
|
|
791
787
|
let index = queryRoot.indexOf(queryPart);
|
|
@@ -838,6 +834,17 @@ class QueryGeneratorBase {
|
|
|
838
834
|
return `DISTINCT ${this.getEscapedProjectionName(field.Model, field, this.stackAssign(options, literal.options))}`;
|
|
839
835
|
}
|
|
840
836
|
|
|
837
|
+
_fieldLiteralToString(literal, options) {
|
|
838
|
+
if (!literal || !LiteralBase.isLiteral(literal))
|
|
839
|
+
return;
|
|
840
|
+
|
|
841
|
+
let field = literal.getField(this.connection);
|
|
842
|
+
if (LiteralBase.isLiteral(field))
|
|
843
|
+
return field.toString(this.connection, options);
|
|
844
|
+
|
|
845
|
+
return this.getEscapedColumnName(field.Model, field, this.stackAssign(options, literal.options));
|
|
846
|
+
}
|
|
847
|
+
|
|
841
848
|
_maxLiteralToString(literal, options) {
|
|
842
849
|
if (!literal || !LiteralBase.isLiteral(literal))
|
|
843
850
|
return;
|
|
@@ -256,6 +256,22 @@ class QueryEngineBase extends ProxyClass {
|
|
|
256
256
|
return false;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
+
_queryHasConditions() {
|
|
260
|
+
let context = this._getRawQueryContext();
|
|
261
|
+
return context.hasCondition;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
_queryHasJoins() {
|
|
265
|
+
let queryParts = this._getRawQuery();
|
|
266
|
+
for (let i = 0, il = queryParts.length; i < il; i++) {
|
|
267
|
+
let queryPart = queryParts[i];
|
|
268
|
+
if (QueryEngineBase.isQuery(queryPart.value) && !queryPart.value.hasCondition)
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
|
|
259
275
|
_debugQuery() {
|
|
260
276
|
let query = this._getRawQuery();
|
|
261
277
|
for (let i = 0, il = query.length; i < il; i++) {
|