Fix token substitution for stat queries

This commit is contained in:
Javier Goizueta
2018-05-18 22:25:32 +02:00
parent 8e8458e557
commit 4e99ff1c39
@@ -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 => {