A Node.js adapter for PawSQLite
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

68 lines
1.5 KiB

import { NodeAdapterError } from "./node_adapter_error.mjs";
import { ResponseWrapper } from "./response_wrapper.mjs";
import { log } from "./log.mjs";
export class QueryWrapper {
constructor(sql, ...args) {
this.sql = sql.trim();
this.args = args;
this.operation = sql.replace(/[^a-z].*/i, "").toUpperCase();
}
isAnyOf(...operations) {
for (const op of operations) {
if(op.toUpperCase() === this.operation) {
return true;
}
}
return false;
}
execute(db) {
if (this.isAnyOf("INSERT", "UPDATE", "DELETE")) {
return this.executeRun(db);
} else {
return this.executeAll(db);
}
}
executeRun(db) {
return new Promise((resolve, reject) => {
const self = this;
log(this.sql);
db.run(this.sql, ...this.args, function (err) {
if (err) {
reject(NodeAdapterError.from(err));
return;
}
const result = {};
if (self.isAnyOf("INSERT")) {
result.insertId = this.lastID;
}
if (self.isAnyOf("UPDATE", "DELETE")) {
result.rowsAffected = this.changes;
}
resolve(ResponseWrapper.success(result));
});
});
}
executeAll(db) {
return new Promise((resolve, reject) => {
log(this.sql);
db.all(this.sql, ...this.args, function (err, rows) {
if (err) {
reject(NodeAdapterError.from(err));
return;
}
resolve(ResponseWrapper.success({rows}));
});
});
}
}