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) {