From 4e53803b3b3699926244724d550f16d4e8c7cb4f Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 31 May 2017 12:51:07 -0400 Subject: [PATCH 1/5] Create BBoxFilter independently from rewrite data --- lib/cartodb/backends/dataview.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index e0515efe..f2e9c7df 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -43,6 +43,12 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param ownFilter = !!ownFilter; var query = (ownFilter) ? dataviewDefinition.sql.own_filter_on : dataviewDefinition.sql.own_filter_off; + var bboxFilter = null; + if (params.bbox) { + bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); + query = bboxFilter.sql(query); + } + var sourceId = dataviewDefinition.source.id; // node.id var layer = _.find(mapConfig.obj().layers, function(l) { return l.options.source && (l.options.source.id === sourceId); @@ -56,8 +62,6 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param } if (params.bbox) { - var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); - query = bboxFilter.sql(query); if ( queryRewriteData ) { var bbox_filter_definition = { type: 'bbox', From ef3cad65995e1eb70a84d1f5abd3f3f4ace4446e Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 31 May 2017 12:52:41 -0400 Subject: [PATCH 2/5] Extract to function --- lib/cartodb/backends/dataview.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index f2e9c7df..82b8f438 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -81,16 +81,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param overviewsQueryRewriter, queryRewriteData, { bbox: params.bbox } ); - var overrideParams = _.reduce(_.pick(params, 'start', 'end', 'bins'), - function castNumbers(overrides, val, k) { - if (!Number.isFinite(+val)) { - throw new Error('Invalid number format for parameter \'' + k + '\''); - } - overrides[k] = +val; - return overrides; - }, - {ownFilter: ownFilter} - ); + var overrideParams = getOverrideParams(params, ownFilter); var dataview = dataviewFactory.getDataview(query, dataviewDefinition); dataview.getResult(pg, overrideParams, this); @@ -101,6 +92,19 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param ); }; +function getOverrideParams(params, ownFilter) { + return _.reduce(_.pick(params, 'start', 'end', 'bins'), + function castNumbers(overrides, val, k) { + if (!Number.isFinite(+val)) { + throw new Error('Invalid number format for parameter \'' + k + '\''); + } + overrides[k] = +val; + return overrides; + }, + {ownFilter: ownFilter} + ); +} + DataviewBackend.prototype.search = function (mapConfigProvider, user, params, callback) { var dataviewName = params.dataviewName; From 62514fc563e6f4da476ef0c58d39e3fd36717e4f Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 31 May 2017 12:57:38 -0400 Subject: [PATCH 3/5] Extract query rewrite data to function --- lib/cartodb/backends/dataview.js | 64 +++++++++++++++++--------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 82b8f438..18ff2fb2 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -49,42 +49,14 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param query = bboxFilter.sql(query); } - var sourceId = dataviewDefinition.source.id; // node.id - var layer = _.find(mapConfig.obj().layers, function(l) { - return l.options.source && (l.options.source.id === sourceId); - }); - var queryRewriteData = layer && layer.options.query_rewrite_data; - if (queryRewriteData && dataviewDefinition.node.type === 'source') { - queryRewriteData = _.extend({}, queryRewriteData, { - filters: dataviewDefinition.node.filters, - unfiltered_query: dataviewDefinition.sql.own_filter_on - }); - } - - if (params.bbox) { - if ( queryRewriteData ) { - var bbox_filter_definition = { - type: 'bbox', - options: { - column: 'the_geom_webmercator', - srid: 3857 - }, - params: { - bbox: params.bbox - } - }; - queryRewriteData = _.extend(queryRewriteData, { bbox_filter: bbox_filter_definition }); - } - } + var queryRewriteData = getQueryRewriteData(mapConfig, dataviewDefinition, params); var dataviewFactory = DataviewFactoryWithOverviews.getFactory( overviewsQueryRewriter, queryRewriteData, { bbox: params.bbox } ); - var overrideParams = getOverrideParams(params, ownFilter); - var dataview = dataviewFactory.getDataview(query, dataviewDefinition); - dataview.getResult(pg, overrideParams, this); + dataview.getResult(pg, getOverrideParams(params, ownFilter), this); }, function returnCallback(err, result) { return callback(err, result); @@ -92,6 +64,38 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param ); }; +function getQueryRewriteData(mapConfig, dataviewDefinition, params) { + var sourceId = dataviewDefinition.source.id; // node.id + var layer = _.find(mapConfig.obj().layers, function(l) { + return l.options.source && (l.options.source.id === sourceId); + }); + var queryRewriteData = layer && layer.options.query_rewrite_data; + if (queryRewriteData && dataviewDefinition.node.type === 'source') { + queryRewriteData = _.extend({}, queryRewriteData, { + filters: dataviewDefinition.node.filters, + unfiltered_query: dataviewDefinition.sql.own_filter_on + }); + } + + if (params.bbox) { + if ( queryRewriteData ) { + var bbox_filter_definition = { + type: 'bbox', + options: { + column: 'the_geom_webmercator', + srid: 3857 + }, + params: { + bbox: params.bbox + } + }; + queryRewriteData = _.extend(queryRewriteData, { bbox_filter: bbox_filter_definition }); + } + } + + return queryRewriteData; +} + function getOverrideParams(params, ownFilter) { return _.reduce(_.pick(params, 'start', 'end', 'bins'), function castNumbers(overrides, val, k) { From b4fbe0b8cffd5fa3360de7a803f4659742643975 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 31 May 2017 12:58:35 -0400 Subject: [PATCH 4/5] No in advance var definition --- lib/cartodb/backends/dataview.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 18ff2fb2..d4c40f79 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -43,9 +43,8 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param ownFilter = !!ownFilter; var query = (ownFilter) ? dataviewDefinition.sql.own_filter_on : dataviewDefinition.sql.own_filter_off; - var bboxFilter = null; if (params.bbox) { - bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); + var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); query = bboxFilter.sql(query); } From 4b562e6768f48e5e2621ae36180ce95f48026f20 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 31 May 2017 13:00:37 -0400 Subject: [PATCH 5/5] Merge conditions --- lib/cartodb/backends/dataview.js | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index d4c40f79..a77ba585 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -76,20 +76,18 @@ function getQueryRewriteData(mapConfig, dataviewDefinition, params) { }); } - if (params.bbox) { - if ( queryRewriteData ) { - var bbox_filter_definition = { - type: 'bbox', - options: { - column: 'the_geom_webmercator', - srid: 3857 - }, - params: { - bbox: params.bbox - } - }; - queryRewriteData = _.extend(queryRewriteData, { bbox_filter: bbox_filter_definition }); - } + if (params.bbox && queryRewriteData) { + var bbox_filter_definition = { + type: 'bbox', + options: { + column: 'the_geom_webmercator', + srid: 3857 + }, + params: { + bbox: params.bbox + } + }; + queryRewriteData = _.extend(queryRewriteData, { bbox_filter: bbox_filter_definition }); } return queryRewriteData;