@sqb/builder
Version:
Extensible multi-dialect SQL query builder written with TypeScript
85 lines (84 loc) • 2.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StringAGGStatement = void 0;
const enums_js_1 = require("../enums.js");
const helpers_js_1 = require("../helpers.js");
const serializable_js_1 = require("../serializable.js");
const field_expression_js_1 = require("./field-expression.js");
const order_column_js_1 = require("./order-column.js");
class StringAGGStatement extends serializable_js_1.Serializable {
constructor(field, delimiter) {
super();
this._field =
typeof field === 'string' ? new field_expression_js_1.FieldExpression(field) : field;
this._delimiter = delimiter || ',';
}
get _type() {
return enums_js_1.SerializationType.STRINGAGG_STATEMENT;
}
delimiter(value) {
this._delimiter = value;
return this;
}
/**
* Defines "order by" part of StringAGG.
*/
orderBy(...field) {
this._orderBy = this._orderBy || [];
for (const arg of field) {
if (!arg)
continue;
this._orderBy.push(typeof arg === 'string' ? new order_column_js_1.OrderColumn(arg) : arg);
}
return this;
}
/**
* Sets alias to case expression.
*/
as(alias) {
this._alias = alias;
return this;
}
/**
* Performs serialization
*
* @param {Object} ctx
* @return {string}
* @override
*/
_serialize(ctx) {
const q = {
field: ctx.anyToSQL(this._field),
delimiter: this._delimiter,
orderBy: this.__serializeOrderColumns(ctx),
alias: this._alias,
};
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
}
__serializeOrderColumns(ctx) {
const arr = [];
if (this._orderBy) {
for (const t of this._orderBy) {
const s = t._serialize(ctx);
/* istanbul ignore else */
if (s)
arr.push(s);
}
}
return ctx.serialize(enums_js_1.SerializationType.SELECT_QUERY_ORDERBY, arr, () => {
const s = (0, helpers_js_1.printArray)(arr);
return s ? 'order by ' + s : '';
});
}
__defaultSerialize(ctx, o) {
return ('string_agg(' +
o.field +
",'" +
o.delimiter +
"'" +
(o.orderBy ? ' ' + o.orderBy : '') +
')' +
(o.alias ? ' ' + o.alias : ''));
}
}
exports.StringAGGStatement = StringAGGStatement;