From 633086df899901c90749715953843cf02b5449f0 Mon Sep 17 00:00:00 2001 From: Peter Prib Date: Tue, 15 Sep 2020 10:53:41 +1000 Subject: [PATCH] fix cassandra bug --- README.md | 2 + connectionManager/connection-manager.js | 91 ++++++++++++++++++++++--- package-lock.json | 2 +- package.json | 2 +- 4 files changed, 86 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 5bcaca5..c97583a 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,8 @@ _Note_ The examples will require the drivers to be installed # Version +0.1.1 Bug fix commits DataStax and Cassandra as concept doesn't exist + 0.1.0 Add DataStax and Cassandra. Include drivers rather than separate install. Add limited mustache on statements. Performance metrics. 0.0.7 Use new feature in postgresql to return columns as array diff --git a/connectionManager/connection-manager.js b/connectionManager/connection-manager.js index de2bfd9..6fb9afa 100644 --- a/connectionManager/connection-manager.js +++ b/connectionManager/connection-manager.js @@ -474,6 +474,15 @@ function Driver(a) { a ); } +Driver.prototype.batch=function(pool,conn,done,error) { + const batch=conn.batch; + if(batch==null) { + done(); + return; + } + delete conn.batch; + this.query(pool,conn,"begin batch "+batch.join(";")+" apply batch;",null,done,error); //cassandra form +} Driver.prototype.beginTransactionNoAction=function(pool,conn,done,error) { if(logger.active) logger.send("Driver.beginTransactionNoAction"); done(); @@ -635,6 +644,29 @@ Driver.prototype.getConnectionQ=function(pool,node,done,error) { error(e); } }; +Driver.prototype.execC=function(pool,preparedSql,params,done,error) { + if(logger.active) logger.send("Driver.execC "+JSON.stringify({params:params})); + const thisObject=this; + try{ + preparedSql.exec(params||this.paramNull, + (result)=>{ + if(logger.active) logger.send("Driver.execC first 100 chars results"+JSON.stringify(result||"").substring(1,100)); + done(result); + }, + (err)=>{ + if(logger.active) logger.send("Driver.execC fail: "+err); + try{ + error(err); + } catch(e) { + logger.sendError("Driver.execC fail error: "+e+" stack:\n"+e.stack); + } + } + ); + } catch(e) { + logger.sendError("Driver.execC error: "+e); + error(e); + } +}; Driver.prototype.execQ=function(pool,preparedSql,params,done,error) { if(logger.active) logger.send("Driver.execQ "+JSON.stringify({params:params})); const thisObject=this; @@ -658,6 +690,25 @@ Driver.prototype.execQ=function(pool,preparedSql,params,done,error) { error(e); } }; +Driver.prototype.prepareC=function(pool,conn,sql,done,error) { + if(logger.active) logger.send("Driver.prepareC "+JSON.stringify({sql:sql})); + const thisObject=this; + try{ + conn.prepare(sql, + (prepResult)=>{ + if(logger.active) logger.send("Driver.prepareC prepared completed"); + done(prepResult); + }, + (err)=>{ + if(logger.active) logger.send("Driver.prepareC fail: "+err); + error(err); + } + ); + } catch(e) { + logger.sendError("Driver.prepareC error: "+e); + error(e); + } +}; Driver.prototype.prepareQ=function(pool,conn,sql,done,error) { if(logger.active) logger.send("Driver.prepareQ "+JSON.stringify({sql:sql})); const thisObject=this; @@ -696,15 +747,15 @@ Driver.prototype.queryC=function(pool,conn,sql,params,done,error) { } }; Driver.prototype.queryCE=function(pool,conn,sql,params,done,error) { - if(logger.active) logger.send("Driver.queryC "+JSON.stringify({sql:sql,params:params})); + if(logger.active) logger.send("Driver.queryCE "+JSON.stringify({sql:sql,params:params})); const thisObject=this; try{ conn.execute(sql,(params||this.paramNull),(err, result) => { if(err) { - if(logger.active) logger.send("Driver.queryC error: "+err); + if(logger.active) logger.send("Driver.queryCE error: "+err); error(err); } else { - if(logger.active) logger.send("Driver.queryC first 100 chars results"+JSON.stringify(result||"").substring(1,100)); + if(logger.active) logger.send("Driver.queryCE first 100 chars results"+JSON.stringify(result||"").substring(1,100)); done(result); } }); @@ -713,28 +764,44 @@ Driver.prototype.queryCE=function(pool,conn,sql,params,done,error) { error(e); } }; - +Driver.prototype.queryCEP=function(pool,conn,sql,params,done,error) { + if(logger.active) logger.send("Driver.queryCEP "+JSON.stringify({sql:sql,params:params})); + const thisObject=this; + try{ + conn.execute(sql,(params||this.paramNull),{prepare:true},(err, result) => { + if(err) { + if(logger.active) logger.send("Driver.queryCEP error: "+err); + error(err); + } else { + if(logger.active) logger.send("Driver.queryCEP first 100 chars results"+JSON.stringify(result||"").substring(1,100)); + done(result); + } + }); + } catch(e) { + logger.sendError("Driver.queryCEP error: "+e); + error(e); + } +}; Driver.prototype.queryCPG=function(pool,conn,sql,params,done,error) { const thisObject=this, query={text:sql,values:(params||this.paramNull)}; if(pool.node.columnsAsArray) query.rowMode='array'; - if(logger.active) logger.send({label:"Driver.queryCOG ",query:query}); + if(logger.active) logger.send({label:"Driver.queryCPG ",query:query}); try{ conn.query(query,(err, result) => { if(err) { - if(logger.active) logger.send("Driver.queryC error: "+err); + if(logger.active) logger.send("Driver.queryCPG error: "+err); error(err); } else { - if(logger.active) logger.send("Driver.queryC first 100 chars results"+JSON.stringify(result||"").substring(1,100)); + if(logger.active) logger.send("Driver.queryCPG first 100 chars results"+JSON.stringify(result||"").substring(1,100)); done(result); } }); } catch(e) { - logger.sendError("Driver.queryC error: "+e); + logger.sendError("Driver.queryCPG error: "+e); error(e); } }, - Driver.prototype.queryNeo4j=function(pool,session,cmd,params,done,error) { if(logger.active) logger.send("Driver.queryNeo4j "+JSON.stringify({cmd:cmd,params:params})); try{ @@ -779,7 +846,10 @@ let DriverType = { requireName:'cassandra-driver', query:Driver.prototype.queryCE, beginTransaction:Driver.prototype.beginTransactionNoAction, + commit:Driver.prototype.commitNoAction, testOnConnect:"use {{dbname}}", + prepareIsQuery:true, + query:Driver.prototype.queryCEP, optionsMapping: { options:true, credentials: { username: 'user', password: 'password' }, @@ -799,7 +869,10 @@ let DriverType = { requireName:'dse-driver', query:Driver.prototype.queryCE, beginTransaction:Driver.prototype.beginTransactionNoAction, + commit:Driver.prototype.commitNoAction, testOnConnect:"use {{dbname}}", + prepareIsQuery:true, + query:Driver.prototype.queryCEP, optionsMapping: { options:true, credentials: { username: 'user', password: 'password' }, diff --git a/package-lock.json b/package-lock.json index 569f680..129ebb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-connectionmanager", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ed9db3f..bfc6492 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-connectionmanager", - "version": "0.1.0", + "version": "0.1.1", "description": "Node-RED implements generalised connections manager.", "dependencies": { "node-red-contrib-logger": "0.0.4",