Include some of the cartodb scripts in the extension

NOTE: this is unfinished as cartodb scripts are only referenced and not
      really included
This commit is contained in:
Sandro Santilli
2014-04-30 19:03:14 +02:00
parent 2672fc8842
commit 8cd7e31450
7 changed files with 157 additions and 38 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,3 @@
cartodb--*.sql
results/
expected/
regression.*

View File

@@ -3,13 +3,21 @@
EXTENSION = cartodb
EXTVERSION = 0.1
CDBSCRIPTS = \
scripts-available/CDB_TableMetadata.sql \
scripts-available/CDB_Quota.sql \
scripts-available/CDB_TransformToWebmercator.sql \
scripts-available/CDB_CartodbfyTable.sql \
$(END)
DATA_built = $(EXTENSION)--$(EXTVERSION).sql
#DOCS = README.md
#REGRESS = hook_on_table_create
DOCS = README.md
REGRESS = test_ddl_triggers
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
$(EXTENSION)--$(EXTVERSION).sql: cartodb_hooks.sql
cat $< | grep -v '^\(BEGIN\|END\);$$' > $@
$(EXTENSION)--$(EXTVERSION).sql: $(CDBSCRIPTS) cartodb_hooks.sql Makefile
cat $(CDBSCRIPTS) | sed 's/\<public\./cartodb./g' > $@
cat cartodb_hooks.sql >> $@

View File

@@ -4,3 +4,4 @@ superuser = true
relocatable = false
schema = cartodb
requires = schema_triggers
requires = postgis

View File

@@ -3,8 +3,6 @@
--GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_triggers TO public;
BEGIN;
-- Table creation
-- {
CREATE OR REPLACE FUNCTION cartodb.cdb_handle_create_table ()
@@ -27,10 +25,10 @@ BEGIN
END IF;
-- CDB_CartodbfyTable must not create tables, or infinite loop will happen
PERFORM public.CDB_CartodbfyTable(event_info.relation);
PERFORM cartodb.CDB_CartodbfyTable(event_info.relation);
-- Add entry to CDB_TableMetadata (should CartodbfyTable do this?)
INSERT INTO public.CDB_TableMetadata(tabname,updated_at)
INSERT INTO cartodb.CDB_TableMetadata(tabname,updated_at)
VALUES (event_info.relation, now());
END; $$;
@@ -58,7 +56,7 @@ BEGIN
END IF;
-- delete record from CDB_TableMetadata (should invalidate varnish)
DELETE FROM public.CDB_TableMetadata WHERE tabname = event_info.old_relation_oid;
DELETE FROM cartodb.CDB_TableMetadata WHERE tabname = event_info.old_relation_oid;
END; $$;
-- }
@@ -89,7 +87,7 @@ BEGIN
PERFORM cartodb.cdb_disable_ddl_hooks();
PERFORM public.CDB_CartodbfyTable(event_info.relation);
PERFORM cartodb.CDB_CartodbfyTable(event_info.relation);
PERFORM cartodb.cdb_enable_ddl_hooks();
@@ -124,7 +122,7 @@ BEGIN
PERFORM cartodb.cdb_disable_ddl_hooks();
PERFORM public.CDB_CartodbfyTable(event_info.relation);
PERFORM cartodb.CDB_CartodbfyTable(event_info.relation);
PERFORM cartodb.cdb_enable_ddl_hooks();
@@ -186,5 +184,23 @@ $$ LANGUAGE sql;
SELECT cartodb.cdb_enable_ddl_hooks();
END;
---- Make sure 'cartodb' is in database search path ?
--DO
--$$
--DECLARE
-- var_result text;
-- var_cur_search_path text;
--BEGIN
-- SELECT reset_val INTO var_cur_search_path
-- FROM pg_settings WHERE name = 'search_path';
--
-- IF var_cur_search_path LIKE '%cartodb%' THEN
-- RAISE DEBUG '"cartodb" already in database search_path';
-- ELSE
-- EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) ||
-- ' SET search_path = ' || var_cur_search_path || ', "cartodb"';
-- RAISE DEBUG '"cartodb" has been added to end of database search_path';
-- END IF;
--END
--$$ LANGUAGE 'plpgsql';

View File

@@ -0,0 +1,59 @@
--\i cartodb_hooks.sql
--\set VERBOSITY terse
CREATE TABLE IF NOT EXISTS
public.CDB_TableMetadata (
tabname regclass not null primary key,
updated_at timestamp with time zone not null default now()
);
CREATE USER cartodb_postgresql_unpriv_user;
SET SESSION AUTHORIZATION 'cartodb_postgresql_unpriv_user';
--SELECT session_user, current_user;
create schema c;
ERROR: permission denied for database contrib_regression
--create table c.t3(a int);
select 1 as i INTO c.t3;
ERROR: schema "c" does not exist
select * from c.t3;
ERROR: relation "c.t3" does not exist
LINE 1: select * from c.t3;
^
select tabname::text, updated_at from CDB_TableMetadata;
ERROR: permission denied for relation cdb_tablemetadata
alter table c.t3 rename column the_geom_webmercator to webmerc;
ERROR: schema "c" does not exist
select * from c.t3;
ERROR: relation "c.t3" does not exist
LINE 1: select * from c.t3;
^
select tabname::text, updated_at from CDB_TableMetadata;
ERROR: permission denied for relation cdb_tablemetadata
alter table c.t3 rename column the_geom_webmercator to webmerc2;
ERROR: schema "c" does not exist
select * from c.t3;
ERROR: relation "c.t3" does not exist
LINE 1: select * from c.t3;
^
select tabname::text, updated_at from CDB_TableMetadata;
ERROR: permission denied for relation cdb_tablemetadata
alter table c.t3 drop column the_geom_webmercator;
ERROR: schema "c" does not exist
select * from c.t3;
ERROR: relation "c.t3" does not exist
LINE 1: select * from c.t3;
^
select tabname::text, updated_at from CDB_TableMetadata;
ERROR: permission denied for relation cdb_tablemetadata
alter table c.t3 add column id2 int;
ERROR: schema "c" does not exist
select * from c.t3;
ERROR: relation "c.t3" does not exist
LINE 1: select * from c.t3;
^
select tabname::text, updated_at from CDB_TableMetadata;
ERROR: permission denied for relation cdb_tablemetadata
drop schema c cascade;
ERROR: schema "c" does not exist
select tabname::text, updated_at from CDB_TableMetadata;
ERROR: permission denied for relation cdb_tablemetadata
DROP USER cartodb_postgresql_unpriv_user;
ERROR: permission denied to drop role

View File

@@ -1,25 +0,0 @@
--\i cartodb_hooks.sql
--\set VERBOSITY terse
SET SESSION AUTHORIZATION 'development_cartodb_user_1';
--SELECT session_user, current_user;
create schema c;
--create table c.t3(a int);
select 1 as i INTO c.t3;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 rename column the_geom_webmercator to webmerc;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 rename column the_geom_webmercator to webmerc2;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 drop column the_geom_webmercator;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 add column id2 int;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
drop schema c cascade;
select tabname::text, updated_at from CDB_TableMetadata;

61
sql/test_ddl_triggers.sql Normal file
View File

@@ -0,0 +1,61 @@
CREATE EXTENSION postgis;
CREATE EXTENSION schema_triggers;
CREATE EXTENSION cartodb;
set search_path to public,cartodb,schema_triggers;
--set client_min_messages to debug;
-- Create a stub cdb_invalidate_varnish function if not available
--CREATE FUNCTION tmp() returns void AS $$
DO $$
BEGIN
PERFORM cdb_invalidate_varnish(0);
EXCEPTION
WHEN undefined_function THEN
CREATE OR REPLACE FUNCTION cartodb.cdb_invalidate_varnish(tabname regclass)
RETURNS void AS '' LANGUAGE 'sql';
END;
$$ LANGUAGE 'plpgsql';
--SELECT tmp();
create schema c;
CREATE TABLE IF NOT EXISTS
public.CDB_TableMetadata (
tabname regclass not null primary key,
updated_at timestamp with time zone not null default now()
);
CREATE USER cartodb_postgresql_unpriv_user;
GRANT ALL ON SCHEMA c to cartodb_postgresql_unpriv_user;
GRANT SELECT ON public.CDB_TableMetadata to cartodb_postgresql_unpriv_user;
SET SESSION AUTHORIZATION 'cartodb_postgresql_unpriv_user';
--SELECT session_user, current_user;
--create table c.t3(a int);
select 1 as i INTO c.t3;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 rename column the_geom_webmercator to webmerc;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 rename column the_geom_webmercator to webmerc2;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 drop column the_geom_webmercator;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
alter table c.t3 add column id2 int;
select * from c.t3;
select tabname::text, updated_at from CDB_TableMetadata;
RESET SESSION AUTHORIZATION;
drop schema c cascade;
select tabname::text, updated_at from CDB_TableMetadata;
DROP TABLE public.CDB_TableMetadata;
DROP USER cartodb_postgresql_unpriv_user;