Extract function to avoid dynamic clousures
This commit is contained in:
@@ -20,61 +20,18 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon
|
||||
|
||||
var augmentLayersQueue = queue(layers.length);
|
||||
|
||||
function augmentLayer(layer, done) {
|
||||
if (layer.type !== 'mapnik' && layer.type !== 'cartodb') {
|
||||
return done(null, layer);
|
||||
}
|
||||
self.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) {
|
||||
if (err) {
|
||||
return done(err, layer);
|
||||
}
|
||||
layers.forEach(function (layer) {
|
||||
augmentLayersQueue.defer(
|
||||
augmentLayer,
|
||||
self.overviewsMetadataBackend,
|
||||
self.filterStatsBackend,
|
||||
user,
|
||||
layer,
|
||||
analysesResults
|
||||
);
|
||||
});
|
||||
|
||||
var query_rewrite_data = { overviews: metadata };
|
||||
|
||||
var filters, unfiltered_query;
|
||||
if (layer.options.source && analysesResults && !layer.options.sql_wrap) {
|
||||
var sourceId = layer.options.source.id;
|
||||
var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; });
|
||||
if (node) {
|
||||
node = node.rootNode;
|
||||
filters = node.getFilters();
|
||||
var filters_disabler = Object.keys(filters).reduce(
|
||||
function (disabler, filter_id) { disabler[filter_id] = false; return disabler; },
|
||||
{}
|
||||
);
|
||||
unfiltered_query = node.getQuery(filters_disabler);
|
||||
query_rewrite_data.filters = filters;
|
||||
query_rewrite_data.unfiltered_query = unfiltered_query;
|
||||
}
|
||||
}
|
||||
|
||||
if (!filters) {
|
||||
if (!_.isEmpty(metadata)) {
|
||||
layer = Object.assign({}, layer);
|
||||
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
|
||||
}
|
||||
|
||||
return done(null, layer);
|
||||
}
|
||||
|
||||
self.filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) {
|
||||
if (err) {
|
||||
return done(null, layer);
|
||||
}
|
||||
|
||||
query_rewrite_data.filter_stats = stats;
|
||||
|
||||
if (!_.isEmpty(metadata)) {
|
||||
layer = Object.assign({}, layer);
|
||||
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
|
||||
}
|
||||
|
||||
return done(null, layer);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function layersAugmentQueueFinish(err, layers) {
|
||||
augmentLayersQueue.awaitAll(function layersAugmentQueueFinish (err, layers) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
@@ -86,11 +43,61 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon
|
||||
requestMapConfig.layers = layers;
|
||||
|
||||
return callback(null, requestMapConfig);
|
||||
}
|
||||
|
||||
layers.forEach(function (layer) {
|
||||
augmentLayersQueue.defer(augmentLayer, layer);
|
||||
});
|
||||
augmentLayersQueue.awaitAll(layersAugmentQueueFinish);
|
||||
|
||||
};
|
||||
|
||||
function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, analysesResults, done) {
|
||||
if (layer.type !== 'mapnik' && layer.type !== 'cartodb') {
|
||||
return done(null, layer);
|
||||
}
|
||||
|
||||
overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) {
|
||||
if (err) {
|
||||
return done(err, layer);
|
||||
}
|
||||
|
||||
var query_rewrite_data = { overviews: metadata };
|
||||
|
||||
var filters, unfiltered_query;
|
||||
if (layer.options.source && analysesResults && !layer.options.sql_wrap) {
|
||||
var sourceId = layer.options.source.id;
|
||||
var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; });
|
||||
if (node) {
|
||||
node = node.rootNode;
|
||||
filters = node.getFilters();
|
||||
var filters_disabler = Object.keys(filters).reduce(
|
||||
function (disabler, filter_id) { disabler[filter_id] = false; return disabler; },
|
||||
{}
|
||||
);
|
||||
unfiltered_query = node.getQuery(filters_disabler);
|
||||
query_rewrite_data.filters = filters;
|
||||
query_rewrite_data.unfiltered_query = unfiltered_query;
|
||||
}
|
||||
}
|
||||
|
||||
if (!filters) {
|
||||
if (!_.isEmpty(metadata)) {
|
||||
layer = Object.assign({}, layer);
|
||||
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
|
||||
}
|
||||
|
||||
return done(null, layer);
|
||||
}
|
||||
|
||||
filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) {
|
||||
if (err) {
|
||||
return done(null, layer);
|
||||
}
|
||||
|
||||
query_rewrite_data.filter_stats = stats;
|
||||
|
||||
if (!_.isEmpty(metadata)) {
|
||||
layer = Object.assign({}, layer);
|
||||
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
|
||||
}
|
||||
|
||||
return done(null, layer);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user