From ba521461fe5c46d85420ec22f704fcf7adf01b7d Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Mon, 1 Jun 2015 09:46:19 -0700 Subject: [PATCH 1/4] Replace CDB_UserTables with new version fix for #64 --- scripts-available/CDB_UserTables.sql | 42 ++++++++++------------------ 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/scripts-available/CDB_UserTables.sql b/scripts-available/CDB_UserTables.sql index 40e2f51..1b211b7 100644 --- a/scripts-available/CDB_UserTables.sql +++ b/scripts-available/CDB_UserTables.sql @@ -6,34 +6,22 @@ -- Currently accepted permissions are: 'public', 'private' or 'all' -- CREATE OR REPLACE FUNCTION CDB_UserTables(perm text DEFAULT 'all') -RETURNS SETOF information_schema.sql_identifier +RETURNS SETOF name AS $$ - WITH usertables AS ( - -- TODO: query CDB_TableMetadata for this ? - -- See http://github.com/CartoDB/cartodb/issues/254#issuecomment-26044777 - SELECT table_name as t - FROM information_schema.tables - WHERE - table_type='BASE TABLE' - AND table_schema='public' - AND table_name NOT IN ( - 'cdb_tablemetadata', - 'spatial_ref_sys' - ) - ), perms AS ( - SELECT t, has_table_privilege('public', 'public'||'.'||t, 'SELECT') as p - FROM usertables - ) - SELECT t FROM perms - WHERE ( - p = CASE WHEN $1 = 'private' THEN false - WHEN $1 = 'public' THEN true - ELSE not p -- none - END - OR $1 = 'all' - ) - AND has_table_privilege('public'||'.'||t, 'SELECT') - ; + +SELECT c.relname +FROM pg_class c +JOIN pg_roles r ON r.oid = c.relowner +JOIN pg_namespace n ON n.oid = c.relnamespace +WHERE r.rolname = current_user +AND c.relkind = 'r' +AND c.relname NOT IN ('cdb_tablemetadata', 'spatial_ref_sys') +AND n.nspname NOT IN ('pg_catalog', 'information_schema') +AND CASE WHEN perm = 'public' THEN has_table_privilege('public', c.oid, 'SELECT') + WHEN perm = 'private' THEN has_table_privilege(c.oid, 'SELECT') AND NOT + has_table_privilege('public', c.oid, 'SELECT') + ELSE has_table_privilege(c.oid, 'SELECT') END; + $$ LANGUAGE 'sql'; -- This is to migrate from pre-0.2.0 version From 54973142f69e28686953df71ba9cf87fe7506e55 Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Mon, 1 Jun 2015 10:37:46 -0700 Subject: [PATCH 2/4] Handle "unsupported argument" case for CDB_UserTables in support of #64 --- README.md | 2 +- scripts-available/CDB_UserTables.sql | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ed38bff..5ed529d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ See https://github.com/CartoDB/cartodb/wiki/CartoDB-PostgreSQL-extension Dependencies ------------ - * PostgreSQL 9.3+ (with plpythonu extension) + * PostgreSQL 9.3+ (with plpythonu extension and xml support) * [PostGIS extension](http://postgis.net) * [Schema triggers extension] (https://bitbucket.org/malloclabs/pg_schema_triggers) diff --git a/scripts-available/CDB_UserTables.sql b/scripts-available/CDB_UserTables.sql index 1b211b7..aa82f37 100644 --- a/scripts-available/CDB_UserTables.sql +++ b/scripts-available/CDB_UserTables.sql @@ -20,7 +20,8 @@ AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND CASE WHEN perm = 'public' THEN has_table_privilege('public', c.oid, 'SELECT') WHEN perm = 'private' THEN has_table_privilege(c.oid, 'SELECT') AND NOT has_table_privilege('public', c.oid, 'SELECT') - ELSE has_table_privilege(c.oid, 'SELECT') END; + WHEN perm = 'all' THEN has_table_privilege(c.oid, 'SELECT') + ELSE false END; $$ LANGUAGE 'sql'; From e7ef5e7e8e12f977f759f8016752b6f34a006765 Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Mon, 1 Jun 2015 10:57:30 -0700 Subject: [PATCH 3/4] Clean up after tests For #64 --- test/CDB_QueryTablesTest.sql | 2 ++ test/CDB_QueryTablesTest_expect | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test/CDB_QueryTablesTest.sql b/test/CDB_QueryTablesTest.sql index b87315c..695bf70 100644 --- a/test/CDB_QueryTablesTest.sql +++ b/test/CDB_QueryTablesTest.sql @@ -31,6 +31,8 @@ create table sc.test (a int); insert into sc.test values (1); WITH inp AS ( select 'select * from sc.test'::text as q ) SELECT q, CDB_QueryTables(q) from inp; +DROP TABLE sc.test; +DROP SCHEMA sc; WITH inp AS ( select 'SELECT * FROM geometry_columns'::text as q ) diff --git a/test/CDB_QueryTablesTest_expect b/test/CDB_QueryTablesTest_expect index bfe59df..47899ed 100644 --- a/test/CDB_QueryTablesTest_expect +++ b/test/CDB_QueryTablesTest_expect @@ -13,5 +13,7 @@ CREATE SCHEMA CREATE TABLE INSERT 0 1 select * from sc.test|{sc.test} +DROP TABLE sc.test; +DROP SCHEMA sc; SELECT * FROM geometry_columns|{pg_catalog.pg_attribute,pg_catalog.pg_class,pg_catalog.pg_namespace,pg_catalog.pg_type} From dd3f125339c89c57c07e98cb60772bf6f228cf10 Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Mon, 1 Jun 2015 11:10:06 -0700 Subject: [PATCH 4/4] Fix test expectation --- test/CDB_QueryTablesTest_expect | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CDB_QueryTablesTest_expect b/test/CDB_QueryTablesTest_expect index 47899ed..205ba18 100644 --- a/test/CDB_QueryTablesTest_expect +++ b/test/CDB_QueryTablesTest_expect @@ -13,7 +13,7 @@ CREATE SCHEMA CREATE TABLE INSERT 0 1 select * from sc.test|{sc.test} -DROP TABLE sc.test; -DROP SCHEMA sc; +DROP TABLE +DROP SCHEMA SELECT * FROM geometry_columns|{pg_catalog.pg_attribute,pg_catalog.pg_class,pg_catalog.pg_namespace,pg_catalog.pg_type}