@sqb/builder
Version:
Extensible multi-dialect SQL query builder written with TypeScript
43 lines (42 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrderColumn = void 0;
const enums_js_1 = require("../enums.js");
const base_field_js_1 = require("./base-field.js");
const ORDER_COLUMN_PATTERN = /^([-+])?((?:[a-zA-Z_][\w$]*\.){0,2})([a-zA-Z_][\w$]*|\*) *(asc|dsc|desc|ascending|descending)?$/i;
class OrderColumn extends base_field_js_1.BaseField {
constructor(value) {
super();
const m = value.match(ORDER_COLUMN_PATTERN);
if (!m)
throw new TypeError(`"${value}" does not match order column format`);
this._field = m[3];
if (m[2]) {
const a = m[2].split(/\./g);
a.pop();
this._table = a.pop();
this._schema = a.pop();
}
this._descending = !!(m[1] === '-' ||
(!m[1] &&
m[4] &&
['dsc', 'desc', 'descending'].includes(m[4].toLowerCase())));
}
get _type() {
return enums_js_1.SerializationType.ORDER_COLUMN;
}
_serialize(ctx) {
const o = {
schema: this._schema,
table: this._table,
field: this._field,
descending: !!this._descending,
isReservedWord: !!(this._field && ctx.isReservedWord(this._field)),
};
return ctx.serialize(this._type, o, () => (o.schema ? o.schema + '.' : '') +
(o.table ? o.table + '.' : '') +
(o.isReservedWord ? '"' + o.field + '"' : o.field) +
(o.descending ? ' desc' : ''));
}
}
exports.OrderColumn = OrderColumn;