From 83301238d236ee0e5727a6934f3b98bbedad7519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 17 Jan 2017 17:10:08 +0100 Subject: [PATCH] Port changes to overviews --- .../models/dataview/overviews/aggregation.js | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/lib/cartodb/models/dataview/overviews/aggregation.js b/lib/cartodb/models/dataview/overviews/aggregation.js index a3d01b06..da63b27f 100644 --- a/lib/cartodb/models/dataview/overviews/aggregation.js +++ b/lib/cartodb/models/dataview/overviews/aggregation.js @@ -18,25 +18,37 @@ var rankedCategoriesQueryTpl = dot.template([ ' SELECT {{=it._column}} AS category, {{=it._aggregation}} AS value,', ' row_number() OVER (ORDER BY {{=it._aggregation}} desc) as rank', ' FROM ({{=it._query}}) _cdb_aggregation_all', + ' {{?it._aggregationColumn!==null}}WHERE {{=it._aggregationColumn}} IS NOT NULL{{?}}', ' GROUP BY {{=it._column}}', ' ORDER BY 2 DESC', ')' ].join('\n')); -var categoriesSummaryQueryTpl = dot.template([ - 'categories_summary AS(', - ' SELECT count(1) categories_count, max(value) max_val, min(value) min_val', +var categoriesSummaryMinMaxQueryTpl = dot.template([ + 'categories_summary_min_max AS(', + ' SELECT max(value) max_val, min(value) min_val', ' FROM categories', ')' ].join('\n')); +var categoriesSummaryCountQueryTpl = dot.template([ + 'categories_summary_count AS(', + ' SELECT count(1) AS categories_count', + ' FROM (', + ' SELECT {{=it._column}} AS category', + ' FROM ({{=it._query}}) _cdb_categories', + ' GROUP BY {{=it._column}}', + ' ) _cdb_categories_count', + ')' +].join('\n')); + var rankedAggregationQueryTpl = dot.template([ 'SELECT CAST(category AS text), value, false as agg, nulls_count, min_val, max_val, count, categories_count', - ' FROM categories, summary, categories_summary', + ' FROM categories, summary, categories_summary_min_max, categories_summary_count', ' WHERE rank < {{=it._limit}}', 'UNION ALL', 'SELECT \'Other\' category, sum(value), true as agg, nulls_count, min_val, max_val, count, categories_count', - ' FROM categories, summary, categories_summary', + ' FROM categories, summary, categories_summary_min_max, categories_summary_count', ' WHERE rank >= {{=it._limit}}', 'GROUP BY nulls_count, min_val, max_val, count, categories_count' ].join('\n')); @@ -44,7 +56,7 @@ var rankedAggregationQueryTpl = dot.template([ var aggregationQueryTpl = dot.template([ 'SELECT CAST({{=it._column}} AS text) AS category, {{=it._aggregation}} AS value, false as agg,', ' nulls_count, min_val, max_val, count, categories_count', - 'FROM ({{=it._query}}) _cdb_aggregation_all, summary, categories_summary', + 'FROM ({{=it._query}}) _cdb_aggregation_all, summary, categories_summary_min_max, categories_summary_count', 'GROUP BY category, nulls_count, min_val, max_val, count, categories_count', 'ORDER BY value DESC' ].join('\n')); @@ -85,9 +97,14 @@ Aggregation.prototype.sql = function(psql, override, callback) { rankedCategoriesQueryTpl({ _query: _query, _column: this.column, - _aggregation: this.getAggregationSql() + _aggregation: this.getAggregationSql(), + _aggregationColumn: this.aggregation !== 'count' ? this.aggregationColumn : null }), - categoriesSummaryQueryTpl({ + categoriesSummaryMinMaxQueryTpl({ + _query: _query, + _column: this.column + }), + categoriesSummaryCountQueryTpl({ _query: _query, _column: this.column }) @@ -110,9 +127,14 @@ Aggregation.prototype.sql = function(psql, override, callback) { rankedCategoriesQueryTpl({ _query: _query, _column: this.column, - _aggregation: this.getAggregationSql() + _aggregation: this.getAggregationSql(), + _aggregationColumn: this.aggregation !== 'count' ? this.aggregationColumn : null }), - categoriesSummaryQueryTpl({ + categoriesSummaryMinMaxQueryTpl({ + _query: _query, + _column: this.column + }), + categoriesSummaryCountQueryTpl({ _query: _query, _column: this.column })