From c90b1b1ba0ec346afdefff04789f4047c65a9d60 Mon Sep 17 00:00:00 2001 From: Timothy J Warren Date: Mon, 14 Nov 2016 21:10:37 -0500 Subject: [PATCH] Remove callbacks and getArgs from QueryBuilder --- lib/QueryBuilder.js | 113 +++++++++++++++------------------------- lib/QueryBuilderBase.js | 18 ++----- 2 files changed, 48 insertions(+), 83 deletions(-) diff --git a/lib/QueryBuilder.js b/lib/QueryBuilder.js index aa84c73..b64bada 100755 --- a/lib/QueryBuilder.js +++ b/lib/QueryBuilder.js @@ -1,6 +1,5 @@ 'use strict'; -const getArgs = require('getargs'); const helpers = require('./helpers'); const QueryBuilderBase = require('./QueryBuilderBase'); @@ -24,7 +23,8 @@ class QueryBuilder extends QueryBuilderBase { * @return {Promise} - Promise with result of query */ query (sql, params) { - return this.adapter.execute(sql, params); + return this.adapter.execute(sql, params) + .catch(e => console.error(e)); } /** @@ -50,15 +50,10 @@ class QueryBuilder extends QueryBuilderBase { * Empties the selected database table * * @param {string} table - the name of the table to truncate - * @param {function} [callback] - Optional callback * @return {void|Promise} - Returns a promise if no callback is supplied */ - truncate (/* table:string, [callback]:function */) { - getArgs('table:string, [callback]:function', arguments); - let args = [].slice.apply(arguments); - let sql = this.driver.truncate(args.shift()); - args.unshift(sql); - return this.query.apply(this, args); + truncate (table) { + return this.query(this.driver.truncate(table)); } /** @@ -90,7 +85,7 @@ class QueryBuilder extends QueryBuilderBase { // Split on 'As' fields.forEach((field, index) => { - if (field.match(/as/i)) { + if (/as/i.test(field)) { fields[index] = field.split(/ as /i).map(helpers.stringTrim); } }); @@ -190,10 +185,8 @@ class QueryBuilder extends QueryBuilderBase { * @param {String|Number} [val] - The value to compare if the value of key is a string * @return {QueryBuilder} - The Query Builder object, for chaining */ - having (/* key, [val] */) { - let args = getArgs('key:string|object, [val]:string|number', arguments); - - this._having(args.key, args.val, 'AND'); + having (key, val = null) { + this._having(key, val, 'AND'); return this; } @@ -204,10 +197,8 @@ class QueryBuilder extends QueryBuilderBase { * @param {String|Number} [val] - The value to compare if the value of key is a string * @return {QueryBuilder} - The Query Builder object, for chaining */ - orHaving (/* key, [val] */) { - let args = getArgs('key:string|object, [val]:string|number', arguments); - - this._having(args.key, args.val, 'OR'); + orHaving (key, val = null) { + this._having(key, val, 'OR'); return this; } @@ -336,12 +327,10 @@ class QueryBuilder extends QueryBuilderBase { * @example query.set({foo:'bar'}); // Set with an object * @return {QueryBuilder} - The Query Builder object, for chaining */ - set (/* $key, [$val] */) { - let args = getArgs('$key, [$val]', arguments); - + set (key, val) { // Set the appropriate state variables - this._mixedSet('setArrayKeys', 'key', args.$key, args.$val); - this._mixedSet('values', 'value', args.$key, args.$val); + this._mixedSet('setArrayKeys', 'key', key, val); + this._mixedSet('values', 'value', key, val); // Use the keys of the array to make the insert/update string // and escape the field names @@ -499,26 +488,22 @@ class QueryBuilder extends QueryBuilderBase { * @param {String} [table] - The table to select from * @param {Number} [limit] - A limit for the query * @param {Number} [offset] - An offset for the query - * @param {Function} [callback] - A callback for receiving the result * @example query.get('table_name').then(promiseCallback); // Get all the rows in the table - * @example query.get('table_name', 5, callback); // Get 5 rows from the table - * @example query.get(callback); // Get the results of a query generated with other methods + * @example query.get('table_name', 5); // Get 5 rows from the table + * @example query.get(); // Get the results of a query generated with other methods * @return {void|Promise} - If no callback is passed, a promise is returned */ - get (/* [table], [limit], [offset], [callback] */) { - const argPattern = '[table]:string, [limit]:number, [offset]:number, [callback]:function'; - let args = getArgs(argPattern, arguments); - - if (args.table) { - this.from(args.table); + get (table, limit, offset) { + if (table) { + this.from(table); } - if (args.limit) { - this.limit(args.limit, args.offset); + if (limit) { + this.limit(limit, offset); } // Run the query - return this._run('get', args.table, args.callback); + return this._run('get', table); } /** @@ -526,18 +511,15 @@ class QueryBuilder extends QueryBuilderBase { * * @param {String} table - The table to insert into * @param {Object} [data] - Data to insert, if not already added with the 'set' method - * @param {Function} [callback] - Callback for handling response from the database - * @return {void|Promise} - If no callback is passed, a promise is returned + * @return {Promise} - If no callback is passed, a promise is returned */ - insert (/* table, data, callback */) { - let args = getArgs('table:string, [data]:object, [callback]:function', arguments); - - if (args.data) { - this.set(args.data); + insert (table, data) { + if (data) { + this.set(data); } // Run the query - return this._run('insert', this.driver.quoteTable(args.table), args.callback); + return this._run('insert', this.driver.quoteTable(table)); } /** @@ -545,18 +527,15 @@ class QueryBuilder extends QueryBuilderBase { * * @param {String} table - The table to insert into * @param {Array} data - The array of objects containing data rows to insert - * @param {Function} [callback] - Callback for handling database response - * @example query.insertBatch('foo',[{id:1,val:'bar'},{id:2,val:'baz'}], callbackFunction); * @example query.insertBatch('foo',[{id:1,val:'bar'},{id:2,val:'baz'}]) *.then(promiseCallback); - * @return {void|Promise} - If no callback is passed, a promise is returned + * @return {Promise} - If no callback is passed, a promise is returned */ - insertBatch (/* table, data, callback */) { - let args = getArgs('table:string, data:array, [callback]:function', arguments); - let batch = this.driver.insertBatch(args.table, args.data); + insertBatch (table, data) { + let batch = this.driver.insertBatch(table, data); // Run the query - return this._run('', '', args.callback, batch.sql, batch.values); + return this.query(batch.sql, batch.values); } /** @@ -564,18 +543,16 @@ class QueryBuilder extends QueryBuilderBase { * * @param {String} table - The table to insert into * @param {Object} [data] - Data to insert, if not already added with the 'set' method - * @param {Function} [callback] - Callback for handling response from the database - * @return {void|Promise} - If no callback is passed, a promise is returned + * @return {Promise} - If no callback is passed, a promise is returned */ - update (/* table, data, callback */) { - let args = getArgs('table:string, [data]:object, [callback]:function', arguments); + update (table, data) { - if (args.data) { - this.set(args.data); + if (data) { + this.set(data); } // Run the query - return this._run('update', this.driver.quoteTable(args.table), args.callback); + return this._run('update', this.driver.quoteTable(table)); } /** @@ -583,18 +560,15 @@ class QueryBuilder extends QueryBuilderBase { * * @param {String} table - The table to insert into * @param {Object} [where] - Where clause for delete statement - * @param {Function} [callback] - Callback for handling response from the database - * @return {void|Promise} - If no callback is passed, a promise is returned + * @return {Promise} - If no callback is passed, a promise is returned */ - delete (/* table, [where], [callback] */) { - let args = getArgs('table:string, [where]:object, [callback]:function', arguments); - - if (args.where) { - this.where(args.where); + delete (table, where) { + if (where) { + this.where(where); } // Run the query - return this._run('delete', this.driver.quoteTable(args.table), args.callback); + return this._run('delete', this.driver.quoteTable(table)); } // ------------------------------------------------------------------------ @@ -608,13 +582,12 @@ class QueryBuilder extends QueryBuilderBase { * @param {Boolean} [reset=true] - Whether to reset the query builder so another query can be built * @return {String} - The compiled sql statement */ - getCompiledSelect (/* table, reset */) { - let args = getArgs('[table]:string, [reset]:boolean', arguments); - if (args.table) { - this.from(args.table); + getCompiledSelect (table, reset = true) { + if (table) { + this.from(table); } - return this._getCompile('get', args.table, args.reset); + return this._getCompile('get', table, reset); } /** diff --git a/lib/QueryBuilderBase.js b/lib/QueryBuilderBase.js index 8baabc7..ada2565 100644 --- a/lib/QueryBuilderBase.js +++ b/lib/QueryBuilderBase.js @@ -207,13 +207,9 @@ class QueryBuilderBase { this._appendMap(this._fixConjunction(conj), item, 'whereNull'); } - _having (/* key, val, conj */) { - let args = getArgs('key:string|object, [val]:string|number, [conj]:string', arguments); - args.conj = args.conj || 'AND'; - args.val = args.val || null; - + _having (key, val = null, conj = 'AND') { // Normalize key/val and put in state.whereMap - this._whereMixedSet(args.key, args.val); + this._whereMixedSet(key, val); // Parse the having condition to account for operators, // functions, identifiers, and literal values @@ -222,7 +218,7 @@ class QueryBuilderBase { this.state.whereMap.forEach(clause => { // Put in the having map this.state.havingMap.push({ - conjunction: (this.state.havingMap.length > 0) ? ` ${args.conj} ` : ' HAVING ', + conjunction: (this.state.havingMap.length > 0) ? ` ${conj} ` : ' HAVING ', string: clause }); }); @@ -248,7 +244,7 @@ class QueryBuilderBase { this._appendMap(args.conj, str, 'whereIn'); } - _run (type, table, callback, sql, vals) { + _run (type, table, sql, vals) { if (!sql) { sql = this._compile(type, table); } @@ -261,11 +257,7 @@ class QueryBuilderBase { this._resetState(); // Pass the sql and values to the adapter to run on the database - if (callback) { - return this.query(sql, vals, callback); - } else { - return this.query(sql, vals); - } + return this.query(sql, vals); } _getCompile (type, table, reset) {