From d4de54f2921f5cc1b474fd58a64878ad8cb943e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 13:26:38 +0200 Subject: [PATCH] Extract get query with filters --- lib/cartodb/backends/dataview.js | 38 +++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 87605ce6..1c7a02f5 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -34,9 +34,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param return callback(error); } - var ownFilter = +params.own_filter; - var noFilters = +params.no_filters; - if (Number.isFinite(ownFilter) && Number.isFinite(noFilters)) { + if (!validFilterParams(params)) { const error = new Error('Both own_filter and no_filters cannot be sent in the same request'); error.type = 'dataview'; error.http_status = 400; @@ -44,15 +42,8 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param } var pg = new PSQL(dbParamsFromReqParams(params)); - - var query = getDataviewQuery(dataviewDefinition, ownFilter, noFilters); - if (params.bbox) { - var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); - query = bboxFilter.sql(query); - } - + var query = getQueryWithFilters(dataviewDefinition, params); var queryRewriteData = getQueryRewriteData(mapConfig, dataviewDefinition, params); - var dataviewFactory = DataviewFactoryWithOverviews.getFactory( overviewsQueryRewriter, queryRewriteData, { bbox: params.bbox } ); @@ -62,6 +53,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param let overrideParams; try { + var ownFilter = +params.own_filter; overrideParams = getOverrideParams(params, !!ownFilter); } catch (error) { return callback(error); @@ -77,6 +69,26 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param }); }; +function validFilterParams (params) { + var ownFilter = +params.own_filter; + var noFilters = +params.no_filters; + + return !(Number.isFinite(ownFilter) && Number.isFinite(noFilters)); +} + +function getQueryWithFilters (dataviewDefinition, params) { + var ownFilter = +params.own_filter; + var noFilters = +params.no_filters; + var query = getDataviewQuery(dataviewDefinition, ownFilter, noFilters); + + if (params.bbox) { + var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); + query = bboxFilter.sql(query); + } + + return query; +} + function getDataviewQuery(dataviewDefinition, ownFilter, noFilters) { if (noFilters) { return dataviewDefinition.sql.no_filters; @@ -158,7 +170,7 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa try { pg = new PSQL(dbParamsFromReqParams(params)); - query = getQueryWithFilters(dataviewDefinition, params); + query = getQueryWithOwnFilters(dataviewDefinition, params); dataview = DataviewFactory.getDataview(query, dataviewDefinition); } catch (error) { return callback(error); @@ -174,7 +186,7 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa }); }; -function getQueryWithFilters (dataviewDefinition, params) { +function getQueryWithOwnFilters (dataviewDefinition, params) { var ownFilter = +params.own_filter; ownFilter = !!ownFilter;