From 46e300f8856762970aab83a77199b7ed479fb86c Mon Sep 17 00:00:00 2001 From: ghybs Date: Wed, 7 Mar 2018 12:31:52 +0400 Subject: [PATCH 1/2] Fix(recordsTotal): do not use search string for total otherwise both recordsTotal and recordsFiltered have the same query, therefore the same count result. --- lib/builder.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/builder.js b/lib/builder.js index 0c1c2b4..238d01e 100644 --- a/lib/builder.js +++ b/lib/builder.js @@ -74,17 +74,18 @@ module.exports = function (options) { /** * (private) Build a complete SELECT statement that counts the number of entries. - * @param searchString If specified then produces a statement to count the filtered list of records. + * @param requestQuery + * @param useSearch If true then produces a statement to count the filtered list of records. * Otherwise the statement counts the unfiltered list of records. - * @return {String} A complete SELECT statement + * @returns {string} A complete SELECT statement */ - function buildCountStatement(requestQuery) { - var dateSql = buildDatePartial(); + function buildCountStatement(requestQuery, useSearch) { + //var dateSql = buildDatePartial(); var result = "SELECT COUNT("; result += self.sSelectSql ? "*" : (self.sCountColumnName ? self.sCountColumnName : "id"); result += ") FROM "; result += self.sFromSql ? self.sFromSql : self.sTableName; - result += buildWherePartial(requestQuery); + result += buildWherePartial(requestQuery, useSearch); // var sSearchQuery = buildSearchPartial( sSearchString ); // var sWheres = sSearchQuery ? [ sSearchQuery ] : []; // if( self.sWhereAndSql ) @@ -99,14 +100,19 @@ module.exports = function (options) { /** * (private) Build the WHERE clause * otherwise uses aoColumnDef mData property. - * @param searchString - * @return {String} + * @param requestQuery + * @param useSearch If true, includes the search partial in the query. + * @returns {string} */ - function buildWherePartial(requestQuery) { + function buildWherePartial(requestQuery, useSearch) { var sWheres = []; - var searchQuery = buildSearchPartial(requestQuery); - if (searchQuery) - sWheres.push(searchQuery); + + if (useSearch) { + var searchQuery = buildSearchPartial(requestQuery); + if (searchQuery) + sWheres.push(searchQuery); + } + if (self.sWhereAndSql) sWheres.push(self.sWhereAndSql); var dateSql = buildDatePartial(); @@ -252,7 +258,7 @@ module.exports = function (options) { } queries.recordsTotal = buildCountStatement(requestQuery); if (searchString) { - queries.recordsFiltered = buildCountStatement(requestQuery); + queries.recordsFiltered = buildCountStatement(requestQuery, true); } var query = buildSelectPartial(); query += buildWherePartial(requestQuery); From 8d251d7c9a22c3811f23aaa1f27fbae2e52cc9b9 Mon Sep 17 00:00:00 2001 From: ghybs Date: Wed, 7 Mar 2018 14:37:39 +0400 Subject: [PATCH 2/2] Fix(select): use useSearch new parameter for buildWherePartial otherwise the select query is broken, since it no longer accounts for the search string. --- lib/builder.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/builder.js b/lib/builder.js index 238d01e..980c61f 100644 --- a/lib/builder.js +++ b/lib/builder.js @@ -258,10 +258,10 @@ module.exports = function (options) { } queries.recordsTotal = buildCountStatement(requestQuery); if (searchString) { - queries.recordsFiltered = buildCountStatement(requestQuery, true); + queries.recordsFiltered = buildCountStatement(requestQuery, true); // Use search string if provided. } var query = buildSelectPartial(); - query += buildWherePartial(requestQuery); + query += buildWherePartial(requestQuery, true); // Use search string if provided. query += buildOrderingPartial(requestQuery); query += buildLimitPartial(requestQuery); if (self.dbType === 'oracle'){