UNPKG

nukak-postgres

Version:

flexible and efficient ORM, with declarative JSON syntax and smart type-safety

49 lines 5.32 kB
import { AbstractSqlQuerier } from 'nukak/querier'; import { PostgresDialect } from './postgresDialect.js'; export class PgQuerier extends AbstractSqlQuerier { connect; extra; conn; constructor(connect, extra) { super(new PostgresDialect()); this.connect = connect; this.extra = extra; } async all(query) { this.extra?.logger?.(query); await this.lazyConnect(); try { const res = await this.conn.query(query); return res.rows; } finally { await this.releaseIfFree(); } } async run(query) { this.extra?.logger?.(query); await this.lazyConnect(); try { const { rowCount: changes, rows = [] } = await this.conn.query(query); const ids = rows.map((r) => r.id); return { changes, ids, firstId: ids[0] }; } finally { await this.releaseIfFree(); } } async lazyConnect() { this.conn ??= await this.connect(); } async release() { if (this.hasOpenTransaction) { throw TypeError('pending transaction'); } if (!this.conn) { return; } await this.conn.release(); this.conn = undefined; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGdRdWVyaWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BnUXVlcmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE1BQU0sT0FBTyxTQUFVLFNBQVEsa0JBQWtCO0lBSXBDO0lBQ0E7SUFKWCxJQUFJLENBQWE7SUFFakIsWUFDVyxPQUFrQyxFQUNsQyxLQUFvQjtRQUU3QixLQUFLLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBSHBCLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ2xDLFVBQUssR0FBTCxLQUFLLENBQWU7SUFHL0IsQ0FBQztJQUVRLEtBQUssQ0FBQyxHQUFHLENBQUksS0FBYTtRQUNqQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUksS0FBSyxDQUFDLENBQUM7WUFDNUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ2xCLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFRLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQThCLENBQUM7UUFDdkUsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVRLEtBQUssQ0FBQyxPQUFPO1FBQ3BCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsTUFBTSxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0U3FsUXVlcmllciB9IGZyb20gJ251a2FrL3F1ZXJpZXInO1xuaW1wb3J0IHR5cGUgeyBFeHRyYU9wdGlvbnMsIFF1ZXJ5VXBkYXRlUmVzdWx0IH0gZnJvbSAnbnVrYWsvdHlwZSc7XG5pbXBvcnQgdHlwZSB7IFBvb2xDbGllbnQgfSBmcm9tICdwZyc7XG5pbXBvcnQgeyBQb3N0Z3Jlc0RpYWxlY3QgfSBmcm9tICcuL3Bvc3RncmVzRGlhbGVjdC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBQZ1F1ZXJpZXIgZXh0ZW5kcyBBYnN0cmFjdFNxbFF1ZXJpZXIge1xuICBjb25uOiBQb29sQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGNvbm5lY3Q6ICgpID0+IFByb21pc2U8UG9vbENsaWVudD4sXG4gICAgcmVhZG9ubHkgZXh0cmE/OiBFeHRyYU9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKG5ldyBQb3N0Z3Jlc0RpYWxlY3QoKSk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBhbGw8VD4ocXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMuZXh0cmE/LmxvZ2dlcj8uKHF1ZXJ5KTtcbiAgICBhd2FpdCB0aGlzLmxhenlDb25uZWN0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29ubi5xdWVyeTxUPihxdWVyeSk7XG4gICAgICByZXR1cm4gcmVzLnJvd3M7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVsZWFzZUlmRnJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJ1bihxdWVyeTogc3RyaW5nKSB7XG4gICAgdGhpcy5leHRyYT8ubG9nZ2VyPy4ocXVlcnkpO1xuICAgIGF3YWl0IHRoaXMubGF6eUNvbm5lY3QoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyByb3dDb3VudDogY2hhbmdlcywgcm93cyA9IFtdIH06IGFueSA9IGF3YWl0IHRoaXMuY29ubi5xdWVyeShxdWVyeSk7XG4gICAgICBjb25zdCBpZHMgPSByb3dzLm1hcCgocjogYW55KSA9PiByLmlkKTtcbiAgICAgIHJldHVybiB7IGNoYW5nZXMsIGlkcywgZmlyc3RJZDogaWRzWzBdIH0gc2F0aXNmaWVzIFF1ZXJ5VXBkYXRlUmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbGVhc2VJZkZyZWUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsYXp5Q29ubmVjdCgpIHtcbiAgICB0aGlzLmNvbm4gPz89IGF3YWl0IHRoaXMuY29ubmVjdCgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmVsZWFzZSgpIHtcbiAgICBpZiAodGhpcy5oYXNPcGVuVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcigncGVuZGluZyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29ubikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNvbm4ucmVsZWFzZSgpO1xuICAgIHRoaXMuY29ubiA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19