From 4bc8fb207ab05395e780b0e6a4cae814b325922c Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Fri, 18 May 2018 15:29:46 +0200 Subject: [PATCH] Use sql_raw for query without aggregation --- .../backends/layer-stats/mapnik-layer-stats.js | 7 ++----- .../adapter/aggregation-mapconfig-adapter.js | 17 ++++++++--------- .../mapconfig/adapter/turbo-carto-adapter.js | 4 +++- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js b/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js index f9e0000f..365bb3a5 100644 --- a/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js +++ b/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js @@ -275,16 +275,13 @@ function formatResultFields(dbConnection, flds) { MapnikLayerStats.prototype.getStats = function (layer, dbConnection, callback) { - let aggrQuery = layer.options.sql_raw || layer.options.sql; - let preQuery = layer.options.aggregation_metadata ? - layer.options.aggregation_metadata.pre_aggregation_sql : - aggrQuery; + let aggrQuery = layer.options.sql; + let preQuery = layer.options.sql_raw || aggrQuery; let context = { dbConnection, preQuery, aggrQuery, - aggrMeta: layer.options.aggregation_metadata, metaOptions: layer.options.metadata || {} }; diff --git a/lib/cartodb/models/mapconfig/adapter/aggregation-mapconfig-adapter.js b/lib/cartodb/models/mapconfig/adapter/aggregation-mapconfig-adapter.js index b3df3d96..9752ab57 100644 --- a/lib/cartodb/models/mapconfig/adapter/aggregation-mapconfig-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/aggregation-mapconfig-adapter.js @@ -84,7 +84,7 @@ module.exports = class AggregationMapConfigAdapter { _adaptLayer (connection, mapConfig, layer, index) { return new Promise((resolve, reject) => { - this._shouldAdaptLayer(connection, mapConfig, layer, index, (err, shouldAdapt, aggrMeta) => { + this._shouldAdaptLayer(connection, mapConfig, layer, index, (err, shouldAdapt) => { if (err) { return reject(err); } @@ -93,7 +93,6 @@ module.exports = class AggregationMapConfigAdapter { return resolve({ layer, index, adapted: shouldAdapt }); } - const sqlQuery = layer.options.sql; const sqlQueryWrap = layer.options.sql_wrap; let aggregationSql = mapConfig.getAggregatedQuery(index); @@ -102,6 +101,12 @@ module.exports = class AggregationMapConfigAdapter { aggregationSql = sqlQueryWrap.replace(/<%=\s*sql\s*%>/g, aggregationSql); } + if (!layer.options.sql_raw) { + // if sql_wrap is present, the original query should already be + // in sql_raw (with sql being the wrapped query); + // otherwise we keep the now the original query in sql_raw + layer.options.sql_raw = layer.options.sql; + } layer.options.sql = aggregationSql; mapConfig.getLayerAggregationColumns(index, (err, columns) => { @@ -111,12 +116,6 @@ module.exports = class AggregationMapConfigAdapter { layer.options.columns = columns; - layer.options.aggregation_metadata = { - pre_aggregation_sql: sqlQueryWrap || sqlQuery, - geometry_type: aggrMeta.type, - pre_aggregation_count: aggrMeta.count - }; - return resolve({ layer, index, adapted: shouldAdapt }); }); }); @@ -161,7 +160,7 @@ module.exports = class AggregationMapConfigAdapter { return callback(null, false); } - callback(null, true, result); + callback(null, true); }); } diff --git a/lib/cartodb/models/mapconfig/adapter/turbo-carto-adapter.js b/lib/cartodb/models/mapconfig/adapter/turbo-carto-adapter.js index 2bd30152..31c4f7c4 100644 --- a/lib/cartodb/models/mapconfig/adapter/turbo-carto-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/turbo-carto-adapter.js @@ -117,7 +117,9 @@ TurboCartoAdapter.prototype._parseCartoCss = function (username, params, layer, var layerSql = layer.options.sql; var layerRawSql = layer.options.sql_raw; - if (SubstitutionTokens.hasTokens(layerSql) && layerRawSql) { + if (SubstitutionTokens.hasTokens(layerSql) && layerRawSql && layer.options.sql_wrap) { + // For wrapped queries we'll derive the tokens from the data extent + // instead of the whole Earth/root tile. var self = this; var tokensQuery = tokensQueryTpl({_sql: layerRawSql}); return pg.query(tokensQuery, function(err, resultSet) {