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:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,3 @@
|
||||
cartodb--*.sql
|
||||
results/
|
||||
expected/
|
||||
regression.*
|
||||
|
||||
16
Makefile
16
Makefile
@@ -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 >> $@
|
||||
|
||||
@@ -4,3 +4,4 @@ superuser = true
|
||||
relocatable = false
|
||||
schema = cartodb
|
||||
requires = schema_triggers
|
||||
requires = postgis
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
59
expected/test_ddl_triggers.out
Normal file
59
expected/test_ddl_triggers.out
Normal 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
|
||||
@@ -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
61
sql/test_ddl_triggers.sql
Normal 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;
|
||||
Reference in New Issue
Block a user