sphinxql
Version:
SphinxQL query builder for Node.JS. Supports Sphinx search(2.x and 3.x) and Manticore search
202 lines • 9.22 kB
JavaScript
"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