Add method to discover required columns or all of them if it's a default aggregation
This commit is contained in:
parent
5a730c6df1
commit
d42257127b
@ -9,6 +9,8 @@ const {
|
|||||||
|
|
||||||
const SubstitutionTokens = require('../../utils/substitution-tokens');
|
const SubstitutionTokens = require('../../utils/substitution-tokens');
|
||||||
|
|
||||||
|
const removeDuplicates = arr => [...new Set(arr)];
|
||||||
|
|
||||||
function prepareSql(sql) {
|
function prepareSql(sql) {
|
||||||
return sql && SubstitutionTokens.replace(sql, {
|
return sql && SubstitutionTokens.replace(sql, {
|
||||||
bbox: 'ST_MakeEnvelope(0,0,0,0)',
|
bbox: 'ST_MakeEnvelope(0,0,0,0)',
|
||||||
@ -125,6 +127,43 @@ module.exports = class AggregationMapConfig extends MapConfig {
|
|||||||
return aggregation;
|
return aggregation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getLayerAggregationColumns (index, callback) {
|
||||||
|
if (this._isDefaultLayerAggregation(index)) {
|
||||||
|
const skipGeoms = true;
|
||||||
|
return this.getLayerColumns(index, skipGeoms, (err, columns) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
return callback(null, columns);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const columns = this._getLayerAggregationRequiredColumns(index);
|
||||||
|
|
||||||
|
return callback(null, columns);
|
||||||
|
}
|
||||||
|
|
||||||
|
_getLayerAggregationRequiredColumns (index) {
|
||||||
|
const { columns, dimensions } = this.getAggregation(index);
|
||||||
|
|
||||||
|
let aggregatedColumns = [];
|
||||||
|
if (columns) {
|
||||||
|
aggregatedColumns = Object.keys(columns)
|
||||||
|
.map(key => columns[key].aggregated_column)
|
||||||
|
.filter(aggregatedColumn => typeof aggregatedColumn === 'string');
|
||||||
|
}
|
||||||
|
|
||||||
|
let dimensionsColumns = [];
|
||||||
|
if (dimensions) {
|
||||||
|
dimensionsColumns = Object.keys(dimensions)
|
||||||
|
.map(key => dimensions[key])
|
||||||
|
.filter(dimension => typeof dimension === 'string');
|
||||||
|
}
|
||||||
|
|
||||||
|
return removeDuplicates(aggregatedColumns.concat(dimensionsColumns));
|
||||||
|
}
|
||||||
|
|
||||||
doesLayerReachThreshold(index, featureCount) {
|
doesLayerReachThreshold(index, featureCount) {
|
||||||
const threshold = this.getAggregation(index) && this.getAggregation(index).threshold ?
|
const threshold = this.getAggregation(index) && this.getAggregation(index).threshold ?
|
||||||
this.getAggregation(index).threshold :
|
this.getAggregation(index).threshold :
|
||||||
@ -165,7 +204,7 @@ module.exports = class AggregationMapConfig extends MapConfig {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
isDefaultLayerAggregation (index) {
|
_isDefaultLayerAggregation (index) {
|
||||||
const aggregation = this.getAggregation(index);
|
const aggregation = this.getAggregation(index);
|
||||||
|
|
||||||
return (this.isVectorOnlyMapConfig() && !this.hasLayerAggregation(index)) ||
|
return (this.isVectorOnlyMapConfig() && !this.hasLayerAggregation(index)) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user