Apply overviews query rewriter to dataviews

This requires the QueryRewriter to handle a filters parametes in
its data (with Camshaft filter definitions) and a final
options parameters with a bounding_box parameter.
This commit is contained in:
Javier Goizueta
2016-05-11 18:18:22 +02:00
parent bbadd46766
commit fa19f90a6a
+30 -7
View File
@@ -9,6 +9,10 @@ var Timer = require('../stats/timer');
var BBoxFilter = require('../models/filter/bbox');
var DataviewFactory = require('../models/dataview/factory');
var OverviewsQueryRewriter = require('../utils/overviews_query_rewriter');
var overviewsQueryRewriter = new OverviewsQueryRewriter({
zoom_level: 'CDB_ZoomFromScale(!scale_denominator!)'
});
function DataviewBackend(analysisBackend) {
this.analysisBackend = analysisBackend;
@@ -101,12 +105,31 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param
ownFilter = !!ownFilter;
var query;
if (ownFilter) {
query = node.getQuery();
} else {
var applyFilters = {};
applyFilters[dataviewName] = false;
query = node.getQuery(applyFilters);
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.options.query_rewrite_data;
if ( queryRewriteData ) {
if ( node.type == 'source' ) {
var filters = node.filters; // TODO: node.getFilters() when available in camshaft
var filters_disabler = _.keys(filters).reduce(function(disabler, filter_id){ disabler[filter_id] = false; return disabler; }, {});
var unfiltered_query = node.getQuery(filters_disabler);
queryRewriteData = _.extend({}, queryRewriteData, { filters: filters });
var rewritten_query = overviewsQueryRewriter.query(unfiltered_query, queryRewriteData, { bounding_box: params.bbox });
if ( rewritten_query !== unfiltered_query ) {
query = rewritten_query;
}
}
}
if ( !query ) {
if (ownFilter) {
query = node.getQuery();
} else {
var applyFilters = {};
applyFilters[dataviewName] = false;
query = node.getQuery(applyFilters);
}
}
if (params.bbox) {
@@ -277,4 +300,4 @@ function dbParamsFromReqParams(params) {
dbParams.dbname = params.dbname;
}
return dbParams;
}
}