diff --git a/lib/cartodb/models/analysis-mapconfig-adapter.js b/lib/cartodb/models/analysis-mapconfig-adapter.js index 08050287..c7e788f9 100644 --- a/lib/cartodb/models/analysis-mapconfig-adapter.js +++ b/lib/cartodb/models/analysis-mapconfig-adapter.js @@ -139,7 +139,12 @@ AnalysisMapConfigAdapter.prototype.getMapConfig = function(analysisConfiguration var layerSourceId = getLayerSourceId(layer); var layerNode = sourceId2Node[layerSourceId]; if (layerNode) { - layer.options.sql = layerQuery(layerNode.getQuery(), layerNode.getColumns()); + var analysisSql = layerQuery(layerNode.getQuery(), layerNode.getColumns()); + var sqlQueryWrap = layer.options.sql_wrap; + if (sqlQueryWrap) { + analysisSql = sqlQueryWrap.replace(/<%=\s*__analysis_query\s*%>/g, analysisSql); + } + layer.options.sql = analysisSql; var layerDataviews = getLayerDataviews(layer, dataviews); layer.options.columns = layerDataviews.reduce(function(columns, dataview) { return columns.concat(getDataviewColumns(dataview)); diff --git a/test/acceptance/analysis/analysis-layers.js b/test/acceptance/analysis/analysis-layers.js index 826c6604..560c938b 100644 --- a/test/acceptance/analysis/analysis-layers.js +++ b/test/acceptance/analysis/analysis-layers.js @@ -327,4 +327,44 @@ describe('analysis-layers', function() { testClient.drain(done); }); }); + + it('should wrap queries from analyses', function(done) { + var testClient = new TestClient(mapConfig( + [ + { + "type": "cartodb", + "options": { + "source": { + "id": "2570e105-7b37-40d2-bdf4-1af889598745" + }, + "sql_wrap": "SELECT * FROM (<%= __analysis_query %>) __wrapped WHERE adm0cap = 1", + "cartocss": DEFAULT_MULTITYPE_STYLE, + "cartocss_version": "2.3.0" + } + } + ], + {}, + [ + { + "id": "2570e105-7b37-40d2-bdf4-1af889598745", + "type": "source", + "params": { + "query": "select * from populated_places_simple_reduced" + } + } + ] + ), 1234); + + var tile = TILE_ANALYSIS_TABLES; + testClient.getTile(tile.z, tile.x, tile.y, function(err, res, image) { + assert.ok(!err, err); + + var fixturePath = './test/fixtures/analysis/adm0cap-source-id-mapnik-layer.png'; + assert.imageIsSimilarToFile(image, fixturePath, IMAGE_TOLERANCE_PER_MIL, function(err) { + assert.ok(!err, err); + + testClient.drain(done); + }); + }); + }); }); diff --git a/test/fixtures/analysis/adm0cap-source-id-mapnik-layer.png b/test/fixtures/analysis/adm0cap-source-id-mapnik-layer.png new file mode 100644 index 00000000..59d237c3 Binary files /dev/null and b/test/fixtures/analysis/adm0cap-source-id-mapnik-layer.png differ