From 72ebc398f8ec91913178f2829a7c8f6d29044abf Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Fri, 14 Aug 2015 12:22:59 +0200 Subject: [PATCH] Recover _CDB_check_prerequisites (sorry, my fault) --- scripts-available/CDB_CartodbfyTable.sql | 22 ++++++++++++++++++++++ test/CDB_CartodbfyTableTest.sql | 3 ++- test/CDB_CartodbfyTableTest_expect | 4 ++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/scripts-available/CDB_CartodbfyTable.sql b/scripts-available/CDB_CartodbfyTable.sql index 91b04a2..d3c03e1 100644 --- a/scripts-available/CDB_CartodbfyTable.sql +++ b/scripts-available/CDB_CartodbfyTable.sql @@ -6,6 +6,26 @@ -- * _CDB_UserQuotaInBytes() function, installed by rails -- (user.rebuild_quota_trigger, called by rake task cartodb:db:update_test_quota_trigger) +-- 1) Required checks before running cartodbfication +-- Either will pass silenty or raise an exception +CREATE OR REPLACE FUNCTION _CDB_check_prerequisites(schema_name TEXT, reloid REGCLASS) +RETURNS void +AS $$ +DECLARE + sql TEXT; +BEGIN + IF cartodb.schema_exists(schema_name) = false THEN + RAISE EXCEPTION 'Invalid schema name "%"', schema_name; + END IF; + + -- TODO: Check that user quota is set ? + BEGIN + EXECUTE FORMAT('SELECT %I._CDB_UserQuotaInBytes();', schema_name::text) INTO sql; + EXCEPTION WHEN undefined_function THEN + RAISE EXCEPTION 'Please set user quota before cartodbfying tables.'; + END; +END; +$$ LANGUAGE PLPGSQL; -- Drop cartodb triggers (might prevent changing columns) CREATE OR REPLACE FUNCTION _CDB_drop_triggers(reloid REGCLASS) @@ -1119,6 +1139,8 @@ BEGIN FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.oid = reloid; + PERFORM cartodb._CDB_check_prerequisites(destschema, reloid); + -- Check destination schema exists -- Throws an exception of there is no matching schema IF destschema IS NOT NULL THEN diff --git a/test/CDB_CartodbfyTableTest.sql b/test/CDB_CartodbfyTableTest.sql index 0b6bcab..93c1871 100644 --- a/test/CDB_CartodbfyTableTest.sql +++ b/test/CDB_CartodbfyTableTest.sql @@ -125,8 +125,9 @@ $$ LANGUAGE 'plpgsql'; -- table with single non-geometrical column -SELECT CDB_SetUserQuotaInBytes(0); -- Set user quota to infinite CREATE TABLE t AS SELECT 1::int as a; +SELECT CDB_CartodbfyTable('public', 't'); -- should fail +SELECT CDB_SetUserQuotaInBytes(0); -- Set user quota to infinite SELECT CDB_CartodbfyTableCheck('t', 'single non-geometrical column'); DROP TABLE t; diff --git a/test/CDB_CartodbfyTableTest_expect b/test/CDB_CartodbfyTableTest_expect index 2398ee1..f413f97 100644 --- a/test/CDB_CartodbfyTableTest_expect +++ b/test/CDB_CartodbfyTableTest_expect @@ -2,8 +2,8 @@ SET CREATE FUNCTION SELECT 1 ERROR: Please set user quota before cartodbfying tables. -CONTEXT: SQL statement "SELECT cartodb._CDB_check_prerequisites(schema_name, reloid)" -PL/pgSQL function cdb_cartodbfytable(text,regclass) line 7 at PERFORM +CONTEXT: SQL statement "SELECT cartodb._CDB_check_prerequisites(destschema, reloid)" +PL/pgSQL function cdb_cartodbfytable(text,regclass) line 21 at PERFORM 0 single non-geometrical column cartodbfied fine DROP TABLE