import QueryColumnCondition from "../condition/query-column-condition";
import QueryTable from "../query-table";
import ValueColumn from "./value-column";
import {ColumnModifier, ColumnName} from "../helpers/internal-types";
abstract class ComparableColumn
, T> extends ValueColumn {
constructor(table: Table, name: ColumnName, modifiers: ColumnModifier[] = []) {
super(table, name, modifiers);
}
lt(value: T) {
return new QueryColumnCondition(this, 'lt', value);
}
gt(value: T) {
return new QueryColumnCondition(this, 'gt', value);
}
lte(value: T) {
return new QueryColumnCondition(this, 'lte', value);
}
gte(value: T) {
return new QueryColumnCondition(this, 'gte', value);
}
in(values: T[]) {
return new QueryColumnCondition(this, 'in', ...values);
}
notIn(values: T[]) {
return new QueryColumnCondition(this, 'not-in', ...values);
}
between(value1: T, value2: T) {
return new QueryColumnCondition(this, 'between', value1, value2);
}
notBetween(value1: T, value2: T) {
return new QueryColumnCondition(this, 'not-between', value1, value2);
}
// min/max exists for text columns too, not just numeric and date
min(): this {
return new (this.constructor)(this._table, this._name, this._modifiers.concat({ name: 'min' }));
}
max(): this {
return new (this.constructor)(this._table, this._name, this._modifiers.concat({ name: 'max' }));
}
}
export default ComparableColumn;