nukak-mysql
Version:
flexible and efficient ORM, with declarative JSON syntax and smart type-safety
53 lines • 5.78 kB
JavaScript
import { AbstractSqlQuerier } from 'nukak/querier';
import { MySqlDialect } from './mysqlDialect.js';
export class MySql2Querier extends AbstractSqlQuerier {
connect;
extra;
conn;
constructor(connect, extra) {
super(new MySqlDialect());
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;
}
finally {
await this.releaseIfFree();
}
}
async run(query) {
this.extra?.logger?.(query);
await this.lazyConnect();
try {
const [res] = await this.conn.query(query);
const ids = res.insertId
? Array(res.affectedRows)
.fill(res.insertId)
.map((i, index) => i + index)
: [];
return { changes: res.affectedRows, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwyUXVlcmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9teXNxbDJRdWVyaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBa0I7SUFJeEM7SUFDQTtJQUpYLElBQUksQ0FBaUI7SUFFckIsWUFDVyxPQUFzQyxFQUN0QyxLQUFvQjtRQUU3QixLQUFLLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBSGpCLFlBQU8sR0FBUCxPQUFPLENBQStCO1FBQ3RDLFVBQUssR0FBTCxLQUFLLENBQWU7SUFHL0IsQ0FBQztJQUVRLEtBQUssQ0FBQyxHQUFHLENBQUksS0FBYTtRQUNqQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE9BQU8sR0FBVSxDQUFDO1FBQ3BCLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFRLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVE7Z0JBQ3RCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztxQkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7cUJBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQThCLENBQUM7UUFDekYsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVRLEtBQUssQ0FBQyxPQUFPO1FBQ3BCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsTUFBTSxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUG9vbENvbm5lY3Rpb24gfSBmcm9tICdteXNxbDIvcHJvbWlzZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFNxbFF1ZXJpZXIgfSBmcm9tICdudWthay9xdWVyaWVyJztcbmltcG9ydCB0eXBlIHsgRXh0cmFPcHRpb25zLCBRdWVyeVVwZGF0ZVJlc3VsdCB9IGZyb20gJ251a2FrL3R5cGUnO1xuaW1wb3J0IHsgTXlTcWxEaWFsZWN0IH0gZnJvbSAnLi9teXNxbERpYWxlY3QuanMnO1xuXG5leHBvcnQgY2xhc3MgTXlTcWwyUXVlcmllciBleHRlbmRzIEFic3RyYWN0U3FsUXVlcmllciB7XG4gIGNvbm46IFBvb2xDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGNvbm5lY3Q6ICgpID0+IFByb21pc2U8UG9vbENvbm5lY3Rpb24+LFxuICAgIHJlYWRvbmx5IGV4dHJhPzogRXh0cmFPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihuZXcgTXlTcWxEaWFsZWN0KCkpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgYWxsPFQ+KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4dHJhPy5sb2dnZXI/LihxdWVyeSk7XG4gICAgYXdhaXQgdGhpcy5sYXp5Q29ubmVjdCgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbcmVzXSA9IGF3YWl0IHRoaXMuY29ubi5xdWVyeShxdWVyeSk7XG4gICAgICByZXR1cm4gcmVzIGFzIFRbXTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlSWZGcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcnVuKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4dHJhPy5sb2dnZXI/LihxdWVyeSk7XG4gICAgYXdhaXQgdGhpcy5sYXp5Q29ubmVjdCgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbcmVzXTogYW55ID0gYXdhaXQgdGhpcy5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIGNvbnN0IGlkcyA9IHJlcy5pbnNlcnRJZFxuICAgICAgICA/IEFycmF5KHJlcy5hZmZlY3RlZFJvd3MpXG4gICAgICAgICAgICAuZmlsbChyZXMuaW5zZXJ0SWQpXG4gICAgICAgICAgICAubWFwKChpLCBpbmRleCkgPT4gaSArIGluZGV4KVxuICAgICAgICA6IFtdO1xuICAgICAgcmV0dXJuIHsgY2hhbmdlczogcmVzLmFmZmVjdGVkUm93cywgaWRzLCBmaXJzdElkOiBpZHNbMF0gfSBzYXRpc2ZpZXMgUXVlcnlVcGRhdGVSZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVsZWFzZUlmRnJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxhenlDb25uZWN0KCkge1xuICAgIHRoaXMuY29ubiA/Pz0gYXdhaXQgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyByZWxlYXNlKCkge1xuICAgIGlmICh0aGlzLmhhc09wZW5UcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdwZW5kaW5nIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY29ubi5yZWxlYXNlKCk7XG4gICAgdGhpcy5jb25uID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=