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.
@@ -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 LiteralBase = require('./literal-base');
4
- const LiteralFieldBase = require('./literal-field-base');
5
- const Literal = require('./literal');
6
- const AverageLiteral = require('./average-literal');
7
- const CountLiteral = require('./count-literal');
8
- const MaxLiteral = require('./max-literal');
9
- const MinLiteral = require('./min-literal');
10
- const DistinctLiteral = require('./distinct-literal');
11
- const SumLiteral = require('./sum-literal');
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.escapeID(Model.getTableName(this.connection))}.${this.escapeID(columnName)}`;
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
- if (options && options.isSubQuery) {
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;
@@ -13,6 +13,7 @@ function addOperatorToQuery(name, inverseName, value, extraOptions) {
13
13
  operator: name,
14
14
  inverseOperator: inverseName,
15
15
  value: this._fetchOperatorValue(value),
16
+ hasCondition: true,
16
17
  };
17
18
 
18
19
  if (extraOptions)
@@ -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++) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mythix-orm",
3
- "version": "1.5.5",
3
+ "version": "1.5.6",
4
4
  "description": "ORM for Mythix framework",
5
5
  "main": "lib/index.js",
6
6
  "type": "commonjs",