Upgrades QueryTables and QueryStatements to match with current

implementations. From now on it will re-download those functions from
https://github.com/CartoDB/cartodb-postgresql/tree/cdb when running
tests.
This commit is contained in:
Raul Ochoa 2014-09-22 13:16:11 +02:00
parent 25d2e64891
commit 7b9dbaf9f7
4 changed files with 14 additions and 11 deletions

View File

@ -12,9 +12,8 @@ Provides a nodejs based API for running SQL queries against CartoDB.
core requirements core requirements
------------- -------------
* postgres 9.0+ * postgres 9.0+ (with plpythonu extension for ``CDB_QueryTables``)
* postgis 2.0+ * postgis 2.0+
* cartodb 0.9.5+ (for ``CDB_QueryTables``)
* GDAL 1.9.2+ (bin utils) * GDAL 1.9.2+ (bin utils)
* zip commandline tool * zip commandline tool
* redis * redis

View File

@ -75,6 +75,9 @@ if test x"$PREPARE_PGSQL" = xyes; then
psql -U postgres -v ON_ERROR_STOP=1 ${TEST_DB} || exit 1 psql -U postgres -v ON_ERROR_STOP=1 ${TEST_DB} || exit 1
# TODO: send in a single run, togheter with test.sql # TODO: send in a single run, togheter with test.sql
psql -U postgres -c "CREATE EXTENSION plpythonu;" ${TEST_DB}
curl -L -s https://github.com/CartoDB/cartodb-postgresql/raw/cdb/scripts-available/CDB_QueryStatements.sql -o support/CDB_QueryStatements.sql
curl -L -s https://github.com/CartoDB/cartodb-postgresql/raw/cdb/scripts-available/CDB_QueryTables.sql -o support/CDB_QueryTables.sql
psql -U postgres -f support/CDB_QueryStatements.sql ${TEST_DB} psql -U postgres -f support/CDB_QueryStatements.sql ${TEST_DB}
psql -U postgres -f support/CDB_QueryTables.sql ${TEST_DB} psql -U postgres -f support/CDB_QueryTables.sql ${TEST_DB}

View File

@ -1,13 +1,14 @@
-- Return an array of statements found in the given query text -- Return an array of statements found in the given query text
-- --
-- Curtesy of Hubert Lubaczewski (depesz) -- Regexp curtesy of Hubert Lubaczewski (depesz)
-- Implemented in plpython for performance reasons
-- --
CREATE OR REPLACE FUNCTION CDB_QueryStatements(query text) CREATE OR REPLACE FUNCTION CDB_QueryStatements(query text)
RETURNS SETOF TEXT AS $$ RETURNS SETOF TEXT AS $$
SELECT stmt FROM ( import re
SELECT btrim(q[1], E' \n\t\r;') as stmt FROM ( pat = re.compile( r'''((?:[^'"$;]+|"[^"]*"|'[^']*'|(\$[^$]*\$).*?\2)+)''', re.DOTALL )
SELECT regexp_matches( $1, $REG$((?:[^'"$;]+|"[^"]*"|'(?:[^']*|'')*'|(\$[^$]*\$).*?\2)+)$REG$, 'g' ) as q for match in pat.findall(query):
) i cleaned = match[0].strip()
) j if ( cleaned ):
WHERE stmt <> ''; yield cleaned
$$ language sql; $$ language 'plpythonu' IMMUTABLE STRICT;

View File

@ -39,7 +39,7 @@ BEGIN
inp AS ( inp AS (
SELECT SELECT
xpath('//x:Relation-Name/text()', exp, ARRAY[ARRAY['x', 'http://www.postgresql.org/2009/explain']]) as x, xpath('//x:Relation-Name/text()', exp, ARRAY[ARRAY['x', 'http://www.postgresql.org/2009/explain']]) as x,
xpath('//x:Schema/text()', exp, ARRAY[ARRAY['x', 'http://www.postgresql.org/2009/explain']]) as s xpath('//x:Relation-Name/../x:Schema/text()', exp, ARRAY[ARRAY['x', 'http://www.postgresql.org/2009/explain']]) as s
) )
SELECT unnest(x)::name as p, unnest(s)::name as sc from inp SELECT unnest(x)::name as p, unnest(s)::name as sc from inp
LOOP LOOP