New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ci-node-query

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ci-node-query - npm Package Compare versions

Comparing version 3.1.0 to 3.2.0

CHANGELOG.md

5

lib/adapters/dblite.js

@@ -5,3 +5,3 @@ 'use strict';

getArgs = require('getargs'),
Promise = require('bluebird');
promisify = require('../promisify');

@@ -19,6 +19,5 @@ module.exports = class dblite extends Adapter {

let args = getArgs('sql:string, [params]:array, [callback]:function', arguments);
let instance = Promise.promisifyAll(this.instance);
if (! args.callback) {
return instance.queryAsync(args.sql, args.params);
return promisify(this.instance.query)(args.sql, args.params);
}

@@ -25,0 +24,0 @@

7

lib/adapters/mysql.js

@@ -5,3 +5,3 @@ 'use strict';

getArgs = require('getargs'),
Promise = require('bluebird');
promisify = require('../promisify');

@@ -18,7 +18,6 @@ module.exports = class mysql extends Adapter {

execute(sql, params, callback) {
let args = getArgs('sql:string, [params], [callback]:function', arguments);
let instance = Promise.promisifyAll(this.instance);
let args = getArgs('sql:string, [params]:array, [callback]:function', arguments);
if (! args.callback) {
return instance.queryAsync(args.sql, args.params);
return promisify(this.instance.query)(args.sql, args.params);
}

@@ -25,0 +24,0 @@

@@ -5,3 +5,3 @@ 'use strict';

getArgs = require('getargs'),
Promise = require('bluebird');
promisify = require('../promisify');

@@ -18,7 +18,6 @@ module.exports = class mysql2 extends Adapter {

execute(/*sql, params, callback*/) {
let args = getArgs('sql:string, [params], [callback]:function', arguments);
let instance = Promise.promisifyAll(this.instance);
let args = getArgs('sql:string, [params]:array, [callback]:function', arguments);
if (! args.callback) {
return instance.executeAsync(args.sql, args.params);
return promisify(this.instance.execute)(args.sql, args.params);
}

@@ -25,0 +24,0 @@

'use strict';
let Adapter = require('../Adapter'),
getArgs = require('getargs'),
Promise = require('bluebird');
getArgs = require('getargs');

@@ -18,6 +17,16 @@ module.exports = class nodefirebird extends Adapter {

let args = getArgs('sql:string, [params], [callback]:function', arguments);
let instance = Promise.promisifyAll(this.instance);
if (! args.callback) {
return instance.queryAsync(args.sql, args.params);
//return instance.queryAsync(args.sql, args.params);
if (! args.callback) {
return new Promise((resolve, reject) => {
this.instance.query(args.sql, args.params, (err, result) => {
if (err) {
return reject(err);
}
return resolve(result);
});
});
}
}

@@ -24,0 +33,0 @@

'use strict';
let Adapter = require('../Adapter'),
getArgs = require('getargs'),
Promise = require('bluebird');
getArgs = require('getargs');

@@ -18,3 +17,2 @@ module.exports = class pg extends Adapter {

let args = getArgs('sql:string, [params]:array, [callback]:function', arguments);
let instance = Promise.promisifyAll(this.instance);

@@ -29,3 +27,11 @@ // Replace question marks with numbered placeholders, because this adapter is different...

if (! args.callback) {
return instance.queryAsync(args.sql, args.params);
return new Promise((resolve, reject) => {
this.instance.query(args.sql, args.params, (err, result) => {
if (err) {
return reject(err);
}
return resolve(result);
});
});
}

@@ -32,0 +38,0 @@

@@ -10,3 +10,3 @@ 'use strict';

*/
module.exports = (function() {
module.exports = (() => {
delete require.cache[require.resolve('../Driver')];

@@ -25,3 +25,3 @@ let driver = require('../Driver');

*/
driver.limit = function(origSql, limit, offset) {
driver.limit = (origSql, limit, offset) => {
let sql = `FIRST ${limit}`;

@@ -43,3 +43,3 @@

*/
driver.insertBatch = function() {
driver.insertBatch = () => {
throw new Error('Not Implemented');

@@ -49,2 +49,2 @@ };

return driver;
}());
})();

@@ -8,3 +8,3 @@ 'use strict';

*/
module.exports = (function() {
module.exports = (() => {
delete require.cache[require.resolve('../Driver')];

@@ -25,3 +25,3 @@ let driver = require('../Driver'),

*/
driver.limit = function(sql, limit, offset) {
driver.limit = (sql, limit, offset) => {
if (! helpers.isNumber(offset)) {

@@ -36,2 +36,2 @@ return sql += ` LIMIT ${limit}`;

}());
})();

@@ -8,3 +8,3 @@ 'use strict';

*/
module.exports = (function() {
module.exports = (() => {
delete require.cache[require.resolve('../Driver')];

@@ -14,2 +14,2 @@ let driver = require('../Driver');

return driver;
}());
})();

@@ -8,3 +8,3 @@ 'use strict';

*/
module.exports = (function() {
module.exports = (() => {
delete require.cache[require.resolve('../Driver')];

@@ -24,3 +24,3 @@ let driver = require('../Driver');

*/
driver.insertBatch = function(table, data) {
driver.insertBatch = (table, data) => {

@@ -68,2 +68,2 @@ // Get the data values to insert, so they can

return driver;
}());
})();

@@ -136,3 +136,3 @@ 'use strict';

*/
helpers[`is${t}`] = function(o) {
helpers[`is${t}`] = function (o) {
if (t.toLowerCase() === 'infinite') {

@@ -139,0 +139,0 @@ t = 'infinity';

'use strict';
let getArgs = require('getargs'),
helpers = require('./helpers'),
State = require('./State'),
QueryParser = require('./QueryParser');
const getArgs = require('getargs');
const helpers = require('./helpers');
const State = require('./State');
const QueryParser = require('./QueryParser');
/**
* Main object that builds SQL queries.
*
* @param {Driver} Driver - The syntax driver for the database
* @param {Adapter} Adapter - The database module adapter for running queries
*/
class QueryBuilder {
class QueryBuilderBase {
/**

@@ -272,5 +266,5 @@ * @private

if (callback) {
return this.adapter.execute(sql, vals, callback);
return this.query(sql, vals, callback);
} else {
return this.adapter.execute(sql, vals);
return this.query(sql, vals);
}

@@ -294,3 +288,21 @@ }

}
}
/**
* Main object that builds SQL queries.
*
* @param {Driver} Driver - The syntax driver for the database
* @param {Adapter} Adapter - The database module adapter for running queries
*/
class QueryBuilder extends QueryBuilderBase {
/**
* @private
* @constructor
* @param {Driver} Driver - The syntax driver for the database
* @param {Adapter} Adapter - The database module adapter for running queries
*/
constructor(Driver, Adapter) {
super(Driver, Adapter);
}
// ----------------------------------------------------------------------------

@@ -301,2 +313,14 @@ // ! Miscellaneous Methods

/**
* Manually make an sql query
*
* @param {string} sql - The sql to execute
* @param {array} [params] - The query parameters
* @param {function} [callback] - Optional callback
* @return {void|Promise} - Returns a promise if no callback is supplied
*/
query(/*sql:string, [params]:array, [callback]:function*/) {
return this.adapter.execute.apply(this.adapter, arguments);
}
/**
* Reset the object state for a new query

@@ -303,0 +327,0 @@ *

'use strict';
let helpers = require('./helpers');
const XRegExp = require('xregexp');
const helpers = require('./helpers');

@@ -23,3 +24,3 @@ // --------------------------------------------------------------------------

let matchPatterns = {
const matchPatterns = {
function: /([a-z0-9_]+\((.*)\))/i,

@@ -32,17 +33,17 @@ operator: /\!=?|\=|\+|&&?|~|\|\|?|\^|\/|<>|>=?|<=?|\-|%|OR|AND|NOT|XOR/ig,

// Making sure that literals and functions aren't matched
matchPatterns.identifier = new RegExp(
'('
+ '(?!'
+ matchPatterns['function'].source + '|'
+ matchPatterns.literal.source
+ ')'
+ '([a-z_\-]+[0-9]*\\.?)'
+ ')+', 'ig');
matchPatterns.identifier = XRegExp(
`(
(?!
${matchPatterns['function'].source}|
${matchPatterns.literal.source}
)
([a-z_\-]+[0-9]*\\.?)
)+`, 'igx');
// Full pattern for determining ordering of the pieces
matchPatterns.joinCombined = new RegExp(
matchPatterns['function'].source + '+|'
+ matchPatterns.literal.source + '+|'
+ matchPatterns.identifier.source
+ '|(' + matchPatterns.operator.source + ')+', 'ig');
matchPatterns.joinCombined = XRegExp(
`${matchPatterns['function'].source}+| # functions
${matchPatterns.literal.source}+| # literal values
${matchPatterns.identifier.source} # identifiers
|(${matchPatterns.operator.source})+`, 'igx');

@@ -49,0 +50,0 @@ this.matchPatterns = matchPatterns;

{
"name": "ci-node-query",
"version": "3.1.0",
"version": "3.2.0",
"description": "A query builder for node based on the one in CodeIgniter",

@@ -20,3 +20,3 @@ "author": "Timothy J Warren <tim@timshomepage.net>",

"type": "git",
"url": "https://github.com/timw4mail/node-query.git"
"url": "https://git.timshomepage.net/timw4mail/node-query.git"
},

@@ -36,7 +36,6 @@ "keywords": [

"bugs": {
"url": "https://github.com/timw4mail/node-query/issues"
"url": "https://git.timshomepage.net/timw4mail/node-query/issues"
},
"main": "lib/NodeQuery.js",
"dependencies": {
"bluebird": "^3.1.4",
"dblite": "~0.7.6",

@@ -48,3 +47,4 @@ "getargs": "~0.0.8",

"pg": "~4.4.3",
"require-reload": "~0.2.2"
"require-reload": "~0.2.2",
"xregexp": "^3.0.0"
},

@@ -72,2 +72,2 @@ "devDependencies": {

}
}
}

@@ -1,2 +0,2 @@

#CI-Node-query
# CI-Node-query

@@ -10,2 +10,5 @@ A node query builder for various SQL databases, based on [CodeIgniter](http://www.codeigniter.com/user_guide/database/query_builder.html)'s query builder.

### Features
* Callback and Promise API for making database calls.
### Supported adapters

@@ -26,43 +29,44 @@

### Basic use
```javascript
var nodeQuery = require('ci-node-query');
var nodeQuery = require('ci-node-query');
var connection = ... // Database module connection
var connection = ... // Database module connection
// Three arguments: database type, database connection, database connection library
var query = nodeQuery.init('mysql', connection, 'mysql2');
// Three arguments: database type, database connection, database connection library
var query = nodeQuery.init('mysql', connection, 'mysql2');
// The third argument is optional if the database connection library has the same name as the adapter, eg..
nodeQuery.init('mysql', connection, 'mysql');
// Can be instead
nodeQuery.init('mysql', connection);
// The third argument is optional if the database connection library has the same name as the adapter, eg..
nodeQuery.init('mysql', connection, 'mysql');
// Can be instead
nodeQuery.init('mysql', connection);
// You can also retrieve the instance later
query = nodeQuery.getQuery();
// You can also retrieve the instance later
query = nodeQuery.getQuery();
query.select('foo')
.from('bar')
.where('x', 3)
.orWhere({y: 2})
.join('baz', 'baz.boo = bar.foo', 'left')
.orderBy('x', 'DESC')
.limit(2, 3)
.get(function(/* Adapter dependent arguments */) {
// Database module result handling
});
query.select('foo')
.from('bar')
.where('x', 3)
.orWhere({y: 2})
.join('baz', 'baz.boo = bar.foo', 'left')
.orderBy('x', 'DESC')
.limit(2, 3)
.get(function(/* Adapter dependent arguments */) {
// Database module result handling
});
// As of version 3.1.0, you can also get promises
var queryPromise = query.select('foo')
.from('bar')
.where('x', 3)
.orWhere({y: 2})
.join('baz', 'baz.boo = bar.foo', 'left')
.orderBy('x', 'DESC')
.limit(2, 3)
.get();
// As of version 3.1.0, you can also get promises
var queryPromise = query.select('foo')
.from('bar')
.where('x', 3)
.orWhere({y: 2})
.join('baz', 'baz.boo = bar.foo', 'left')
.orderBy('x', 'DESC')
.limit(2, 3)
.get();
queryPromise.then(function(res) {
// Handle query results
});
```
queryPromise.then(function(res) {
// Handle query results
});
### Security notes

@@ -76,5 +80,4 @@ As of version 2, `where` and `having` type methods parse the values passed to look for function calls. While values passed are still passed as query parameters, take care to avoid passing these kinds of methods unfiltered input. SQL function arguments are not currently parsed, so they need to be properly escaped for the current database.

* The API is documented in [API.md](./API.md)
* `tests/query-builder-base.js` contains a lot of usage examples
* The `tests/adapters` folder contains examples of how to set up a connection for the appropriate database library
* The documentation generated for the latest dev build is also [Available](https://github.timshomepage.net/node-query/docs/)
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc