Fix token substitution for stat queries
This commit is contained in:
@@ -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 => {
|
||||
|
||||
Reference in New Issue
Block a user