UNPKG

plywood

Version:
82 lines (81 loc) 3.81 kB
import { __extends } from "tslib"; import { Range, Set } from '../datatypes'; import { ChainableUnaryExpression, Expression, } from './baseExpression'; import { LiteralExpression } from './literalExpression'; import { OverlapExpression } from './overlapExpression'; var InExpression = (function (_super) { __extends(InExpression, _super); function InExpression(parameters) { var _this = _super.call(this, parameters, dummyObject) || this; _this._ensureOp('in'); var operandType = _this.operand.type; var expression = _this.expression; if (operandType) { if (!(operandType === 'NULL' || expression.type === 'NULL' || (!Set.isSetType(operandType) && expression.canHaveType('SET')))) { throw new TypeError("in expression ".concat(_this, " has a bad type combination ").concat(operandType, " IN ").concat(expression.type || '*')); } } else { if (!(expression.canHaveType('NUMBER_RANGE') || expression.canHaveType('STRING_RANGE') || expression.canHaveType('TIME_RANGE') || expression.canHaveType('SET'))) { throw new TypeError("in expression has invalid expression type ".concat(expression.type)); } } _this.type = 'BOOLEAN'; return _this; } InExpression.fromJS = function (parameters) { var value = ChainableUnaryExpression.jsToValue(parameters); if (Range.isRangeType(value.expression.type)) { console.warn('InExpression should no longer be used for ranges use OverlapExpression instead'); value.op = 'overlap'; return new OverlapExpression(value); } return new InExpression(value); }; InExpression.prototype._calcChainableUnaryHelper = function (operandValue, expressionValue) { if (!expressionValue) return null; return expressionValue.contains(operandValue); }; InExpression.prototype._getSQLChainableUnaryHelper = function (dialect, operandSQL, _expressionSQL) { var expression = this.expression; var expressionType = expression.type; switch (expressionType) { case 'STRING_RANGE': if (expression instanceof LiteralExpression) { var stringRange = expression.value; return dialect.inExpression(operandSQL, dialect.escapeLiteral(stringRange.start), dialect.escapeLiteral(stringRange.end), stringRange.bounds); } throw new Error("can not convert action to SQL ".concat(this)); case 'SET/STRING': if (expression instanceof LiteralExpression) { var setOfRange = expression.value; return ('(' + setOfRange.elements .map(function (element) { return dialect.inExpression(operandSQL, dialect.escapeLiteral(element), dialect.escapeLiteral(element), '[]'); }) .join(' OR ') + ')'); } throw new Error("can not convert action to SQL ".concat(this)); default: throw new Error("can not convert action to SQL ".concat(this)); } }; InExpression.prototype.specialSimplify = function () { var _a = this, operand = _a.operand, expression = _a.expression; if (operand.type && !Set.isSetType(operand.type)) return operand.is(expression); return this; }; InExpression.op = 'In'; return InExpression; }(ChainableUnaryExpression)); export { InExpression }; Expression.register(InExpression);