diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..430ddb5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +cartodb--*.sql +results/ +expected/ +regression.* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6688c6e --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +# cartodb/Makefile + +EXTENSION = cartodb +EXTVERSION = 0.1 + +DATA_built = $(EXTENSION)--$(EXTVERSION).sql +#DOCS = README.md +#REGRESS = hook_on_table_create + +PG_CONFIG = pg_config +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) + +$(EXTENSION)--$(EXTVERSION).sql: cartodb_hooks.sql + cat $< | grep -v '^\(BEGIN\|END\);$$' > $@ diff --git a/cartodb.control b/cartodb.control new file mode 100644 index 0000000..dfed88a --- /dev/null +++ b/cartodb.control @@ -0,0 +1,6 @@ +default_version = '0.1' +comment = 'Turn a database into a cartodb user database.' +superuser = true +relocatable = false +schema = cartodb +requires = schema_triggers diff --git a/cartodb_hooks.sql b/cartodb_hooks.sql index 23ec215..5fc7658 100644 --- a/cartodb_hooks.sql +++ b/cartodb_hooks.sql @@ -1,13 +1,13 @@ -LOAD 'schema_triggers.so'; -CREATE EXTENSION IF NOT EXISTS schema_triggers; +--LOAD 'schema_triggers.so'; +--CREATE EXTENSION IF NOT EXISTS schema_triggers; -GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_triggers TO public; +--GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_triggers TO public; BEGIN; -- Table creation -- { -CREATE OR REPLACE FUNCTION cdb_handle_create_table () +CREATE OR REPLACE FUNCTION cartodb.cdb_handle_create_table () RETURNS event_trigger SECURITY DEFINER LANGUAGE plpgsql AS $$ DECLARE event_info RECORD; @@ -38,7 +38,7 @@ END; $$; -- Table drop -- { -CREATE OR REPLACE FUNCTION cdb_handle_drop_table () +CREATE OR REPLACE FUNCTION cartodb.cdb_handle_drop_table () RETURNS event_trigger SECURITY DEFINER LANGUAGE plpgsql AS $$ DECLARE event_info RECORD; @@ -59,7 +59,7 @@ END; $$; -- Column alter -- { -CREATE OR REPLACE FUNCTION cdb_handle_alter_column () +CREATE OR REPLACE FUNCTION cartodb.cdb_handle_alter_column () RETURNS event_trigger SECURITY DEFINER LANGUAGE plpgsql AS $$ DECLARE event_info RECORD; @@ -81,11 +81,11 @@ BEGIN RETURN; END IF; - PERFORM cdb_disable_ddl_hooks(); + PERFORM cartodb.cdb_disable_ddl_hooks(); PERFORM public.CDB_CartodbfyTable(event_info.relation); - PERFORM cdb_enable_ddl_hooks(); + PERFORM cartodb.cdb_enable_ddl_hooks(); -- TODO: update CDB_TableMetadata.updated_at (should invalidate varnish) @@ -94,7 +94,7 @@ END; $$; -- Column drop -- { -CREATE OR REPLACE FUNCTION cdb_handle_drop_column () +CREATE OR REPLACE FUNCTION cartodb.cdb_handle_drop_column () RETURNS event_trigger SECURITY DEFINER LANGUAGE plpgsql AS $$ DECLARE event_info RECORD; @@ -116,11 +116,11 @@ BEGIN RETURN; END IF; - PERFORM cdb_disable_ddl_hooks(); + PERFORM cartodb.cdb_disable_ddl_hooks(); PERFORM public.CDB_CartodbfyTable(event_info.relation); - PERFORM cdb_enable_ddl_hooks(); + PERFORM cartodb.cdb_enable_ddl_hooks(); -- TODO: update CDB_TableMetadata.updated_at (should invalidate varnish) @@ -129,7 +129,7 @@ END; $$; -- Column add -- { -CREATE OR REPLACE FUNCTION cdb_handle_add_column () +CREATE OR REPLACE FUNCTION cartodb.cdb_handle_add_column () RETURNS event_trigger SECURITY DEFINER LANGUAGE plpgsql AS $$ DECLARE event_info RECORD; @@ -156,7 +156,7 @@ BEGIN END; $$; -- } -CREATE OR REPLACE FUNCTION cdb_disable_ddl_hooks() returns void AS $$ +CREATE OR REPLACE FUNCTION cartodb.cdb_disable_ddl_hooks() returns void AS $$ DROP EVENT TRIGGER IF EXISTS cdb_on_relation_create; DROP EVENT TRIGGER IF EXISTS cdb_on_relation_drop; DROP EVENT TRIGGER IF EXISTS cdb_on_alter_column; @@ -164,16 +164,21 @@ CREATE OR REPLACE FUNCTION cdb_disable_ddl_hooks() returns void AS $$ DROP EVENT TRIGGER IF EXISTS cdb_on_add_column; $$ LANGUAGE sql; -CREATE OR REPLACE FUNCTION cdb_enable_ddl_hooks() returns void AS $$ +CREATE OR REPLACE FUNCTION cartodb.cdb_enable_ddl_hooks() returns void AS $$ SELECT cdb_disable_ddl_hooks(); - CREATE EVENT TRIGGER cdb_on_relation_create ON "relation_create" EXECUTE PROCEDURE cdb_handle_create_table(); - CREATE EVENT TRIGGER cdb_on_relation_drop ON "relation_drop" EXECUTE PROCEDURE cdb_handle_drop_table(); - CREATE EVENT TRIGGER cdb_on_alter_column ON "column_alter" EXECUTE PROCEDURE cdb_handle_alter_column(); - CREATE EVENT TRIGGER cdb_on_drop_column ON "column_drop" EXECUTE PROCEDURE cdb_handle_drop_column(); - CREATE EVENT TRIGGER cdb_on_add_column ON "column_add" EXECUTE PROCEDURE cdb_handle_add_column(); + CREATE EVENT TRIGGER cdb_on_relation_create + ON "relation_create" EXECUTE PROCEDURE cartodb.cdb_handle_create_table(); + CREATE EVENT TRIGGER cdb_on_relation_drop + ON "relation_drop" EXECUTE PROCEDURE cartodb.cdb_handle_drop_table(); + CREATE EVENT TRIGGER cdb_on_alter_column + ON "column_alter" EXECUTE PROCEDURE cartodb.cdb_handle_alter_column(); + CREATE EVENT TRIGGER cdb_on_drop_column + ON "column_drop" EXECUTE PROCEDURE cartodb.cdb_handle_drop_column(); + CREATE EVENT TRIGGER cdb_on_add_column + ON "column_add" EXECUTE PROCEDURE cartodb.cdb_handle_add_column(); $$ LANGUAGE sql; -SELECT cdb_enable_ddl_hooks(); +SELECT cartodb.cdb_enable_ddl_hooks(); END; diff --git a/hook_on_table_create.sql b/sql/hook_on_table_create.sql similarity index 90% rename from hook_on_table_create.sql rename to sql/hook_on_table_create.sql index e972ddc..0973904 100644 --- a/hook_on_table_create.sql +++ b/sql/hook_on_table_create.sql @@ -1,9 +1,7 @@ -\i cartodb_hooks.sql -\set VERBOSITY terse - +--\i cartodb_hooks.sql +--\set VERBOSITY terse SET SESSION AUTHORIZATION 'development_cartodb_user_1'; - -SELECT session_user, current_user; +--SELECT session_user, current_user; create schema c;