UNPKG

@configurator/ravendb

Version:
261 lines 8.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WhereToken = exports.WhereOptions = exports.WhereMethodCall = void 0; const QueryToken_1 = require("./QueryToken"); const Exceptions_1 = require("../../../Exceptions"); const TypeUtil_1 = require("../../../Utility/TypeUtil"); const Constants_1 = require("../../../Constants"); class WhereMethodCall { } exports.WhereMethodCall = WhereMethodCall; class WhereOptions { static defaultOptions() { return new WhereOptions(); } constructor(parameters) { parameters = parameters || {}; if (parameters["methodType"]) { const p = parameters; if (TypeUtil_1.TypeUtil.isNullOrUndefined(p.exact)) { p.exact = false; } this.method = new WhereMethodCall(); this.method.methodType = p.methodType; this.method.parameters = p.parameters; this.method.property = p.property; this.exact = p.exact; } else if (parameters["shape"]) { const p = parameters; this.whereShape = p.shape; this.distanceErrorPct = p.distance; } else if (!TypeUtil_1.TypeUtil.isNullOrUndefined(parameters["exact"]) && !parameters["methodType"]) { const p = parameters; this.exact = p.exact; this.fromParameterName = p.from; this.toParameterName = p.to; } else if (parameters["search"]) { this.searchOperator = parameters["search"]; } } } exports.WhereOptions = WhereOptions; class WhereToken extends QueryToken_1.QueryToken { constructor() { super(); } static create(op, fieldName, parameterName, options = null) { const token = new WhereToken(); token.fieldName = fieldName; token.parameterName = parameterName; token.whereOperator = op; token.options = options || WhereOptions.defaultOptions(); return token; } addAlias(alias) { if (Constants_1.CONSTANTS.Documents.Indexing.Fields.DOCUMENT_ID_FIELD_NAME === this.fieldName) { return this; } this.fieldName = alias + "." + this.fieldName; const whereToken = new WhereToken(); whereToken.fieldName = alias + "." + this.fieldName; whereToken.parameterName = this.parameterName; whereToken.whereOperator = this.whereOperator; whereToken.options = this.options; return whereToken; } _writeMethod(writer) { if (this.options.method) { switch (this.options.method.methodType) { case "CmpXchg": writer.append("cmpxchg("); break; default: (0, Exceptions_1.throwError)("InvalidArgumentException", "Unsupported method: " + this.options.method.methodType); } let first = true; for (const parameter of this.options.method.parameters) { if (!first) { writer.append(","); } first = false; writer.append("$"); writer.append(parameter); } writer.append(")"); if (this.options.method.property) { writer.append(".") .append(this.options.method.property); } return true; } return false; } writeTo(writer) { if (this.options.boost != null) { writer.append("boost("); } if (this.options.fuzzy != null) { writer.append("fuzzy("); } if (this.options.proximity != null) { writer.append("proximity("); } if (this.options.exact) { writer.append("exact("); } switch (this.whereOperator) { case "Search": writer.append("search("); break; case "Lucene": writer.append("lucene("); break; case "StartsWith": writer.append("startsWith("); break; case "EndsWith": writer.append("endsWith("); break; case "Exists": writer.append("exists("); break; case "SpatialWithin": writer.append("spatial.within("); break; case "SpatialContains": writer.append("spatial.contains("); break; case "SpatialDisjoint": writer.append("spatial.disjoint("); break; case "SpatialIntersects": writer.append("spatial.intersects("); break; case "Regex": writer.append("regex("); break; } this._writeInnerWhere(writer); if (this.options.exact) { writer.append(")"); } if (this.options.proximity != null) { writer .append(", ") .append(this.options.proximity) .append(")"); } if (this.options.fuzzy != null) { writer .append(", ") .append(this.options.fuzzy) .append(")"); } if (this.options.boost != null) { writer .append(", ") .append(this.options.boost) .append(")"); } } _writeInnerWhere(writer) { QueryToken_1.QueryToken.writeField(writer, this.fieldName); switch (this.whereOperator) { case "Equals": writer.append(" = "); break; case "NotEquals": writer.append(" != "); break; case "GreaterThan": writer .append(" > "); break; case "GreaterThanOrEqual": writer .append(" >= "); break; case "LessThan": writer .append(" < "); break; case "LessThanOrEqual": writer .append(" <= "); break; default: this._specialOperator(writer); return; } if (!this._writeMethod(writer)) { writer.append("$").append(this.parameterName); } } _specialOperator(writer) { switch (this.whereOperator) { case "In": writer .append(" in ($") .append(this.parameterName) .append(")"); break; case "AllIn": writer .append(" all in ($") .append(this.parameterName) .append(")"); break; case "Between": writer .append(" between $") .append(this.options.fromParameterName) .append(" and $") .append(this.options.toParameterName); break; case "Search": writer .append(", $") .append(this.parameterName); if (this.options.searchOperator === "AND") { writer.append(", and"); } writer.append(")"); break; case "Lucene": case "StartsWith": case "EndsWith": case "Regex": writer .append(", $") .append(this.parameterName) .append(")"); break; case "Exists": writer .append(")"); break; case "SpatialWithin": case "SpatialContains": case "SpatialDisjoint": case "SpatialIntersects": writer .append(", "); this.options.whereShape.writeTo(writer); if (Math.abs(this.options.distanceErrorPct - Constants_1.CONSTANTS.Documents.Indexing.Spatial.DEFAULT_DISTANCE_ERROR_PCT) > 1e-40) { writer.append(", "); writer.append(this.options.distanceErrorPct); } writer .append(")"); break; default: (0, Exceptions_1.throwError)("InvalidArgumentException"); } } } exports.WhereToken = WhereToken; //# sourceMappingURL=WhereToken.js.map