let sqlite add extensions

This commit is contained in:
Dave Conway-Jones 2018-08-22 13:58:55 +01:00
parent 85ddffb98f
commit 1b0f573f4e
No known key found for this signature in database
GPG Key ID: 9E7F9C73F5168CD4
4 changed files with 30 additions and 15 deletions

View File

@ -25,6 +25,8 @@ By it's very nature it is SQL injection... so *be careful* out there...
Typically the returned payload will be an array of the result rows, (or an error).
You can load sqlite extensions by inputting a <code>msg.extension</code> property containing the full path and filename.
The reconnect timeout in milliseconds can be changed by adding a line to **settings.js**
sqliteReconnectTime: 20000,

View File

@ -1,6 +1,6 @@
{
"name": "node-red-node-sqlite",
"version": "0.3.2",
"version": "0.3.3",
"description": "A sqlite node for Node-RED",
"dependencies": {
"sqlite3": "^4.0.2"

View File

@ -77,6 +77,8 @@
be sure to include $ on the parameter object key.</p>
<p>Using any SQL Query, the result is returned in <code>msg.payload</code></p>
<p>Typically the returned payload will be an array of the result rows, (or an error).</p>
<p>You can load sqlite extensions by inputting a <code>msg.extension</code> property containing the full
path and filename.</p>
<p>The reconnect timeout in milliseconds can be changed by adding a line to <b>settings.js</b>
<pre>sqliteReconnectTime: 20000,</pre></p>
</script>

View File

@ -43,12 +43,13 @@ module.exports = function(RED) {
var node = this;
node.status({});
if (this.mydbConfig) {
this.mydbConfig.doConnect();
if (node.mydbConfig) {
node.mydbConfig.doConnect();
node.status({fill:"green",shape:"dot",text:this.mydbConfig.mod});
var bind = [];
node.on("input", function(msg) {
if (this.sqlquery == "msg.topic"){
var doQuery = function(msg) {
if (node.sqlquery == "msg.topic"){
if (typeof msg.topic === 'string') {
bind = Array.isArray(msg.payload) ? msg.payload : [];
node.mydbConfig.db.all(msg.topic, bind, function(err, row) {
@ -64,7 +65,7 @@ module.exports = function(RED) {
node.status({fill:"red",shape:"dot",text:"msg.topic error"});
}
}
if (this.sqlquery == "batch") {
if (node.sqlquery == "batch") {
if (typeof msg.topic === 'string') {
node.mydbConfig.db.exec(msg.topic, function(err) {
if (err) { node.error(err,msg);}
@ -79,10 +80,10 @@ module.exports = function(RED) {
node.status({fill:"red", shape:"dot",text:"msg.topic error"});
}
}
if (this.sqlquery == "fixed"){
if (typeof this.sql === 'string'){
if (node.sqlquery == "fixed"){
if (typeof node.sql === 'string'){
bind = Array.isArray(msg.payload) ? msg.payload : [];
node.mydbConfig.db.all(this.sql, bind, function(err, row) {
node.mydbConfig.db.all(node.sql, bind, function(err, row) {
if (err) { node.error(err,msg); }
else {
msg.payload = row;
@ -91,15 +92,15 @@ module.exports = function(RED) {
});
}
else{
if (this.sql === null || this.sql == ""){
if (node.sql === null || node.sql == ""){
node.error("SQL statement config not set up",msg);
node.status({fill:"red",shape:"dot",text:"SQL config not set up"});
}
}
}
if (this.sqlquery == "prepared"){
if (typeof this.sql === 'string' && typeof msg.params !== "undefined" && typeof msg.params === "object"){
node.mydbConfig.db.all(this.sql, msg.params, function(err, row) {
if (node.sqlquery == "prepared"){
if (typeof node.sql === 'string' && typeof msg.params !== "undefined" && typeof msg.params === "object"){
node.mydbConfig.db.all(node.sql, msg.params, function(err, row) {
if (err) { node.error(err,msg); }
else {
msg.payload = row;
@ -108,7 +109,7 @@ module.exports = function(RED) {
});
}
else{
if (this.sql === null || this.sql == ""){
if (node.sql === null || node.sql == ""){
node.error("Prepared statement config not set up",msg);
node.status({fill:"red",shape:"dot",text:"Prepared statement not set up"});
}
@ -122,10 +123,20 @@ module.exports = function(RED) {
}
}
}
}
node.on("input", function(msg) {
if (msg.hasOwnProperty("extension")) {
node.mydbConfig.db.loadExtension(msg.extension, function(err) {
if (err) { node.error(err,msg); }
else { doQuery(msg); }
});
}
else { doQuery(msg); }
});
}
else {
this.error("Sqlite database not configured");
node.error("Sqlite database not configured");
}
}
RED.nodes.registerType("sqlite",SqliteNodeIn);