@clickup/ent-framework
Version:
A PostgreSQL graph-database-alike library with microsharding and row-level security
52 lines • 1.85 kB
JavaScript
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
;