Add function get columns for layer's query

This commit is contained in:
Daniel García Aubert
2017-12-22 13:43:30 +01:00
parent a2f804d79f
commit b7ecde5c9d
@@ -38,7 +38,7 @@ module.exports = class AggregationMapConfig extends MapConfig {
return AggregationMapConfig.SUPPORTED_GEOMETRY_TYPES.includes(geometryType);
}
constructor (config, datasource) {
constructor (config, connection, datasource) {
super(config, datasource);
const validate = aggregationValidator(this);
@@ -50,6 +50,8 @@ module.exports = class AggregationMapConfig extends MapConfig {
validate('placement', includesValidPlacementsValidator);
validate('threshold', positiveNumberValidator);
validate('columns', aggregationColumnsValidator);
this.connection = connection;
}
getAggregatedQuery (index) {
@@ -120,4 +122,26 @@ module.exports = class AggregationMapConfig extends MapConfig {
return featureCount >= threshold;
}
getLayerColumns (index, skipGeoms, callback) {
const geomColumns = ['the_geom', 'the_geom_webmercator'];
const limitedQuery = ctx => `SELECT * FROM (${ctx.query}) __cdb_schema LIMIT 0`;
const layer = this.getLayer(index);
this.connection.query(limitedQuery({ query: layer.options.sql }), (err, result) => {
if (err) {
return callback(err);
}
let columns = result.fields || [];
columns = columns.map(({ name, type }) => ({ name, type }));
if (skipGeoms) {
columns = columns.filter((column) => !geomColumns.includes(column));
}
return callback(err, columns);
});
}
};