From 90d0b23441219130d72c1d2a9237a45a87f470a3 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Wed, 24 Jun 2015 15:43:02 +0200 Subject: [PATCH] Use CDB_QueryTablesText instead of CDB_QueryTables This avoids trouble with len(schema.table_name) > 63 See https://github.com/CartoDB/cartodb-postgresql/issues/86 --- lib/cartodb/api/query_tables_api.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/cartodb/api/query_tables_api.js b/lib/cartodb/api/query_tables_api.js index fc0e2932..829d82cd 100644 --- a/lib/cartodb/api/query_tables_api.js +++ b/lib/cartodb/api/query_tables_api.js @@ -14,7 +14,7 @@ module.exports = QueryTablesApi; QueryTablesApi.prototype.getAffectedTablesInQuery = function (username, sql, callback) { - var query = 'SELECT CDB_QueryTables($windshaft$' + prepareSql(sql) + '$windshaft$)'; + var query = 'SELECT CDB_QueryTablesText($windshaft$' + prepareSql(sql) + '$windshaft$)'; this.pgQueryRunner.run(username, query, handleAffectedTablesInQueryRows, callback); }; @@ -25,9 +25,9 @@ function handleAffectedTablesInQueryRows(err, rows, callback) { callback(new Error('could not fetch source tables: ' + msg)); return; } - var qtables = rows[0].cdb_querytables; - var tableNames = qtables.split(/^\{(.*)\}$/)[1]; - tableNames = tableNames ? tableNames.split(',') : []; + + // This is an Array, so no need to split into parts + var tableNames = rows[0].cdb_querytablestext; callback(null, tableNames); } @@ -35,7 +35,7 @@ QueryTablesApi.prototype.getAffectedTablesAndLastUpdatedTime = function (usernam var query = [ 'WITH querytables AS (', - 'SELECT * FROM CDB_QueryTables($windshaft$' + prepareSql(sql) + '$windshaft$) as tablenames', + 'SELECT * FROM CDB_QueryTablesText($windshaft$' + prepareSql(sql) + '$windshaft$) as tablenames', ')', 'SELECT (SELECT tablenames FROM querytables), EXTRACT(EPOCH FROM max(updated_at)) as max', 'FROM CDB_TableMetadata m', @@ -54,8 +54,8 @@ function handleAffectedTablesAndLastUpdatedTimeRows(err, rows, callback) { var result = rows[0]; - var tableNames = result.tablenames.split(/^\{(.*)\}$/)[1]; - tableNames = tableNames ? tableNames.split(',') : []; + // This is an Array, so no need to split into parts + var tableNames = result.tablenames; var lastUpdatedTime = result.max || 0;