|
|
@@ -26,7 +26,7 @@ DatabaseHelper.prototype.init = function(allModels) {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-DatabaseHelper.prototype.runSql = function(sqlStatement, args) {
|
|
|
+DatabaseHelper.prototype.runSql = function(sqlStatement, args, fetch) {
|
|
|
console.info("DatabaseHelper::runSql ", sqlStatement, args);
|
|
|
return new Promise((ok, ko) => {
|
|
|
if (sqlStatement.indexOf('--') >= 0) {
|
|
|
@@ -35,12 +35,13 @@ DatabaseHelper.prototype.runSql = function(sqlStatement, args) {
|
|
|
return;
|
|
|
}
|
|
|
try {
|
|
|
- this.db.all(sqlStatement, args, (err, data) => {
|
|
|
+ let fnc = (fetch === false ? this.db.run : this.db.all);
|
|
|
+ fnc.call(this.db, sqlStatement, args, function(err, data) {
|
|
|
if (err) {
|
|
|
console.error(err);
|
|
|
ko(err);
|
|
|
} else {
|
|
|
- ok(data);
|
|
|
+ ok(fetch !== false ? data : this.lastID);
|
|
|
}
|
|
|
});
|
|
|
} catch (err) {
|
|
|
@@ -61,7 +62,10 @@ DatabaseHelper.prototype.insertOne = async function(object) {
|
|
|
let request = "insert into `" +object.getTableName()
|
|
|
+"` (" +columns.join(", ")
|
|
|
+") VALUES (" +columns.map(i => "?").join(",")+")";
|
|
|
- await this.runSql(request, args);
|
|
|
+ let id = await this.runSql(request, args, false);
|
|
|
+ if (object.id !== undefined)
|
|
|
+ object.id = id;
|
|
|
+ return id;
|
|
|
}
|
|
|
|
|
|
DatabaseHelper.prototype.insertMultipleSameTable = async function(arr) {
|
|
|
@@ -82,7 +86,7 @@ DatabaseHelper.prototype.insertMultipleSameTable = async function(arr) {
|
|
|
for (let [key, val] of Object.entries(i.describe()))
|
|
|
args.push(val);
|
|
|
}
|
|
|
- await this.runSql(request, args);
|
|
|
+ await this.runSql(request, args, false);
|
|
|
}
|
|
|
|
|
|
DatabaseHelper.prototype.upsertOne = async function(obj) {
|
|
|
@@ -100,7 +104,7 @@ DatabaseHelper.prototype.upsertOne = async function(obj) {
|
|
|
+"` (" +columns.join(", ")
|
|
|
+") VALUES (" +columns.map((_, i) => `:${i}`).join(",")+")"
|
|
|
+" ON CONFLICT DO UPDATE SET " +columnsVal.join(", ");
|
|
|
- await this.runSql(request, args);
|
|
|
+ await this.runSql(request, args, false);
|
|
|
}
|
|
|
|
|
|
DatabaseHelper.prototype.buildWhere = function(whereObj, columns, args) {
|
|
|
@@ -131,14 +135,14 @@ DatabaseHelper.prototype.maxVersion = async function(instanceName) {
|
|
|
let queryParts = [];
|
|
|
for (let i of this.models)
|
|
|
queryParts.push("select max(" +i.prototype.versionColumn.call(null) +") as v from " +i.prototype.getTableName.call(null) +" where instance=:0");
|
|
|
- let version = await this.runSql("select max(v) as v from (" +queryParts.join(" union ") +")", [ instanceName ]);
|
|
|
+ let version = await this.runSql("select max(v) as v from (" +queryParts.join(" union ") +")", [ instanceName ], true);
|
|
|
return (version?.[0]?.v) || 0;
|
|
|
}
|
|
|
|
|
|
DatabaseHelper.prototype.versionFetch = async function(objectPrototype, minVersion) {
|
|
|
let query = "select * from `" +objectPrototype.prototype.getTableName.call(null) +"` where `" +objectPrototype.prototype.versionColumn.call(null)+"` > ? and instance=?";
|
|
|
let result = [];
|
|
|
- for (let i of await this.runSql(query, [minVersion, CONFIG.instanceHostname]))
|
|
|
+ for (let i of await this.runSql(query, [minVersion, CONFIG.instanceHostname], true))
|
|
|
{
|
|
|
let resultObj = new objectPrototype();
|
|
|
resultObj.fromDb(i);
|
|
|
@@ -164,12 +168,12 @@ DatabaseHelper.prototype.fetchRaw = async function(columns, tableName, where, or
|
|
|
let query = "select " + (Array.isArray(columns) ? columns.join(","): columns) +" from `" +tableName +"` where " +whereArgs.columns.join(" and ");
|
|
|
if (orderBy)
|
|
|
query += " ORDER BY " +Object.keys(orderBy || {}).map(i => "`"+i+"` " +(orderBy[i] === 'DESC' ? "DESC":"ASC")).join(",");
|
|
|
- return await this.runSql(query, whereArgs.args);
|
|
|
+ return await this.runSql(query, whereArgs.args, true);
|
|
|
}
|
|
|
|
|
|
DatabaseHelper.prototype.findOne = async function(objectPrototype, where) {
|
|
|
let whereArgs = this.buildWhere(where);
|
|
|
- let result = await this.runSql("select * from `" +objectPrototype.prototype.getTableName.call(null) +"` where " +whereArgs.columns.join(" and "), whereArgs.args);
|
|
|
+ let result = await this.runSql("select * from `" +objectPrototype.prototype.getTableName.call(null) +"` where " +whereArgs.columns.join(" and "), whereArgs.args, true);
|
|
|
if (result && result.length)
|
|
|
{
|
|
|
let resultObj = new objectPrototype();
|
|
|
@@ -197,7 +201,7 @@ DatabaseHelper.prototype.rawUpdate = async function(model, where, values) {
|
|
|
let query = "update `" +(model.prototype?.getTableName ? model.prototype.getTableName() : model.getTableName())
|
|
|
+"` set " +columns.join(", ")
|
|
|
+" WHERE " +whereArgs.columns.join(" and ");
|
|
|
- await this.runSql(query, args);
|
|
|
+ await this.runSql(query, args, false);
|
|
|
}
|
|
|
|
|
|
module.exports.DatabaseHelper = new DatabaseHelper();
|