@vulcan-sql/core
Version:
Core package of VulcanSQL
125 lines • 4.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JoinOnClause = void 0;
const errors_1 = require("../../utils/errors");
const commonTypes_1 = require("./commonTypes");
class JoinOnClause {
constructor() {
this._operations = [];
}
get operations() {
return this._operations;
}
on(leftColumn, operator, rightColumn) {
if (!(0, commonTypes_1.isOfComparisonOperator)(operator))
throw new errors_1.TemplateError(`'There is no ${operator} operator.`);
this.recordOn({
command: null,
data: { leftColumn, operator, rightColumn },
});
return this;
}
onBetween(column, min, max) {
if (min > max)
throw new errors_1.TemplateError(`min value ${min} not smaller than max value ${max}.`);
this.recordOn({
command: commonTypes_1.ComparisonPredicate.BETWEEN,
data: { column, min, max },
});
return this;
}
onNotBetween(column, min, max) {
this.recordOn({ command: commonTypes_1.LogicalOperator.NOT });
return this.onBetween(column, min, max);
}
onIn(column, values) {
this.recordOn({
command: commonTypes_1.ComparisonPredicate.IN,
data: { column, values },
});
return this;
}
onNotIn(column, values) {
this.recordOn({ command: commonTypes_1.LogicalOperator.NOT });
return this.onIn(column, values);
}
onNull(column) {
this.recordOn({
command: commonTypes_1.ComparisonPredicate.IS_NULL,
data: { column },
});
return this;
}
onNotNull(column) {
this.recordOn({ command: commonTypes_1.LogicalOperator.NOT });
return this.onNull(column);
}
// and
andOn(leftColumn, operator, rightColumn) {
this.recordOn({ command: commonTypes_1.LogicalOperator.AND });
return this.on(leftColumn, operator, rightColumn);
}
andOnBetween(column, min, max) {
this.recordOn({ command: commonTypes_1.LogicalOperator.AND });
return this.onBetween(column, min, max);
}
andOnNotBetween(column, min, max) {
this.recordOn({ command: commonTypes_1.LogicalOperator.AND });
return this.onNotBetween(column, min, max);
}
andOnIn(column, values) {
this.recordOn({ command: commonTypes_1.LogicalOperator.AND });
return this.onIn(column, values);
}
andOnNotIn(column, values) {
this.recordOn({ command: commonTypes_1.LogicalOperator.AND });
return this.onNotIn(column, values);
}
andOnNull(column) {
this.recordOn({ command: commonTypes_1.LogicalOperator.AND });
return this.onNull(column);
}
andOnNotNull(column) {
this.recordOn({ command: commonTypes_1.LogicalOperator.AND });
return this.onNotNull(column);
}
// or
orOn(leftColumn, operator, rightColumn) {
this.recordOn({ command: commonTypes_1.LogicalOperator.OR });
return this.on(leftColumn, operator, rightColumn);
}
orOnBetween(column, min, max) {
this.recordOn({ command: commonTypes_1.LogicalOperator.OR });
return this.onBetween(column, min, max);
}
orOnNotBetween(column, min, max) {
this.recordOn({ command: commonTypes_1.LogicalOperator.OR });
return this.onNotBetween(column, min, max);
}
orOnIn(column, values) {
this.recordOn({ command: commonTypes_1.LogicalOperator.OR });
return this.onIn(column, values);
}
orOnNotIn(column, values) {
this.recordOn({ command: commonTypes_1.LogicalOperator.OR });
return this.onNotIn(column, values);
}
orOnNull(column) {
this.recordOn({ command: commonTypes_1.LogicalOperator.OR });
return this.onNull(column);
}
orOnNotNull(column) {
this.recordOn({ command: commonTypes_1.LogicalOperator.OR });
return this.onNotNull(column);
}
// record Join-On related operations
recordOn(operation) {
const { command, data } = operation;
this._operations.push({
command,
data,
});
}
}
exports.JoinOnClause = JoinOnClause;
//# sourceMappingURL=joinOnClause.js.map