From 5e4d1d5c1c6d0fbe39608d9a2b60819f556cf9da Mon Sep 17 00:00:00 2001 From: Mario de Frutos Date: Fri, 10 Mar 2017 11:40:48 +0100 Subject: [PATCH] Get affected tables and add it to the layergroup --- .../adapter/analysis-mapconfig-adapter.js | 9 ++++++ test/acceptance/analysis/analysis-layers.js | 30 +++++++++++++++++++ 2 files changed, 39 insertions(+) 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];