From 83af1d3946307610a4a24e5f6c14b256f77575f7 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Mon, 27 Oct 2014 13:36:10 -0400 Subject: [PATCH] Fix inserting, updating, and deleting methods --- lib/driver.js | 17 +++++++++++++ lib/query-builder.js | 23 +++++++++++++----- tests/adapters/mysql2_test.js | 3 ++- tests/adapters/mysql_test.js | 3 ++- tests/query-builder-base.js | 46 +++++++++++++++++++++++++++++++---- 5 files changed, 79 insertions(+), 13 deletions(-) diff --git a/lib/driver.js b/lib/driver.js index b06abec..d5bec5e 100755 --- a/lib/driver.js +++ b/lib/driver.js @@ -10,6 +10,7 @@ var helpers = require('./helpers'); var d = { identifierChar: '"', tablePrefix: null, + hasTruncate: true, /** * Low level function for naive quoting of strings @@ -139,6 +140,22 @@ var d = { } return raw; + }, + + /** + * SQL to truncate the passed table + * + * @param {String} table + * @return {String} - sql + */ + truncate: function(table) { + var sql = (d.hasTruncate) + ? 'TRUNCATE ' + : 'DELETE FROM '; + + sql += d.quoteTable(table); + + return sql; } }; diff --git a/lib/query-builder.js b/lib/query-builder.js index 288be97..4c08162 100755 --- a/lib/query-builder.js +++ b/lib/query-builder.js @@ -25,6 +25,9 @@ var QueryBuilder = function(driver, adapter) { var parser = require('./query-parser')(driver); + this.driver = driver; + this.adapter = adapter; + /** * "Private" methods * @@ -776,13 +779,14 @@ var QueryBuilder = function(driver, adapter) { * @param {Function} callback - Callback for handling response from the database * @return void */ - this.update = function(table, data, callback) { - if (data) { - this.set(data); + this.update = function(/*table, data, callback*/) { + var args = getArgs('table:string, [data]:object, callback:function', arguments); + if (args.data) { + this.set(args.data); } // Run the query - _p.run('update', table, callback); + _p.run('update', args.table, args.callback); }; /** @@ -792,9 +796,16 @@ var QueryBuilder = function(driver, adapter) { * @param {Function} callback - Callback for handling response from the database * @return void */ - this['delete'] = function (table, callback) { + this['delete'] = function (/*table, [where], callback*/) { + var args = getArgs('table:string, [where], callback:function', arguments); + + if (args.where) + { + this.where(args.where); + } + // Run the query - _p.run('delete', table, callback); + _p.run('delete', args.table, args.callback); }; // ------------------------------------------------------------------------ diff --git a/tests/adapters/mysql2_test.js b/tests/adapters/mysql2_test.js index 4ac950b..711691c 100644 --- a/tests/adapters/mysql2_test.js +++ b/tests/adapters/mysql2_test.js @@ -19,7 +19,8 @@ var qb = nodeQuery('mysql', connection, adapterName); // Set up the test base testBase._setUp(qb, function(test, err, rows) { - if (err) { + if (err != null) { + test.done(); throw new Error(err); } diff --git a/tests/adapters/mysql_test.js b/tests/adapters/mysql_test.js index fc20569..0fa44b8 100644 --- a/tests/adapters/mysql_test.js +++ b/tests/adapters/mysql_test.js @@ -19,7 +19,8 @@ var qb = nodeQuery('mysql', connection, adapterName); // Set up the test base testBase._setUp(qb, function(test, err, rows) { - if (err) { + if (err != null) { + test.done(); throw new Error(err); } diff --git a/tests/query-builder-base.js b/tests/query-builder-base.js index 30c9794..c90a8af 100644 --- a/tests/query-builder-base.js +++ b/tests/query-builder-base.js @@ -19,6 +19,16 @@ module.exports = (function() { * Generic query builder tests */ base.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 with function': function(test) { @@ -240,7 +250,7 @@ module.exports = (function() { } }, 'DB update tests' : { - /*'Test Insert': function(test) { + 'Test Insert': function(test) { base.qb.set('id', 98) .set('key', 84) .set('val', 120) @@ -252,13 +262,39 @@ module.exports = (function() { key: 1, val: 2 }, base.testCallback.bind(null, test)); - }*/ + }, + 'Test Update': function(test) { + base.qb.where('id', 7) + .update('create_test', { + id: 7, + key: 'gogle', + val: 'non-word' + }, base.testCallback.bind(null, test)); + }, + 'Test set Array Update': function(test) { + var object = { + id: 22, + key: 'gogle', + val: 'non-word' + }; + + base.qb.set(object) + .where('id', 22) + .update('create_test', base.testCallback.bind(null, test)); + }, + 'Test where set update': function(test) { + base.qb.where('id', 36) + .set('id', 36) + .set('key', 'gogle') + .set('val', 'non-word') + .update('create_test', base.testCallback.bind(null, test)); + }, + 'Test delete': function(test) { + base.qb.delete('create_test', {id: 5}, base.testCallback.bind(null, test)); + } }, 'Compiled query tests' : { - }, - 'Error tests' : { - } };