From f0fc44aac9f74f10e27e0efda3f66de0d4b61c8c Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 23 Apr 2013 17:12:10 +0200 Subject: [PATCH] Fix fetching of affected tables when mapnik tokens are used We'll replace !bbox! with an empty box and !pixel_width! and !pixel_height! with 1 before passing the query to CDB_QueryTable --- lib/cartodb/server_options.js | 9 ++++++++- test/acceptance/multilayer.js | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/server_options.js b/lib/cartodb/server_options.js index 2d692dd8..290c0dd8 100644 --- a/lib/cartodb/server_options.js +++ b/lib/cartodb/server_options.js @@ -105,7 +105,14 @@ module.exports = function(){ me.affectedTables = function (username, api_key, sql, callback) { - var sql = 'SELECT CDB_QueryTables($windshaft$' + sql + '$windshaft$)'; + // Replace mapnik tokens + sql = sql.replace(RegExp('!bbox!', 'g'), 'ST_MakeEnvelope(0,0,0,0)') + .replace(RegExp('!pixel_width!', 'g'), '1') + .replace(RegExp('!pixel_height!', 'g'), '1') + ; + + // Pass to CDB_QueryTables + sql = 'SELECT CDB_QueryTables($windshaft$' + sql + '$windshaft$)'; // call sql api me.sqlQuery(username, api_key, sql, function(err, rows){ diff --git a/test/acceptance/multilayer.js b/test/acceptance/multilayer.js index 4b0f0657..00a01290 100644 --- a/test/acceptance/multilayer.js +++ b/test/acceptance/multilayer.js @@ -229,6 +229,9 @@ suite('multilayer', function() { var sentquery = JSON.parse(jsonquery); assert.equal(sentquery.q, 'SELECT CDB_QueryTables($windshaft$' + layergroup.layers[0].options.sql + .replace(RegExp('!bbox!', 'g'), 'ST_MakeEnvelope(0,0,0,0)') + .replace(RegExp('!pixel_width!', 'g'), '1') + .replace(RegExp('!pixel_height!', 'g'), '1') + '$windshaft$)'); assert.imageEqualsFile(res.body, 'test/fixtures/test_multilayer_bbox.png', 2, @@ -259,6 +262,9 @@ suite('multilayer', function() { var sentquery = JSON.parse(jsonquery); assert.equal(sentquery.q, 'SELECT CDB_QueryTables($windshaft$' + layergroup.layers[0].options.sql + .replace('!bbox!', 'ST_MakeEnvelope(0,0,0,0)') + .replace('!pixel_width!', '1') + .replace('!pixel_height!', '1') + '$windshaft$)'); assert.imageEqualsFile(res.body, 'test/fixtures/test_multilayer_bbox.png', 2, @@ -327,7 +333,7 @@ suite('multilayer', function() { version: '1.0.0', layers: [ { options: { - sql: 'select 1 as cartodb_id, ' + sql: 'select 1 as cartodb_id, !pixel_height! as h' + 'ST_Buffer(!bbox!, -32*greatest(!pixel_width!,!pixel_height!)) as the_geom_webmercator', cartocss: '#layer { polygon-fill:red; }', cartocss_version: '2.0.1'