diff --git a/lib/cartodb/models/mapconfig/adapter/analysis-mapconfig-adapter.js b/lib/cartodb/models/mapconfig/adapter/analysis-mapconfig-adapter.js index b59684c7..09467ea9 100644 --- a/lib/cartodb/models/mapconfig/adapter/analysis-mapconfig-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/analysis-mapconfig-adapter.js @@ -115,6 +115,7 @@ AnalysisMapConfigAdapter.prototype.getMapConfig = function(user, requestMapConfi } layer.options.sql = analysisSql; layer.options.columns = getDataviewsColumns(getLayerDataviews(layer, dataviews)); + layer.options.affected_tables = getAllAffectedTablesFromSourceNodes(layerNode); } else { missingNodesErrors.push( new Error('Missing analysis node.id="' + layerSourceId +'" for layer='+layerIndex) @@ -330,4 +331,12 @@ function AnalysisError(message) { this.message = message; } +function getAllAffectedTablesFromSourceNodes(node) { + var affectedTables = []; + var affectedTables = node.getAllInputNodes(function (node) { + return node.getType() === 'source'; + }).reduce(function(list, node) { return list.concat(node.getAffectedTables()); },[]); + return affectedTables; +} + require('util').inherits(AnalysisError, Error); diff --git a/test/acceptance/analysis/analysis-layers.js b/test/acceptance/analysis/analysis-layers.js index a745fb97..3a54ea2c 100644 --- a/test/acceptance/analysis/analysis-layers.js +++ b/test/acceptance/analysis/analysis-layers.js @@ -146,6 +146,36 @@ describe('analysis-layers', function() { }); }); + it('should have empty affected tables if it has only "source" node', function(done) { + var useCase = useCases[0]; + + var testClient = new TestClient(useCase.mapConfig, 1234); + + testClient.getLayergroup(function(err, layergroupResult) { + assert.ok(!err, err); + + var affected_tables = layergroupResult.metadata.layers[0].meta.affected_tables; + assert.equal(affected_tables.length, 0); + + testClient.drain(done); + }); + }); + + it('should have empty affected tables if it has a node other than "source"', function(done) { + var useCase = useCases[1]; + + var testClient = new TestClient(useCase.mapConfig, 1234); + + testClient.getLayergroup(function(err, layergroupResult) { + assert.ok(!err, err); + + var affected_tables = layergroupResult.metadata.layers[0].meta.affected_tables; + assert.equal(affected_tables[0], 'public.populated_places_simple_reduced'); + + testClient.drain(done); + }); + }); + it('should NOT fail for non-authenticated requests when it is just source', function(done) { var useCase = useCases[0];