nukak-postgres
Version:
flexible and efficient ORM, with declarative JSON syntax and smart type-safety
39 lines • 5.06 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(extra?.namingStrategy));
this.connect = connect;
this.extra = extra;
}
async internalAll(query, values) {
this.extra?.logger?.(query, values);
await this.lazyConnect();
const res = await this.conn.query(query, values);
return res.rows;
}
async internalRun(query, values) {
this.extra?.logger?.(query, values);
await this.lazyConnect();
const { rowCount: changes, rows = [] } = await this.conn.query(query, values);
const ids = rows.map((r) => r.id);
return { changes, ids, firstId: ids[0] };
}
async lazyConnect() {
this.conn ??= await this.connect();
}
async internalRelease() {
if (this.hasOpenTransaction) {
throw TypeError('pending transaction');
}
if (!this.conn) {
return;
}
await this.conn.release();
this.conn = undefined;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGdRdWVyaWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BnUXVlcmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE1BQU0sT0FBTyxTQUFVLFNBQVEsa0JBQWtCO0lBSXBDO0lBQ0E7SUFKWCxJQUFJLENBQWE7SUFFakIsWUFDVyxPQUFrQyxFQUNsQyxLQUFvQjtRQUU3QixLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFIekMsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBZTtJQUcvQixDQUFDO0lBRVEsS0FBSyxDQUFDLFdBQVcsQ0FBSSxLQUFhLEVBQUUsTUFBa0I7UUFDN0QsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBSSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFUSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWEsRUFBRSxNQUFrQjtRQUMxRCxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQThCLENBQUM7SUFDdkUsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRVEsS0FBSyxDQUFDLGVBQWU7UUFDNUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixNQUFNLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RTcWxRdWVyaWVyIH0gZnJvbSAnbnVrYWsvcXVlcmllcic7XG5pbXBvcnQgdHlwZSB7IEV4dHJhT3B0aW9ucywgUXVlcnlVcGRhdGVSZXN1bHQgfSBmcm9tICdudWthay90eXBlJztcbmltcG9ydCB0eXBlIHsgUG9vbENsaWVudCB9IGZyb20gJ3BnJztcbmltcG9ydCB7IFBvc3RncmVzRGlhbGVjdCB9IGZyb20gJy4vcG9zdGdyZXNEaWFsZWN0LmpzJztcblxuZXhwb3J0IGNsYXNzIFBnUXVlcmllciBleHRlbmRzIEFic3RyYWN0U3FsUXVlcmllciB7XG4gIGNvbm46IFBvb2xDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgY29ubmVjdDogKCkgPT4gUHJvbWlzZTxQb29sQ2xpZW50PixcbiAgICByZWFkb25seSBleHRyYT86IEV4dHJhT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIobmV3IFBvc3RncmVzRGlhbGVjdChleHRyYT8ubmFtaW5nU3RyYXRlZ3kpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGludGVybmFsQWxsPFQ+KHF1ZXJ5OiBzdHJpbmcsIHZhbHVlcz86IHVua25vd25bXSkge1xuICAgIHRoaXMuZXh0cmE/LmxvZ2dlcj8uKHF1ZXJ5LCB2YWx1ZXMpO1xuICAgIGF3YWl0IHRoaXMubGF6eUNvbm5lY3QoKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbm4ucXVlcnk8VD4ocXVlcnksIHZhbHVlcyk7XG4gICAgcmV0dXJuIHJlcy5yb3dzO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgaW50ZXJuYWxSdW4ocXVlcnk6IHN0cmluZywgdmFsdWVzPzogdW5rbm93bltdKSB7XG4gICAgdGhpcy5leHRyYT8ubG9nZ2VyPy4ocXVlcnksIHZhbHVlcyk7XG4gICAgYXdhaXQgdGhpcy5sYXp5Q29ubmVjdCgpO1xuICAgIGNvbnN0IHsgcm93Q291bnQ6IGNoYW5nZXMsIHJvd3MgPSBbXSB9OiBhbnkgPSBhd2FpdCB0aGlzLmNvbm4ucXVlcnkocXVlcnksIHZhbHVlcyk7XG4gICAgY29uc3QgaWRzID0gcm93cy5tYXAoKHI6IGFueSkgPT4gci5pZCk7XG4gICAgcmV0dXJuIHsgY2hhbmdlcywgaWRzLCBmaXJzdElkOiBpZHNbMF0gfSBzYXRpc2ZpZXMgUXVlcnlVcGRhdGVSZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsYXp5Q29ubmVjdCgpIHtcbiAgICB0aGlzLmNvbm4gPz89IGF3YWl0IHRoaXMuY29ubmVjdCgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgaW50ZXJuYWxSZWxlYXNlKCkge1xuICAgIGlmICh0aGlzLmhhc09wZW5UcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdwZW5kaW5nIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY29ubi5yZWxlYXNlKCk7XG4gICAgdGhpcy5jb25uID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=