welsonjs/lib/db.js

117 lines
3.3 KiB
JavaScript
Raw Normal View History

2020-06-28 14:22:57 +00:00
////////////////////////////////////////////////////////////////////////
// Example Database API
////////////////////////////////////////////////////////////////////////
var LIB = require("lib/std");
2020-07-27 06:00:55 +00:00
exports.VERSIONINFO = "Database Lib (db.js) version 1.0";
exports.global = global;
exports.require = global.require;
exports.open = function(cs) {
2020-07-03 09:15:23 +00:00
var instance = {};
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
// Create a database connection and open the database, setting isolation level
// and timeouts
var open = function(cs) {
try {
instance.Connection = LIB.CreateObject("ADODB.Connection");
} catch (e) {
2020-07-07 22:25:34 +00:00
console.log("Failed to create ADODB.Connection, error = " + e.number + ", " + e.description);
2020-07-03 09:15:23 +00:00
return;
}
instance.ConnectionString = cs;
instance.Connection.open(instance.ConnectionString);
instance.Connection.IsolationLevel = 256; // Uncommitted Reads
instance.Connection.CommandTimeout = 300; // 5 minute command timeout
};
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
// Open the database
open(cs);
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
// Close and re-open the database.
instance.reopen = function() {
instance.Connection.close();
open(instance.ConnectionString);
};
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
// instance.Query
// Run a read only query on the database. Returns a recordset
instance.query = function(sql) {
var RS = LIB.CreateObject("ADODB.Recordset");
RS.LockType = 1; // adLockReadOnly
RS.CursorType = 1; // adOpenKeySet
2020-07-07 22:25:34 +00:00
console.log("> " + sql);
2020-07-03 09:15:23 +00:00
RS.Open(sql, instance.Connection);
return RS;
};
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
// instance.exec
// Run a statement (update or insert) and return true if successful
instance.exec = function(sql) {
2020-07-07 22:25:34 +00:00
console.log("> " + sql);
2020-07-03 09:15:23 +00:00
var ok;
try {
ok = instance.Connection.Execute(sql);
} catch (e) {
ok = null;
LIB.emailError(e, sql);
instance.lastError = e;
}
return ok;
};
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
instance.insert = function(table, columns) {
2020-07-07 22:25:34 +00:00
console.log("> insert into " + table + " some data!");
2020-07-03 09:15:23 +00:00
var RS = LIB.CreateObject("ADODB.Recordset");
RS.open(table, instance.Connection, 2, 3, 2);
RS.addNew();
for (var col in columns) {
RS(col).value = columns[col] || null;
}
RS.Update();
RS.moveLast();
var id = RS(0).value;
RS.close();
return id;
};
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
instance.close = function() {};
2020-06-28 14:22:57 +00:00
2020-07-03 09:15:23 +00:00
return instance;
2020-06-28 14:22:57 +00:00
}
exports.blob2Text = function(blobField, charset) {
2020-06-28 14:22:57 +00:00
var stream = LIB.CreateObject("ADODB.Stream");
2020-07-03 09:15:23 +00:00
stream.Charset = (charset || "us-ascii").replace(/;$/, "");
2020-06-28 14:22:57 +00:00
stream.Type = 1;
stream.Open();
2020-07-07 22:25:34 +00:00
console.log("WRITE STREAM");
2020-06-28 14:22:57 +00:00
stream.Write(blobField);
2020-07-07 22:25:34 +00:00
console.log("DONE WRITE STREAM");
2020-06-28 14:22:57 +00:00
stream.Position = 0;
2020-07-03 09:15:23 +00:00
stream.Type = 2;
var text = stream.ReadText(-1);
2020-06-28 14:22:57 +00:00
stream.Close();
2020-07-03 09:15:23 +00:00
return text;
};
exports.saveBlob = function(filename, blobField) {
2020-07-03 09:15:23 +00:00
try {
var stream = LIB.CreateObject("ADODB.Stream");
stream.Type = 1;
stream.Open();
stream.Write(blobField);
stream.Position = 0;
stream.saveToFile(filename, 2);
stream.Close();
return true;
} catch (e) {
2020-07-07 22:25:34 +00:00
console.log("ERROR " + e.number + " saving blob: " + e.description);
2020-07-03 09:15:23 +00:00
}
2020-06-28 14:22:57 +00:00
};
exports.quoteString = function(s) {
2020-07-03 09:15:23 +00:00
return "'" + s.replace(/\'/g, "''") + "'";
2020-06-28 14:22:57 +00:00
};