UNPKG

@clickup/ent-framework

Version:

A PostgreSQL graph-database-alike library with microsharding and row-level security

52 lines 1.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PgQueryCount = void 0; const QueryBase_1 = require("../abstract/QueryBase"); const PgRunner_1 = require("./PgRunner"); class PgQueryCount extends QueryBase_1.QueryBase { constructor() { super(...arguments); /** @ignore */ this.RUNNER_CLASS = PgRunnerCount; } } exports.PgQueryCount = PgQueryCount; class PgRunnerCount extends PgRunner_1.PgRunner { constructor(schema, client) { super(schema, client); this.op = "COUNT"; this.maxBatchSize = 100; this.default = 0; // We just need something here. this.builder = this.createWhereBuilder({ prefix: this.fmt("SELECT COUNT(1) AS count FROM %T "), suffix: this.fmt(""), }); } key(input) { // Coalesce equal queries. return JSON.stringify(input); } async runSingle(input, annotations) { const sql = this.builder.prefix + this.builder.func(input) + this.builder.suffix; const res = await this.clientQuery(sql, annotations, 1); return parseInt(res[0].count); } async runBatch(inputs, annotations) { // SELECT COUNT(1) FROM ... WHERE ... // UNION ALL // SELECT COUNT(1) FROM ... WHERE ... const sql = [...inputs.values()] .map((input) => this.builder.prefix + this.builder.func(input) + this.builder.suffix) .join("\n UNION ALL\n"); const rows = await this.clientQuery(sql, annotations, inputs.size); const outputs = new Map(); let i = 0; for (const key of inputs.keys()) { outputs.set(key, parseInt(rows[i].count)); i++; } return outputs; } } PgRunnerCount.IS_WRITE = false; //# sourceMappingURL=PgQueryCount.js.map