nukak-postgres
Version:
flexible and efficient ORM, with declarative JSON syntax and smart type-safety
49 lines • 5.32 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGdRdWVyaWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BnUXVlcmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE1BQU0sT0FBTyxTQUFVLFNBQVEsa0JBQWtCO0lBSXBDO0lBQ0E7SUFKWCxJQUFJLENBQWE7SUFFakIsWUFDVyxPQUFrQyxFQUNsQyxLQUFvQjtRQUU3QixLQUFLLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBSHBCLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ2xDLFVBQUssR0FBTCxLQUFLLENBQWU7SUFHL0IsQ0FBQztJQUVRLEtBQUssQ0FBQyxHQUFHLENBQUksS0FBYTtRQUNqQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUksS0FBSyxDQUFDLENBQUM7WUFDNUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ2xCLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFRLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQThCLENBQUM7UUFDdkUsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVRLEtBQUssQ0FBQyxPQUFPO1FBQ3BCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsTUFBTSxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvb2xDbGllbnQgfSBmcm9tICdwZyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhT3B0aW9ucywgUXVlcnlVcGRhdGVSZXN1bHQgfSBmcm9tICdudWthay90eXBlJztcbmltcG9ydCB7IEFic3RyYWN0U3FsUXVlcmllciB9IGZyb20gJ251a2FrL3F1ZXJpZXInO1xuaW1wb3J0IHsgUG9zdGdyZXNEaWFsZWN0IH0gZnJvbSAnLi9wb3N0Z3Jlc0RpYWxlY3QuanMnO1xuXG5leHBvcnQgY2xhc3MgUGdRdWVyaWVyIGV4dGVuZHMgQWJzdHJhY3RTcWxRdWVyaWVyIHtcbiAgY29ubjogUG9vbENsaWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBjb25uZWN0OiAoKSA9PiBQcm9taXNlPFBvb2xDbGllbnQ+LFxuICAgIHJlYWRvbmx5IGV4dHJhPzogRXh0cmFPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihuZXcgUG9zdGdyZXNEaWFsZWN0KCkpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgYWxsPFQ+KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4dHJhPy5sb2dnZXI/LihxdWVyeSk7XG4gICAgYXdhaXQgdGhpcy5sYXp5Q29ubmVjdCgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbm4ucXVlcnk8VD4ocXVlcnkpO1xuICAgICAgcmV0dXJuIHJlcy5yb3dzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbGVhc2VJZkZyZWUoKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBydW4ocXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMuZXh0cmE/LmxvZ2dlcj8uKHF1ZXJ5KTtcbiAgICBhd2FpdCB0aGlzLmxhenlDb25uZWN0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcm93Q291bnQ6IGNoYW5nZXMsIHJvd3MgPSBbXSB9OiBhbnkgPSBhd2FpdCB0aGlzLmNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgY29uc3QgaWRzID0gcm93cy5tYXAoKHI6IGFueSkgPT4gci5pZCk7XG4gICAgICByZXR1cm4geyBjaGFuZ2VzLCBpZHMsIGZpcnN0SWQ6IGlkc1swXSB9IHNhdGlzZmllcyBRdWVyeVVwZGF0ZVJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlSWZGcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGF6eUNvbm5lY3QoKSB7XG4gICAgdGhpcy5jb25uID8/PSBhd2FpdCB0aGlzLmNvbm5lY3QoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlbGVhc2UoKSB7XG4gICAgaWYgKHRoaXMuaGFzT3BlblRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ3BlbmRpbmcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jb25uLnJlbGVhc2UoKTtcbiAgICB0aGlzLmNvbm4gPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==