From 612cc3dd416fdc9809821f10ad284e438763e74a Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Thu, 16 Jun 2016 17:27:00 +0200 Subject: [PATCH 1/2] Use the_geom for intermediate dataviews --- lib/cartodb/backends/dataview.js | 50 +++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index d8a62d24..1f028dfd 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -16,6 +16,9 @@ var overviewsQueryRewriter = new OverviewsQueryRewriter({ zoom_level: 'CDB_ZoomFromScale(!scale_denominator!)' }); +var dot = require('dot'); +dot.templateSettings.strip = false; + function DataviewBackend(analysisBackend) { this.analysisBackend = analysisBackend; } @@ -105,15 +108,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param var ownFilter = +params.own_filter; ownFilter = !!ownFilter; - var query; - - if (ownFilter) { - query = node.getQuery(); - } else { - var applyFilters = {}; - applyFilters[dataviewName] = false; - query = node.getQuery(applyFilters); - } + var query = layerQuery(node, dataviewName, ownFilter); var sourceId = dataviewDefinition.source.id; // node.id var layer = _.find( @@ -260,14 +255,7 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, params, ca var ownFilter = +params.own_filter; ownFilter = !!ownFilter; - var query; - if (ownFilter) { - query = node.getQuery(); - } else { - var applyFilters = {}; - applyFilters[dataviewName] = false; - query = node.getQuery(applyFilters); - } + var query = layerQuery(node, dataviewName, ownFilter); if (params.bbox) { var bboxFilter = new BBoxFilter({column: 'the_geom', srid: 4326}, {bbox: params.bbox}); @@ -321,3 +309,31 @@ function dbParamsFromReqParams(params) { } return dbParams; } + +var SKIP_COLUMNS = { + 'the_geom': true, + 'the_geom_webmercator': true +}; + +function skipColumns(columnNames) { + return columnNames + .filter(function(columnName) { return !SKIP_COLUMNS[columnName]; }); +} + +var layerQueryTemplate = dot.template([ + 'SELECT {{=it._columns}}', + 'FROM ({{=it._query}}) _cdb_analysis_query' +].join('\n')); + +function layerQuery(node, dataviewName, ownFilter) { + var applyFilters = {}; + if (ownFilter) { + applyFilters[dataviewName] = false; + } + + if (node.type === 'source') { + return node.getQuery(applyFilters); + } + var _columns = ['ST_Transform(the_geom, 3857) the_geom_webmercator'].concat(skipColumns(node.getColumns())); + return layerQueryTemplate({ _query: node.getQuery(applyFilters), _columns: _columns.join(', ') }); +} From d49a877771e39f4beeeb461a1ba67f6fe87024df Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Fri, 17 Jun 2016 16:26:45 +0200 Subject: [PATCH 2/2] Fix reversed own filter option --- lib/cartodb/backends/dataview.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 1f028dfd..53911a7f 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -327,7 +327,7 @@ var layerQueryTemplate = dot.template([ function layerQuery(node, dataviewName, ownFilter) { var applyFilters = {}; - if (ownFilter) { + if (!ownFilter) { applyFilters[dataviewName] = false; }