UNPKG

@sqb/builder

Version:

Extensible multi-dialect SQL query builder written with TypeScript

85 lines (84 loc) 2.59 kB
"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;