mythix-orm
Advanced tools
Comparing version
@@ -233,6 +233,6 @@ 'use strict'; | ||
escape(field, _value) { | ||
escape(field, _value, options) { | ||
var value = _value; | ||
if (LiteralBase.isLiteral(value)) | ||
return value.toString(this); | ||
return value.toString(this, options); | ||
@@ -263,5 +263,5 @@ value = field.type.serialize(value, this); | ||
escapeID(value) { | ||
escapeID(value, options) { | ||
if (LiteralBase.isLiteral(value)) | ||
return value.toString(this.connection); | ||
return value.toString(this.connection, options); | ||
@@ -271,3 +271,3 @@ return this._escapeID(value); | ||
_averageLiteralToString(literal) { | ||
_averageLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
@@ -280,6 +280,6 @@ return; | ||
return queryGenerator._averageLiteralToString(literal); | ||
return queryGenerator._averageLiteralToString(literal, options); | ||
} | ||
_countLiteralToString(literal) { | ||
_countLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
@@ -292,6 +292,6 @@ return; | ||
return queryGenerator._countLiteralToString(literal); | ||
return queryGenerator._countLiteralToString(literal, options); | ||
} | ||
_distinctLiteralToString(literal) { | ||
_distinctLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
@@ -304,6 +304,6 @@ return; | ||
return queryGenerator._distinctLiteralToString(literal); | ||
return queryGenerator._distinctLiteralToString(literal, options); | ||
} | ||
_maxLiteralToString(literal) { | ||
_maxLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
@@ -316,6 +316,6 @@ return; | ||
return queryGenerator._maxLiteralToString(literal); | ||
return queryGenerator._maxLiteralToString(literal, options); | ||
} | ||
_minLiteralToString(literal) { | ||
_minLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
@@ -328,6 +328,6 @@ return; | ||
return queryGenerator._minLiteralToString(literal); | ||
return queryGenerator._minLiteralToString(literal, options); | ||
} | ||
_sumLiteralToString(literal) { | ||
_sumLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
@@ -340,20 +340,20 @@ return; | ||
return queryGenerator._sumLiteralToString(literal); | ||
return queryGenerator._sumLiteralToString(literal, options); | ||
} | ||
literalToString(literal) { | ||
literalToString(literal, options) { | ||
if (Literals.AverageLiteral.isLiteralType(literal)) | ||
return this._averageLiteralToString(literal); | ||
return this._averageLiteralToString(literal, options); | ||
else if (Literals.CountLiteral.isLiteralType(literal)) | ||
return this._countLiteralToString(literal); | ||
return this._countLiteralToString(literal, options); | ||
else if (Literals.DistinctLiteral.isLiteralType(literal)) | ||
return this._distinctLiteralToString(literal); | ||
return this._distinctLiteralToString(literal, options); | ||
else if (Literals.MaxLiteral.isLiteralType(literal)) | ||
return this._maxLiteralToString(literal); | ||
return this._maxLiteralToString(literal, options); | ||
else if (Literals.MinLiteral.isLiteralType(literal)) | ||
return this._minLiteralToString(literal); | ||
return this._minLiteralToString(literal, options); | ||
else if (Literals.SumLiteral.isLiteralType(literal)) | ||
return this._sumLiteralToString(literal); | ||
return this._sumLiteralToString(literal, options); | ||
else if (Literals.Literal.isLiteralType(literal)) | ||
return literal.toString(this); | ||
return literal.toString(this, options); | ||
@@ -360,0 +360,0 @@ throw new Error(`${this.constructor.name}::literalToString: Unsupported literal ${literal}.`); |
@@ -6,7 +6,7 @@ 'use strict'; | ||
class AverageLiteral extends LiteralFieldBase { | ||
toString(connection) { | ||
toString(connection, options) { | ||
if (!connection) | ||
return `${this.constructor.name} {}`; | ||
return connection.literalToString(this); | ||
return connection.literalToString(this, options); | ||
} | ||
@@ -13,0 +13,0 @@ } |
@@ -10,7 +10,7 @@ 'use strict'; | ||
toString(connection) { | ||
toString(connection, options) { | ||
if (!connection) | ||
return `${this.constructor.name} {}`; | ||
return connection.literalToString(this); | ||
return connection.literalToString(this, options); | ||
} | ||
@@ -17,0 +17,0 @@ } |
@@ -6,7 +6,7 @@ 'use strict'; | ||
class DistinctLiteral extends LiteralFieldBase { | ||
toString(connection) { | ||
toString(connection, options) { | ||
if (!connection) | ||
return `${this.constructor.name} {}`; | ||
return connection.literalToString(this); | ||
return connection.literalToString(this, options); | ||
} | ||
@@ -13,0 +13,0 @@ } |
@@ -43,4 +43,11 @@ 'use strict'; | ||
} | ||
getField(connection) { | ||
if (!this.definition) | ||
return null; | ||
return this.definitionToField(connection, this.definition); | ||
} | ||
} | ||
module.exports = LiteralFieldBase; |
@@ -6,7 +6,7 @@ 'use strict'; | ||
class MaxLiteral extends LiteralFieldBase { | ||
toString(connection) { | ||
toString(connection, options) { | ||
if (!connection) | ||
return `${this.constructor.name} {}`; | ||
return connection.literalToString(this); | ||
return connection.literalToString(this, options); | ||
} | ||
@@ -13,0 +13,0 @@ } |
@@ -6,7 +6,7 @@ 'use strict'; | ||
class MinLiteral extends LiteralFieldBase { | ||
toString(connection) { | ||
toString(connection, options) { | ||
if (!connection) | ||
return `${this.constructor.name} {}`; | ||
return connection.literalToString(this); | ||
return connection.literalToString(this, options); | ||
} | ||
@@ -13,0 +13,0 @@ } |
@@ -6,7 +6,7 @@ 'use strict'; | ||
class SumLiteral extends LiteralFieldBase { | ||
toString(connection) { | ||
toString(connection, options) { | ||
if (!connection) | ||
return `${this.constructor.name} {}`; | ||
return connection.literalToString(this); | ||
return connection.literalToString(this, options); | ||
} | ||
@@ -13,0 +13,0 @@ } |
@@ -23,6 +23,8 @@ 'use strict'; | ||
stackAssign(obj, ...args) { | ||
stackAssign(obj, ..._args) { | ||
let newObj = Object.create(obj || {}); | ||
let args = _args.filter(Boolean); | ||
Object.assign(newObj, ...args); | ||
if (args.length > 0) | ||
Object.assign(newObj, ...args); | ||
@@ -163,4 +165,10 @@ return newObj; | ||
if (LiteralBase.isLiteral(field)) { | ||
let result = field.toString(this.connection); | ||
let projectionField = this.parseFieldProjection(result, true); | ||
let result = field.toString(this.connection, options); | ||
let projectionField; | ||
if (typeof field.getField === 'function') | ||
projectionField = field.getField(this.connection); | ||
else | ||
projectionField = this.parseFieldProjection(result, true); | ||
if (projectionField === result) { | ||
@@ -193,3 +201,3 @@ // not able to parse projection | ||
sortedProjectedFields(projectedFields) { | ||
sortedProjectedFields(projectedFields, options) { | ||
return projectedFields.sort((a, b) => { | ||
@@ -203,4 +211,4 @@ // If either value is a distinct literal | ||
let y = LiteralBase.isLiteral(b); | ||
let xStr = (x) ? a.toString(this.connection) : a; | ||
let yStr = (y) ? b.toString(this.connection) : b; | ||
let xStr = (x) ? a.toString(this.connection, options) : a; | ||
let yStr = (y) ? b.toString(this.connection, options) : b; | ||
let xIsDistinct = (typeof xStr === 'string' && LITERAL_IS_DISTINCT_RE.test(xStr)); | ||
@@ -390,3 +398,3 @@ let yIsDistinct = (typeof yStr === 'string' && LITERAL_IS_DISTINCT_RE.test(yStr)); | ||
// Convert projection fields to array and sort | ||
result = this.sortedProjectedFields(result); | ||
result = this.sortedProjectedFields(result, options); | ||
@@ -450,3 +458,3 @@ // Now prefix the projection fields with the distinct | ||
let key = projectionValue.toString(this.connection); | ||
let key = projectionValue.toString(this.connection, options); | ||
if (isAdding) | ||
@@ -565,4 +573,9 @@ projectedFields.set(key, projectionValue); | ||
isFieldIdentifier(str) { | ||
return (/^"[^"]+"."[^"]+"|"\w+:[\w.]+"/i).test(str); | ||
} | ||
getProjectedFields(queryEngine, _options, asMap) { | ||
let queryProjection = this.getProjectionFromQueryEngine(queryEngine, _options); | ||
let options = _options || {}; | ||
let queryProjection = this.getProjectionFromQueryEngine(queryEngine, options); | ||
let allProjectionFields = new Map(); | ||
@@ -576,4 +589,10 @@ | ||
if (LiteralBase.isLiteral(projectionField)) { | ||
let result = projectionField.toString(this.connection); | ||
let fullFieldName = this.parseFieldProjection(result); | ||
let result = projectionField.toString(this.connection, options); | ||
let fullFieldName; | ||
if (typeof projectionField.getFullyQualifiedFieldName === 'function') | ||
fullFieldName = projectionField.getFullyQualifiedFieldName(); | ||
else | ||
fullFieldName = this.parseFieldProjection(result); | ||
if (!fullFieldName) | ||
@@ -584,4 +603,3 @@ fullFieldName = result; | ||
allProjectionFields.set(fullFieldName, result); | ||
if (result && !this.isFieldProjection(result)) | ||
else | ||
allProjectionFields.set(result, result); | ||
@@ -785,13 +803,13 @@ | ||
_averageLiteralToString(literal) { | ||
_averageLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
return; | ||
let field = literal.definitionToField(this.connection, literal.definition); | ||
let field = literal.getField(this.connection); | ||
let escapedFieldName; | ||
if (LiteralBase.isLiteral(field)) | ||
escapedFieldName = field.toString(this.connection); | ||
escapedFieldName = field.toString(this.connection, options); | ||
else | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, literal.options); | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, this.stackAssign(options, literal.options)); | ||
@@ -801,7 +819,7 @@ return `AVG(${escapedFieldName})`; | ||
_countLiteralToString(literal) { | ||
_countLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
return; | ||
let field = (literal.definition) ? literal.definitionToField(this.connection, literal.definition) : null; | ||
let field = literal.getField(this.connection); | ||
let escapedFieldName; | ||
@@ -811,5 +829,5 @@ | ||
if (LiteralBase.isLiteral(field)) | ||
escapedFieldName = field.toString(this.connection); | ||
escapedFieldName = field.toString(this.connection, options); | ||
else | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, literal.options); | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, this.stackAssign(options, literal.options)); | ||
} else { | ||
@@ -822,24 +840,24 @@ escapedFieldName = '*'; | ||
_distinctLiteralToString(literal) { | ||
_distinctLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
return; | ||
let field = literal.definitionToField(this.connection, literal.definition); | ||
let field = literal.getField(this.connection); | ||
if (LiteralBase.isLiteral(field)) | ||
return `DISTINCT ${field.toString(this.connection)}`; | ||
return `DISTINCT ${field.toString(this.connection, options)}`; | ||
return `DISTINCT ${this.getEscapedProjectionName(field.Model, field, literal.options)}`; | ||
return `DISTINCT ${this.getEscapedProjectionName(field.Model, field, this.stackAssign(options, literal.options))}`; | ||
} | ||
_maxLiteralToString(literal) { | ||
_maxLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
return; | ||
let field = literal.definitionToField(this.connection, literal.definition); | ||
let field = literal.getField(this.connection); | ||
let escapedFieldName; | ||
if (LiteralBase.isLiteral(field)) | ||
escapedFieldName = field.toString(this.connection); | ||
escapedFieldName = field.toString(this.connection, options); | ||
else | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, literal.options); | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, this.stackAssign(options, literal.options)); | ||
@@ -849,13 +867,13 @@ return `MAX(${escapedFieldName})`; | ||
_minLiteralToString(literal) { | ||
_minLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
return; | ||
let field = literal.definitionToField(this.connection, literal.definition); | ||
let field = literal.getField(this.connection); | ||
let escapedFieldName; | ||
if (LiteralBase.isLiteral(field)) | ||
escapedFieldName = field.toString(this.connection); | ||
escapedFieldName = field.toString(this.connection, options); | ||
else | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, literal.options); | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, this.stackAssign(options, literal.options)); | ||
@@ -865,13 +883,13 @@ return `MIN(${escapedFieldName})`; | ||
_sumLiteralToString(literal) { | ||
_sumLiteralToString(literal, options) { | ||
if (!literal || !LiteralBase.isLiteral(literal)) | ||
return; | ||
let field = literal.definitionToField(this.connection, literal.definition); | ||
let field = literal.getField(this.connection); | ||
let escapedFieldName; | ||
if (LiteralBase.isLiteral(field)) | ||
escapedFieldName = field.toString(this.connection); | ||
escapedFieldName = field.toString(this.connection, options); | ||
else | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, literal.options); | ||
escapedFieldName = this.getEscapedColumnName(field.Model, field, this.stackAssign(options, literal.options)); | ||
@@ -878,0 +896,0 @@ return `SUM(${escapedFieldName})`; |
{ | ||
"name": "mythix-orm", | ||
"version": "1.4.5", | ||
"version": "1.4.6", | ||
"description": "ORM for Mythix framework", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
320218
0.34%6818
0.28%