UNPKG

sphinxql

Version:

SphinxQL query builder for Node.JS. Supports Sphinx search(2.x and 3.x) and Manticore search

202 lines 9.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); require('es7-object-polyfill'); var FromExprStatement_1 = require("./statement_expressions/FromExprStatement"); var HavingExprStatement_1 = require("./statement_expressions/HavingExprStatement"); var LimitExprStatement_1 = require("./statement_expressions/LimitExprStatement"); var OrderByExprStatement_1 = require("./statement_expressions/OrderByExprStatement"); var SelectExprStatement_1 = require("./statement_expressions/SelectExprStatement"); var MatchStatement_1 = require("./statement_expressions/MatchStatement"); var GroupByExprStatement_1 = require("./statement_expressions/GroupByExprStatement"); var WhereStatement_1 = require("./statement_expressions/WhereStatement"); var OptionExprStatement_1 = require("./statement_expressions/OptionExprStatement"); var FacetStatement_1 = require("./FacetStatement"); var Expression_1 = require("./Expression"); var BaseStatement_1 = require("./BaseStatement"); var SelectStatement = (function (_super) { tslib_1.__extends(SelectStatement, _super); function SelectStatement(connection) { var fields = []; for (var _i = 1; _i < arguments.length; _i++) { fields[_i - 1] = arguments[_i]; } var _this = _super.call(this, connection) || this; _this.matchStatement = new MatchStatement_1.default(); _this.whereConditions = []; _this.groupByExpr = []; _this.orderByFields = []; _this.optionExprs = []; _this.facetExprs = []; _this.select = new (SelectExprStatement_1.default.bind.apply(SelectExprStatement_1.default, tslib_1.__spreadArrays([void 0], fields)))(); return _this; } SelectStatement.prototype.from = function () { var indexes = []; for (var _i = 0; _i < arguments.length; _i++) { indexes[_i] = arguments[_i]; } this.fromIndexes = new (FromExprStatement_1.default.bind.apply(FromExprStatement_1.default, tslib_1.__spreadArrays([void 0], indexes)))(); return this; }; SelectStatement.prototype.where = function (columnExpr, operator, value) { if (value === undefined) { value = operator; operator = '='; } var condition = null; if (columnExpr instanceof Expression_1.default) { condition = new WhereStatement_1.default(columnExpr.getExpression(), operator, value); } else { condition = new WhereStatement_1.default(columnExpr, operator, value); } this.whereConditions = tslib_1.__spreadArrays(this.whereConditions, [condition]); return this; }; SelectStatement.prototype.whereIn = function (column, values) { var condition = null; if (column instanceof Expression_1.default) { condition = new WhereStatement_1.default(column.getExpression(), 'IN', values); } else { condition = new WhereStatement_1.default(column, 'IN', values); } this.whereConditions = tslib_1.__spreadArrays(this.whereConditions, [condition]); return this; }; SelectStatement.prototype.whereNotIn = function (column, values) { var condition = null; if (column instanceof Expression_1.default) { condition = new WhereStatement_1.default(column.getExpression(), 'NOT IN', values); } else { condition = new WhereStatement_1.default(column, 'NOT IN', values); } this.whereConditions = tslib_1.__spreadArrays(this.whereConditions, [condition]); return this; }; SelectStatement.prototype.between = function (column, value1, value2) { var condition = null; if (column instanceof Expression_1.default) { condition = new WhereStatement_1.default(column.getExpression(), 'BETWEEN', [value1, value2]); } else { condition = new WhereStatement_1.default(column, 'BETWEEN', [value1, value2]); } this.whereConditions = tslib_1.__spreadArrays(this.whereConditions, [condition]); return this; }; SelectStatement.prototype.match = function (fields, value, escapeValue) { if (escapeValue === void 0) { escapeValue = true; } this.matchStatement.match(fields.length ? fields : undefined, value, escapeValue); return this; }; SelectStatement.prototype.orMatch = function (fields, value, escapeValue) { if (escapeValue === void 0) { escapeValue = true; } this.matchStatement.orMatch(fields.length ? fields : undefined, value, escapeValue); return this; }; SelectStatement.prototype.groupBy = function (columns) { var expression = new GroupByExprStatement_1.default(columns); this.groupByExpr = tslib_1.__spreadArrays(this.groupByExpr, [expression]); return this; }; SelectStatement.prototype.having = function (columnExpr, operator, value) { if (value === undefined) { value = operator; operator = '='; } this.havingExpr = new HavingExprStatement_1.default(columnExpr, operator, value); return this; }; SelectStatement.prototype.orderBy = function (fields) { for (var _i = 0, _a = Object.entries(fields); _i < _a.length; _i++) { var _b = _a[_i], field = _b[0], order = _b[1]; this.orderByFields = tslib_1.__spreadArrays(this.orderByFields, [new OrderByExprStatement_1.default(field, order)]); } return this; }; SelectStatement.prototype.offset = function (offset) { if (offset === void 0) { offset = 0; } if (this.limitExpr !== undefined) { this.limitExpr.setOffset(offset); } else { this.limitExpr = new LimitExprStatement_1.default(offset); } return this; }; SelectStatement.prototype.limit = function (size) { if (size === void 0) { size = 5; } if (this.limitExpr !== undefined) { this.limitExpr.setSize(size); } else { this.limitExpr = new LimitExprStatement_1.default(0, size); } return this; }; SelectStatement.prototype.option = function (option, value) { this.optionExprs = tslib_1.__spreadArrays(this.optionExprs, [new OptionExprStatement_1.default(option, value)]); return this; }; SelectStatement.prototype.facet = function (cb) { var values = []; values = tslib_1.__spreadArrays(this.facetExprs, [cb.apply(this, [new FacetStatement_1.default(this.connection)])]); this.facetExprs = values; return this; }; SelectStatement.prototype.generate = function () { var statement = 'SELECT '; statement += this.select.build(); statement += ' FROM '; statement += this.fromIndexes.build(); var hasMatchStatement = this.matchStatement.getParts().length > 0; var hasWhereStatements = this.whereConditions.length > 0; if (hasWhereStatements || hasMatchStatement) { statement += ' WHERE '; if (hasMatchStatement) { statement += "MATCH(" + this.matchStatement.build() + ")"; if (hasWhereStatements) { statement += ' AND '; } } var stringStatements = void 0; stringStatements = this.whereConditions.map(function (condition) { return condition.build(); }); statement += stringStatements.join(' AND '); } if (this.groupByExpr.length) { statement += ' GROUP BY '; var stringStatements = void 0; stringStatements = this.groupByExpr.map(function (group) { return group.build(); }); statement += stringStatements.join(', '); } if (this.havingExpr) { statement += " HAVING " + this.havingExpr.build(); } if (this.orderByFields.length) { statement += ' ORDER BY '; var stringStatements = void 0; stringStatements = this.orderByFields.map(function (field) { return field.build(); }); statement += stringStatements.join(', '); } if (this.limitExpr !== undefined) { statement += " LIMIT " + this.limitExpr.build(); } if (this.optionExprs.length) { statement += " OPTION " + this.optionExprs.map(function (option) { return option.build(); }).join(','); } if (this.facetExprs.length) { var facetStatement = ''; facetStatement = this.facetExprs.map(function (facet) { return " FACET " + facet.build(); }).join(''); statement += facetStatement; } return statement; }; return SelectStatement; }(BaseStatement_1.default)); exports.default = SelectStatement; //# sourceMappingURL=SelectStatement.js.map