Nearly 100% code coverage, and lots of miscellaneous fixes
This commit is contained in:
parent
062273e411
commit
711cc0c4f8
@ -25,22 +25,6 @@ var d = {
|
|||||||
: str;
|
: str;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the table prefix on the passed string
|
|
||||||
*
|
|
||||||
* @param {String} str
|
|
||||||
* @return {String}
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
_prefix: function(str) {
|
|
||||||
if (str.startsWith(d.prefix))
|
|
||||||
{
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
return d.prefix + str;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the limit clause
|
* Set the limit clause
|
||||||
|
|
||||||
@ -60,32 +44,6 @@ var d = {
|
|||||||
return sql;
|
return sql;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Prefixes a table if it is not already prefixed
|
|
||||||
*
|
|
||||||
* @param {String} table
|
|
||||||
* @return {String}
|
|
||||||
*/
|
|
||||||
prefixTable: function(table) {
|
|
||||||
if (d.tablePrefix)
|
|
||||||
{
|
|
||||||
// Split identifier by period, will split into:
|
|
||||||
// database.schema.table OR
|
|
||||||
// schema.table OR
|
|
||||||
// database.table OR
|
|
||||||
// table
|
|
||||||
var idents = table.split('.', table);
|
|
||||||
var segments = idents.length;
|
|
||||||
|
|
||||||
// Add the database prefix
|
|
||||||
idents[segments - 1] = d._prefix(idents[segments - 1]);
|
|
||||||
|
|
||||||
table = idents.join('.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return table;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quote database table name, and set prefix
|
* Quote database table name, and set prefix
|
||||||
*
|
*
|
||||||
@ -93,8 +51,6 @@ var d = {
|
|||||||
* @return {String}
|
* @return {String}
|
||||||
*/
|
*/
|
||||||
quoteTable: function(table) {
|
quoteTable: function(table) {
|
||||||
table = d.prefixTable(table);
|
|
||||||
|
|
||||||
// Quote after prefix
|
// Quote after prefix
|
||||||
return d.quoteIdentifiers(table);
|
return d.quoteIdentifiers(table);
|
||||||
},
|
},
|
||||||
|
@ -63,6 +63,11 @@ types.forEach(function (t) {
|
|||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
h['is' + t] = function (o) {
|
h['is' + t] = function (o) {
|
||||||
|
if (t.toLowerCase() === 'infinite')
|
||||||
|
{
|
||||||
|
t = 'infinity';
|
||||||
|
}
|
||||||
|
|
||||||
return h.type(o) === t.toLowerCase();
|
return h.type(o) === t.toLowerCase();
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -29,7 +29,7 @@ nodeQuery.init = function (driverType, connObject, connLib) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return new qb(require(paths.driver), require(paths.adapter)(connObject));
|
return qb(require(paths.driver), require(paths.adapter)(connObject));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,10 +163,6 @@ var QueryBuilder = function(driver, adapter) {
|
|||||||
{
|
{
|
||||||
obj = args.$key;
|
obj = args.$key;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new Error("Invalid arguments passed");
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.keys(obj).forEach(function(k) {
|
Object.keys(obj).forEach(function(k) {
|
||||||
// If a single value for the return
|
// If a single value for the return
|
||||||
@ -192,8 +188,6 @@ var QueryBuilder = function(driver, adapter) {
|
|||||||
_p.mixedSet('whereValues', 'value', args.key, args.val);
|
_p.mixedSet('whereValues', 'value', args.key, args.val);
|
||||||
},
|
},
|
||||||
where: function(key, val, conj) {
|
where: function(key, val, conj) {
|
||||||
conj = conj || 'AND';
|
|
||||||
|
|
||||||
// Normalize key and value and insert into state.whereMap
|
// Normalize key and value and insert into state.whereMap
|
||||||
_p.whereMixedSet(key, val);
|
_p.whereMixedSet(key, val);
|
||||||
|
|
||||||
@ -225,6 +219,9 @@ var QueryBuilder = function(driver, adapter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_p.appendMap(conj, item, 'where');
|
_p.appendMap(conj, item, 'where');
|
||||||
|
|
||||||
|
// Clear the where Map
|
||||||
|
state.whereMap = {};
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
having: function(/*key, val, conj*/) {
|
having: function(/*key, val, conj*/) {
|
||||||
@ -251,6 +248,9 @@ var QueryBuilder = function(driver, adapter) {
|
|||||||
string: item
|
string: item
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Clear the where Map
|
||||||
|
state.whereMap = {};
|
||||||
},
|
},
|
||||||
whereIn: function(/*key, val, inClause, conj*/) {
|
whereIn: function(/*key, val, inClause, conj*/) {
|
||||||
var args = getArgs('key:string, val:array, inClause:string, conj:string', arguments);
|
var args = getArgs('key:string, val:array, inClause:string, conj:string', arguments);
|
||||||
@ -307,7 +307,7 @@ var QueryBuilder = function(driver, adapter) {
|
|||||||
orderArray: [],
|
orderArray: [],
|
||||||
groupArray: [],
|
groupArray: [],
|
||||||
havingMap: [],
|
havingMap: [],
|
||||||
whereMap: [],
|
whereMap: {},
|
||||||
|
|
||||||
// Partials
|
// Partials
|
||||||
selectString: '',
|
selectString: '',
|
||||||
@ -684,7 +684,7 @@ var QueryBuilder = function(driver, adapter) {
|
|||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
this.groupStart = function() {
|
this.groupStart = function() {
|
||||||
var conj = (state.queryMap.length < 1) ? ' WHERE ' : ' ';
|
var conj = (state.queryMap.length < 1) ? ' WHERE ' : ' AND ';
|
||||||
_p.appendMap(conj, '(', 'groupStart');
|
_p.appendMap(conj, '(', 'groupStart');
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
@ -820,13 +820,14 @@ var QueryBuilder = function(driver, adapter) {
|
|||||||
* @param {Boolean} [reset=true] - Whether to reset the query builder so another query can be built
|
* @param {Boolean} [reset=true] - Whether to reset the query builder so another query can be built
|
||||||
* @return String
|
* @return String
|
||||||
*/
|
*/
|
||||||
this.getCompiledSelect = function(table, reset) {
|
this.getCompiledSelect = function(/*table, reset*/) {
|
||||||
if (table)
|
var args = getArgs('[table]:string, [reset]:boolean', arguments);
|
||||||
|
if (args.table)
|
||||||
{
|
{
|
||||||
this.from(table);
|
this.from(args.table);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _p.getCompile('get', table, reset);
|
return _p.getCompile('get', args.table, args.reset);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,7 +32,11 @@ testBase._setUp(qb, function(test, err, rows) {
|
|||||||
|
|
||||||
// Export the final test object
|
// Export the final test object
|
||||||
tests["mysql2 adapter with query builder"] = function(test) {
|
tests["mysql2 adapter with query builder"] = function(test) {
|
||||||
|
test.expect(1);
|
||||||
test.ok(testBase.qb);
|
test.ok(testBase.qb);
|
||||||
|
|
||||||
|
// Close the db connection
|
||||||
|
connection.end();
|
||||||
test.done();
|
test.done();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -31,7 +31,11 @@ testBase._setUp(qb, function(test, err, rows) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tests["mysql adapter with query builder"] = function(test) {
|
tests["mysql adapter with query builder"] = function(test) {
|
||||||
|
test.expect(1);
|
||||||
test.ok(testBase.qb);
|
test.ok(testBase.qb);
|
||||||
|
|
||||||
|
// Close the db connection
|
||||||
|
connection.end();
|
||||||
test.done();
|
test.done();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@ var qb = nodeQuery('pg', connection, adapterName);
|
|||||||
// Set up the test base
|
// Set up the test base
|
||||||
testBase._setUp(qb, function(test, err, result) {
|
testBase._setUp(qb, function(test, err, result) {
|
||||||
if (err != null) {
|
if (err != null) {
|
||||||
//throw new Error(err);
|
|
||||||
console.error('SQL syntax error', err);
|
console.error('SQL syntax error', err);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +37,11 @@ testBase._setUp(qb, function(test, err, result) {
|
|||||||
|
|
||||||
|
|
||||||
tests["pg adapter with query builder"] = function(test) {
|
tests["pg adapter with query builder"] = function(test) {
|
||||||
|
test.expect(1);
|
||||||
test.ok(testBase.qb);
|
test.ok(testBase.qb);
|
||||||
|
|
||||||
|
// Close the db connection
|
||||||
|
connection.end();
|
||||||
test.done();
|
test.done();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -18,6 +18,15 @@ module.exports = {
|
|||||||
test.ok(modules[mod], mod + " module is sane");
|
test.ok(modules[mod], mod + " module is sane");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'Invalid driver type': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
test.throws(function() {
|
||||||
|
modules['node-query']('foo', {}, 'bar');
|
||||||
|
}, function(err) {
|
||||||
|
if (err instanceof Error) return true;
|
||||||
|
});
|
||||||
test.done();
|
test.done();
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -20,6 +20,28 @@ var helperTests = {
|
|||||||
test.ok(helpers['is' + type], 'is' + type + ' method exists');
|
test.ok(helpers['is' + type], 'is' + type + ' method exists');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'isNaN': function(test) {
|
||||||
|
test.expect(2);
|
||||||
|
test.equal(helpers.type(0 / 0), 'nan');
|
||||||
|
test.deepEqual(helpers.isNaN(0 / 0), true);
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'isInfinity': function(test) {
|
||||||
|
test.expect(2);
|
||||||
|
|
||||||
|
test.equal(helpers.type(1/0), 'infinity');
|
||||||
|
test.deepEqual(helpers.isInfinite(1/0), true);
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'stringTrim': function(test) {
|
||||||
|
var orig = [' x y ', 'z ', ' q'];
|
||||||
|
var ret = ['x y', 'z', 'q'];
|
||||||
|
|
||||||
|
test.deepEqual(ret, orig.map(helpers.stringTrim));
|
||||||
|
|
||||||
test.done();
|
test.done();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
module.exports = (function() {
|
var helpers = require('../lib/helpers');
|
||||||
|
|
||||||
|
module.exports = (function QueryBuilderTestBase() {
|
||||||
|
|
||||||
|
// That 'new' keyword is annoying
|
||||||
|
if ( ! (this instanceof QueryBuilderTestBase)) return new QueryBuilderTestBase();
|
||||||
|
|
||||||
var base = {};
|
var base = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -10,55 +16,55 @@ module.exports = (function() {
|
|||||||
* @param {Function} callback - The test callback
|
* @param {Function} callback - The test callback
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
base._setUp = function(qb, callback) {
|
this._setUp = function(qb, callback) {
|
||||||
base.qb = qb;
|
base.qb = qb;
|
||||||
base.testCallback = callback;
|
base.testCallback = callback;
|
||||||
|
|
||||||
|
this.qb = base.qb;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generic query builder tests
|
* Generic query builder tests
|
||||||
*/
|
*/
|
||||||
base.tests = {
|
this.tests = {
|
||||||
setUp: function(callback) {
|
|
||||||
var sql = base.qb.driver.truncate('create_test');
|
|
||||||
base.qb.adapter.execute(sql, function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
throw new Error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// ! Get tests
|
// ! Get tests
|
||||||
'Get tests' : {
|
'Get tests' : {
|
||||||
'Get with function': function(test) {
|
'Get with function': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, COUNT(id) as count')
|
base.qb.select('id, COUNT(id) as count')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.groupBy('id')
|
.groupBy('id')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Basic select all get': function(test) {
|
'Basic select all get': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.get('create_test', base.testCallback.bind(this, test));
|
base.qb.get('create_test', base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Basic select all with from': function(test) {
|
'Basic select all with from': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Get with limit': function(test) {
|
'Get with limit': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.get('create_test', 2, base.testCallback.bind(this, test));
|
base.qb.get('create_test', 2, base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Get with limit and offset': function(test) {
|
'Get with limit and offset': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
base.qb.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Test get with having': function(test) {
|
'Test get with having': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id')
|
base.qb.select('id')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.groupBy('id')
|
.groupBy('id')
|
||||||
.having({'id >':1})
|
.having({'id >':1})
|
||||||
.having('id !=', 3)
|
.having('id !=', 3)
|
||||||
|
.having('id', 900)
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
"Test get with 'orHaving'": function(test) {
|
"Test get with 'orHaving'": function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id')
|
base.qb.select('id')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.groupBy('id')
|
.groupBy('id')
|
||||||
@ -70,32 +76,38 @@ module.exports = (function() {
|
|||||||
// ! Select tests
|
// ! Select tests
|
||||||
'Select tests' : {
|
'Select tests' : {
|
||||||
'Select where get': function(test) {
|
'Select where get': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select(['id', 'key as k', 'val'])
|
base.qb.select(['id', 'key as k', 'val'])
|
||||||
.where('id >', 1)
|
.where('id >', 1)
|
||||||
.where('id <', 900)
|
.where('id <', 900)
|
||||||
.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Select where get 2': function(test) {
|
'Select where get 2': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.where('id !=', 1)
|
.where('id !=', 1)
|
||||||
.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Multi Order By': function(test) {
|
'Multi Order By': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.orderBy('id, key')
|
.orderBy('id, key')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Select get': function(test) {
|
'Select get': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
.get('create_test', 2, 1, base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Select from get': function(test) {
|
'Select from get': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test ct')
|
.from('create_test ct')
|
||||||
.where('id >', 1)
|
.where('id >', 1)
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Select from limit get': function(test) {
|
'Select from limit get': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test ct')
|
.from('create_test ct')
|
||||||
.where('id >', 1)
|
.where('id >', 1)
|
||||||
@ -106,6 +118,7 @@ module.exports = (function() {
|
|||||||
// ! Grouping tests
|
// ! Grouping tests
|
||||||
'Grouping tests' : {
|
'Grouping tests' : {
|
||||||
'Using grouping method': function(test) {
|
'Using grouping method': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.groupStart()
|
.groupStart()
|
||||||
@ -115,7 +128,20 @@ module.exports = (function() {
|
|||||||
.limit(2, 1)
|
.limit(2, 1)
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
|
'Using where first grouping': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
base.qb.select('id, key as k, val')
|
||||||
|
.from('create_test')
|
||||||
|
.where('id !=', 5)
|
||||||
|
.groupStart()
|
||||||
|
.where('id >', 1)
|
||||||
|
.where('id <', 900)
|
||||||
|
.groupEnd()
|
||||||
|
.limit(2, 1)
|
||||||
|
.get(base.testCallback.bind(this, test));
|
||||||
|
},
|
||||||
'Using or grouping method': function(test) {
|
'Using or grouping method': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.groupStart()
|
.groupStart()
|
||||||
@ -129,6 +155,7 @@ module.exports = (function() {
|
|||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Using or not grouping method': function(test) {
|
'Using or not grouping method': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.groupStart()
|
.groupStart()
|
||||||
@ -145,23 +172,27 @@ module.exports = (function() {
|
|||||||
// ! Where in tests
|
// ! Where in tests
|
||||||
'Where in tests' : {
|
'Where in tests' : {
|
||||||
'Where in': function(test) {
|
'Where in': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.whereIn('id', [0, 6, 56, 563, 341])
|
.whereIn('id', [0, 6, 56, 563, 341])
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Or Where in': function(test) {
|
'Or Where in': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.where('key', 'false')
|
.where('key', 'false')
|
||||||
.orWhereIn('id', [0, 6, 56, 563, 341])
|
.orWhereIn('id', [0, 6, 56, 563, 341])
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Where Not in': function(test) {
|
'Where Not in': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.where('key', 'false')
|
.where('key', 'false')
|
||||||
.whereNotIn('id', [0, 6, 56, 563, 341])
|
.whereNotIn('id', [0, 6, 56, 563, 341])
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Or Where Not in': function(test) {
|
'Or Where Not in': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.where('key', 'false')
|
.where('key', 'false')
|
||||||
.orWhereNotIn('id', [0, 6, 56, 563, 341])
|
.orWhereNotIn('id', [0, 6, 56, 563, 341])
|
||||||
@ -171,6 +202,7 @@ module.exports = (function() {
|
|||||||
// ! Query modifier tests
|
// ! Query modifier tests
|
||||||
'Query modifier tests': {
|
'Query modifier tests': {
|
||||||
'Order By': function(test) {
|
'Order By': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.where('id >', 0)
|
.where('id >', 0)
|
||||||
@ -181,6 +213,7 @@ module.exports = (function() {
|
|||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Group by': function(test) {
|
'Group by': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.where('id >', 0)
|
.where('id >', 0)
|
||||||
@ -193,6 +226,7 @@ module.exports = (function() {
|
|||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Or Where': function(test) {
|
'Or Where': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.select('id, key as k, val')
|
base.qb.select('id, key as k, val')
|
||||||
.from('create_test')
|
.from('create_test')
|
||||||
.where(' id ', 1)
|
.where(' id ', 1)
|
||||||
@ -201,49 +235,58 @@ module.exports = (function() {
|
|||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Like' : function(test) {
|
'Like' : function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.like('key', 'og')
|
.like('key', 'og')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Or Like': function(test) {
|
'Or Like': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.like('key', 'og')
|
.like('key', 'og')
|
||||||
.orLike('key', 'val')
|
.orLike('key', 'val')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Not Like': function(test) {
|
'Not Like': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.like('key', 'og', 'before')
|
.like('key', 'og', 'before')
|
||||||
.notLike('key', 'val')
|
.notLike('key', 'val')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Or Not Like': function(test) {
|
'Or Not Like': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.like('key', 'og', 'before')
|
.like('key', 'og', 'before')
|
||||||
.orNotLike('key', 'val')
|
.orNotLike('key', 'val')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Like Before': function(test) {
|
'Like Before': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.like('key', 'og', 'before')
|
.like('key', 'og', 'before')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Like After': function(test) {
|
'Like After': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test')
|
base.qb.from('create_test')
|
||||||
.like('key', 'og', 'after')
|
.like('key', 'og', 'after')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Basic Join': function(test) {
|
'Basic Join': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test ct')
|
base.qb.from('create_test ct')
|
||||||
.join('create_join cj', 'cj.id=ct.id')
|
.join('create_join cj', 'cj.id=ct.id')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Left Join': function(test) {
|
'Left Join': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test ct')
|
base.qb.from('create_test ct')
|
||||||
.join('create_join cj', 'cj.id=ct.id', 'left')
|
.join('create_join cj', 'cj.id=ct.id', 'left')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'InnerJoin': function(test) {
|
'InnerJoin': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.from('create_test ct')
|
base.qb.from('create_test ct')
|
||||||
.join('create_join cj', 'cj.id=ct.id', 'inner')
|
.join('create_join cj', 'cj.id=ct.id', 'inner')
|
||||||
.get(base.testCallback.bind(this, test));
|
.get(base.testCallback.bind(this, test));
|
||||||
@ -251,13 +294,28 @@ module.exports = (function() {
|
|||||||
},
|
},
|
||||||
// ! DB Update test
|
// ! DB Update test
|
||||||
'DB update tests' : {
|
'DB update tests' : {
|
||||||
|
setUp: function(callback) {
|
||||||
|
var sql = base.qb.driver.truncate('create_test');
|
||||||
|
base.qb.adapter.execute(sql, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
throw new Error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
tearDown: function(callback) {
|
||||||
|
callback();
|
||||||
|
},
|
||||||
'Test Insert': function(test) {
|
'Test Insert': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.set('id', 98)
|
base.qb.set('id', 98)
|
||||||
.set('key', 84)
|
.set('key', 84)
|
||||||
.set('val', 120)
|
.set('val', 120)
|
||||||
.insert('create_test', base.testCallback.bind(this, test));
|
.insert('create_test', base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Test Insert Object': function(test) {
|
'Test Insert Object': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.insert('create_test', {
|
base.qb.insert('create_test', {
|
||||||
id: 587,
|
id: 587,
|
||||||
key: 1,
|
key: 1,
|
||||||
@ -265,6 +323,7 @@ module.exports = (function() {
|
|||||||
}, base.testCallback.bind(this, test));
|
}, base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Test Update': function(test) {
|
'Test Update': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.where('id', 7)
|
base.qb.where('id', 7)
|
||||||
.update('create_test', {
|
.update('create_test', {
|
||||||
id: 7,
|
id: 7,
|
||||||
@ -273,6 +332,7 @@ module.exports = (function() {
|
|||||||
}, base.testCallback.bind(this, test));
|
}, base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Test set Array Update': function(test) {
|
'Test set Array Update': function(test) {
|
||||||
|
test.expect(1);
|
||||||
var object = {
|
var object = {
|
||||||
id: 22,
|
id: 22,
|
||||||
key: 'gogle',
|
key: 'gogle',
|
||||||
@ -284,6 +344,7 @@ module.exports = (function() {
|
|||||||
.update('create_test', base.testCallback.bind(this, test));
|
.update('create_test', base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Test where set update': function(test) {
|
'Test where set update': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.where('id', 36)
|
base.qb.where('id', 36)
|
||||||
.set('id', 36)
|
.set('id', 36)
|
||||||
.set('key', 'gogle')
|
.set('key', 'gogle')
|
||||||
@ -291,14 +352,141 @@ module.exports = (function() {
|
|||||||
.update('create_test', base.testCallback.bind(this, test));
|
.update('create_test', base.testCallback.bind(this, test));
|
||||||
},
|
},
|
||||||
'Test delete': function(test) {
|
'Test delete': function(test) {
|
||||||
|
test.expect(1);
|
||||||
base.qb.delete('create_test', {id: 5}, base.testCallback.bind(this, test));
|
base.qb.delete('create_test', {id: 5}, base.testCallback.bind(this, test));
|
||||||
|
}/*,
|
||||||
|
'delete with where': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
base.qb.where('id', 5)
|
||||||
|
.delete('create_test', base.testCallback.bind(this, test));
|
||||||
|
}*/
|
||||||
|
},
|
||||||
|
// ! Get compiled tests
|
||||||
|
'Get compiled tests' : {
|
||||||
|
'select': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
var string = base.qb.select('id')
|
||||||
|
.from('create_test')
|
||||||
|
.getCompiledSelect(true);
|
||||||
|
|
||||||
|
test.equal(true, helpers.isString(string));
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'select from': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
var string = base.qb.select('id')
|
||||||
|
.getCompiledSelect('create_test', true);
|
||||||
|
|
||||||
|
test.equal(true, helpers.isString(string));
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'insert': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
|
||||||
|
var string = base.qb.set('id', 3)
|
||||||
|
.getCompiledInsert('create_test');
|
||||||
|
|
||||||
|
test.equal(true, helpers.isString(string));
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'update': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
|
||||||
|
var string = base.qb.set('id', 3)
|
||||||
|
.where('id', 5)
|
||||||
|
.getCompiledUpdate('create_test');
|
||||||
|
|
||||||
|
test.equal(true, helpers.isString(string));
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'delete': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
|
||||||
|
var string = base.qb.where('id', 5)
|
||||||
|
.getCompiledDelete('create_test');
|
||||||
|
|
||||||
|
test.equal(true, helpers.isString(string));
|
||||||
|
|
||||||
|
test.done();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// ! Compiled query tests
|
// ! Misc tests
|
||||||
'Compiled query tests' : {
|
'Misc tests' : {
|
||||||
|
'Get State': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
|
||||||
|
base.qb.select('foo')
|
||||||
|
.from('bar')
|
||||||
|
.where('baz', 'foobar');
|
||||||
|
|
||||||
|
var state = {
|
||||||
|
// Arrays/Maps
|
||||||
|
queryMap: [],
|
||||||
|
values: [],
|
||||||
|
whereValues: [],
|
||||||
|
setArrayKeys: [],
|
||||||
|
orderArray: [],
|
||||||
|
groupArray: [],
|
||||||
|
havingMap: [],
|
||||||
|
whereMap: {},
|
||||||
|
|
||||||
|
// Partials
|
||||||
|
selectString: '',
|
||||||
|
fromString: '',
|
||||||
|
setString: '',
|
||||||
|
orderString: '',
|
||||||
|
groupString: '',
|
||||||
|
|
||||||
|
// Other various values
|
||||||
|
limit: null,
|
||||||
|
offset: null
|
||||||
|
};
|
||||||
|
|
||||||
|
test.notDeepEqual(JSON.stringify(state), JSON.stringify(base.qb.getState()));
|
||||||
|
test.done();
|
||||||
|
},
|
||||||
|
'Reset State': function(test) {
|
||||||
|
test.expect(1);
|
||||||
|
|
||||||
|
base.qb.select('foo')
|
||||||
|
.from('bar')
|
||||||
|
.where('baz', 'foobar');
|
||||||
|
|
||||||
|
base.qb.resetQuery();
|
||||||
|
|
||||||
|
var state = {
|
||||||
|
// Arrays/Maps
|
||||||
|
queryMap: [],
|
||||||
|
values: [],
|
||||||
|
whereValues: [],
|
||||||
|
setArrayKeys: [],
|
||||||
|
orderArray: [],
|
||||||
|
groupArray: [],
|
||||||
|
havingMap: [],
|
||||||
|
whereMap: {},
|
||||||
|
|
||||||
|
// Partials
|
||||||
|
selectString: '',
|
||||||
|
fromString: '',
|
||||||
|
setString: '',
|
||||||
|
orderString: '',
|
||||||
|
groupString: '',
|
||||||
|
|
||||||
|
// Other various values
|
||||||
|
limit: null,
|
||||||
|
offset: null
|
||||||
|
};
|
||||||
|
|
||||||
|
test.deepEqual(state, base.qb.getState());
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return base;
|
return this;
|
||||||
}());
|
}());
|
@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Use the base driver as a mock for testing
|
// Use the base driver as a mock for testing
|
||||||
|
delete require.cache[require.resolve('../lib/driver')];
|
||||||
var driver = require('../lib/driver');
|
var driver = require('../lib/driver');
|
||||||
var parser = require('../lib/query-parser')(driver);
|
var parser = require('../lib/query-parser')(driver);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user