Refactor filter application into own model

This also avoids storing an object in the overviews query rewriter
for the bbox filter (a plain data structure is used instead).
This commit is contained in:
Javier Goizueta
2016-05-17 13:55:00 +02:00
parent 9d82e8c27c
commit df63fbbd04
3 changed files with 31 additions and 6 deletions

View File

@@ -140,7 +140,17 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param
if (params.bbox) {
var bboxFilter = new BBoxFilter({column: 'the_geom', srid: 4326}, {bbox: params.bbox});
query = bboxFilter.sql(query);
queryRewriteData = _.extend(queryRewriteData, { bbox_filter: bboxFilter });
var bbox_filter_definition = {
type: 'bbox',
options: {
column: 'the_geom',
srid: 4326,
},
params: {
bbox: params.bbox
}
};
queryRewriteData = _.extend(queryRewriteData, { bbox_filter: bbox_filter_definition });
}
var dataviewFactory = DataviewFactoryWithOverviews.getFactory(

View File

@@ -0,0 +1,13 @@
// this is meant as a hack for development
// TODO: reproduce here the filter application of Camshaft
var queryBuilder = require('camshaft/lib/filter/query-builder');
function CamshaftFilters(filters) {
this.filters = filters;
}
CamshaftFilters.prototype.sql = function(rawSql) {
return queryBuilder.getSQL(rawSql, filters);
};
module.exports = CamshaftFilters;

View File

@@ -1,15 +1,17 @@
var _ = require('underscore');
var TableNameParser = require('./table_name_parser');
// this is meant as a hack for development
var queryBuilder = require('camshaft/lib/filter/query-builder');
var BBoxFilter = require('../models/filter/bbox');
var CamshaftFilter = require('../models/filter/camshaft');
function apply_filters_to_query(query, filters, bbox_filter) {
// TODO: implement filter application here
if ( filters && !_.isEmpty(filters)) {
query = queryBuilder.getSql(query, filters);
var camshaftFilter = new CamshaftFilter(filters)
query = camshaftFilter.sql(query);
}
if ( bbox_filter ) {
query = bbox_filter.sql(query);
var bboxFilter = new BBoxFilter(bbox_filter.options, bbox_filter.params);
query = bboxFilter.sql(query);
}
return query;
}