From 4e99ff1c39c7389008e886a519d3938bb217b089 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Fri, 18 May 2018 22:25:32 +0200 Subject: [PATCH] Fix token substitution for stat queries --- .../layer-stats/mapnik-layer-stats.js | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js b/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js index 36f4824a..e3d11070 100644 --- a/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js +++ b/lib/cartodb/backends/layer-stats/mapnik-layer-stats.js @@ -58,14 +58,15 @@ function columnAggregations(field) { return []; } -function _getSQL(ctx, type, zoom, query) { +function _getSQL(ctx, query, type='pre', zoom=0) { let sql; if (type === 'pre') { sql = ctx.preQuery; } else { - sql = queryForZoom(ctx.aggrQuery, zoom); + sql = ctx.aggrQuery; } + sql = queryForZoom(sql, zoom || 0); return query(sql); } @@ -73,7 +74,7 @@ function _estimatedFeatureCount(ctx) { // TODO: restore -1 on errors behavior? return queryPromise( ctx.dbConnection, - _getSQL(ctx, 'pre', 0, queryUtils.getQueryRowEstimation), + _getSQL(ctx, queryUtils.getQueryRowEstimation), res => ({ estimatedFeatureCount: res.rows[0].rows }) ); } @@ -83,7 +84,7 @@ function _featureCount(ctx) { // TODO: if ctx.metaOptions.columnStats we can combine this with column stats query return queryPromise( ctx.dbConnection, - _getSQL(ctx, 'pre', 0, queryUtils.getQueryActualRowCount), + _getSQL(ctx, queryUtils.getQueryActualRowCount), res => ({ featureCount: res.rows[0].rows }) ); } @@ -97,7 +98,7 @@ function _aggrFeatureCount(ctx) { // return metadata for multiple levels. return queryPromise( ctx.dbConnection, - _getSQL(ctx, 'post', ctx.metaOptions.aggrFeatureCount || 0, queryUtils.getQueryActualRowCount), + _getSQL(ctx, queryUtils.getQueryActualRowCount, 'post', ctx.metaOptions.aggrFeatureCount), res => ({ aggrFeatureCount: res.rows[0].rows }) ); } @@ -109,7 +110,7 @@ function _geometryType(ctx) { const geometryColumn = AggregationMapConfig.getAggregationGeometryColumn(); return queryPromise( ctx.dbConnection, - _getSQL(ctx, 'pre', 0, sql => queryUtils.getQueryGeometryType(sql, geometryColumn)), + _getSQL(ctx, sql => queryUtils.getQueryGeometryType(sql, geometryColumn)), res => ({ geometryType: res.rows[0].geom_type }) ); } @@ -121,7 +122,7 @@ function _columns(ctx) { // note: post-aggregation columns are in layer.options.columns when aggregation is present return queryPromise( ctx.dbConnection, - _getSQL(ctx, 'pre', 0, sql => queryUtils.getQueryLimited(sql, 0)), + _getSQL(ctx, sql => queryUtils.getQueryLimited(sql, 0)), res => formatResultFields(ctx.dbConnection, res.fields) ); } @@ -172,7 +173,7 @@ function _sample(ctx, numRows) { const sampleProb = Math.min(ctx.metaOptions.sample / numRows, 1); return queryPromise( ctx.dbConnection, - _getSQL(ctx, 'pre', 0, sql => queryUtils.getQuerySample(sql, sampleProb)), + _getSQL(ctx, sql => queryUtils.getQuerySample(sql, sampleProb)), res => ({ sample: res.rows }) ); } @@ -199,7 +200,7 @@ function _columnStats(ctx, columns) { queries.push( queryPromise( ctx.dbConnection, - _getSQL(ctx, 'pre', 0, sql => queryUtils.getQueryTopCategories(sql, name, topN)), + _getSQL(ctx, sql => queryUtils.getQueryTopCategories(sql, name, topN)), res => ({ [name]: { categories: res.rows } }) ) ); @@ -208,7 +209,7 @@ function _columnStats(ctx, columns) { queries.push( queryPromise( ctx.dbConnection, - _getSQL(ctx, 'pre', 0, sql => `SELECT ${aggr.join(',')} FROM (${sql}) AS __cdb_query`), + _getSQL(ctx, sql => `SELECT ${aggr.join(',')} FROM (${sql}) AS __cdb_query`), res => { let stats = {}; Object.keys(columns).forEach(name => {