From b574489950348bdff2813315653231b2de72b841 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Thu, 12 May 2016 18:47:24 +0200 Subject: [PATCH] Refactor to reduce cyclomatic complexity --- lib/cartodb/utils/overviews_query_rewriter.js | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/cartodb/utils/overviews_query_rewriter.js b/lib/cartodb/utils/overviews_query_rewriter.js index 4a23975c..bf20d6c9 100644 --- a/lib/cartodb/utils/overviews_query_rewriter.js +++ b/lib/cartodb/utils/overviews_query_rewriter.js @@ -206,6 +206,7 @@ function apply_filters_to_query(query, filters) { function zoom_level_for_bounding_box(query, bounding_box) { // TODO: implement + // jshint unused:false return '100'; // force use of base table } @@ -227,6 +228,7 @@ function zoom_level_for_bounding_box(query, bounding_box) { // doesnn't prevent substitution inside literals). // But the transformation will currently only be applied to simple queries // of the form detected by the overviews_supported_query function. +// TODO: document recent changes (options bounding_box, zoom_level, filters...) OverviewsQueryRewriter.prototype.query = function(query, data, options) { options = options || {}; @@ -245,23 +247,9 @@ OverviewsQueryRewriter.prototype.query = function(query, data, options) { var rewritten_query; var zoom_level_expression = this.options.zoom_level; - var zoom_level; - if ( _.has(options, 'bounding_box') ) { - // The presence of this key, even if it has a null value indicates the - // query cannot handle dynamic zoom expressinos (is not for the tiler) - zoom_level = zoom_level_for_bounding_box(unfiltered_query, options.bounding_box); - } else if ( options.zoom_level ) { - zoom_level = options.zoom_level; - } - if ( !zoom_level && !zoom_level_expression ) { - zoom_level = '0'; - } + var zoom_level = zoom_level_for_query(unfiltered_query, zoom_level_expression, options); - if ( zoom_level || zoom_level === '0' || zoom_level === 0 ) { - rewritten_query = overviews_query_with_definite_zoom(unfiltered_query, overviews, zoom_level); - } else { - rewritten_query = overviews_query_with_zoom_expression(unfiltered_query, overviews, zoom_level_expression); - } + rewritten_query = overviews_query(unfiltered_query, overviews, zoom_level, zoom_level_expression); if ( rewritten_query === unfiltered_query ) { // could not or didn't need to alter the query @@ -273,6 +261,29 @@ OverviewsQueryRewriter.prototype.query = function(query, data, options) { return rewritten_query; }; +function zoom_level_for_query(query, zoom_level_expression, options) { + var zoom_level = null; + if ( _.has(options, 'bounding_box') ) { + // The presence of this key, even if it has a null value indicates the + // query cannot handle dynamic zoom expressinos (is not for the tiler) + zoom_level = zoom_level_for_bounding_box(query, options.bounding_box); + } else if ( _.has(options, 'zoom_level') ) { + zoom_level = options.zoom_level; + } + if ( zoom_level === null && !zoom_level_expression ) { + zoom_level = '0'; + } + return zoom_level; +} + +function overviews_query(query, overviews, zoom_level, zoom_level_expression) { + if ( zoom_level || zoom_level === '0' || zoom_level === 0 ) { + return overviews_query_with_definite_zoom(query, overviews, zoom_level); + } else { + return overviews_query_with_zoom_expression(query, overviews, zoom_level_expression); + } +} + OverviewsQueryRewriter.prototype.is_supported_query = function(sql) { var basic_query = /\s*SELECT\s+[\*a-z0-9_,\s]+?\s+FROM\s+((\"[^"]+\"|[a-z0-9_]+)\.)?(\"[^"]+\"|[a-z0-9_]+)\s*;?\s*/i;