UNPKG

ravendb

Version:
119 lines 5.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OrderByToken = void 0; const QueryToken_js_1 = require("./QueryToken.js"); const index_js_1 = require("../../../Exceptions/index.js"); const Constants_js_1 = require("../../../Constants.js"); class OrderByToken extends QueryToken_js_1.QueryToken { _fieldName; _descending; _sorterName; _ordering; _isMethodField; constructor(fieldName, descending, options, isMethodField) { super(); this._fieldName = fieldName; this._descending = descending; this._ordering = options.ordering; this._sorterName = options.sorterName; this._isMethodField = isMethodField; } static random = new OrderByToken("random()", false, { ordering: "String" }, true); static scoreAscending = new OrderByToken("score()", false, { ordering: "String" }, true); static scoreDescending = new OrderByToken("score()", true, { ordering: "String" }, true); static createDistanceAscending(fieldName, shapeWktOrLatitudeParameterName, longitudeParameterName, roundFactorParameterName) { if (longitudeParameterName) { return this._createDistanceAscendingLatLng(fieldName, shapeWktOrLatitudeParameterName, longitudeParameterName, roundFactorParameterName); } else { return this._createDistanceAscendingWkt(fieldName, shapeWktOrLatitudeParameterName, roundFactorParameterName); } } static _createDistanceAscendingLatLng(fieldName, latitudeParameterName, longitudeParameterName, roundFactorParameterName) { return new OrderByToken("spatial.distance(" + fieldName + ", spatial.point($" + latitudeParameterName + ", $" + longitudeParameterName + ")" + (roundFactorParameterName ? ", $" + roundFactorParameterName : "") + ")", false, { ordering: "String" }, true); } static _createDistanceAscendingWkt(fieldName, shapeWktParameterName, roundFactorParameterName) { return new OrderByToken("spatial.distance(" + fieldName + ", spatial.wkt($" + shapeWktParameterName + ")" + (roundFactorParameterName ? ", $" + roundFactorParameterName : "") + ")", false, { ordering: "String" }, true); } static _createDistanceDescendingLatLng(fieldName, latitudeParameterName, longitudeParameterName, roundFactorParameterName) { return new OrderByToken("spatial.distance(" + fieldName + ", spatial.point($" + latitudeParameterName + ", $" + longitudeParameterName + ")" + (roundFactorParameterName ? ", $" + roundFactorParameterName : "") + ")", true, { ordering: "String" }, true); } static _createDistanceDescendingWkt(fieldName, shapeWktParameterName, roundFactorParameterName) { return new OrderByToken("spatial.distance(" + fieldName + ", spatial.wkt($" + shapeWktParameterName + ")" + (roundFactorParameterName ? ", $" + roundFactorParameterName : "") + ")", true, { ordering: "String" }, true); } static createDistanceDescending(fieldName, shapeWktOrLatitudeParameterName, longitudeParameterName, roundFactorParameterName) { if (longitudeParameterName) { return this._createDistanceDescendingLatLng(fieldName, shapeWktOrLatitudeParameterName, longitudeParameterName, roundFactorParameterName); } else { return this._createDistanceDescendingWkt(fieldName, shapeWktOrLatitudeParameterName, roundFactorParameterName); } } static createRandom(seed) { if (!seed) { (0, index_js_1.throwError)("InvalidArgumentException", "seed cannot be null"); } return new OrderByToken("random('" + seed.replace(/'/g, "''") + "')", false, { ordering: "String" }, true); } static createAscending(fieldName, options) { return new OrderByToken(fieldName, false, options, false); } static createDescending(fieldName, options) { return new OrderByToken(fieldName, true, options, false); } writeTo(writer) { if (this._sorterName) { writer .append("custom("); } QueryToken_js_1.QueryToken.writeField(writer, this._fieldName); if (this._sorterName) { writer .append(", '") .append(this._sorterName) .append("')"); } else { switch (this._ordering) { case "Long": { writer.append(" as long"); break; } case "Double": { writer.append(" as double"); break; } case "AlphaNumeric": { writer.append(" as alphaNumeric"); break; } } } if (this._descending) { // we only add this if we have to, ASC is the default and reads nicer writer.append(" desc"); } } addAlias(alias) { if (Constants_js_1.CONSTANTS.Documents.Indexing.Fields.DOCUMENT_ID_FIELD_NAME === this._fieldName) { return this; } if (this._isMethodField) { // we must not alias RQL methods return this; } const aliasedName = alias + "." + this._fieldName; if (this._sorterName) { return new OrderByToken(aliasedName, this._descending, { sorterName: this._sorterName }, false); } else { return new OrderByToken(aliasedName, this._descending, { ordering: this._ordering }, false); } } } exports.OrderByToken = OrderByToken; //# sourceMappingURL=OrderByToken.js.map