Use sql_raw for query without aggregation

This commit is contained in:
Javier Goizueta
2018-05-18 15:29:46 +02:00
parent 012fa91e83
commit 4bc8fb207a
3 changed files with 13 additions and 15 deletions
@@ -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 || {}
};
@@ -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);
});
}
@@ -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) {