@uwdata/mosaic-sql
Version:
SQL query construction and analysis.
60 lines • 1.66 kB
JavaScript
import { BETWEEN_OPERATOR, NOT_BETWEEN_OPERATOR } from '../constants.js';
import { ExprNode } from './node.js';
class AbstractBetweenOpNode extends ExprNode {
/** The input expression. */
expr;
/** The range extent. */
extent;
/**
* Instantiate an abstract between operator node.
* @param type The node type.
* @param expr The input expression.
* @param extent The range extent.
*/
constructor(type, expr, extent) {
super(type);
this.expr = expr;
this.extent = extent;
}
/**
* Generate a SQL query string for this node.
* @param op The operator to apply.
*/
toSQL(op) {
const { extent: r, expr } = this;
return r ? `(${expr} ${op} ${r[0]} AND ${r[1]})` : '';
}
}
export class BetweenOpNode extends AbstractBetweenOpNode {
/**
* Instantiate a between operator node.
* @param expr The input expression.
* @param extent The range extent.
*/
constructor(expr, extent) {
super(BETWEEN_OPERATOR, expr, extent);
}
/**
* Generate a SQL query string for this node.
*/
toString() {
return super.toSQL('BETWEEN');
}
}
export class NotBetweenOpNode extends AbstractBetweenOpNode {
/**
* Instantiate a not between operator node.
* @param expr The input expression.
* @param extent The range extent.
*/
constructor(expr, extent) {
super(NOT_BETWEEN_OPERATOR, expr, extent);
}
/**
* Generate a SQL query string for this node.
*/
toString() {
return super.toSQL('NOT BETWEEN');
}
}
//# sourceMappingURL=between-op.js.map