From c45ef6c540e165acafb956e528312cac01eab350 Mon Sep 17 00:00:00 2001 From: Raul Marin Date: Fri, 31 May 2019 15:29:28 +0200 Subject: [PATCH] Fully qualify function calls --- Makefile | 20 +- cartodb_version.sql.in | 2 +- scripts-available/CDB_AnalysisCatalog.sql | 22 +- scripts-available/CDB_AnalysisCheck.sql | 12 +- scripts-available/CDB_AnalysisSupport.sql | 16 +- scripts-available/CDB_CartodbfyTable.sql | 179 +++++++------- scripts-available/CDB_ColumnNames.sql | 4 +- scripts-available/CDB_ColumnType.sql | 4 +- scripts-available/CDB_Conf.sql | 20 +- scripts-available/CDB_DDLTriggers.sql | 14 +- scripts-available/CDB_DateToNumber.sql | 4 +- scripts-available/CDB_DigitSeparator.sql | 2 +- scripts-available/CDB_DistType.sql | 6 +- scripts-available/CDB_DistinctMeasure.sql | 2 +- scripts-available/CDB_EqualIntervalBins.sql | 4 +- scripts-available/CDB_EstimateRowCount.sql | 6 +- scripts-available/CDB_ExtensionPost.sql | 2 +- scripts-available/CDB_ExtensionUtils.sql | 6 +- scripts-available/CDB_ForeignTable.sql | 42 ++-- scripts-available/CDB_GhostTables.sql | 40 +-- scripts-available/CDB_GreatCircle.sql | 18 +- scripts-available/CDB_Groups.sql | 82 +++---- scripts-available/CDB_Groups_API.sql | 68 +++--- scripts-available/CDB_HeadsTailsBins.sql | 2 +- scripts-available/CDB_Helper.sql | 20 +- scripts-available/CDB_Hexagon.sql | 42 ++-- scripts-available/CDB_JenksBins.sql | 10 +- scripts-available/CDB_LatLng.sql | 10 +- scripts-available/CDB_Math.sql | 8 +- scripts-available/CDB_Organizations.sql | 46 ++-- scripts-available/CDB_Overviews.sql | 230 +++++++++--------- scripts-available/CDB_OverviewsSupport.sql | 40 +-- scripts-available/CDB_QuantileBins.sql | 2 +- scripts-available/CDB_QueryStatements.sql | 2 +- scripts-available/CDB_QueryTables.sql | 8 +- scripts-available/CDB_Quota.sql | 30 +-- scripts-available/CDB_RandomTids.sql | 2 +- scripts-available/CDB_RectangleGrid.sql | 20 +- scripts-available/CDB_SearchPath.sql | 10 +- scripts-available/CDB_Stats.sql | 4 +- scripts-available/CDB_StringToDate.sql | 4 +- scripts-available/CDB_TableIndexes.sql | 4 +- scripts-available/CDB_TableMetadata.sql | 34 +-- .../CDB_TransformToWebmercator.sql | 38 +-- scripts-available/CDB_UserTables.sql | 8 +- scripts-available/CDB_Username.sql | 4 +- scripts-available/CDB_XYZ.sql | 8 +- scripts-available/CDB_ZoomFromScale.sql | 8 +- util/create_from_unpackaged.sh | 10 +- 49 files changed, 583 insertions(+), 596 deletions(-) diff --git a/Makefile b/Makefile index 53273da..372c17f 100644 --- a/Makefile +++ b/Makefile @@ -123,24 +123,15 @@ REGRESS = test_setup $(REGRESS_LEGACY) PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) -PG_PARALLEL := $(shell $(PG_CONFIG) --version | ($(AWK) '{$$2*=1000; if ($$2 >= 9600) print 1; else print 0;}' 2> /dev/null || echo 0)) include $(PGXS) $(EXTENSION)--$(EXTVERSION).sql: $(CDBSCRIPTS) cartodb_version.sql Makefile echo '\echo Use "CREATE EXTENSION $(EXTENSION)" to load this file. \quit' > $@ cat $(CDBSCRIPTS) | \ - $(SED) -e 's/public\./cartodb./g' \ - -e 's/:DATABASE_USERNAME/cdb_org_admin/g' \ - -e "s/''public''/''cartodb''/g" >> $@ + $(SED) -e 's/@extschema@/cartodb/g' \ + -e "s/@postgisschema@/public/g" >> $@ echo "GRANT USAGE ON SCHEMA cartodb TO public;" >> $@ cat cartodb_version.sql >> $@ -ifeq ($(PG_PARALLEL), 0) -# Remove PARALLEL in aggregates and functions - $(eval TMPFILE := $(shell mktemp /tmp/$(basename $0).XXXXXXXX)) - $(SED) -e 's/PARALLEL \= [A-Z]*,/''/g' \ - -e 's/PARALLEL [A-Z]*/''/g' $@ > $(TMPFILE) - mv $(TMPFILE) $@ -endif $(EXTENSION)--unpackaged--$(EXTVERSION).sql: $(EXTENSION)--$(EXTVERSION).sql util/create_from_unpackaged.sh Makefile ./util/create_from_unpackaged.sh $(EXTVERSION) @@ -153,12 +144,9 @@ $(EXTENSION)--$(EXTVERSION)--$(EXTVERSION)next.sql: $(EXTENSION)--$(EXTVERSION). $(EXTENSION).control: $(EXTENSION).control.in Makefile $(SED) -e 's/@@VERSION@@/$(EXTVERSION)/' $< > $@ -ifeq ($(PG_PARALLEL), 0) - echo -e "\033[0;31mExtension created without PARALLEL support\033[0m" -endif cartodb_version.sql: cartodb_version.sql.in Makefile $(GITDIR)/index - $(SED) -e 's/@@VERSION@@/$(EXTVERSION)/' $< > $@ + $(SED) -e 's/@@VERSION@@/$(EXTVERSION)/' -e 's/@extschema@/cartodb/g' -e "s/@postgisschema@/public/g" $< > $@ # Needed for consistent `echo` results with backslashes SHELL = bash @@ -175,7 +163,7 @@ legacy_regress: $(REGRESS_OLD) Makefile echo '\t' >> $${of}; \ echo '\set QUIET off' >> $${of}; \ cat $${f} | \ - $(SED) -e 's/public\./cartodb./g' >> $${of}; \ + $(SED) -e 's/@@VERSION@@/$(EXTVERSION)/' -e 's/@extschema@/cartodb/g' -e "s/@postgisschema@/public/g" >> $${of}; \ exp=expected/test/$${tn}.out; \ echo '\set ECHO none' > $${exp}; \ cat test/$${tn}_expect >> $${exp}; \ diff --git a/cartodb_version.sql.in b/cartodb_version.sql.in index 7ea190c..175dab7 100644 --- a/cartodb_version.sql.in +++ b/cartodb_version.sql.in @@ -1,6 +1,6 @@ DO $$ BEGIN IF EXISTS (SELECT * FROM pg_proc p, pg_namespace n WHERE p.proname = 'cdb_transformtowebmercator' AND p.pronamespace = n.oid AND n.nspname = 'public') THEN RAISE EXCEPTION 'Use CREATE EXTENSION cartodb FROM unpackaged'; END IF; END; $$ LANGUAGE 'plpgsql'; -- forbid duplicated extension -CREATE OR REPLACE FUNCTION cartodb.CDB_version() +CREATE OR REPLACE FUNCTION @extschema@.CDB_version() RETURNS text AS $$ SELECT '@@VERSION@@'::text; $$ language 'sql' IMMUTABLE STRICT; diff --git a/scripts-available/CDB_AnalysisCatalog.sql b/scripts-available/CDB_AnalysisCatalog.sql index b670d21..7b65119 100644 --- a/scripts-available/CDB_AnalysisCatalog.sql +++ b/scripts-available/CDB_AnalysisCatalog.sql @@ -1,6 +1,6 @@ -- Table to register analysis nodes from https://github.com/cartodb/camshaft CREATE TABLE IF NOT EXISTS -cartodb.cdb_analysis_catalog ( +@extschema@.cdb_analysis_catalog ( -- md5 hex hash node_id char(40) CONSTRAINT cdb_analysis_catalog_pkey PRIMARY KEY, -- being json allows to do queries like analysis_def->>'type' = 'buffer' @@ -34,7 +34,7 @@ cartodb.cdb_analysis_catalog ( -- This can only be called from an SQL script executed by CREATE EXTENSION DO LANGUAGE 'plpgsql' $$ BEGIN - PERFORM pg_catalog.pg_extension_config_dump('cartodb.cdb_analysis_catalog', ''); + PERFORM pg_catalog.pg_extension_config_dump('@extschema@.cdb_analysis_catalog', ''); END $$; @@ -45,7 +45,7 @@ $$; DO $$ BEGIN BEGIN - ALTER TABLE cartodb.cdb_analysis_catalog ADD COLUMN last_modified_by uuid; + ALTER TABLE @extschema@.cdb_analysis_catalog ADD COLUMN last_modified_by uuid; EXCEPTION WHEN duplicate_column THEN END; END; @@ -54,7 +54,7 @@ $$; DO $$ BEGIN BEGIN - ALTER TABLE cartodb.cdb_analysis_catalog ADD COLUMN last_error_message text; + ALTER TABLE @extschema@.cdb_analysis_catalog ADD COLUMN last_error_message text; EXCEPTION WHEN duplicate_column THEN END; END; @@ -63,7 +63,7 @@ $$; DO $$ BEGIN BEGIN - ALTER TABLE cartodb.cdb_analysis_catalog ADD COLUMN cache_tables regclass[] NOT NULL DEFAULT '{}'; + ALTER TABLE @extschema@.cdb_analysis_catalog ADD COLUMN cache_tables regclass[] NOT NULL DEFAULT '{}'; EXCEPTION WHEN duplicate_column THEN END; END; @@ -72,7 +72,7 @@ $$; DO $$ BEGIN BEGIN - ALTER TABLE cartodb.cdb_analysis_catalog ADD COLUMN username text; + ALTER TABLE @extschema@.cdb_analysis_catalog ADD COLUMN username text; EXCEPTION WHEN duplicate_column THEN END; END; @@ -84,12 +84,12 @@ DO LANGUAGE 'plpgsql' $$ DECLARE column_index int; BEGIN - SELECT ordinal_position FROM information_schema.columns WHERE table_name='cdb_analysis_catalog' AND table_schema='cartodb' AND column_name='username' INTO column_index; + SELECT ordinal_position FROM information_schema.columns WHERE table_name='cdb_analysis_catalog' AND table_schema='@extschema@' AND column_name='username' INTO column_index; IF column_index = 1 OR column_index = 10 THEN - ALTER TABLE cartodb.cdb_analysis_catalog ADD COLUMN username_final text; - UPDATE cartodb.cdb_analysis_catalog SET username_final = username; - ALTER TABLE cartodb.cdb_analysis_catalog DROP COLUMN username; - ALTER TABLE cartodb.cdb_analysis_catalog RENAME COLUMN username_final TO username; + ALTER TABLE @extschema@.cdb_analysis_catalog ADD COLUMN username_final text; + UPDATE @extschema@.cdb_analysis_catalog SET username_final = username; + ALTER TABLE @extschema@.cdb_analysis_catalog DROP COLUMN username; + ALTER TABLE @extschema@.cdb_analysis_catalog RENAME COLUMN username_final TO username; END IF; END; $$; diff --git a/scripts-available/CDB_AnalysisCheck.sql b/scripts-available/CDB_AnalysisCheck.sql index 1ecf2ac..8645967 100644 --- a/scripts-available/CDB_AnalysisCheck.sql +++ b/scripts-available/CDB_AnalysisCheck.sql @@ -1,24 +1,24 @@ -- Read configuration parameter analysis_quota_factor, making it -- accessible to regular users (which don't have access to cdb_conf) -CREATE OR REPLACE FUNCTION _CDB_GetConfAnalysisQuotaFactor() +CREATE OR REPLACE FUNCTION @extschema@._CDB_GetConfAnalysisQuotaFactor() RETURNS float8 AS $$ BEGIN - RETURN CDB_Conf_GetConf('analysis_quota_factor')::text::float8; + RETURN @extschema@.CDB_Conf_GetConf('analysis_quota_factor')::text::float8; END; $$ LANGUAGE 'plpgsql' STABLE PARALLEL SAFE SECURITY DEFINER; -- Get the factor (fraction of the quota) for Camshaft cached analysis tables -CREATE OR REPLACE FUNCTION _CDB_AnalysisQuotaFactor() +CREATE OR REPLACE FUNCTION @extschema@._CDB_AnalysisQuotaFactor() RETURNS float8 AS $$ DECLARE factor float8; BEGIN -- We use a floating point cdb_conf parameter - factor := _CDB_GetConfAnalysisQuotaFactor(); + factor := @extschema@._CDB_GetConfAnalysisQuotaFactor(); -- With a default value IF factor IS NULL THEN factor := 2; @@ -33,7 +33,7 @@ LANGUAGE 'plpgsql' STABLE PARALLEL SAFE; -- The name of an analysis table is passed; this, in addition to the -- db role that executes this function is used to determined which -- analysis tables will be considered. -CREATE OR REPLACE FUNCTION CDB_CheckAnalysisQuota(table_name TEXT) +CREATE OR REPLACE FUNCTION @extschema@.CDB_CheckAnalysisQuota(table_name TEXT) RETURNS void AS $$ DECLARE @@ -54,7 +54,7 @@ BEGIN SELECT current_schema() INTO schema_name; EXECUTE FORMAT('SELECT %I._CDB_UserQuotaInBytes();', schema_name) INTO nominal_quota; - IF nominal_quota*_CDB_AnalysisQuotaFactor() < _CDB_AnalysisDataSize(schema_name) THEN + IF nominal_quota * @extschema@._CDB_AnalysisQuotaFactor() < @extschema@._CDB_AnalysisDataSize(schema_name) THEN -- The limit is defined by a factor applied to the total space quota for the user RAISE EXCEPTION 'Analysis cache space limits exceeded'; END IF; diff --git a/scripts-available/CDB_AnalysisSupport.sql b/scripts-available/CDB_AnalysisSupport.sql index ad4b363..b5f060d 100644 --- a/scripts-available/CDB_AnalysisSupport.sql +++ b/scripts-available/CDB_AnalysisSupport.sql @@ -2,7 +2,7 @@ -- This function returns TRUE if a given table name corresponds to a Camshaft cached analysis table -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_IsAnalysisTableName(table_name TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_IsAnalysisTableName(table_name TEXT) RETURNS BOOLEAN AS $$ BEGIN @@ -15,10 +15,10 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- that may contain user tables are returned. -- For each table, the regclass, schema name and table name are returned. -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_AnalysisTablesInSchema(schema_name text DEFAULT NULL) +CREATE OR REPLACE FUNCTION @extschema@._CDB_AnalysisTablesInSchema(schema_name text DEFAULT NULL) RETURNS TABLE(table_regclass REGCLASS, schema_name TEXT, table_name TEXT) AS $$ - SELECT * FROM _CDB_UserTablesInSchema(schema_name) WHERE _CDB_IsAnalysisTableName(table_name); + SELECT * FROM @extschema@._CDB_UserTablesInSchema(schema_name) WHERE @extschema@._CDB_IsAnalysisTableName(table_name); $$ LANGUAGE 'sql' STABLE PARALLEL SAFE; -- This function returns a relation user tables excluding analysis tables @@ -26,24 +26,24 @@ $$ LANGUAGE 'sql' STABLE PARALLEL SAFE; -- that may contain user tables are returned. -- For each table, the regclass, schema name and table name are returned. -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_NonAnalysisTablesInSchema(schema_name text DEFAULT NULL) +CREATE OR REPLACE FUNCTION @extschema@._CDB_NonAnalysisTablesInSchema(schema_name text DEFAULT NULL) RETURNS TABLE(table_regclass REGCLASS, schema_name TEXT, table_name TEXT) AS $$ - SELECT * FROM _CDB_UserTablesInSchema(schema_name) WHERE Not _CDB_IsAnalysisTableName(table_name); + SELECT * FROM @extschema@._CDB_UserTablesInSchema(schema_name) WHERE Not @extschema@._CDB_IsAnalysisTableName(table_name); $$ LANGUAGE 'sql' STABLE PARALLEL SAFE; -- Total spaced used up by Camshaft cached analysis tables in the given schema. -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_AnalysisDataSize(schema_name TEXT DEFAULT NULL) +CREATE OR REPLACE FUNCTION @extschema@._CDB_AnalysisDataSize(schema_name TEXT DEFAULT NULL) RETURNS bigint AS $$ DECLARE total_size bigint; BEGIN WITH analysis_tables AS ( - SELECT t.schema_name, t.table_name FROM _CDB_AnalysisTablesInSchema(schema_name) t + SELECT t.schema_name, t.table_name FROM @extschema@._CDB_AnalysisTablesInSchema(schema_name) t ) - SELECT COALESCE(INT8(SUM(_CDB_total_relation_size(analysis_tables.schema_name, analysis_tables.table_name))))::int8 + SELECT COALESCE(INT8(SUM(@extschema@._CDB_total_relation_size(analysis_tables.schema_name, analysis_tables.table_name))))::int8 INTO total_size FROM analysis_tables; IF total_size IS NOT NULL THEN RETURN total_size; diff --git a/scripts-available/CDB_CartodbfyTable.sql b/scripts-available/CDB_CartodbfyTable.sql index 175cf2a..9bfb93c 100644 --- a/scripts-available/CDB_CartodbfyTable.sql +++ b/scripts-available/CDB_CartodbfyTable.sql @@ -9,13 +9,13 @@ -- 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) +CREATE OR REPLACE FUNCTION @extschema@._CDB_check_prerequisites(schema_name TEXT, reloid REGCLASS) RETURNS void AS $$ DECLARE sql TEXT; BEGIN - IF cartodb.schema_exists(schema_name) = false THEN + IF @extschema@.schema_exists(schema_name) = false THEN RAISE EXCEPTION 'Invalid schema name "%"', schema_name; END IF; @@ -29,7 +29,7 @@ END; $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Drop cartodb triggers (might prevent changing columns) -CREATE OR REPLACE FUNCTION _CDB_drop_triggers(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_drop_triggers(reloid REGCLASS) RETURNS void AS $$ DECLARE @@ -53,7 +53,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Cartodb_id creation & validation or renaming if invalid -CREATE OR REPLACE FUNCTION _CDB_create_cartodb_id_column(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_create_cartodb_id_column(reloid REGCLASS) RETURNS void AS $$ DECLARE @@ -200,7 +200,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Create all triggers -- NOTE: drop/create has the side-effect of re-enabling disabled triggers -CREATE OR REPLACE FUNCTION _CDB_create_triggers(schema_name TEXT, reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_create_triggers(schema_name TEXT, reloid REGCLASS) RETURNS void AS $$ DECLARE @@ -209,28 +209,28 @@ BEGIN -- "track_updates" sql := 'CREATE trigger track_updates AFTER INSERT OR UPDATE OR DELETE OR TRUNCATE ON ' || reloid::text - || ' FOR EACH STATEMENT EXECUTE PROCEDURE public.cdb_tablemetadata_trigger()'; + || ' FOR EACH STATEMENT EXECUTE PROCEDURE @extschema@.cdb_tablemetadata_trigger()'; EXECUTE sql; -- "update_the_geom_webmercator" -- TODO: why _before_ and not after ? sql := 'CREATE trigger update_the_geom_webmercator_trigger BEFORE INSERT OR UPDATE OF the_geom ON ' || reloid::text - || ' FOR EACH ROW EXECUTE PROCEDURE public._CDB_update_the_geom_webmercator()'; + || ' FOR EACH ROW EXECUTE PROCEDURE @extschema@._CDB_update_the_geom_webmercator()'; EXECUTE sql; -- "test_quota" and "test_quota_per_row" sql := 'CREATE TRIGGER test_quota BEFORE UPDATE OR INSERT ON ' || reloid::text - || ' EXECUTE PROCEDURE public.CDB_CheckQuota(0.1, ''-1'', ''' + || ' EXECUTE PROCEDURE @extschema@.CDB_CheckQuota(0.1, ''-1'', ''' || schema_name::text || ''')'; EXECUTE sql; sql := 'CREATE TRIGGER test_quota_per_row BEFORE UPDATE OR INSERT ON ' || reloid::text - || ' FOR EACH ROW EXECUTE PROCEDURE public.CDB_CheckQuota(0.001, ''-1'', ''' + || ' FOR EACH ROW EXECUTE PROCEDURE @extschema@.CDB_CheckQuota(0.001, ''-1'', ''' || schema_name::text || ''')'; EXECUTE sql; @@ -239,7 +239,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- 8.b) Create all raster triggers -- NOTE: drop/create has the side-effect of re-enabling disabled triggers -CREATE OR REPLACE FUNCTION _CDB_create_raster_triggers(schema_name TEXT, reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_create_raster_triggers(schema_name TEXT, reloid REGCLASS) RETURNS void AS $$ DECLARE @@ -248,21 +248,21 @@ BEGIN -- "track_updates" sql := 'CREATE trigger track_updates AFTER INSERT OR UPDATE OR DELETE OR TRUNCATE ON ' || reloid::text - || ' FOR EACH STATEMENT EXECUTE PROCEDURE public.cdb_tablemetadata_trigger()'; + || ' FOR EACH STATEMENT EXECUTE PROCEDURE @extschema@.cdb_tablemetadata_trigger()'; EXECUTE sql; -- "test_quota" and "test_quota_per_row" sql := 'CREATE TRIGGER test_quota BEFORE UPDATE OR INSERT ON ' || reloid::text - || ' EXECUTE PROCEDURE public.CDB_CheckQuota(1, ''-1'', ''' + || ' EXECUTE PROCEDURE @extschema@.CDB_CheckQuota(1, ''-1'', ''' || schema_name::text || ''')'; EXECUTE sql; sql := 'CREATE TRIGGER test_quota_per_row BEFORE UPDATE OR INSERT ON ' || reloid::text - || ' FOR EACH ROW EXECUTE PROCEDURE public.CDB_CheckQuota(0.001, ''-1'', ''' + || ' FOR EACH ROW EXECUTE PROCEDURE @extschema@.CDB_CheckQuota(0.001, ''-1'', ''' || schema_name::text || ''')'; EXECUTE sql; @@ -272,11 +272,11 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Update the_geom_webmercator -CREATE OR REPLACE FUNCTION _CDB_update_the_geom_webmercator() +CREATE OR REPLACE FUNCTION @extschema@._CDB_update_the_geom_webmercator() RETURNS trigger AS $$ BEGIN - NEW.the_geom_webmercator := public.CDB_TransformToWebmercator(NEW.the_geom); + NEW.the_geom_webmercator := @extschema@.CDB_TransformToWebmercator(NEW.the_geom); RETURN NEW; END; $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; @@ -284,7 +284,7 @@ $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; --- Trigger to update the updated_at column. No longer added by default --- but kept here for compatibility with old tables which still have this behavior --- and have it added -CREATE OR REPLACE FUNCTION _CDB_update_updated_at() +CREATE OR REPLACE FUNCTION @extschema@._CDB_update_updated_at() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at := now(); @@ -293,7 +293,7 @@ END; $$ LANGUAGE plpgsql VOLATILE; -- Auxiliary function -CREATE OR REPLACE FUNCTION cartodb._CDB_is_raster_table(schema_name TEXT, reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_is_raster_table(schema_name TEXT, reloid REGCLASS) RETURNS BOOLEAN AS $$ DECLARE @@ -301,7 +301,7 @@ DECLARE is_raster BOOLEAN; rel_name TEXT; BEGIN - IF cartodb.schema_exists(schema_name) = FALSE THEN + IF @extschema@.schema_exists(schema_name) = FALSE THEN RAISE EXCEPTION 'Invalid schema name "%"', schema_name; END IF; @@ -331,11 +331,11 @@ $$ LANGUAGE PLPGSQL STABLE PARALLEL UNSAFE; -- Ensure a table is a "cartodb" table (See https://github.com/CartoDB/cartodb/wiki/CartoDB-user-table) DROP FUNCTION IF EXISTS CDB_CartodbfyTable(reloid REGCLASS); -CREATE OR REPLACE FUNCTION CDB_CartodbfyTable(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@.CDB_CartodbfyTable(reloid REGCLASS) RETURNS REGCLASS AS $$ BEGIN - RETURN cartodb.CDB_CartodbfyTable('public', reloid); + RETURN @extschema@.CDB_CartodbfyTable('public', reloid); END; $$ LANGUAGE PLPGSQL; @@ -388,7 +388,7 @@ $$ LANGUAGE PLPGSQL; -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -CREATE OR REPLACE FUNCTION _CDB_Columns(OUT pkey TEXT, OUT geomcol TEXT, OUT mercgeomcol TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Columns(OUT pkey TEXT, OUT geomcol TEXT, OUT mercgeomcol TEXT) RETURNS record AS $$ BEGIN @@ -401,7 +401,7 @@ END; $$ LANGUAGE 'plpgsql' IMMUTABLE PARALLEL SAFE; -CREATE OR REPLACE FUNCTION _CDB_Error(message TEXT, funcname TEXT DEFAULT '_CDB_Error') +CREATE OR REPLACE FUNCTION @extschema@._CDB_Error(message TEXT, funcname TEXT DEFAULT '_CDB_Error') RETURNS void AS $$ BEGIN @@ -412,7 +412,7 @@ END; $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL SAFE; -CREATE OR REPLACE FUNCTION _CDB_SQL(sql TEXT, funcname TEXT DEFAULT '_CDB_SQL') +CREATE OR REPLACE FUNCTION @extschema@._CDB_SQL(sql TEXT, funcname TEXT DEFAULT '_CDB_SQL') RETURNS void AS $$ BEGIN @@ -432,7 +432,7 @@ $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -- aware. Find a unique relation name in the given schema, starting from the -- template given. If the template is already unique, just return it; -- otherwise, append an increasing integer until you find a unique variant. -CREATE OR REPLACE FUNCTION _CDB_Unique_Relation_Name(schemaname TEXT, relationname TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Unique_Relation_Name(schemaname TEXT, relationname TEXT) RETURNS TEXT AS $$ DECLARE @@ -451,7 +451,7 @@ $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL SAFE; -- aware. Find a unique column name in the given relation, starting from the -- column name given. If the column name is already unique, just return it; -- otherwise, append an increasing integer until you find a unique variant. -CREATE OR REPLACE FUNCTION _CDB_Unique_Column_Name(reloid REGCLASS, columnname TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Unique_Column_Name(reloid REGCLASS, columnname TEXT) RETURNS TEXT AS $$ DECLARE @@ -471,7 +471,7 @@ $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL SAFE; -- we can no-op on the table copy and just ensure that the -- indexes and triggers are in place DROP FUNCTION IF EXISTS _CDB_Has_Usable_Primary_ID(reloid REGCLASS); -CREATE OR REPLACE FUNCTION _CDB_Has_Usable_Primary_ID(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Has_Usable_Primary_ID(reloid REGCLASS) RETURNS BOOLEAN AS $$ DECLARE @@ -485,7 +485,7 @@ BEGIN RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', 'entered function'; -- Read in the names of the CartoDB columns - const := _CDB_Columns(); + const := @extschema@._CDB_Columns(); -- Do we already have a properly named column? SELECT a.attname, i.indisprimary, i.indisunique, a.attnotnull, a.atttypid @@ -537,8 +537,8 @@ BEGIN -- Clean up test constraint IF useable_key THEN - PERFORM _CDB_SQL(Format('ALTER TABLE %s DROP CONSTRAINT %s_pk', reloid::text, const.pkey)); - PERFORM _CDB_SQL(Format('ALTER TABLE %s DROP CONSTRAINT %s_integer', reloid::text, const.pkey)); + PERFORM @extschema@._CDB_SQL(Format('ALTER TABLE %s DROP CONSTRAINT %s_pk', reloid::text, const.pkey)); + PERFORM @extschema@._CDB_SQL(Format('ALTER TABLE %s DROP CONSTRAINT %s_integer', reloid::text, const.pkey)); -- Move non-valid column out of the way ELSE @@ -546,7 +546,7 @@ BEGIN RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', Format('found non-valid ''%s''', const.pkey); - PERFORM _CDB_Error(sql, Format('_CDB_Has_Usable_Primary_ID: Error: invalid cartodb_id, %s', const.pkey)); + PERFORM @extschema@._CDB_Error(sql, Format('_CDB_Has_Usable_Primary_ID: Error: invalid cartodb_id, %s', const.pkey)); END IF; @@ -569,7 +569,7 @@ BEGIN -- Yes! Ok, rename it. IF FOUND THEN - PERFORM _CDB_SQL(Format('ALTER TABLE %s RENAME COLUMN %s TO %s', reloid::text, rec.attname, const.pkey),'_CDB_Has_Usable_Primary_ID'); + PERFORM @extschema@._CDB_SQL(Format('ALTER TABLE %s RENAME COLUMN %s TO %s', reloid::text, rec.attname, const.pkey),'_CDB_Has_Usable_Primary_ID'); RETURN true; ELSE RAISE DEBUG 'CDB(_CDB_Has_Usable_Primary_ID): %', @@ -586,7 +586,7 @@ END; $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION _CDB_Has_Usable_PK_Sequence(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Has_Usable_PK_Sequence(reloid REGCLASS) RETURNS BOOLEAN AS $$ DECLARE @@ -595,7 +595,7 @@ DECLARE has_sequence BOOLEAN = false; BEGIN - const := _CDB_Columns(); + const := @extschema@._CDB_Columns(); SELECT pg_get_serial_sequence(reloid::text, const.pkey) INTO STRICT seq; @@ -607,19 +607,19 @@ $$ LANGUAGE 'plpgsql' STABLE PARALLEL SAFE; -- Return a set of columns that can be candidates to be the_geom[webmercator] -- with some extra information to analyze them. -CREATE OR REPLACE FUNCTION _cdb_geom_candidate_columns(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._cdb_geom_candidate_columns(reloid REGCLASS) RETURNS TABLE (attname name, srid integer, typname name, desired_attname text, desired_srid integer) AS $$ DECLARE const RECORD; BEGIN - const := _CDB_Columns(); + const := @extschema@._CDB_Columns(); RETURN QUERY SELECT a.attname, - CASE WHEN t.typname = 'geometry' THEN postgis_typmod_srid(a.atttypmod) ELSE NULL END AS srid, + CASE WHEN t.typname = 'geometry' THEN @postgisschema@.postgis_typmod_srid(a.atttypmod) ELSE NULL END AS srid, t.typname, f.desired_attname, f.desired_srid FROM pg_class c @@ -629,15 +629,16 @@ BEGIN WHERE c.oid = reloid AND a.attnum > 0 AND NOT a.attisdropped - AND postgis_typmod_srid(a.atttypmod) IN (4326, 3857, 0) + AND @postgisschema@.postgis_typmod_srid(a.atttypmod) IN (4326, 3857, 0) ORDER BY t.oid ASC; END; $$ LANGUAGE 'plpgsql' STABLE PARALLEL SAFE; DO $$ BEGIN + SET search_path TO @extschema@; IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = '_cdb_has_usable_geom_record') THEN - CREATE TYPE _cdb_has_usable_geom_record + CREATE TYPE @extschema@._cdb_has_usable_geom_record AS (has_usable_geoms boolean, text_geom_column boolean, text_geom_column_name text, @@ -650,8 +651,8 @@ BEGIN END$$; DROP FUNCTION IF EXISTS _CDB_Has_Usable_Geom(REGCLASS); -CREATE OR REPLACE FUNCTION _CDB_Has_Usable_Geom(reloid REGCLASS) -RETURNS _cdb_has_usable_geom_record +CREATE OR REPLACE FUNCTION @extschema@._CDB_Has_Usable_Geom(reloid REGCLASS) +RETURNS @extschema@._cdb_has_usable_geom_record AS $$ DECLARE r1 RECORD; @@ -679,11 +680,11 @@ BEGIN RAISE DEBUG 'CDB(_CDB_Has_Usable_Geom): %', 'entered function'; -- Read in the names of the CartoDB columns - const := _CDB_Columns(); + const := @extschema@._CDB_Columns(); -- Do we have a column we can use? FOR r1 IN - SELECT * FROM _cdb_geom_candidate_columns(reloid) + SELECT * FROM @extschema@._cdb_geom_candidate_columns(reloid) LOOP RAISE DEBUG 'CDB(_CDB_Has_Usable_Geom): %', Format('checking column ''%s''', r1.attname); @@ -697,7 +698,7 @@ BEGIN RAISE DEBUG 'CDB(_CDB_Has_Usable_Geom): %', Format('column ''%s'' is a text column', r1.attname); BEGIN - sql := Format('SELECT Max(ST_SRID(%I::geometry)) AS srid FROM %I', r1.attname, reloid::text); + sql := Format('SELECT Max(@postgisschema@.ST_SRID(%I::@postgisschema@.geometry)) AS srid FROM %I', r1.attname, reloid::text); EXECUTE sql INTO srid; -- This gets skipped if EXCEPTION happens -- Let the table writer know we need to convert from text @@ -714,9 +715,9 @@ BEGIN WHEN others THEN IF SQLERRM = 'parse error - invalid geometry' THEN text_geom_column := false; - str := cartodb._CDB_Unique_Column_Identifier(NULL, r1.attname, NULL, reloid); + str := @extschema@._CDB_Unique_Column_Identifier(NULL, r1.attname, NULL, reloid); sql := Format('ALTER TABLE %s RENAME COLUMN %s TO %I', reloid::text, r1.attname, str); - PERFORM _CDB_SQL(sql,'_CDB_Has_Usable_Geom'); + PERFORM @extschema@._CDB_SQL(sql,'_CDB_Has_Usable_Geom'); RAISE DEBUG 'CDB(_CDB_Has_Usable_Geom): %', Format('Text column %s is not convertible to geometry, renamed to %s', r1.attname, str); ELSE @@ -726,9 +727,9 @@ BEGIN -- Just change its name so we can write a new column into that name. ELSE - str := cartodb._CDB_Unique_Column_Identifier(NULL, r1.attname, NULL, reloid); + str := @extschema@._CDB_Unique_Column_Identifier(NULL, r1.attname, NULL, reloid); sql := Format('ALTER TABLE %s RENAME COLUMN %s TO %I', reloid::text, r1.attname, str); - PERFORM _CDB_SQL(sql,'_CDB_Has_Usable_Geom'); + PERFORM @extschema@._CDB_SQL(sql,'_CDB_Has_Usable_Geom'); RAISE DEBUG 'CDB(_CDB_Has_Usable_Geom): %', Format('%s is the wrong type, renamed to %s', r1.attname, str); END IF; @@ -784,7 +785,7 @@ $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -- a "good" one, and the same for the geometry columns. If all the required -- columns are in place already, it no-ops and just renames the table to -- the destination if necessary. -CREATE OR REPLACE FUNCTION _CDB_Rewrite_Table(reloid REGCLASS, destschema TEXT DEFAULT NULL) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Rewrite_Table(reloid REGCLASS, destschema TEXT DEFAULT NULL) RETURNS BOOLEAN AS $$ DECLARE @@ -820,7 +821,7 @@ BEGIN RAISE DEBUG 'CDB(_CDB_Rewrite_Table): %', 'entered function'; -- Read CartoDB standard column names in - const := _CDB_Columns(); + const := @extschema@._CDB_Columns(); -- Save the raw schema/table names for later SELECT n.nspname, c.relname, c.relname @@ -836,7 +837,7 @@ BEGIN -- See if there is a primary key column we need to carry along to the -- new table. If this is true, it implies there is an indexed -- primary key of integer type named (by default) cartodb_id - SELECT _CDB_Has_Usable_Primary_ID(reloid) + SELECT @extschema@._CDB_Has_Usable_Primary_ID(reloid) INTO STRICT has_usable_primary_key; RAISE DEBUG 'CDB(_CDB_Rewrite_Table): has_usable_primary_key %', has_usable_primary_key; @@ -854,23 +855,23 @@ BEGIN -- transformation of the table, we can just ensure proper -- indexes are in place and apply a rename SELECT * - FROM _CDB_Has_Usable_Geom(reloid) + FROM @extschema@._CDB_Has_Usable_Geom(reloid) INTO STRICT gc; -- If geom is the wrong name, just rename it. IF gc.has_geom AND gc.has_geom_name != const.geomcol THEN sql := Format('ALTER TABLE %s DROP COLUMN IF EXISTS %I', reloid::text, const.geomcol); - PERFORM _CDB_SQL(sql,'_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql,'_CDB_Rewrite_Table'); sql := Format('ALTER TABLE %s RENAME COLUMN %I TO %I', reloid::text, gc.has_geom_name, const.geomcol); - PERFORM _CDB_SQL(sql,'_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql,'_CDB_Rewrite_Table'); END IF; -- If mercgeom is the wrong name, just rename it. IF gc.has_mercgeom AND gc.has_mercgeom_name != const.mercgeomcol THEN sql := Format('ALTER TABLE %s DROP COLUMN IF EXISTS %I', reloid::text, const.mercgeomcol); - PERFORM _CDB_SQL(sql,'_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql,'_CDB_Rewrite_Table'); sql := Format('ALTER TABLE %s RENAME COLUMN %I TO %I', reloid::text, gc.has_mercgeom_name, const.mercgeomcol); - PERFORM _CDB_SQL(sql,'_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql,'_CDB_Rewrite_Table'); END IF; @@ -885,7 +886,7 @@ BEGIN IF destschema != relschema THEN RAISE DEBUG 'CDB(_CDB_Rewrite_Table): perfect table needs to be moved to schema (%)', destschema; - PERFORM _CDB_SQL(Format('ALTER TABLE %s SET SCHEMA %I', reloid::text, destschema), '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(Format('ALTER TABLE %s SET SCHEMA %I', reloid::text, destschema), '_CDB_Rewrite_Table'); ELSE @@ -911,21 +912,21 @@ BEGIN INTO relseq; -- If it's the name we want, then rename it IF relseq IS NOT NULL AND relseq = Format('%I.%I', destschema, destseq) THEN - PERFORM _CDB_SQL(Format('ALTER SEQUENCE %s RENAME TO %I', relseq, Format('tmp_%s', destseq)), '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(Format('ALTER SEQUENCE %s RENAME TO %I', relseq, Format('tmp_%s', destseq)), '_CDB_Rewrite_Table'); END IF; END IF; -- Put the primary key sequence in the right schema -- If the new table is not moving, better ensure the sequence name -- is unique - destseq := cartodb._CDB_Unique_Identifier(NULL, relname, '_' || const.pkey || '_seq', destschema); + destseq := @extschema@._CDB_Unique_Identifier(NULL, relname, '_' || const.pkey || '_seq', destschema); destseq := Format('%I.%I', destschema, destseq); - PERFORM _CDB_SQL(Format('CREATE SEQUENCE %s', destseq), '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(Format('CREATE SEQUENCE %s', destseq), '_CDB_Rewrite_Table'); -- Temporary table name if we are re-writing in place -- Note copyname is already escaped and safe to use as identifier IF destschema = relschema THEN - copyname := Format('%I.%I', destschema, cartodb._CDB_Unique_Identifier(NULL, destname, NULL), destschema); + copyname := Format('%I.%I', destschema, @extschema@._CDB_Unique_Identifier(NULL, destname, NULL), destschema); ELSE copyname := Format('%I.%I', destschema, destname); END IF; @@ -966,11 +967,11 @@ BEGIN ORDER BY a.attnum LIMIT 1 ) - SELECT ', ST_Transform(' + SELECT ', @postgisschema@.ST_Transform(' || t.missing_srid_start || t.attname || '::geometry' || t.missing_srid_end || ',4326)::Geometry(GEOMETRY,4326) AS ' || const.geomcol - || ', cartodb.CDB_TransformToWebmercator(' + || ', @extschema@.CDB_TransformToWebmercator(' || t.missing_srid_start || t.attname || '::geometry' || t.missing_srid_end || ')::Geometry(GEOMETRY,3857) AS ' || const.mercgeomcol, @@ -1009,7 +1010,7 @@ BEGIN -- column and read the first SRID off it it, if there is a row -- to read. IF FOUND THEN - EXECUTE Format('SELECT ST_SRID(%s) AS srid FROM %s LIMIT 1', rec.attname, reloid::text) + EXECUTE Format('SELECT @postgisschema@.ST_SRID(%s) AS srid FROM %s LIMIT 1', rec.attname, reloid::text) INTO geom_srid; ELSE geom_srid := 0; @@ -1025,7 +1026,7 @@ BEGIN SELECT a.attname, postgis_typmod_type(a.atttypmod) AS geomtype, - CASE WHEN postgis_typmod_srid(a.atttypmod) = 0 AND srid.srid = 0 THEN 'ST_SetSRID(' ELSE '' END AS missing_srid_start, + CASE WHEN postgis_typmod_srid(a.atttypmod) = 0 AND srid.srid = 0 THEN '@postgisschema@.ST_SetSRID(' ELSE '' END AS missing_srid_start, CASE WHEN postgis_typmod_srid(a.atttypmod) = 0 AND srid.srid = 0 THEN ',4326)' ELSE '' END AS missing_srid_end FROM pg_class c JOIN pg_attribute a ON a.attrelid = c.oid @@ -1038,11 +1039,11 @@ BEGIN ORDER BY a.attnum LIMIT 1 ) - SELECT ', ST_Transform(' + SELECT ', @postgisschema@.ST_Transform(' || t.missing_srid_start || t.attname || t.missing_srid_end || ',4326)::Geometry(GEOMETRY,4326) AS ' || const.geomcol - || ', cartodb.CDB_TransformToWebmercator(' + || ', @extschema@.CDB_TransformToWebmercator(' || t.missing_srid_start || t.attname || t.missing_srid_end || ')::Geometry(GEOMETRY,3857) AS ' || const.mercgeomcol, @@ -1096,7 +1097,7 @@ BEGIN RAISE DEBUG 'CDB(_CDB_Rewrite_Table): %', sql; -- Run it! - PERFORM _CDB_SQL(sql, '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Rewrite_Table'); -- Set up the primary key sequence -- If we copied the primary key from the original data, we need @@ -1106,38 +1107,38 @@ BEGIN INTO destseqmax; IF destseqmax IS NOT NULL THEN - PERFORM _CDB_SQL(Format('SELECT setval(''%s'', %s)', destseq, destseqmax), '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(Format('SELECT setval(''%s'', %s)', destseq, destseqmax), '_CDB_Rewrite_Table'); END IF; -- Make the primary key use the sequence as its default value sql := Format('ALTER TABLE %s ALTER COLUMN %s SET DEFAULT nextval(''%s'')', copyname, const.pkey, destseq); - PERFORM _CDB_SQL(sql, '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Rewrite_Table'); -- Make the sequence owned by the table, so when the table drops, -- the sequence does too sql := Format('ALTER SEQUENCE %s OWNED BY %s.%s', destseq, copyname, const.pkey); - PERFORM _CDB_SQL(sql,'_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql,'_CDB_Rewrite_Table'); -- We just made a copy, so we can drop the original now sql := Format('DROP TABLE %s', reloid::text); - PERFORM _CDB_SQL(sql, '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Rewrite_Table'); -- If the table is being created by a SECURITY DEFINER function -- make sure the user is set back to the user who is connected IF current_user != session_user THEN sql := Format('ALTER TABLE IF EXISTS %s OWNER TO %s', copyname, session_user); - PERFORM _CDB_SQL(sql, '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Rewrite_Table'); sql := Format('ALTER SEQUENCE IF EXISTS %s OWNER TO %s', destseq, session_user); - PERFORM _CDB_SQL(sql, '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Rewrite_Table'); END IF; -- If we used a temporary destination table -- we can now rename it into place IF destschema = relschema THEN sql := Format('ALTER TABLE %s RENAME TO %I', copyname, destname); - PERFORM _CDB_SQL(sql, '_CDB_Rewrite_Table'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Rewrite_Table'); END IF; RETURN true; @@ -1149,7 +1150,7 @@ $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -- Assumes the table already has the right metadata columns -- (primary key and two geometry columns) and adds primary key -- and geometry indexes if necessary. -CREATE OR REPLACE FUNCTION _CDB_Add_Indexes(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Add_Indexes(reloid REGCLASS) RETURNS BOOLEAN AS $$ DECLARE @@ -1163,7 +1164,7 @@ BEGIN RAISE DEBUG 'CDB(_CDB_Add_Indexes): %', 'entered function'; -- Read CartoDB standard column names in - const := _CDB_Columns(); + const := @extschema@._CDB_Columns(); -- Extract just the relname to use for the index names SELECT c.relname @@ -1189,7 +1190,7 @@ BEGIN IF FOUND THEN RAISE DEBUG 'CDB(_CDB_Add_Indexes): dropping unwanted primary key ''%''', rec.pkey; sql := Format('ALTER TABLE %s DROP CONSTRAINT IF EXISTS %s', reloid::text, rec.pkey); - PERFORM _CDB_SQL(sql, '_CDB_Add_Indexes'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Add_Indexes'); END IF; @@ -1210,7 +1211,7 @@ BEGIN -- No primary key? Add one. IF NOT FOUND THEN sql := Format('ALTER TABLE %s ADD PRIMARY KEY (%s)', reloid::text, const.pkey); - PERFORM _CDB_SQL(sql, '_CDB_Add_Indexes'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Add_Indexes'); END IF; -- Add geometry indexes to all "special geometry columns" that @@ -1239,7 +1240,7 @@ BEGIN AND am.amname != 'gist' LOOP sql := Format('CREATE INDEX ON %s USING GIST (%s)', reloid::text, rec.attname); - PERFORM _CDB_SQL(sql, '_CDB_Add_Indexes'); + PERFORM @extschema@._CDB_SQL(sql, '_CDB_Add_Indexes'); END LOOP; RETURN true; @@ -1247,8 +1248,8 @@ BEGIN END; $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -DROP FUNCTION IF EXISTS CDB_CartodbfyTable(destschema TEXT, reloid REGCLASS); -CREATE OR REPLACE FUNCTION CDB_CartodbfyTable(destschema TEXT, reloid REGCLASS) +DROP FUNCTION IF EXISTS @extschema@.CDB_CartodbfyTable(destschema TEXT, reloid REGCLASS); +CREATE OR REPLACE FUNCTION @extschema@.CDB_CartodbfyTable(destschema TEXT, reloid REGCLASS) RETURNS REGCLASS AS $$ DECLARE @@ -1270,7 +1271,7 @@ 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); + PERFORM @extschema@._CDB_check_prerequisites(destschema, reloid); -- Check destination schema exists -- Throws an exception of there is no matching schema @@ -1287,29 +1288,29 @@ BEGIN END IF; -- Drop triggers first - PERFORM _CDB_drop_triggers(reloid); + PERFORM @extschema@._CDB_drop_triggers(reloid); -- Rasters only get a cartodb_id and a limited selection of triggers -- underlying assumption is that they are already formed up correctly - SELECT cartodb._CDB_is_raster_table(destschema, reloid) INTO is_raster; + SELECT @extschema@._CDB_is_raster_table(destschema, reloid) INTO is_raster; IF is_raster THEN - PERFORM cartodb._CDB_create_cartodb_id_column(reloid); - PERFORM cartodb._CDB_create_raster_triggers(destschema, reloid); + PERFORM @extschema@._CDB_create_cartodb_id_column(reloid); + PERFORM @extschema@._CDB_create_raster_triggers(destschema, reloid); ELSE -- Rewrite (or rename) the table to the new location - PERFORM _CDB_Rewrite_Table(reloid, destschema); + PERFORM @extschema@._CDB_Rewrite_Table(reloid, destschema); -- The old regclass might not be valid anymore if we re-wrote the table... destoid := (destschema || '.' || destname)::regclass; -- Add indexes to the destination table, as necessary - PERFORM _CDB_Add_Indexes(destoid); + PERFORM @extschema@._CDB_Add_Indexes(destoid); -- Add triggers to the destination table, as necessary - PERFORM _CDB_create_triggers(destschema, destoid); + PERFORM @extschema@._CDB_create_triggers(destschema, destoid); END IF; diff --git a/scripts-available/CDB_ColumnNames.sql b/scripts-available/CDB_ColumnNames.sql index 37fe0b4..c7b35a5 100644 --- a/scripts-available/CDB_ColumnNames.sql +++ b/scripts-available/CDB_ColumnNames.sql @@ -1,5 +1,5 @@ -- Function returning the column names of a table -CREATE OR REPLACE FUNCTION CDB_ColumnNames(REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@.CDB_ColumnNames(REGCLASS) RETURNS SETOF information_schema.sql_identifier AS $$ SELECT @@ -13,4 +13,4 @@ $$ LANGUAGE SQL STABLE PARALLEL SAFE; -- This is to migrate from pre-0.2.0 version -- See http://github.com/CartoDB/cartodb-postgresql/issues/36 -GRANT EXECUTE ON FUNCTION CDB_ColumnNames(REGCLASS) TO PUBLIC; +GRANT EXECUTE ON FUNCTION @extschema@.CDB_ColumnNames(REGCLASS) TO PUBLIC; diff --git a/scripts-available/CDB_ColumnType.sql b/scripts-available/CDB_ColumnType.sql index df570cb..82abe6c 100644 --- a/scripts-available/CDB_ColumnType.sql +++ b/scripts-available/CDB_ColumnType.sql @@ -1,5 +1,5 @@ -- Function returning the type of a column -CREATE OR REPLACE FUNCTION CDB_ColumnType(REGCLASS, TEXT) +CREATE OR REPLACE FUNCTION @extschema@.CDB_ColumnType(REGCLASS, TEXT) RETURNS information_schema.character_data AS $$ SELECT @@ -13,4 +13,4 @@ $$ LANGUAGE SQL STABLE PARALLEL SAFE; -- This is to migrate from pre-0.2.0 version -- See http://github.com/CartoDB/cartodb-postgresql/issues/36 -GRANT EXECUTE ON FUNCTION CDB_ColumnType(REGCLASS, TEXT) TO public; +GRANT EXECUTE ON FUNCTION @extschema@.CDB_ColumnType(REGCLASS, TEXT) TO public; diff --git a/scripts-available/CDB_Conf.sql b/scripts-available/CDB_Conf.sql index 9d8cea2..6349965 100644 --- a/scripts-available/CDB_Conf.sql +++ b/scripts-available/CDB_Conf.sql @@ -5,44 +5,44 @@ -- Functions needing reading configuration should use SECURITY DEFINER. ---------------------------------- --- This will trigger NOTICE if cartodb.CDB_CONF already exists +-- This will trigger NOTICE if @extschema@.CDB_CONF already exists DO LANGUAGE 'plpgsql' $$ BEGIN - CREATE TABLE IF NOT EXISTS cartodb.CDB_CONF ( KEY TEXT PRIMARY KEY, VALUE JSON NOT NULL ); + CREATE TABLE IF NOT EXISTS @extschema@.CDB_CONF ( KEY TEXT PRIMARY KEY, VALUE JSON NOT NULL ); END $$; -- This can only be called from an SQL script executed by CREATE EXTENSION DO LANGUAGE 'plpgsql' $$ BEGIN - PERFORM pg_catalog.pg_extension_config_dump('cartodb.CDB_CONF', ''); + PERFORM pg_catalog.pg_extension_config_dump('@extschema@.CDB_CONF', ''); END $$; CREATE OR REPLACE -FUNCTION cartodb.CDB_Conf_SetConf(key text, value JSON) +FUNCTION @extschema@.CDB_Conf_SetConf(key text, value JSON) RETURNS void AS $$ BEGIN - PERFORM cartodb.CDB_Conf_RemoveConf(key); - EXECUTE 'INSERT INTO cartodb.CDB_CONF (KEY, VALUE) VALUES ($1, $2);' USING key, value; + PERFORM @extschema@.CDB_Conf_RemoveConf(key); + EXECUTE 'INSERT INTO @extschema@.CDB_CONF (KEY, VALUE) VALUES ($1, $2);' USING key, value; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Conf_RemoveConf(key text) +FUNCTION @extschema@.CDB_Conf_RemoveConf(key text) RETURNS void AS $$ BEGIN - EXECUTE 'DELETE FROM cartodb.CDB_CONF WHERE KEY = $1;' USING key; + EXECUTE 'DELETE FROM @extschema@.CDB_CONF WHERE KEY = $1;' USING key; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Conf_GetConf(key text) +FUNCTION @extschema@.CDB_Conf_GetConf(key text) RETURNS JSON AS $$ DECLARE value JSON; BEGIN - EXECUTE 'SELECT VALUE FROM cartodb.CDB_CONF WHERE KEY = $1;' INTO value USING key; + EXECUTE 'SELECT VALUE FROM @extschema@.CDB_CONF WHERE KEY = $1;' INTO value USING key; RETURN value; END $$ LANGUAGE PLPGSQL STABLE PARALLEL SAFE; diff --git a/scripts-available/CDB_DDLTriggers.sql b/scripts-available/CDB_DDLTriggers.sql index 6d73d31..8207c59 100644 --- a/scripts-available/CDB_DDLTriggers.sql +++ b/scripts-available/CDB_DDLTriggers.sql @@ -3,12 +3,12 @@ -- Introduced again to make sure that updates do not leave dangling functions -- -DROP FUNCTION IF EXISTS cartodb.cdb_handle_create_table(); -DROP FUNCTION IF EXISTS cartodb.cdb_handle_drop_table(); -DROP FUNCTION IF EXISTS cartodb.cdb_handle_alter_column(); -DROP FUNCTION IF EXISTS cartodb.cdb_handle_drop_column(); -DROP FUNCTION IF EXISTS cartodb.cdb_handle_add_column(); -DROP FUNCTION IF EXISTS cartodb.cdb_disable_ddl_hooks(); -DROP FUNCTION IF EXISTS cartodb.cdb_enable_ddl_hooks(); +DROP FUNCTION IF EXISTS @extschema@.cdb_handle_create_table(); +DROP FUNCTION IF EXISTS @extschema@.cdb_handle_drop_table(); +DROP FUNCTION IF EXISTS @extschema@.cdb_handle_alter_column(); +DROP FUNCTION IF EXISTS @extschema@.cdb_handle_drop_column(); +DROP FUNCTION IF EXISTS @extschema@.cdb_handle_add_column(); +DROP FUNCTION IF EXISTS @extschema@.cdb_disable_ddl_hooks(); +DROP FUNCTION IF EXISTS @extschema@.cdb_enable_ddl_hooks(); diff --git a/scripts-available/CDB_DateToNumber.sql b/scripts-available/CDB_DateToNumber.sql index a6984c3..f841519 100644 --- a/scripts-available/CDB_DateToNumber.sql +++ b/scripts-available/CDB_DateToNumber.sql @@ -1,6 +1,6 @@ -- Convert timestamp to double precision -- -CREATE OR REPLACE FUNCTION CDB_DateToNumber(input timestamp) +CREATE OR REPLACE FUNCTION @extschema@.CDB_DateToNumber(input timestamp) RETURNS double precision AS $$ DECLARE output double precision; BEGIN @@ -16,7 +16,7 @@ LANGUAGE 'plpgsql' IMMUTABLE STRICT PARALLEL UNSAFE; -- Convert timestamp with time zone to double precision -- -CREATE OR REPLACE FUNCTION CDB_DateToNumber(input timestamp with time zone) +CREATE OR REPLACE FUNCTION @extschema@.CDB_DateToNumber(input timestamp with time zone) RETURNS double precision AS $$ DECLARE output double precision; BEGIN diff --git a/scripts-available/CDB_DigitSeparator.sql b/scripts-available/CDB_DigitSeparator.sql index e6946b4..6d14493 100644 --- a/scripts-available/CDB_DigitSeparator.sql +++ b/scripts-available/CDB_DigitSeparator.sql @@ -1,5 +1,5 @@ -- Find thousand and decimal digits separators -CREATE OR REPLACE FUNCTION CDB_DigitSeparator (rel REGCLASS, fld TEXT, OUT t CHAR, OUT d CHAR) +CREATE OR REPLACE FUNCTION @extschema@.CDB_DigitSeparator (rel REGCLASS, fld TEXT, OUT t CHAR, OUT d CHAR) as $$ DECLARE sql TEXT; diff --git a/scripts-available/CDB_DistType.sql b/scripts-available/CDB_DistType.sql index 67925c1..6b5bc35 100644 --- a/scripts-available/CDB_DistType.sql +++ b/scripts-available/CDB_DistType.sql @@ -10,7 +10,7 @@ -- 1. width_bucket/histograms: http://tapoueh.org/blog/2014/02/21-PostgreSQL-histogram -- 2. R implementation: https://github.com/cran/agrmt -CREATE OR REPLACE FUNCTION CDB_DistType ( in_array NUMERIC[] ) RETURNS text as $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_DistType ( in_array NUMERIC[] ) RETURNS text as $$ DECLARE element_count INT4; minv numeric; @@ -60,7 +60,7 @@ BEGIN i := i + 1; END LOOP; - signature = _CDB_DistTypeClassify(ajus); + signature = @extschema@._CDB_DistTypeClassify(ajus); END IF; RETURN signature; @@ -69,7 +69,7 @@ $$ language plpgsql IMMUTABLE STRICT PARALLEL SAFE; -- Classify data into AJUSFL -CREATE OR REPLACE FUNCTION _CDB_DistTypeClassify ( in_array INT[] ) RETURNS text as $$ +CREATE OR REPLACE FUNCTION @extschema@._CDB_DistTypeClassify ( in_array INT[] ) RETURNS text as $$ DECLARE element_count INT4; maxv numeric; diff --git a/scripts-available/CDB_DistinctMeasure.sql b/scripts-available/CDB_DistinctMeasure.sql index f0018e3..12a74bb 100644 --- a/scripts-available/CDB_DistinctMeasure.sql +++ b/scripts-available/CDB_DistinctMeasure.sql @@ -5,7 +5,7 @@ -- -- -CREATE OR REPLACE FUNCTION CDB_DistinctMeasure ( in_array text[], threshold numeric DEFAULT null ) RETURNS numeric as $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_DistinctMeasure ( in_array text[], threshold numeric DEFAULT null ) RETURNS numeric as $$ DECLARE element_count INT4; maxval numeric; diff --git a/scripts-available/CDB_EqualIntervalBins.sql b/scripts-available/CDB_EqualIntervalBins.sql index 0aca55b..625242c 100644 --- a/scripts-available/CDB_EqualIntervalBins.sql +++ b/scripts-available/CDB_EqualIntervalBins.sql @@ -11,7 +11,7 @@ -- -- -CREATE OR REPLACE FUNCTION CDB_EqualIntervalBins ( in_array anyarray, breaks INT ) RETURNS anyarray as $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_EqualIntervalBins ( in_array anyarray, breaks INT ) RETURNS anyarray as $$ WITH stats AS ( SELECT min(e), (max(e)-min(e))/breaks AS del FROM (SELECT unnest(in_array) e) AS p) @@ -21,4 +21,4 @@ SELECT array_agg(bins) FROM stats) q; $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; -DROP FUNCTION IF EXISTS CDB_EqualIntervalBins( numeric[], integer); +DROP FUNCTION IF EXISTS @extschema@.CDB_EqualIntervalBins( numeric[], integer); diff --git a/scripts-available/CDB_EstimateRowCount.sql b/scripts-available/CDB_EstimateRowCount.sql index d9cad80..06e65de 100644 --- a/scripts-available/CDB_EstimateRowCount.sql +++ b/scripts-available/CDB_EstimateRowCount.sql @@ -1,5 +1,5 @@ -- Internal function to generate stats for a table if they don't exist -CREATE OR REPLACE FUNCTION _CDB_GenerateStats(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_GenerateStats(reloid REGCLASS) RETURNS VOID AS $$ DECLARE @@ -15,14 +15,14 @@ END $$ LANGUAGE 'plpgsql' VOLATILE STRICT PARALLEL UNSAFE SECURITY DEFINER; -- Return a row count estimate of the result of a query using statistics -CREATE OR REPLACE FUNCTION CDB_EstimateRowCount(query text) +CREATE OR REPLACE FUNCTION @extschema@.CDB_EstimateRowCount(query text) RETURNS Numeric AS $$ DECLARE plan JSON; BEGIN -- Make sure statistics exist for all the tables of the query - PERFORM _CDB_GenerateStats(tabname) FROM unnest(CDB_QueryTablesText(query)) AS tabname; + PERFORM @extschema@._CDB_GenerateStats(tabname) FROM unnest(@extschema@.CDB_QueryTablesText(query)) AS tabname; -- Use the query planner to obtain an estimate of the number of result rows EXECUTE 'EXPLAIN (FORMAT JSON) ' || query INTO STRICT plan; diff --git a/scripts-available/CDB_ExtensionPost.sql b/scripts-available/CDB_ExtensionPost.sql index 36aa652..2b12612 100644 --- a/scripts-available/CDB_ExtensionPost.sql +++ b/scripts-available/CDB_ExtensionPost.sql @@ -1,2 +1,2 @@ -SELECT pg_catalog.pg_extension_config_dump('cartodb.cdb_tablemetadata',''); +SELECT pg_catalog.pg_extension_config_dump('@extschema@.cdb_tablemetadata',''); diff --git a/scripts-available/CDB_ExtensionUtils.sql b/scripts-available/CDB_ExtensionUtils.sql index 77a362d..88ed8ae 100644 --- a/scripts-available/CDB_ExtensionUtils.sql +++ b/scripts-available/CDB_ExtensionUtils.sql @@ -1,10 +1,10 @@ -CREATE OR REPLACE FUNCTION cartodb.cdb_extension_reload() RETURNS void +CREATE OR REPLACE FUNCTION @extschema@.cdb_extension_reload() RETURNS void AS $$ DECLARE ver TEXT; sql TEXT; BEGIN - ver := split_part(cartodb.cdb_version(), ' ', 1); + ver := split_part(@extschema@.cdb_version(), ' ', 1); sql := 'ALTER EXTENSION cartodb UPDATE TO ''' || ver || 'next'''; EXECUTE sql; sql := 'ALTER EXTENSION cartodb UPDATE TO ''' || ver || ''''; @@ -12,7 +12,7 @@ BEGIN END; $$ language 'plpgsql' VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION cartodb.schema_exists(schema_name text) +CREATE OR REPLACE FUNCTION @extschema@.schema_exists(schema_name text) RETURNS boolean AS $$ SELECT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = schema_name::text); diff --git a/scripts-available/CDB_ForeignTable.sql b/scripts-available/CDB_ForeignTable.sql index d2226df..98d3c9b 100644 --- a/scripts-available/CDB_ForeignTable.sql +++ b/scripts-available/CDB_ForeignTable.sql @@ -4,7 +4,7 @@ -- All the FDW settings are read from the `cdb_conf.fdws` entry json file. --------------------------- -CREATE OR REPLACE FUNCTION cartodb._CDB_Setup_FDW(fdw_name text, config json) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Setup_FDW(fdw_name text, config json) RETURNS void AS $$ DECLARE @@ -58,12 +58,12 @@ BEGIN END IF; -- Give the organization role usage permisions over the schema - SELECT cartodb.CDB_Organization_Member_Group_Role_Member_Name() INTO org_role; + SELECT @extschema@.CDB_Organization_Member_Group_Role_Member_Name() INTO org_role; EXECUTE FORMAT ('GRANT USAGE ON SCHEMA %I TO %I', fdw_name, org_role); -- Bring here the remote cdb_tablemetadata IF NOT EXISTS ( SELECT * FROM PG_CLASS WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname=fdw_name) and relname='cdb_tablemetadata') THEN - EXECUTE FORMAT ('CREATE FOREIGN TABLE %I.cdb_tablemetadata (tabname text, updated_at timestamp with time zone) SERVER %I OPTIONS (table_name ''cdb_tablemetadata_text'', schema_name ''public'', updatable ''false'')', fdw_name, fdw_name); + EXECUTE FORMAT ('CREATE FOREIGN TABLE %I.cdb_tablemetadata (tabname text, updated_at timestamp with time zone) SERVER %I OPTIONS (table_name ''cdb_tablemetadata_text'', schema_name ''@extschema@'', updatable ''false'')', fdw_name, fdw_name); END IF; EXECUTE FORMAT ('GRANT SELECT ON %I.cdb_tablemetadata TO %I', fdw_name, org_role); @@ -71,37 +71,37 @@ END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION cartodb._CDB_Setup_FDWS() +CREATE OR REPLACE FUNCTION @extschema@._CDB_Setup_FDWS() RETURNS VOID AS $$ DECLARE row record; BEGIN - FOR row IN SELECT p.key, p.value from lateral json_each(cartodb.CDB_Conf_GetConf('fdws')) p LOOP - EXECUTE 'SELECT cartodb._CDB_Setup_FDW($1, $2)' USING row.key, row.value; + FOR row IN SELECT p.key, p.value from lateral json_each(@extschema@.CDB_Conf_GetConf('fdws')) p LOOP + EXECUTE 'SELECT @extschema@._CDB_Setup_FDW($1, $2)' USING row.key, row.value; END LOOP; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION cartodb._CDB_Setup_FDW(fdw_name text) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Setup_FDW(fdw_name text) RETURNS void AS $BODY$ DECLARE config json; BEGIN - SELECT p.value FROM LATERAL json_each(cartodb.CDB_Conf_GetConf('fdws')) p WHERE p.key = fdw_name INTO config; - EXECUTE 'SELECT cartodb._CDB_Setup_FDW($1, $2)' USING fdw_name, config; + SELECT p.value FROM LATERAL json_each(@extschema@.CDB_Conf_GetConf('fdws')) p WHERE p.key = fdw_name INTO config; + EXECUTE 'SELECT @extschema@._CDB_Setup_FDW($1, $2)' USING fdw_name, config; END $BODY$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION cartodb.CDB_Add_Remote_Table(source text, table_name text) +CREATE OR REPLACE FUNCTION @extschema@.CDB_Add_Remote_Table(source text, table_name text) RETURNS void AS $$ BEGIN - PERFORM cartodb._CDB_Setup_FDW(source); + PERFORM @extschema@._CDB_Setup_FDW(source); EXECUTE FORMAT ('IMPORT FOREIGN SCHEMA %I LIMIT TO (%I) FROM SERVER %I INTO %I;', source, table_name, source, source); --- Grant SELECT to publicuser EXECUTE FORMAT ('GRANT SELECT ON %I.%I TO publicuser;', source, table_name); @@ -109,7 +109,7 @@ END $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION cartodb.CDB_Get_Foreign_Updated_At(foreign_table regclass) +CREATE OR REPLACE FUNCTION @extschema@.CDB_Get_Foreign_Updated_At(foreign_table regclass) RETURNS timestamp with time zone AS $$ DECLARE @@ -132,7 +132,7 @@ $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION cartodb._cdb_dbname_of_foreign_table(reloid oid) +CREATE OR REPLACE FUNCTION @extschema@._cdb_dbname_of_foreign_table(reloid oid) RETURNS TEXT AS $$ SELECT option_value FROM pg_options_to_table(( @@ -149,18 +149,18 @@ $$ LANGUAGE SQL VOLATILE PARALLEL UNSAFE; -- It is aware of foreign tables -- It assumes the local (schema_name, table_name) map to the remote ones with the same name -- Note: dbname is never quoted whereas schema and table names are when needed. -CREATE OR REPLACE FUNCTION cartodb.CDB_QueryTables_Updated_At(query text) +CREATE OR REPLACE FUNCTION @extschema@.CDB_QueryTables_Updated_At(query text) RETURNS TABLE(dbname text, schema_name text, table_name text, updated_at timestamptz) AS $$ WITH query_tables AS ( - SELECT unnest(CDB_QueryTablesText(query)) schema_table_name + SELECT unnest(@extschema@.CDB_QueryTablesText(query)) schema_table_name ), query_tables_oid AS ( SELECT schema_table_name, schema_table_name::regclass::oid AS reloid FROM query_tables ), fqtn AS ( SELECT - (CASE WHEN c.relkind = 'f' THEN cartodb._cdb_dbname_of_foreign_table(query_tables_oid.reloid) + (CASE WHEN c.relkind = 'f' THEN @extschema@._cdb_dbname_of_foreign_table(query_tables_oid.reloid) ELSE current_database() END)::text AS dbname, quote_ident(n.nspname::text) schema_name, @@ -172,8 +172,8 @@ AS $$ WHERE c.oid = query_tables_oid.reloid ) SELECT fqtn.dbname, fqtn.schema_name, fqtn.table_name, - (CASE WHEN relkind = 'f' THEN cartodb.CDB_Get_Foreign_Updated_At(reloid) - ELSE (SELECT md.updated_at FROM CDB_TableMetadata md WHERE md.tabname = reloid) + (CASE WHEN relkind = 'f' THEN @extschema@.CDB_Get_Foreign_Updated_At(reloid) + ELSE (SELECT md.updated_at FROM @extschema@.CDB_TableMetadata md WHERE md.tabname = reloid) END) AS updated_at FROM fqtn; $$ LANGUAGE SQL VOLATILE PARALLEL UNSAFE; @@ -182,7 +182,7 @@ $$ LANGUAGE SQL VOLATILE PARALLEL UNSAFE; -- Return the last updated time of a set of tables -- It is aware of foreign tables -- It assumes the local (schema_name, table_name) map to the remote ones with the same name -CREATE OR REPLACE FUNCTION cartodb.CDB_Last_Updated_Time(tables text[]) +CREATE OR REPLACE FUNCTION @extschema@.CDB_Last_Updated_Time(tables text[]) RETURNS timestamptz AS $$ WITH t AS ( SELECT unnest(tables) AS schema_table_name @@ -190,8 +190,8 @@ RETURNS timestamptz AS $$ SELECT (t.schema_table_name)::regclass::oid as reloid FROM t ), t_updated_at AS ( SELECT - (CASE WHEN relkind = 'f' THEN cartodb.CDB_Get_Foreign_Updated_At(reloid) - ELSE (SELECT md.updated_at FROM CDB_TableMetadata md WHERE md.tabname = reloid) + (CASE WHEN relkind = 'f' THEN @extschema@.CDB_Get_Foreign_Updated_At(reloid) + ELSE (SELECT md.updated_at FROM @extschema@.CDB_TableMetadata md WHERE md.tabname = reloid) END) AS updated_at FROM t_oid LEFT JOIN pg_catalog.pg_class c ON c.oid = reloid diff --git a/scripts-available/CDB_GhostTables.sql b/scripts-available/CDB_GhostTables.sql index a96b275..ece9d31 100644 --- a/scripts-available/CDB_GhostTables.sql +++ b/scripts-available/CDB_GhostTables.sql @@ -1,5 +1,5 @@ -- Enqueues a job to run Ghost tables linking process for the provided username -CREATE OR REPLACE FUNCTION cartodb._CDB_LinkGhostTables(username text, db_name text, event_name text) +CREATE OR REPLACE FUNCTION @extschema@._CDB_LinkGhostTables(username text, db_name text, event_name text) RETURNS void AS $$ if not username: @@ -11,7 +11,7 @@ AS $$ else: json = GD['json'] - tis_config = plpy.execute("select cartodb.CDB_Conf_GetConf('invalidation_service');")[0]['cdb_conf_getconf'] + tis_config = plpy.execute("select @extschema@.CDB_Conf_GetConf('invalidation_service');")[0]['cdb_conf_getconf'] if not tis_config: plpy.warning('Invalidation service configuration not found. Skipping Ghost Tables linking.') return @@ -50,74 +50,74 @@ AS $$ $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE; -- Enqueues a job to run Ghost tables linking process for the current user -CREATE OR REPLACE FUNCTION cartodb.CDB_LinkGhostTables(event_name text DEFAULT 'USER') +CREATE OR REPLACE FUNCTION @extschema@.CDB_LinkGhostTables(event_name text DEFAULT 'USER') RETURNS void AS $$ DECLARE username TEXT; db_name TEXT; BEGIN - EXECUTE 'SELECT cartodb.CDB_Username();' INTO username; + EXECUTE 'SELECT @extschema@.CDB_Username();' INTO username; EXECUTE 'SELECT current_database();' INTO db_name; - PERFORM cartodb._CDB_LinkGhostTables(username, db_name, event_name); + PERFORM @extschema@._CDB_LinkGhostTables(username, db_name, event_name); RAISE NOTICE '_CDB_LinkGhostTables() called with username=%, event_name=%', username, event_name; END; $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE SECURITY DEFINER; -- Trigger function to call CDB_LinkGhostTables() -CREATE OR REPLACE FUNCTION cartodb._CDB_LinkGhostTablesTrigger() +CREATE OR REPLACE FUNCTION @extschema@._CDB_LinkGhostTablesTrigger() RETURNS trigger AS $$ DECLARE ddl_tag TEXT; BEGIN - EXECUTE 'DELETE FROM cartodb.cdb_ddl_execution WHERE txid = txid_current() RETURNING tag;' INTO ddl_tag; - PERFORM cartodb.CDB_LinkGhostTables(ddl_tag); + EXECUTE 'DELETE FROM @extschema@.cdb_ddl_execution WHERE txid = txid_current() RETURNING tag;' INTO ddl_tag; + PERFORM @extschema@.CDB_LinkGhostTables(ddl_tag); RETURN NULL; END; $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE SECURITY DEFINER; --- Event trigger to save the current transaction in cartodb.cdb_ddl_execution -CREATE OR REPLACE FUNCTION cartodb.CDB_SaveDDLTransaction() +-- Event trigger to save the current transaction in @extschema@.cdb_ddl_execution +CREATE OR REPLACE FUNCTION @extschema@.CDB_SaveDDLTransaction() RETURNS event_trigger AS $$ BEGIN - INSERT INTO cartodb.cdb_ddl_execution VALUES (txid_current(), tg_tag) ON CONFLICT (txid) DO NOTHING; + INSERT INTO @extschema@.cdb_ddl_execution VALUES (txid_current(), tg_tag) ON CONFLICT (txid) DO NOTHING; END; $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE SECURITY DEFINER; -- Creates the trigger on DDL events to link ghost tables -CREATE OR REPLACE FUNCTION cartodb.CDB_EnableGhostTablesTrigger() +CREATE OR REPLACE FUNCTION @extschema@.CDB_EnableGhostTablesTrigger() RETURNS void AS $$ BEGIN DROP EVENT TRIGGER IF EXISTS link_ghost_tables; - DROP TRIGGER IF EXISTS check_ddl_update ON cartodb.cdb_ddl_execution; + DROP TRIGGER IF EXISTS check_ddl_update ON @extschema@.cdb_ddl_execution; -- Table to store the transaction id from DDL events to avoid multiple executions - CREATE TABLE IF NOT EXISTS cartodb.cdb_ddl_execution(txid integer PRIMARY KEY, tag text); + CREATE TABLE IF NOT EXISTS @extschema@.cdb_ddl_execution(txid integer PRIMARY KEY, tag text); CREATE CONSTRAINT TRIGGER check_ddl_update - AFTER INSERT ON cartodb.cdb_ddl_execution + AFTER INSERT ON @extschema@.cdb_ddl_execution INITIALLY DEFERRED FOR EACH ROW - EXECUTE PROCEDURE cartodb._CDB_LinkGhostTablesTrigger(); + EXECUTE PROCEDURE @extschema@._CDB_LinkGhostTablesTrigger(); CREATE EVENT TRIGGER link_ghost_tables ON ddl_command_end WHEN TAG IN ('CREATE TABLE', 'SELECT INTO', 'DROP TABLE', 'ALTER TABLE', 'CREATE TRIGGER', 'DROP TRIGGER', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW') - EXECUTE PROCEDURE cartodb.CDB_SaveDDLTransaction(); + EXECUTE PROCEDURE @extschema@.CDB_SaveDDLTransaction(); END; $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; -- Drops the trigger on DDL events to link ghost tables -CREATE OR REPLACE FUNCTION cartodb.CDB_DisableGhostTablesTrigger() +CREATE OR REPLACE FUNCTION @extschema@.CDB_DisableGhostTablesTrigger() RETURNS void AS $$ BEGIN DROP EVENT TRIGGER IF EXISTS link_ghost_tables; - DROP TRIGGER IF EXISTS check_ddl_update ON cartodb.cdb_ddl_execution; - DROP TABLE IF EXISTS cartodb.cdb_ddl_execution; + DROP TRIGGER IF EXISTS check_ddl_update ON @extschema@.cdb_ddl_execution; + DROP TABLE IF EXISTS @extschema@.cdb_ddl_execution; END; $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; diff --git a/scripts-available/CDB_GreatCircle.sql b/scripts-available/CDB_GreatCircle.sql index 5e05b71..a4d6385 100644 --- a/scripts-available/CDB_GreatCircle.sql +++ b/scripts-available/CDB_GreatCircle.sql @@ -1,23 +1,23 @@ -- Great circle point-to-point routes, based on: -- http://blog.cartodb.com/jets-and-datelines/ -- -CREATE OR REPLACE FUNCTION CDB_GreatCircle(start_point geometry, end_point geometry, max_segment_length NUMERIC DEFAULT 100000) -RETURNS geometry AS $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_GreatCircle(start_point @postgisschema@.geometry, end_point @postgisschema@.geometry, max_segment_length NUMERIC DEFAULT 100000) +RETURNS @postgisschema@.geometry AS $$ DECLARE - line geometry; + line @postgisschema@.geometry; BEGIN - line = ST_Segmentize( - ST_Makeline( + line = @postgisschema@.ST_Segmentize( + @postgisschema@.ST_Makeline( start_point, end_point )::geography, max_segment_length )::geometry; - IF ST_XMax(line) - ST_XMin(line) > 180 THEN - line = ST_Difference( - ST_ShiftLongitude(line), - ST_Buffer(ST_GeomFromText('LINESTRING(180 90, 180 -90)', 4326), 0.00001) + IF @postgisschema@.ST_XMax(line) - @postgisschema@.ST_XMin(line) > 180 THEN + line = @postgisschema@.ST_Difference( + @postgisschema@.ST_ShiftLongitude(line), + @postgisschema@.ST_Buffer(@postgisschema@.ST_GeomFromText('LINESTRING(180 90, 180 -90)', 4326), 0.00001) ); END IF; RETURN line; diff --git a/scripts-available/CDB_Groups.sql b/scripts-available/CDB_Groups.sql index 35704c0..e96ce17 100644 --- a/scripts-available/CDB_Groups.sql +++ b/scripts-available/CDB_Groups.sql @@ -6,14 +6,14 @@ -- Creates a new group CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_CreateGroup(group_name text) +FUNCTION @extschema@.CDB_Group_CreateGroup(group_name text) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); EXECUTE format('CREATE ROLE %I NOLOGIN;', group_role); - PERFORM cartodb._CDB_Group_CreateGroup_API(group_name, group_role); + PERFORM @extschema@._CDB_Group_CreateGroup_API(group_name, group_role); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; @@ -23,72 +23,72 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Not even the role creator can drop the role and the objects it owns. -- All group owned objects by the group are permissions. CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_DropGroup(group_name text) +FUNCTION @extschema@.CDB_Group_DropGroup(group_name text) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); EXECUTE format('DROP OWNED BY %I', group_role); EXECUTE format('DROP ROLE IF EXISTS %I', group_role); - PERFORM cartodb._CDB_Group_DropGroup_API(group_name); + PERFORM @extschema@._CDB_Group_DropGroup_API(group_name); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Renames a group CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_RenameGroup(old_group_name text, new_group_name text) +FUNCTION @extschema@.CDB_Group_RenameGroup(old_group_name text, new_group_name text) RETURNS VOID AS $$ DECLARE old_group_role TEXT; new_group_role TEXT; BEGIN - old_group_role = cartodb._CDB_Group_GroupRole(old_group_name); - new_group_role = cartodb._CDB_Group_GroupRole(new_group_name); + old_group_role = @extschema@._CDB_Group_GroupRole(old_group_name); + new_group_role = @extschema@._CDB_Group_GroupRole(new_group_name); EXECUTE format('ALTER ROLE %I RENAME TO %I', old_group_role, new_group_role); - PERFORM cartodb._CDB_Group_RenameGroup_API(old_group_name, new_group_name, new_group_role); + PERFORM @extschema@._CDB_Group_RenameGroup_API(old_group_name, new_group_name, new_group_role); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Adds users to a group CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_AddUsers(group_name text, usernames text[]) +FUNCTION @extschema@.CDB_Group_AddUsers(group_name text, usernames text[]) RETURNS VOID AS $$ DECLARE group_role TEXT; user_role TEXT; username TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); foreach username in array usernames loop - user_role := cartodb._CDB_User_RoleFromUsername(username); + user_role := @extschema@._CDB_User_RoleFromUsername(username); IF(group_role IS NULL OR user_role IS NULL) THEN RAISE EXCEPTION 'Group role (%) and user role (%) must be already existing', group_role, user_role; END IF; EXECUTE format('GRANT %I TO %I', group_role, user_role); end loop; - PERFORM cartodb._CDB_Group_AddUsers_API(group_name, usernames); + PERFORM @extschema@._CDB_Group_AddUsers_API(group_name, usernames); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Removes users from a group CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_RemoveUsers(group_name text, usernames text[]) +FUNCTION @extschema@.CDB_Group_RemoveUsers(group_name text, usernames text[]) RETURNS VOID AS $$ DECLARE group_role TEXT; user_role TEXT; username TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); foreach username in array usernames loop - user_role := cartodb._CDB_User_RoleFromUsername(username); + user_role := @extschema@._CDB_User_RoleFromUsername(username); EXECUTE format('REVOKE %I FROM %I', group_role, user_role); end loop; - PERFORM cartodb._CDB_Group_RemoveUsers_API(group_name, usernames); + PERFORM @extschema@._CDB_Group_RemoveUsers_API(group_name, usernames); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; @@ -100,67 +100,67 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Grants table read permission to a group CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_Table_GrantRead(group_name text, username text, table_name text) +FUNCTION @extschema@.CDB_Group_Table_GrantRead(group_name text, username text, table_name text) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - PERFORM cartodb._CDB_Group_Table_GrantRead(group_name, username, table_name, true); + PERFORM @extschema@._CDB_Group_Table_GrantRead(group_name, username, table_name, true); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_Table_GrantRead(group_name text, username text, table_name text, sync boolean) +FUNCTION @extschema@._CDB_Group_Table_GrantRead(group_name text, username text, table_name text, sync boolean) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); EXECUTE format('GRANT USAGE ON SCHEMA %I TO %I', username, group_role); EXECUTE format('GRANT SELECT ON TABLE %I.%I TO %I', username, table_name, group_role ); IF(sync) THEN - PERFORM cartodb._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'r'); + PERFORM @extschema@._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'r'); END IF; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Grants table write permission to a group CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_Table_GrantReadWrite(group_name text, username text, table_name text) +FUNCTION @extschema@.CDB_Group_Table_GrantReadWrite(group_name text, username text, table_name text) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - PERFORM cartodb._CDB_Group_Table_GrantReadWrite(group_name, username, table_name, true); + PERFORM @extschema@._CDB_Group_Table_GrantReadWrite(group_name, username, table_name, true); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_Table_GrantReadWrite(group_name text, username text, table_name text, sync boolean) +FUNCTION @extschema@._CDB_Group_Table_GrantReadWrite(group_name text, username text, table_name text, sync boolean) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); EXECUTE format('GRANT USAGE ON SCHEMA %I TO %I', username, group_role); EXECUTE format('GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE %I.%I TO %I', username, table_name, group_role); - PERFORM cartodb._CDB_Group_TableSequences_Permission(group_name, username, table_name, true); + PERFORM @extschema@._CDB_Group_TableSequences_Permission(group_name, username, table_name, true); IF(sync) THEN - PERFORM cartodb._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'w'); + PERFORM @extschema@._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'w'); END IF; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Granting and revoking permissions on sequences CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_TableSequences_Permission(group_name text, username text, table_name text, do_grant bool) +FUNCTION @extschema@._CDB_Group_TableSequences_Permission(group_name text, username text, table_name text, do_grant bool) RETURNS VOID AS $$ DECLARE column_name TEXT; sequence_name TEXT; group_role TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); FOR column_name IN EXECUTE 'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG = current_database() AND TABLE_SCHEMA = $1 AND TABLE_NAME = $2 AND COLUMN_DEFAULT LIKE ''nextval%''' USING username, table_name LOOP EXECUTE format('SELECT PG_GET_SERIAL_SEQUENCE(''%I.%I'', ''%I'')', username, table_name, column_name) INTO sequence_name; @@ -179,26 +179,26 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Revokes all permissions on a table from a group CREATE OR REPLACE -FUNCTION cartodb.CDB_Group_Table_RevokeAll(group_name text, username text, table_name text) +FUNCTION @extschema@.CDB_Group_Table_RevokeAll(group_name text, username text, table_name text) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - PERFORM cartodb._CDB_Group_Table_RevokeAll(group_name, username, table_name, true); + PERFORM @extschema@._CDB_Group_Table_RevokeAll(group_name, username, table_name, true); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_Table_RevokeAll(group_name text, username text, table_name text, sync boolean) +FUNCTION @extschema@._CDB_Group_Table_RevokeAll(group_name text, username text, table_name text, sync boolean) RETURNS VOID AS $$ DECLARE group_role TEXT; BEGIN - group_role := cartodb._CDB_Group_GroupRole(group_name); + group_role := @extschema@._CDB_Group_GroupRole(group_name); EXECUTE format('REVOKE ALL ON TABLE %I.%I FROM %I', username, table_name, group_role); - PERFORM cartodb._CDB_Group_TableSequences_Permission(group_name, username, table_name, false); + PERFORM @extschema@._CDB_Group_TableSequences_Permission(group_name, username, table_name, false); IF(sync) THEN - PERFORM cartodb._CDB_Group_Table_RevokeAllPermission_API(group_name, username, table_name); + PERFORM @extschema@._CDB_Group_Table_RevokeAllPermission_API(group_name, username, table_name); END IF; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; @@ -208,14 +208,14 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; ----------------------- -- Given a group name returns a role. group_name must be a valid PostgreSQL idenfifier. See http://www.postgresql.org/docs/9.2/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_GroupRole(group_name text) +FUNCTION @extschema@._CDB_Group_GroupRole(group_name text) RETURNS TEXT AS $$ DECLARE group_role TEXT; prefix TEXT; max_length constant INTEGER := 63; BEGIN - prefix = format('%s_g_', cartodb._CDB_Group_ShortDatabaseName()); + prefix = format('%s_g_', @extschema@._CDB_Group_ShortDatabaseName()); group_role := format('%s%s', prefix, group_name); IF LENGTH(group_role) > max_length THEN @@ -227,7 +227,7 @@ $$ LANGUAGE PLPGSQL STABLE PARALLEL SAFE; -- Returns the first owner of the schema matching username. Organization user schemas must have one only owner. CREATE OR REPLACE -FUNCTION cartodb._CDB_User_RoleFromUsername(username text) +FUNCTION @extschema@._CDB_User_RoleFromUsername(username text) RETURNS TEXT AS $$ DECLARE user_role TEXT; @@ -241,7 +241,7 @@ $$ LANGUAGE PLPGSQL STABLE PARALLEL SAFE; -- Database names are too long, we need a shorter version for composing role names CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_ShortDatabaseName() +FUNCTION @extschema@._CDB_Group_ShortDatabaseName() RETURNS TEXT AS $$ DECLARE short_database_name TEXT; diff --git a/scripts-available/CDB_Groups_API.sql b/scripts-available/CDB_Groups_API.sql index 9038cb4..370e4b8 100644 --- a/scripts-available/CDB_Groups_API.sql +++ b/scripts-available/CDB_Groups_API.sql @@ -2,30 +2,30 @@ -- GROUP METADATA API FUNCTIONS -- -- Meant to be used by CDB_Group_* functions to sync data with the editor. --- Requires configuration parameter. Example: SELECT cartodb.CDB_Conf_SetConf('groups_api', '{ "host": "127.0.0.1", "port": 3000, "timeout": 10, "username": "extension", "password": "elephant" }'); +-- Requires configuration parameter. Example: SELECT @extschema@.CDB_Conf_SetConf('groups_api', '{ "host": "127.0.0.1", "port": 3000, "timeout": 10, "username": "extension", "password": "elephant" }'); ---------------------------------- -- TODO: delete this development cleanup before final merge -DROP FUNCTION IF EXISTS cartodb.CDB_Group_AddMember(group_name text, username text); -DROP FUNCTION IF EXISTS cartodb.CDB_Group_RemoveMember(group_name text, username text); -DROP FUNCTION IF EXISTS cartodb._CDB_Group_AddMember_API(group_name text, username text); -DROP FUNCTION IF EXISTS cartodb._CDB_Group_RemoveMember_API(group_name text, username text); +DROP FUNCTION IF EXISTS @extschema@.CDB_Group_AddMember(group_name text, username text); +DROP FUNCTION IF EXISTS @extschema@.CDB_Group_RemoveMember(group_name text, username text); +DROP FUNCTION IF EXISTS @extschema@._CDB_Group_AddMember_API(group_name text, username text); +DROP FUNCTION IF EXISTS @extschema@._CDB_Group_RemoveMember_API(group_name text, username text); -- Sends the create group request CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_CreateGroup_API(group_name text, group_role text) +FUNCTION @extschema@._CDB_Group_CreateGroup_API(group_name text, group_role text) RETURNS VOID AS $$ import string url = '/api/v1/databases/{0}/groups' body = '{ "name": "%s", "database_role": "%s" }' % (group_name, group_role) - query = "select cartodb._CDB_Group_API_Request('POST', '%s', '%s', '{200, 409}') as response_status" % (url, body) + query = "select @extschema@._CDB_Group_API_Request('POST', '%s', '%s', '{200, 409}') as response_status" % (url, body) plpy.execute(query) $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE SECURITY DEFINER; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_DropGroup_API(group_name text) +FUNCTION @extschema@._CDB_Group_DropGroup_API(group_name text) RETURNS VOID AS $$ import string @@ -33,12 +33,12 @@ $$ url = '/api/v1/databases/{0}/groups/%s' % (urllib.pathname2url(group_name)) - query = "select cartodb._CDB_Group_API_Request('DELETE', '%s', '', '{204, 404}') as response_status" % url + query = "select @extschema@._CDB_Group_API_Request('DELETE', '%s', '', '{204, 404}') as response_status" % url plpy.execute(query) $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE SECURITY DEFINER; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_RenameGroup_API(old_group_name text, new_group_name text, new_group_role text) +FUNCTION @extschema@._CDB_Group_RenameGroup_API(old_group_name text, new_group_name text, new_group_role text) RETURNS VOID AS $$ import string @@ -46,12 +46,12 @@ $$ url = '/api/v1/databases/{0}/groups/%s' % (urllib.pathname2url(old_group_name)) body = '{ "name": "%s", "database_role": "%s" }' % (new_group_name, new_group_role) - query = "select cartodb._CDB_Group_API_Request('PUT', '%s', '%s', '{200, 409}') as response_status" % (url, body) + query = "select @extschema@._CDB_Group_API_Request('PUT', '%s', '%s', '{200, 409}') as response_status" % (url, body) plpy.execute(query) $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE SECURITY DEFINER; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_AddUsers_API(group_name text, usernames text[]) +FUNCTION @extschema@._CDB_Group_AddUsers_API(group_name text, usernames text[]) RETURNS VOID AS $$ import string @@ -59,12 +59,12 @@ $$ url = '/api/v1/databases/{0}/groups/%s/users' % (urllib.pathname2url(group_name)) body = "{ \"users\": [\"%s\"] }" % "\",\"".join(usernames) - query = "select cartodb._CDB_Group_API_Request('POST', '%s', '%s', '{200, 409}') as response_status" % (url, body) + query = "select @extschema@._CDB_Group_API_Request('POST', '%s', '%s', '{200, 409}') as response_status" % (url, body) plpy.execute(query) $$ LANGUAGE 'plpythonu' VOLATILE SECURITY DEFINER; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_RemoveUsers_API(group_name text, usernames text[]) +FUNCTION @extschema@._CDB_Group_RemoveUsers_API(group_name text, usernames text[]) RETURNS VOID AS $$ import string @@ -72,20 +72,20 @@ $$ url = '/api/v1/databases/{0}/groups/%s/users' % (urllib.pathname2url(group_name)) body = "{ \"users\": [\"%s\"] }" % "\",\"".join(usernames) - query = "select cartodb._CDB_Group_API_Request('DELETE', '%s', '%s', '{200, 404}') as response_status" % (url, body) + query = "select @extschema@._CDB_Group_API_Request('DELETE', '%s', '%s', '{200, 404}') as response_status" % (url, body) plpy.execute(query) $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE SECURITY DEFINER; DO LANGUAGE 'plpgsql' $$ BEGIN -- Needed for dropping type - DROP FUNCTION IF EXISTS cartodb._CDB_Group_API_Conf(); - DROP TYPE IF EXISTS _CDB_Group_API_Params; + DROP FUNCTION IF EXISTS @extschema@._CDB_Group_API_Conf(); + DROP TYPE IF EXISTS @extschema@._CDB_Group_API_Params; END $$; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_Table_GrantPermission_API(group_name text, username text, table_name text, access text) +FUNCTION @extschema@._CDB_Group_Table_GrantPermission_API(group_name text, username text, table_name text, access text) RETURNS VOID AS $$ import string @@ -93,39 +93,39 @@ $$ url = '/api/v1/databases/{0}/groups/%s/permission/%s/tables/%s' % (urllib.pathname2url(group_name), username, table_name) body = '{ "access": "%s" }' % access - query = "select cartodb._CDB_Group_API_Request('PUT', '%s', '%s', '{200, 409}') as response_status" % (url, body) + query = "select @extschema@._CDB_Group_API_Request('PUT', '%s', '%s', '{200, 409}') as response_status" % (url, body) plpy.execute(query) $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE SECURITY DEFINER; DO LANGUAGE 'plpgsql' $$ BEGIN -- Needed for dropping type - DROP FUNCTION IF EXISTS cartodb._CDB_Group_API_Conf(); - DROP TYPE IF EXISTS _CDB_Group_API_Params; + DROP FUNCTION IF EXISTS @extschema@._CDB_Group_API_Conf(); + DROP TYPE IF EXISTS @extschema@._CDB_Group_API_Params; END $$; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_Table_RevokeAllPermission_API(group_name text, username text, table_name text) +FUNCTION @extschema@._CDB_Group_Table_RevokeAllPermission_API(group_name text, username text, table_name text) RETURNS VOID AS $$ import string import urllib url = '/api/v1/databases/{0}/groups/%s/permission/%s/tables/%s' % (urllib.pathname2url(group_name), username, table_name) - query = "select cartodb._CDB_Group_API_Request('DELETE', '%s', '', '{200, 404}') as response_status" % url + query = "select @extschema@._CDB_Group_API_Request('DELETE', '%s', '', '{200, 404}') as response_status" % url plpy.execute(query) $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE SECURITY DEFINER; DO LANGUAGE 'plpgsql' $$ BEGIN -- Needed for dropping type - DROP FUNCTION IF EXISTS cartodb._CDB_Group_API_Conf(); - DROP TYPE IF EXISTS _CDB_Group_API_Params; + DROP FUNCTION IF EXISTS @extschema@._CDB_Group_API_Conf(); + DROP TYPE IF EXISTS @extschema@._CDB_Group_API_Params; END $$; -CREATE TYPE _CDB_Group_API_Params AS ( +CREATE TYPE @extschema@._CDB_Group_API_Params AS ( host text, port int, timeout int, @@ -135,21 +135,21 @@ CREATE TYPE _CDB_Group_API_Params AS ( -- This must be explicitally extracted because "composite types are currently not supported". -- See http://www.postgresql.org/docs/9.3/static/plpython-database.html. CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_API_Conf() - RETURNS _CDB_Group_API_Params AS +FUNCTION @extschema@._CDB_Group_API_Conf() + RETURNS @extschema@._CDB_Group_API_Params AS $$ - conf = plpy.execute("SELECT cartodb.CDB_Conf_GetConf('groups_api') conf")[0]['conf'] + conf = plpy.execute("SELECT @extschema@.CDB_Conf_GetConf('groups_api') conf")[0]['conf'] if conf is None: return None else: import json params = json.loads(conf) - auth = 'Basic %s' % plpy.execute("SELECT cartodb._CDB_Group_API_Auth('%s', '%s') as auth" % (params['username'], params['password']))[0]['auth'] + auth = 'Basic %s' % plpy.execute("SELECT @extschema@._CDB_Group_API_Auth('%s', '%s') as auth" % (params['username'], params['password']))[0]['auth'] return { "host": params['host'], "port": params['port'], 'timeout': params['timeout'], 'auth': auth } $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_API_Auth(username text, password text) +FUNCTION @extschema@._CDB_Group_API_Auth(username text, password text) RETURNS TEXT AS $$ import base64 @@ -158,12 +158,12 @@ $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE; -- url must contain a '%s' placeholder that will be replaced by current_database, for security reasons. CREATE OR REPLACE -FUNCTION cartodb._CDB_Group_API_Request(method text, url text, body text, valid_return_codes int[]) +FUNCTION @extschema@._CDB_Group_API_Request(method text, url text, body text, valid_return_codes int[]) RETURNS int AS $$ import httplib - params = plpy.execute("select c.host, c.port, c.timeout, c.auth from cartodb._CDB_Group_API_Conf() c;")[0] + params = plpy.execute("select c.host, c.port, c.timeout, c.auth from @extschema@._CDB_Group_API_Conf() c;")[0] if params['host'] is None: return None @@ -192,4 +192,4 @@ $$ return None $$ LANGUAGE 'plpythonu' VOLATILE PARALLEL UNSAFE; -revoke all on function cartodb._CDB_Group_API_Request(text, text, text, int[]) from public; +revoke all on function @extschema@._CDB_Group_API_Request(text, text, text, int[]) from public; diff --git a/scripts-available/CDB_HeadsTailsBins.sql b/scripts-available/CDB_HeadsTailsBins.sql index 275ac7c..d7a178c 100644 --- a/scripts-available/CDB_HeadsTailsBins.sql +++ b/scripts-available/CDB_HeadsTailsBins.sql @@ -8,7 +8,7 @@ -- -- -CREATE OR REPLACE FUNCTION CDB_HeadsTailsBins ( in_array NUMERIC[], breaks INT) RETURNS NUMERIC[] as $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_HeadsTailsBins ( in_array NUMERIC[], breaks INT) RETURNS NUMERIC[] as $$ DECLARE element_count INT4; arr_mean numeric; diff --git a/scripts-available/CDB_Helper.sql b/scripts-available/CDB_Helper.sql index 00ef341..3d275ef 100644 --- a/scripts-available/CDB_Helper.sql +++ b/scripts-available/CDB_Helper.sql @@ -5,7 +5,7 @@ -- UTF8 safe and length aware. Find a unique identifier with a given prefix -- and/or suffix and withing a schema. If a schema is not specified, the identifier -- is guaranteed to be unique for all schemas. -CREATE OR REPLACE FUNCTION cartodb._CDB_Unique_Identifier(prefix TEXT, relname TEXT, suffix TEXT, schema TEXT DEFAULT NULL) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Unique_Identifier(prefix TEXT, relname TEXT, suffix TEXT, schema TEXT DEFAULT NULL) RETURNS TEXT AS $$ DECLARE @@ -24,10 +24,10 @@ BEGIN usedspace := usedspace + coalesce(octet_length(prefix), 0); usedspace := usedspace + coalesce(octet_length(suffix), 0); - candrelname := _CDB_Octet_Truncate(relname, maxlen - usedspace); + candrelname := @extschema@._CDB_Octet_Truncate(relname, maxlen - usedspace); IF candrelname = '' THEN - PERFORM _CDB_Error('prefixes are to long to generate a valid identifier', '_CDB_Unique_Identifier'); + PERFORM @extschema@._CDB_Error('prefixes are to long to generate a valid identifier', '_CDB_Unique_Identifier'); END IF; ident := coalesce(prefix, '') || candrelname || coalesce(suffix, ''); @@ -59,14 +59,14 @@ BEGIN i := i + 1; END LOOP; - PERFORM _CDB_Error('looping too far', '_CDB_Unique_Identifier'); + PERFORM @extschema@._CDB_Error('looping too far', '_CDB_Unique_Identifier'); END; $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -- UTF8 safe and length aware. Find a unique identifier for a column with a given prefix -- and/or suffix based on colname and within a relation specified via reloid. -CREATE OR REPLACE FUNCTION cartodb._CDB_Unique_Column_Identifier(prefix TEXT, colname TEXT, suffix TEXT, reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Unique_Column_Identifier(prefix TEXT, colname TEXT, suffix TEXT, reloid REGCLASS) RETURNS TEXT AS $$ DECLARE @@ -85,10 +85,10 @@ BEGIN usedspace := usedspace + coalesce(octet_length(prefix), 0); usedspace := usedspace + coalesce(octet_length(suffix), 0); - candcolname := _CDB_Octet_Truncate(colname, maxlen - usedspace); + candcolname := @extschema@._CDB_Octet_Truncate(colname, maxlen - usedspace); IF candcolname = '' THEN - PERFORM _CDB_Error('prefixes are to long to generate a valid identifier', '_CDB_Unique_Column_Identifier'); + PERFORM @extschema@._CDB_Error('prefixes are to long to generate a valid identifier', '_CDB_Unique_Column_Identifier'); END IF; ident := coalesce(prefix, '') || candcolname || coalesce(suffix, ''); @@ -114,14 +114,14 @@ BEGIN i := i + 1; END LOOP; - PERFORM _CDB_Error('looping too far', '_CDB_Unique_Column_Identifier'); + PERFORM @extschema@._CDB_Error('looping too far', '_CDB_Unique_Column_Identifier'); END; $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL SAFE; -- Truncates a given string to a max_octets octets taking care -- not to leave characters in half. UTF8 safe. -CREATE OR REPLACE FUNCTION cartodb._CDB_Octet_Truncate(string TEXT, max_octets INTEGER) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Octet_Truncate(string TEXT, max_octets INTEGER) RETURNS TEXT AS $$ DECLARE @@ -162,7 +162,7 @@ $$ LANGUAGE 'plpgsql' IMMUTABLE PARALLEL SAFE; -- Checks if a given text representing a qualified or unqualified table name (relation) -- actually exists in the database. It is meant to be used as a guard for other function/queries. -CREATE OR REPLACE FUNCTION cartodb._CDB_Table_Exists(table_name_with_optional_schema TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Table_Exists(table_name_with_optional_schema TEXT) RETURNS bool AS $$ DECLARE diff --git a/scripts-available/CDB_Hexagon.sql b/scripts-available/CDB_Hexagon.sql index bb2b82d..f26cba5 100644 --- a/scripts-available/CDB_Hexagon.sql +++ b/scripts-available/CDB_Hexagon.sql @@ -1,18 +1,18 @@ -- Return an Hexagon with given center and side (or maximal radius) -CREATE OR REPLACE FUNCTION CDB_MakeHexagon(center GEOMETRY, radius FLOAT8) +CREATE OR REPLACE FUNCTION @extschema@.CDB_MakeHexagon(center GEOMETRY, radius FLOAT8) RETURNS GEOMETRY AS $$ - SELECT ST_MakePolygon(ST_MakeLine(geom)) + SELECT @postgisschema@.ST_MakePolygon(@postgisschema@.ST_MakeLine(geom)) FROM ( - SELECT (ST_DumpPoints(ST_ExteriorRing(ST_Buffer($1, $2, 3)))).* + SELECT (@postgisschema@.ST_DumpPoints(@postgisschema@.ST_ExteriorRing(@postgisschema@.ST_Buffer($1, $2, 3)))).* ) as points WHERE path[1] % 2 != 0 $$ LANGUAGE 'sql' IMMUTABLE STRICT PARALLEL SAFE; -- In older versions of the extension, CDB_HexagonGrid had a different signature -DROP FUNCTION IF EXISTS cartodb.CDB_HexagonGrid(GEOMETRY, FLOAT8, GEOMETRY); +DROP FUNCTION IF EXISTS @extschema@.CDB_HexagonGrid(GEOMETRY, FLOAT8, GEOMETRY); -- -- Fill given extent with an hexagonal coverage @@ -35,7 +35,7 @@ DROP FUNCTION IF EXISTS cartodb.CDB_HexagonGrid(GEOMETRY, FLOAT8, GEOMETRY); -- and exception will occur. ---- -- DROP FUNCTION IF EXISTS CDB_HexagonGrid(ext GEOMETRY, side FLOAT8); -CREATE OR REPLACE FUNCTION CDB_HexagonGrid(ext GEOMETRY, side FLOAT8, origin GEOMETRY DEFAULT NULL, maxcells INTEGER DEFAULT 512*512) +CREATE OR REPLACE FUNCTION @extschema@.CDB_HexagonGrid(ext GEOMETRY, side FLOAT8, origin GEOMETRY DEFAULT NULL, maxcells INTEGER DEFAULT 512*512) RETURNS SETOF GEOMETRY AS $$ DECLARE @@ -80,11 +80,11 @@ BEGIN yoff := 0; IF origin IS NOT NULL THEN - IF ST_SRID(origin) != srid THEN + IF @postgisschema@.ST_SRID(origin) != srid THEN RAISE EXCEPTION 'SRID mismatch between extent (%) and origin (%)', srid, ST_SRID(origin); END IF; - xoff := ST_X(origin); - yoff := ST_Y(origin); + xoff := @postgisschema@.ST_X(origin); + yoff := @postgisschema@.ST_Y(origin); END IF; RAISE DEBUG 'X offset: %', xoff; @@ -96,19 +96,19 @@ BEGIN RAISE DEBUG 'Y grid size: %', ygrd; -- Tweak horizontal start on hstep*2 grid from origin - hskip := ceil((ST_XMin(ext)-xoff)/hstep); + hskip := ceil((@postgisschema@.ST_XMin(ext)-xoff)/hstep); RAISE DEBUG 'hskip: %', hskip; hstart := xoff + hskip*hstep; RAISE DEBUG 'hstart: %', hstart; -- Tweak vertical start on hstep grid from origin - vstart := yoff + ceil((ST_Ymin(ext)-yoff)/vstep)*vstep; + vstart := yoff + ceil((@postgisschema@.ST_Ymin(ext)-yoff)/vstep)*vstep; RAISE DEBUG 'vstart: %', vstart; - hend := ST_XMax(ext); - vend := ST_YMax(ext); + hend := @postgisschema@.ST_XMax(ext); + vend := @postgisschema@.ST_YMax(ext); - IF vstart - (vstep/2.0) < ST_YMin(ext) THEN + IF vstart - (vstep/2.0) < @postgisschema@.ST_YMin(ext) THEN vstartary := ARRAY[ vstart + (vstep/2.0), vstart ]; ELSE vstartary := ARRAY[ vstart - (vstep/2.0), vstart ]; @@ -125,21 +125,21 @@ BEGIN RAISE DEBUG 'vstartary: % : %', vstartary[1], vstartary[2]; RAISE DEBUG 'vstartidx: %', vstartidx; - c := ST_SetSRID(ST_MakePoint(hstart, vstartary[vstartidx+1]), srid); - h := ST_SnapToGrid(CDB_MakeHexagon(c, side), xoff, yoff, xgrd, ygrd); + c := @postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(hstart, vstartary[vstartidx+1]), srid); + h := @postgisschema@.ST_SnapToGrid(@extschema@.CDB_MakeHexagon(c, side), xoff, yoff, xgrd, ygrd); vstartidx := (vstartidx + 1) % 2; - WHILE ST_X(c) < hend LOOP -- over X + WHILE @postgisschema@.ST_X(c) < hend LOOP -- over X --RAISE DEBUG 'X loop starts, center point: %', ST_AsText(c); - WHILE ST_Y(c) < vend LOOP -- over Y + WHILE @postgisschema@.ST_Y(c) < vend LOOP -- over Y --RAISE DEBUG 'Center: %', ST_AsText(c); --h := ST_SnapToGrid(CDB_MakeHexagon(c, side), xoff, yoff, xgrd, ygrd); RETURN NEXT h; - h := ST_SnapToGrid(ST_Translate(h, 0, vstep), xoff, yoff, xgrd, ygrd); - c := ST_Translate(c, 0, vstep); -- TODO: drop ? + h := @postgisschema@.ST_SnapToGrid(ST_Translate(h, 0, vstep), xoff, yoff, xgrd, ygrd); + c := @postgisschema@.ST_Translate(c, 0, vstep); -- TODO: drop ? END LOOP; -- TODO: translate h direcly ... - c := ST_SetSRID(ST_MakePoint(ST_X(c)+hstep, vstartary[vstartidx+1]), srid); - h := ST_SnapToGrid(CDB_MakeHexagon(c, side), xoff, yoff, xgrd, ygrd); + c := @postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(ST_X(c)+hstep, vstartary[vstartidx+1]), srid); + h := @postgisschema@.ST_SnapToGrid(@extschema@.CDB_MakeHexagon(c, side), xoff, yoff, xgrd, ygrd); vstartidx := (vstartidx + 1) % 2; END LOOP; diff --git a/scripts-available/CDB_JenksBins.sql b/scripts-available/CDB_JenksBins.sql index 0280e69..81ead54 100644 --- a/scripts-available/CDB_JenksBins.sql +++ b/scripts-available/CDB_JenksBins.sql @@ -13,7 +13,7 @@ -- -- -CREATE OR REPLACE FUNCTION CDB_JenksBins(in_array NUMERIC[], breaks INT, iterations INT DEFAULT 0, invert BOOLEAN DEFAULT FALSE) +CREATE OR REPLACE FUNCTION @extschema@.CDB_JenksBins(in_array NUMERIC[], breaks INT, iterations INT DEFAULT 0, invert BOOLEAN DEFAULT FALSE) RETURNS NUMERIC[] as $$ DECLARE @@ -95,7 +95,7 @@ BEGIN IF i > breaks THEN EXIT; END IF; END LOOP; - best_result = CDB_JenksBinsIteration(in_matrix, breaks, classes, invert, sdam, shuffles); + best_result = @extschema@.CDB_JenksBinsIteration(in_matrix, breaks, classes, invert, sdam, shuffles); --set the seed so we can ensure the same results SELECT setseed(0.4567) INTO seedtarget; @@ -126,7 +126,7 @@ BEGIN IF i > breaks THEN EXIT; END IF; END LOOP; - curr_result = CDB_JenksBinsIteration(in_matrix, breaks, classes, invert, sdam, shuffles); + curr_result = @extschema@.CDB_JenksBinsIteration(in_matrix, breaks, classes, invert, sdam, shuffles); IF curr_result[1] > best_result[1] THEN best_result = curr_result; @@ -146,9 +146,9 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL RESTRICTED; -- Returns an array with: -- - First element: gvf -- - Second to 2+n: Category limits -DROP FUNCTION IF EXISTS CDB_JenksBinsIteration ( in_matrix NUMERIC[], breaks INT, classes INT[], invert BOOLEAN, element_count INT4, arr_mean NUMERIC, max_search INT); -- Old signature +DROP FUNCTION IF EXISTS @extschema@.CDB_JenksBinsIteration ( in_matrix NUMERIC[], breaks INT, classes INT[], invert BOOLEAN, element_count INT4, arr_mean NUMERIC, max_search INT); -- Old signature -CREATE OR REPLACE FUNCTION CDB_JenksBinsIteration ( in_matrix NUMERIC[], breaks INT, classes INT[], invert BOOLEAN, sdam NUMERIC, max_search INT DEFAULT 50) RETURNS NUMERIC[] as $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_JenksBinsIteration ( in_matrix NUMERIC[], breaks INT, classes INT[], invert BOOLEAN, sdam NUMERIC, max_search INT DEFAULT 50) RETURNS NUMERIC[] as $$ DECLARE i INT; iterations INT = 0; diff --git a/scripts-available/CDB_LatLng.sql b/scripts-available/CDB_LatLng.sql index 4160df6..06ef7bb 100644 --- a/scripts-available/CDB_LatLng.sql +++ b/scripts-available/CDB_LatLng.sql @@ -7,13 +7,11 @@ -- -- -CREATE OR REPLACE FUNCTION CDB_LatLng (lat NUMERIC, lng NUMERIC) RETURNS geometry as $$ - -- this function is silly - SELECT ST_SetSRID(ST_MakePoint(lng,lat),4326); +CREATE OR REPLACE FUNCTION @extschema@.CDB_LatLng (lat NUMERIC, lng NUMERIC) RETURNS @postgisschema@.geometry as $$ + SELECT @postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(lng,lat), 4326); $$ language SQL IMMUTABLE PARALLEL SAFE; -CREATE OR REPLACE FUNCTION CDB_LatLng (lat FLOAT8, lng FLOAT8) RETURNS geometry as $$ - -- this function is silly - SELECT ST_SetSRID(ST_MakePoint(lng,lat),4326); +CREATE OR REPLACE FUNCTION @extschema@.CDB_LatLng (lat FLOAT8, lng FLOAT8) RETURNS @postgisschema@.geometry as $$ + SELECT @postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(lng,lat), 4326); $$ language SQL IMMUTABLE PARALLEL SAFE; diff --git a/scripts-available/CDB_Math.sql b/scripts-available/CDB_Math.sql index 307838b..abd470f 100644 --- a/scripts-available/CDB_Math.sql +++ b/scripts-available/CDB_Math.sql @@ -4,7 +4,7 @@ -- Mode -- https://wiki.postgresql.org/wiki/Aggregate_Mode -CREATE OR REPLACE FUNCTION cartodb._CDB_Math_final_mode(anyarray) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Math_final_mode(anyarray) RETURNS anyelement AS $BODY$ SELECT a @@ -15,12 +15,12 @@ $BODY$ $BODY$ LANGUAGE 'sql' IMMUTABLE PARALLEL SAFE; -DROP AGGREGATE IF EXISTS cartodb.CDB_Math_Mode(anyelement); +DROP AGGREGATE IF EXISTS @extschema@.CDB_Math_Mode(anyelement); -CREATE AGGREGATE cartodb.CDB_Math_Mode(anyelement) ( +CREATE AGGREGATE @extschema@.CDB_Math_Mode(anyelement) ( SFUNC=array_append, STYPE=anyarray, - FINALFUNC=_CDB_Math_final_mode, + FINALFUNC=@extschema@._CDB_Math_final_mode, PARALLEL = SAFE, INITCOND='{}' ); diff --git a/scripts-available/CDB_Organizations.sql b/scripts-available/CDB_Organizations.sql index 8c2e47b..c97208e 100644 --- a/scripts-available/CDB_Organizations.sql +++ b/scripts-available/CDB_Organizations.sql @@ -1,5 +1,5 @@ CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Member_Group_Role_Member_Name() +FUNCTION @extschema@.CDB_Organization_Member_Group_Role_Member_Name() RETURNS TEXT AS $$ SELECT 'cdb_org_member'::text || '_' || md5(current_database()); @@ -10,7 +10,7 @@ DO LANGUAGE 'plpgsql' $$ DECLARE cdb_org_member_role_name TEXT; BEGIN - cdb_org_member_role_name := cartodb.CDB_Organization_Member_Group_Role_Member_Name(); + cdb_org_member_role_name := @extschema@.CDB_Organization_Member_Group_Role_Member_Name(); IF NOT EXISTS ( SELECT * FROM pg_roles WHERE rolname= cdb_org_member_role_name ) THEN EXECUTE 'CREATE ROLE "' || cdb_org_member_role_name || '" NOLOGIN;'; @@ -19,11 +19,11 @@ END $$; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Create_Member(role_name text) +FUNCTION @extschema@.CDB_Organization_Create_Member(role_name text) RETURNS void AS $$ BEGIN - EXECUTE 'GRANT "' || cartodb.CDB_Organization_Member_Group_Role_Member_Name() || '" TO "' || role_name || '"'; + EXECUTE 'GRANT "' || @extschema@.CDB_Organization_Member_Group_Role_Member_Name() || '" TO "' || role_name || '"'; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; @@ -31,7 +31,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Administrator ------------------------------------------------------------------------------- CREATE OR REPLACE -FUNCTION cartodb._CDB_Organization_Admin_Role_Name() +FUNCTION @extschema@._CDB_Organization_Admin_Role_Name() RETURNS TEXT AS $$ SELECT current_database() || '_a'::text; @@ -43,7 +43,7 @@ DO LANGUAGE 'plpgsql' $$ DECLARE cdb_org_admin_role_name TEXT; BEGIN - cdb_org_admin_role_name := cartodb._CDB_Organization_Admin_Role_Name(); + cdb_org_admin_role_name := @extschema@._CDB_Organization_Admin_Role_Name(); IF NOT EXISTS ( SELECT * FROM pg_roles WHERE rolname= cdb_org_admin_role_name ) THEN EXECUTE format('CREATE ROLE %I CREATEROLE NOLOGIN;', cdb_org_admin_role_name); @@ -52,15 +52,15 @@ END $$; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_AddAdmin(username text) +FUNCTION @extschema@.CDB_Organization_AddAdmin(username text) RETURNS void AS $$ DECLARE cdb_user_role TEXT; cdb_admin_role TEXT; BEGIN - cdb_admin_role := cartodb._CDB_Organization_Admin_Role_Name(); - cdb_user_role := cartodb._CDB_User_RoleFromUsername(username); + cdb_admin_role := @extschema@._CDB_Organization_Admin_Role_Name(); + cdb_user_role := @extschema@._CDB_User_RoleFromUsername(username); EXECUTE format('GRANT %I TO %I WITH ADMIN OPTION', cdb_admin_role, cdb_user_role); -- CREATEROLE is not inherited, and is needed for user creation EXECUTE format('ALTER ROLE %I CREATEROLE', cdb_user_role); @@ -68,15 +68,15 @@ END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_RemoveAdmin(username text) +FUNCTION @extschema@.CDB_Organization_RemoveAdmin(username text) RETURNS void AS $$ DECLARE cdb_user_role TEXT; cdb_admin_role TEXT; BEGIN - cdb_admin_role := cartodb._CDB_Organization_Admin_Role_Name(); - cdb_user_role := cartodb._CDB_User_RoleFromUsername(username); + cdb_admin_role := @extschema@._CDB_Organization_Admin_Role_Name(); + cdb_user_role := @extschema@._CDB_User_RoleFromUsername(username); EXECUTE format('ALTER ROLE %I NOCREATEROLE', cdb_user_role); EXECUTE format('REVOKE %I FROM %I', cdb_admin_role, cdb_user_role); END @@ -86,7 +86,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Sharing tables ------------------------------------------------------------------------------- CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Add_Table_Read_Permission(from_schema text, table_name text, to_role_name text) +FUNCTION @extschema@.CDB_Organization_Add_Table_Read_Permission(from_schema text, table_name text, to_role_name text) RETURNS void AS $$ BEGIN @@ -96,16 +96,16 @@ END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Add_Table_Organization_Read_Permission(from_schema text, table_name text) +FUNCTION @extschema@.CDB_Organization_Add_Table_Organization_Read_Permission(from_schema text, table_name text) RETURNS void AS $$ BEGIN - EXECUTE 'SELECT cartodb.CDB_Organization_Add_Table_Read_Permission(''' || from_schema || ''', ''' || table_name || ''', ''' || cartodb.CDB_Organization_Member_Group_Role_Member_Name() || ''');'; + EXECUTE 'SELECT @extschema@.CDB_Organization_Add_Table_Read_Permission(''' || from_schema || ''', ''' || table_name || ''', ''' || @extschema@.CDB_Organization_Member_Group_Role_Member_Name() || ''');'; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb._CDB_Organization_Get_Table_Sequences(from_schema text, table_name text) +FUNCTION @extschema@._CDB_Organization_Get_Table_Sequences(from_schema text, table_name text) RETURNS SETOF TEXT AS $$ BEGIN @@ -124,7 +124,7 @@ END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Add_Table_Read_Write_Permission(from_schema text, table_name text, to_role_name text) +FUNCTION @extschema@.CDB_Organization_Add_Table_Read_Write_Permission(from_schema text, table_name text, to_role_name text) RETURNS void AS $$ DECLARE @@ -133,24 +133,24 @@ BEGIN EXECUTE 'GRANT USAGE ON SCHEMA "' || from_schema || '" TO "' || to_role_name || '"'; EXECUTE 'GRANT SELECT, INSERT, UPDATE, DELETE ON "' || from_schema || '"."' || table_name || '" TO "' || to_role_name || '"'; - FOR sequence_name IN SELECT * FROM cartodb._CDB_Organization_Get_Table_Sequences(from_schema, table_name) LOOP + FOR sequence_name IN SELECT * FROM @extschema@._CDB_Organization_Get_Table_Sequences(from_schema, table_name) LOOP EXECUTE 'GRANT USAGE, SELECT ON SEQUENCE ' || sequence_name || ' TO "' || to_role_name || '"'; END LOOP; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Add_Table_Organization_Read_Write_Permission(from_schema text, table_name text) +FUNCTION @extschema@.CDB_Organization_Add_Table_Organization_Read_Write_Permission(from_schema text, table_name text) RETURNS void AS $$ BEGIN - EXECUTE 'SELECT cartodb.CDB_Organization_Add_Table_Read_Write_Permission(''' || from_schema || ''', ''' || table_name || ''', ''' || cartodb.CDB_Organization_Member_Group_Role_Member_Name() || ''');'; + EXECUTE 'SELECT @extschema@.CDB_Organization_Add_Table_Read_Write_Permission(''' || from_schema || ''', ''' || table_name || ''', ''' || @extschema@.CDB_Organization_Member_Group_Role_Member_Name() || ''');'; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Remove_Access_Permission(from_schema text, table_name text, to_role_name text) +FUNCTION @extschema@.CDB_Organization_Remove_Access_Permission(from_schema text, table_name text, to_role_name text) RETURNS void AS $$ BEGIN @@ -162,10 +162,10 @@ END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE -FUNCTION cartodb.CDB_Organization_Remove_Organization_Access_Permission(from_schema text, table_name text) +FUNCTION @extschema@.CDB_Organization_Remove_Organization_Access_Permission(from_schema text, table_name text) RETURNS void AS $$ BEGIN - EXECUTE 'SELECT cartodb.CDB_Organization_Remove_Access_Permission(''' || from_schema || ''', ''' || table_name || ''', ''' || cartodb.CDB_Organization_Member_Group_Role_Member_Name() || ''');'; + EXECUTE 'SELECT @extschema@.CDB_Organization_Remove_Access_Permission(''' || from_schema || ''', ''' || table_name || ''', ''' || @extschema@.CDB_Organization_Member_Group_Role_Member_Name() || ''');'; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 3a32ce7..2eafbf1 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -2,7 +2,7 @@ -- Scope: public -- Parameters: -- reloid: oid of the table. -CREATE OR REPLACE FUNCTION CDB_DropOverviews(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@.CDB_DropOverviews(reloid REGCLASS) RETURNS void AS $$ DECLARE @@ -10,9 +10,9 @@ DECLARE schema_name TEXT; table_name TEXT; BEGIN - SELECT * FROM _cdb_split_table_name(reloid) INTO schema_name, table_name; + SELECT * FROM @extschema@._cdb_split_table_name(reloid) INTO schema_name, table_name; FOR row IN - SELECT * FROM CDB_Overviews(reloid) + SELECT * FROM @extschema@.CDB_Overviews(reloid) LOOP EXECUTE Format('DROP TABLE %s;', row.overview_table); RAISE NOTICE 'Dropped overview for level %: %', row.z, row.overview_table; @@ -29,20 +29,20 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Return relation of overviews for the table with -- the base table oid, -- z level of the overview and overview table oid, ordered by z. -CREATE OR REPLACE FUNCTION CDB_Overviews(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@.CDB_Overviews(reloid REGCLASS) RETURNS TABLE(base_table REGCLASS, z integer, overview_table REGCLASS) AS $$ DECLARE schema_name TEXT; base_table_name TEXT; BEGIN - SELECT * FROM _cdb_split_table_name(reloid) INTO schema_name, base_table_name; + SELECT * FROM @extschema@._cdb_split_table_name(reloid) INTO schema_name, base_table_name; RETURN QUERY SELECT reloid AS base_table, - _CDB_OverviewTableZ(table_name) AS z, + @extschema@._CDB_OverviewTableZ(table_name) AS z, table_regclass AS overview_table - FROM _CDB_UserTablesInSchema(schema_name) - WHERE _CDB_IsOverviewTableOf((SELECT relname FROM pg_class WHERE oid=reloid), table_name) + FROM @extschema@._CDB_UserTablesInSchema(schema_name) + WHERE @extschema@._CDB_IsOverviewTableOf((SELECT relname FROM pg_class WHERE oid=reloid), table_name) ORDER BY z; END $$ LANGUAGE PLPGSQL STABLE PARALLEL RESTRICTED; @@ -56,18 +56,18 @@ $$ LANGUAGE PLPGSQL STABLE PARALLEL RESTRICTED; -- z level of the overview and overview table oid, ordered by z. -- Note: CDB_Overviews can be applied to the result of CDB_QueryTablesText -- to obtain the overviews applicable to a query. -CREATE OR REPLACE FUNCTION CDB_Overviews(tables regclass[]) +CREATE OR REPLACE FUNCTION @extschema@.CDB_Overviews(tables regclass[]) RETURNS TABLE(base_table REGCLASS, z integer, overview_table REGCLASS) AS $$ SELECT base_table::regclass AS base_table, - _CDB_OverviewTableZ(table_name) AS z, + @extschema@._CDB_OverviewTableZ(table_name) AS z, table_regclass AS overview_table FROM - _CDB_UserTablesInSchema(), unnest(tables) base_table + @extschema@._CDB_UserTablesInSchema(), unnest(tables) base_table WHERE schema_name = _cdb_schema_name(base_table) - AND _CDB_IsOverviewTableOf((SELECT relname FROM pg_class WHERE oid=base_table), table_name) + AND @extschema@._CDB_IsOverviewTableOf((SELECT relname FROM pg_class WHERE oid=base_table), table_name) ORDER BY base_table, z; $$ LANGUAGE SQL STABLE PARALLEL SAFE; @@ -76,11 +76,11 @@ $$ LANGUAGE SQL STABLE PARALLEL SAFE; -- Parameters -- reloid: oid of the input table. -- Return value A box2d extent in 3857. -CREATE OR REPLACE FUNCTION _cdb_estimated_extent(reloid REGCLASS) -RETURNS box2d +CREATE OR REPLACE FUNCTION @extschema@._cdb_estimated_extent(reloid REGCLASS) +RETURNS @postgisschema@.box2d AS $$ DECLARE - ext box2d; + ext @postgisschema@.box2d; ext_query text; table_id record; BEGIN @@ -89,7 +89,7 @@ AS $$ FROM pg_class c JOIN pg_namespace n on n.oid = c.relnamespace WHERE c.oid = reloid::oid; ext_query = format( - 'SELECT ST_EstimatedExtent(''%1$s'', ''%2$s'', ''%3$s'');', + 'SELECT @postgisschema@.ST_EstimatedExtent(''%1$s'', ''%2$s'', ''%3$s'');', table_id.schema_name, table_id.table_name, 'the_geom_webmercator' ); @@ -99,7 +99,7 @@ AS $$ EXECUTE format('ANALYZE %1$s', reloid); -- We check the geometry type in case the error is due to empty geometries - IF _CDB_GeometryTypes(reloid) IS NULL THEN + IF @extschema@._CDB_GeometryTypes(reloid) IS NULL THEN RETURN NULL; END IF; @@ -116,7 +116,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- reloid: oid of the input table. It must be a cartodbfy'ed table. -- nz: number of zoom levels to consider from z0 upward. -- Return value: feature density (num_features / webmercator_squared_meters). -CREATE OR REPLACE FUNCTION _CDB_Feature_Density(reloid REGCLASS, nz integer) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Feature_Density(reloid REGCLASS, nz integer) RETURNS FLOAT8 AS $$ DECLARE @@ -135,7 +135,7 @@ AS $$ -- the area of tiles at level Z: c*c*power(2, -2*z) -- with c = CDB_XYZ_Resolution(-8) (earth circumference) min_features = '500'; - SELECT CDB_XYZ_Resolution(-8) INTO c; + SELECT @extschema@.CDB_XYZ_Resolution(-8) INTO c; -- We first compute a set of *seed* tiles, of the minimum Z level, z0, such that -- they cover the extent of the table and we have at least n of them in each @@ -146,27 +146,27 @@ AS $$ -- considered tiles. EXECUTE Format(' WITH RECURSIVE t(x, y, z, e) AS ( - WITH ext AS (SELECT _cdb_estimated_extent(%6$s) as g), + WITH ext AS (SELECT @extschema@._cdb_estimated_extent(%6$s) as g), base AS ( SELECT least( - -floor(log(2, (greatest(ST_XMax(ext.g)-ST_XMin(ext.g), ST_YMax(ext.g)-ST_YMin(ext.g))/(%4$s*%5$s))::numeric)), - _CDB_MaxOverviewLevel()+1 + -floor(log(2, (greatest(@postgisschema@.ST_XMax(ext.g)-@postgisschema@.ST_XMin(ext.g), @postgisschema@.ST_YMax(ext.g)-@postgisschema@.ST_YMin(ext.g))/(%4$s*%5$s))::numeric)), + @extschema@._CDB_MaxOverviewLevel()+1 )::integer z FROM ext ), lim AS ( SELECT - FLOOR((ST_XMin(ext.g)+CDB_XYZ_Resolution(0)*128)/(CDB_XYZ_Resolution(base.z)*256))::integer x0, - FLOOR((ST_XMax(ext.g)+CDB_XYZ_Resolution(0)*128)/(CDB_XYZ_Resolution(base.z)*256))::integer x1, - FLOOR((CDB_XYZ_Resolution(0)*128-ST_YMin(ext.g))/(CDB_XYZ_Resolution(base.z)*256))::integer y1, - FLOOR((CDB_XYZ_Resolution(0)*128-ST_YMax(ext.g))/(CDB_XYZ_Resolution(base.z)*256))::integer y0 + FLOOR((@postgisschema@.ST_XMin(ext.g)+@extschema@.CDB_XYZ_Resolution(0)*128)/(@extschema@.CDB_XYZ_Resolution(base.z)*256))::integer x0, + FLOOR((@postgisschema@.ST_XMax(ext.g)+@extschema@.CDB_XYZ_Resolution(0)*128)/(@extschema@.CDB_XYZ_Resolution(base.z)*256))::integer x1, + FLOOR((@extschema@.CDB_XYZ_Resolution(0)*128-@postgisschema@.ST_YMin(ext.g))/(@extschema@.CDB_XYZ_Resolution(base.z)*256))::integer y1, + FLOOR((@extschema@.CDB_XYZ_Resolution(0)*128-@postgisschema@.ST_YMax(ext.g))/(@extschema@.CDB_XYZ_Resolution(base.z)*256))::integer y0 FROM ext, base ), seed AS ( SELECT xt, yt, base.z, ( SELECT count(*) FROM %1$s - WHERE the_geom_webmercator && CDB_XYZ_Extent(xt, yt, base.z) + WHERE the_geom_webmercator && @extschema@.CDB_XYZ_Extent(xt, yt, base.z) ) e FROM base, lim, generate_series(lim.x0, lim.x1) xt, generate_series(lim.y0, lim.y1) yt ) @@ -174,12 +174,12 @@ AS $$ UNION ALL SELECT x*2 + xx, y*2 + yy, t.z+1, ( SELECT count(*) FROM %1$s - WHERE the_geom_webmercator && CDB_XYZ_Extent(t.x*2 + c.xx, t.y*2 + c.yy, t.z+1) + WHERE the_geom_webmercator && @extschema@.CDB_XYZ_Extent(t.x*2 + c.xx, t.y*2 + c.yy, t.z+1) ) FROM t, base, (VALUES (0, 0), (0, 1), (1, 1), (1, 0)) AS c(xx, yy) WHERE t.e > %2$s AND t.z < least(base.z + %3$s, _CDB_MaxZoomLevel()) ) - SELECT MAX(e/ST_Area(CDB_XYZ_Extent(x,y,z))) FROM t where e > 0; + SELECT MAX(e/@postgisschema@.ST_Area(@extschema@.CDB_XYZ_Extent(x,y,z))) FROM t where e > 0; ', reloid::text, min_features, nz, n, c, reloid::oid) INTO fd; RETURN fd; @@ -193,7 +193,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Parameters: -- reloid: oid of the input table. It must be a cartodbfy'ed table. -- Return value: Z level as an integer -CREATE OR REPLACE FUNCTION _CDB_Feature_Density_Ref_Z_Strategy(reloid REGCLASS, tolerance_px FLOAT8 DEFAULT NULL) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Feature_Density_Ref_Z_Strategy(reloid REGCLASS, tolerance_px FLOAT8 DEFAULT NULL) RETURNS INTEGER AS $$ DECLARE @@ -210,15 +210,15 @@ AS $$ -- Compute fd as an estimation of the (maximum) number -- of features per unit of tile area (in webmercator squared meters) - SELECT _CDB_Feature_Density(reloid, nz) INTO fd; + SELECT @extschema@._CDB_Feature_Density(reloid, nz) INTO fd; -- lim maximum number of (desiderable) features per tile -- we have c = 2*Pi*R = CDB_XYZ_Resolution(-8) (earth circumference) -- ta(z): tile area = power(c*power(2,-z), 2) = c*c*power(2,-2*z) -- => fd*ta(z) is the average number of features per tile at level z -- find minimum z so that fd*ta(z) <= lim -- compute a rough 'feature density' value - SELECT CDB_XYZ_Resolution(-8) INTO c; - RETURN least(_CDB_MaxOverviewLevel()+1, ceil(log(2.0, (c*c*fd/lim)::numeric)/2)); + SELECT @extschema@.CDB_XYZ_Resolution(-8) INTO c; + RETURN least(@extschema@._CDB_MaxOverviewLevel()+1, ceil(log(2.0, (c*c*fd/lim)::numeric)/2)); END; $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; @@ -231,7 +231,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- overview_z Z level of the overview to be named, must be smaller than ref_z -- Return value: the name to be used for the overview. The name is always -- unqualified (does not include a schema name). -CREATE OR REPLACE FUNCTION _CDB_Overview_Name(ref REGCLASS, ref_z INTEGER, overview_z INTEGER) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Overview_Name(ref REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS TEXT AS $$ DECLARE @@ -240,9 +240,9 @@ AS $$ suffix TEXT; is_overview BOOLEAN; BEGIN - SELECT * FROM _cdb_split_table_name(ref) INTO schema_name, base; - SELECT _CDB_OverviewBaseTableName(base) INTO base; - RETURN _CDB_OverviewTableName(base, overview_z); + SELECT * FROM @extschema@._cdb_split_table_name(ref) INTO schema_name, base; + SELECT @extschema@._CDB_OverviewBaseTableName(base) INTO base; + RETURN @extschema@._CDB_OverviewTableName(base, overview_z); END $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; @@ -254,7 +254,7 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- ref_z Z level assigned to the original table -- overview_z Z level of the overview to be generated, must be smaller than ref_z -- Return value: Name of the generated overview table -CREATE OR REPLACE FUNCTION _CDB_Sampling_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, tolerance_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Sampling_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, tolerance_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) RETURNS REGCLASS AS $$ DECLARE @@ -268,11 +268,11 @@ AS $$ overview_table_name TEXT; creation_clause TEXT; BEGIN - overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); + overview_rel := @extschema@._CDB_Overview_Name(reloid, ref_z, overview_z); -- TODO: compute fraction from tolerance_px if not NULL fraction := power(2, 2*(overview_z - ref_z)); - SELECT * FROM _cdb_split_table_name(reloid) INTO schema_name, table_name; + SELECT * FROM @extschema@._cdb_split_table_name(reloid) INTO schema_name, table_name; overview_table_name := Format('%I.%I', schema_name, overview_rel); IF has_overview_created THEN @@ -299,7 +299,7 @@ AS $$ %1$s SELECT * FROM %2$s WHERE ctid = ANY ( ARRAY[ - (SELECT CDB_RandomTids(''%2$s'', %3$s)) + (SELECT @extschema@.CDB_RandomTids(''%2$s'', %3$s)) ] ); ', creation_clause, reloid, num_samples); @@ -320,7 +320,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- overview table to match those of the dataset. It will only perform any change -- if the overview table belgons to the same scheme as the dataset and it -- matches the scheme naming for overview tables. -CREATE OR REPLACE FUNCTION _CDB_Register_Overview(dataset REGCLASS, overview_table REGCLASS, overview_z INTEGER) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Register_Overview(dataset REGCLASS, overview_table REGCLASS, overview_z INTEGER) RETURNS VOID AS $$ DECLARE @@ -334,10 +334,10 @@ AS $$ -- This function will only register a table as an overview table if it matches -- the overviews naming scheme for the dataset and z level and the table belongs -- to the same scheme as the the dataset - SELECT * FROM _cdb_split_table_name(dataset) INTO dataset_scheme, dataset_name; - SELECT * FROM _cdb_split_table_name(overview_table) INTO overview_scheme, overview_name; + SELECT * FROM @extschema@._cdb_split_table_name(dataset) INTO dataset_scheme, dataset_name; + SELECT * FROM @extschema@._cdb_split_table_name(overview_table) INTO overview_scheme, overview_name; IF dataset_scheme = overview_scheme AND - overview_name = _CDB_OverviewTableName(dataset_name, overview_z) THEN + overview_name = @extschema@._CDB_OverviewTableName(dataset_name, overview_z) THEN -- preserve the owner of the base table SELECT u.usename @@ -356,7 +356,7 @@ AS $$ WHERE c_from.oid = dataset AND c_to.oid = overview_table; - PERFORM _CDB_Add_Indexes(overview_table); + PERFORM @extschema@._CDB_Add_Indexes(overview_table); -- TODO: If metadata about existing overviews is to be stored -- it should be done here (CDB_Overviews would consume such metadata) @@ -371,10 +371,10 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE SECURITY DEFINER; -- Parameters -- reloid: oid of the input table. It must be a cartodbfy'ed table. -- Return value: set of attribute names -CREATE OR REPLACE FUNCTION _CDB_Aggregable_Attributes(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Aggregable_Attributes(reloid REGCLASS) RETURNS SETOF information_schema.sql_identifier AS $$ - SELECT c FROM CDB_ColumnNames(reloid) c, _CDB_Columns() cdb + SELECT c FROM @extschema@.CDB_ColumnNames(reloid) c, @extschema@._CDB_Columns() cdb WHERE c NOT IN ( cdb.pkey, cdb.geomcol, cdb.mercgeomcol ) @@ -386,14 +386,14 @@ $$ LANGUAGE SQL STABLE PARALLEL SAFE; -- Parameters -- reloid: oid of the input table. It must be a cartodbfy'ed table. -- Return value: SQL subexpression as text -CREATE OR REPLACE FUNCTION _CDB_Aggregable_Attributes_Expression(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_Aggregable_Attributes_Expression(reloid REGCLASS) RETURNS TEXT AS $$ DECLARE attr_list TEXT; BEGIN SELECT string_agg(s.c, ',') FROM ( - SELECT * FROM _CDB_Aggregable_Attributes(reloid) c + SELECT * FROM @extschema@._CDB_Aggregable_Attributes(reloid) c ) AS s INTO attr_list; RETURN attr_list; @@ -401,7 +401,7 @@ END $$ LANGUAGE PLPGSQL STABLE PARALLEL SAFE; -- Check if a column of a table is of an unlimited-length text type -CREATE OR REPLACE FUNCTION _cdb_unlimited_text_column(reloid REGCLASS, col_name TEXT) +CREATE OR REPLACE FUNCTION @extschema@._cdb_unlimited_text_column(reloid REGCLASS, col_name TEXT) RETURNS BOOLEAN AS $$ SELECT EXISTS ( @@ -416,7 +416,7 @@ AS $$ ); $$ LANGUAGE SQL STABLE PARALLEL SAFE; -CREATE OR REPLACE FUNCTION _cdb_categorical_column(reloid REGCLASS, col_name TEXT) +CREATE OR REPLACE FUNCTION @extschema@._cdb_categorical_column(reloid REGCLASS, col_name TEXT) RETURNS BOOLEAN AS $$ DECLARE @@ -445,7 +445,7 @@ BEGIN END; $$ LANGUAGE PLPGSQL VOLATILE PARALLEL RESTRICTED; -CREATE OR REPLACE FUNCTION _cdb_mode_of_array(anyarray) +CREATE OR REPLACE FUNCTION @extschema@._cdb_mode_of_array(anyarray) RETURNS anyelement AS $$ SELECT a @@ -456,11 +456,11 @@ $$ $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; -DROP AGGREGATE IF EXISTS _cdb_mode(anyelement); -CREATE AGGREGATE _cdb_mode(anyelement) ( +DROP AGGREGATE IF EXISTS @extschema@._cdb_mode(anyelement); +CREATE AGGREGATE @extschema@._cdb_mode(anyelement) ( SFUNC=array_append, STYPE=anyarray, - FINALFUNC=_cdb_mode_of_array, + FINALFUNC=@extschema@._cdb_mode_of_array, PARALLEL = SAFE, INITCOND='{}' ); @@ -473,7 +473,7 @@ CREATE AGGREGATE _cdb_mode(anyelement) ( -- table_alias: (optional) table qualifier for the column to be aggregated -- Return SQL subexpression as text with aggregated attribute aliased -- with its original name. -CREATE OR REPLACE FUNCTION _CDB_Attribute_Aggregation_Expression(reloid REGCLASS, column_name TEXT, table_alias TEXT DEFAULT '') +CREATE OR REPLACE FUNCTION @extschema@._CDB_Attribute_Aggregation_Expression(reloid REGCLASS, column_name TEXT, table_alias TEXT DEFAULT '') RETURNS TEXT AS $$ DECLARE @@ -490,10 +490,10 @@ BEGIN qualified_column := Format('%I', column_name); END IF; - column_type := CDB_ColumnType(reloid, column_name); + column_type := @extschema@.CDB_ColumnType(reloid, column_name); SELECT EXISTS ( - SELECT * FROM CDB_ColumnNames(reloid) as colname WHERE colname = '_feature_count' + SELECT * FROM @extschema@.CDB_ColumnNames(reloid) as colname WHERE colname = '_feature_count' ) INTO has_counter_column; IF has_counter_column THEN feature_count := '_feature_count'; @@ -503,24 +503,24 @@ BEGIN total_feature_count := 'count(*)'; END IF; - base_table := _CDB_OverviewBaseTable(reloid); + base_table := @extschema@._CDB_OverviewBaseTable(reloid); CASE column_type WHEN 'double precision', 'real', 'integer', 'bigint', 'numeric' THEN IF column_name = '_feature_count' THEN RETURN 'SUM(_feature_count)'; ELSE - IF column_type = 'integer' AND _cdb_categorical_column(base_table, column_name) THEN + IF column_type = 'integer' AND @extschema@._cdb_categorical_column(base_table, column_name) THEN RETURN Format('CDB_Math_Mode(%s)::', qualified_column) || column_type; ELSE RETURN Format('SUM(%s*%s)/%s::' || column_type, qualified_column, feature_count, total_feature_count); END IF; END IF; WHEN 'text', 'character varying', 'character' THEN - IF _cdb_categorical_column(base_table, column_name) THEN + IF @extschema@._cdb_categorical_column(base_table, column_name) THEN RETURN Format('_cdb_mode(%s)::', qualified_column) || column_type; ELSE - IF _cdb_unlimited_text_column(base_table, column_name) THEN + IF @extschema@._cdb_unlimited_text_column(base_table, column_name) THEN -- TODO: this should not be applied to columns containing largish text; -- it is intended only to short names/identifiers RETURN 'CASE WHEN count(distinct ' || qualified_column || ') = 1 THEN MIN(' || qualified_column || ') WHEN ' || total_feature_count || ' < 5 THEN string_agg(distinct ' || qualified_column || ','' / '') ELSE ''*'' END::' || column_type; @@ -542,15 +542,15 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL RESTRICTED; -- reloid: oid of the input table. It must be a cartodbfy'ed table. -- table_alias: (optional) table qualifier for the columns to be aggregated -- Return value: SQL subexpression as text -CREATE OR REPLACE FUNCTION _CDB_Aggregated_Attributes_Expression(reloid REGCLASS, table_alias TEXT DEFAULT '') +CREATE OR REPLACE FUNCTION @extschema@._CDB_Aggregated_Attributes_Expression(reloid REGCLASS, table_alias TEXT DEFAULT '') RETURNS TEXT AS $$ DECLARE attr_list TEXT; BEGIN - SELECT string_agg(_CDB_Attribute_Aggregation_Expression(reloid, s.c, table_alias) || Format(' AS %s', s.c), ',') + SELECT string_agg(@extschema@._CDB_Attribute_Aggregation_Expression(reloid, s.c, table_alias) || Format(' AS %s', s.c), ',') FROM ( - SELECT * FROM _CDB_Aggregable_Attributes(reloid) c + SELECT * FROM @extschema@._CDB_Aggregable_Attributes(reloid) c ) AS s INTO attr_list; RETURN attr_list; @@ -562,14 +562,14 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL RESTRICTED; -- Parameters -- reloid: oid of the input table. It must be a cartodbfy'ed table. -- Return value: array of geometry type names -CREATE OR REPLACE FUNCTION _CDB_GeometryTypes(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_GeometryTypes(reloid REGCLASS) RETURNS TEXT[] AS $$ DECLARE gtypes TEXT[]; BEGIN EXECUTE Format(' - SELECT array_agg(DISTINCT ST_GeometryType(the_geom)) FROM ( + SELECT array_agg(DISTINCT @postgisschema@.ST_GeometryType(the_geom)) FROM ( SELECT the_geom FROM %s WHERE (the_geom is not null) LIMIT 10 ) as geom_types @@ -589,7 +589,7 @@ $$ LANGUAGE PLPGSQL STABLE PARALLEL SAFE; -- ref_z Z level assigned to the original table -- overview_z Z level of the overview to be generated, must be smaller than ref_z -- Return value: Name of the generated overview table -CREATE OR REPLACE FUNCTION _CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, grid_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) +CREATE OR REPLACE FUNCTION @extschema@._CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, grid_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) RETURNS REGCLASS AS $$ DECLARE @@ -613,7 +613,7 @@ AS $$ overview_table_name TEXT; creation_clause TEXT; BEGIN - SELECT _CDB_GeometryTypes(reloid) INTO gtypes; + SELECT @extschema@._CDB_GeometryTypes(reloid) INTO gtypes; IF gtypes IS NULL OR array_upper(gtypes, 1) <> 1 OR gtypes[1] <> 'ST_Point' THEN -- This strategy only supports datasets with point geomety RETURN NULL; @@ -621,22 +621,22 @@ AS $$ --TODO: check applicability: geometry type, minimum number of points... - overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); + overview_rel := @extschema@._CDB_Overview_Name(reloid, ref_z, overview_z); -- Grid size in pixels at Z level overview_z IF grid_px IS NULL THEN grid_px := 1.0; END IF; - SELECT * FROM _cdb_split_table_name(reloid) INTO schema_name, table_name; + SELECT * FROM @extschema@._cdb_split_table_name(reloid) INTO schema_name, table_name; -- pixel_m: size of a pixel in webmercator units (meters) - SELECT CDB_XYZ_Resolution(overview_z) INTO pixel_m; + SELECT @extschema@.CDB_XYZ_Resolution(overview_z) INTO pixel_m; -- grid size in meters grid_m = grid_px * pixel_m; - attributes := _CDB_Aggregable_Attributes_Expression(reloid); - aggr_attributes := _CDB_Aggregated_Attributes_Expression(reloid); + attributes := @extschema@._CDB_Aggregable_Attributes_Expression(reloid); + aggr_attributes := @extschema@._CDB_Aggregated_Attributes_Expression(reloid); IF attributes <> '' THEN attributes := ', ' || attributes; END IF; @@ -666,12 +666,12 @@ AS $$ CASE c WHEN 'cartodb_id' THEN 'cartodb_id' WHEN 'the_geom' THEN - Format('ST_Transform(%s, 4326) AS the_geom', point_geom) + Format('@postgisschema@.ST_Transform(%s, 4326) AS the_geom', point_geom) WHEN 'the_geom_webmercator' THEN Format('%s AS the_geom_webmercator', point_geom) ELSE c END AS column - FROM CDB_ColumnNames(reloid) c + FROM @extschema@.CDB_ColumnNames(reloid) c ) SELECT string_agg(s.column, ',') FROM ( SELECT * FROM cols @@ -701,8 +701,8 @@ AS $$ SELECT %5$s count(*) AS n, - Floor(ST_X(f.the_geom_webmercator)/%2$s)::int AS gx, - Floor(ST_Y(f.the_geom_webmercator)/%2$s)::int AS gy, + Floor(@postgisschema@.ST_X(f.the_geom_webmercator)/%2$s)::int AS gx, + Floor(@postgisschema@.ST_Y(f.the_geom_webmercator)/%2$s)::int AS gy, MIN(cartodb_id) AS cartodb_id FROM %1$s f WHERE f.the_geom_webmercator IS NOT NULL @@ -716,7 +716,7 @@ AS $$ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- This strategy places the aggregation of each cluster at the centroid of the cluster members. -CREATE OR REPLACE FUNCTION _CDB_GridClusterCentroid_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, grid_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) +CREATE OR REPLACE FUNCTION @extschema@._CDB_GridClusterCentroid_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, grid_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) RETURNS REGCLASS AS $$ DECLARE @@ -740,7 +740,7 @@ AS $$ overview_table_name TEXT; creation_clause TEXT; BEGIN - SELECT _CDB_GeometryTypes(reloid) INTO gtypes; + SELECT @extschema@._CDB_GeometryTypes(reloid) INTO gtypes; IF gtypes IS NULL OR array_upper(gtypes, 1) <> 1 OR gtypes[1] <> 'ST_Point' THEN -- This strategy only supports datasets with point geomety RETURN NULL; @@ -748,22 +748,22 @@ AS $$ --TODO: check applicability: geometry type, minimum number of points... - overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); + overview_rel := @extschema@._CDB_Overview_Name(reloid, ref_z, overview_z); -- Grid size in pixels at Z level overview_z IF grid_px IS NULL THEN grid_px := 1.0; END IF; - SELECT * FROM _cdb_split_table_name(reloid) INTO schema_name, table_name; + SELECT * FROM @extschema@._cdb_split_table_name(reloid) INTO schema_name, table_name; -- pixel_m: size of a pixel in webmercator units (meters) - SELECT CDB_XYZ_Resolution(overview_z) INTO pixel_m; + SELECT @extschema@.CDB_XYZ_Resolution(overview_z) INTO pixel_m; -- grid size in meters grid_m = grid_px * pixel_m; - attributes := _CDB_Aggregable_Attributes_Expression(reloid); - aggr_attributes := _CDB_Aggregated_Attributes_Expression(reloid); + attributes := @extschema@._CDB_Aggregable_Attributes_Expression(reloid); + aggr_attributes := @extschema@._CDB_Aggregated_Attributes_Expression(reloid); IF attributes <> '' THEN attributes := ', ' || attributes; END IF; @@ -785,7 +785,7 @@ AS $$ offset_y := Format('%2$s/2 - MOD((%1$s)::numeric, (%2$s)::numeric)::float8', cell_y, pixel_m); END IF; - point_geom := Format('ST_SetSRID(ST_MakePoint(%1$s + %3$s, %2$s + %4$s), 3857)', cell_x, cell_y, offset_x, offset_y); + point_geom := Format('@postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(%1$s + %3$s, %2$s + %4$s), 3857)', cell_x, cell_y, offset_x, offset_y); -- compute the resulting columns in the same order as in the base table WITH cols AS ( @@ -793,9 +793,9 @@ AS $$ CASE c WHEN 'cartodb_id' THEN 'cartodb_id' WHEN 'the_geom' THEN - 'ST_Transform(ST_SetSRID(ST_MakePoint(_sum_of_x/n, _sum_of_y/n), 3857), 4326) AS the_geom' + '@postgisschema@.ST_Transform(@postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(_sum_of_x/n, _sum_of_y/n), 3857), 4326) AS the_geom' WHEN 'the_geom_webmercator' THEN - 'ST_SetSRID(ST_MakePoint(_sum_of_x/n, _sum_of_y/n), 3857) AS the_geom_webmercator' + '@postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(_sum_of_x/n, _sum_of_y/n), 3857) AS the_geom_webmercator' ELSE c END AS column FROM CDB_ColumnNames(reloid) c @@ -828,10 +828,10 @@ AS $$ SELECT %5$s count(*) AS n, - SUM(ST_X(f.the_geom_webmercator)) AS _sum_of_x, - SUM(ST_Y(f.the_geom_webmercator)) AS _sum_of_y, - Floor(ST_Y(f.the_geom_webmercator)/%2$s)::int AS gy, - Floor(ST_X(f.the_geom_webmercator)/%2$s)::int AS gx, + SUM(@postgisschema@.ST_X(f.the_geom_webmercator)) AS _sum_of_x, + SUM(@postgisschema@.ST_Y(f.the_geom_webmercator)) AS _sum_of_y, + Floor(@postgisschema@.ST_Y(f.the_geom_webmercator)/%2$s)::int AS gy, + Floor(@postgisschema@.ST_X(f.the_geom_webmercator)/%2$s)::int AS gx, MIN(cartodb_id) AS cartodb_id FROM %1$s f GROUP BY gx, gy @@ -844,7 +844,7 @@ AS $$ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- This strategy places the aggregation of each cluster at the position of one of the cluster members. -CREATE OR REPLACE FUNCTION _CDB_GridClusterSample_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, grid_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) +CREATE OR REPLACE FUNCTION @extschema@._CDB_GridClusterSample_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER, grid_px FLOAT8 DEFAULT NULL, has_overview_created BOOLEAN DEFAULT FALSE) RETURNS REGCLASS AS $$ DECLARE @@ -868,7 +868,7 @@ AS $$ overview_table_name TEXT; creation_clause TEXT; BEGIN - SELECT _CDB_GeometryTypes(reloid) INTO gtypes; + SELECT @extschema@._CDB_GeometryTypes(reloid) INTO gtypes; IF gtypes IS NULL OR array_upper(gtypes, 1) <> 1 OR gtypes[1] <> 'ST_Point' THEN -- This strategy only supports datasets with point geomety RETURN NULL; @@ -876,22 +876,22 @@ AS $$ --TODO: check applicability: geometry type, minimum number of points... - overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); + overview_rel := @extschema@._CDB_Overview_Name(reloid, ref_z, overview_z); -- Grid size in pixels at Z level overview_z IF grid_px IS NULL THEN grid_px := 1.0; END IF; - SELECT * FROM _cdb_split_table_name(reloid) INTO schema_name, table_name; + SELECT * FROM @extschema@._cdb_split_table_name(reloid) INTO schema_name, table_name; -- pixel_m: size of a pixel in webmercator units (meters) - SELECT CDB_XYZ_Resolution(overview_z) INTO pixel_m; + SELECT @extschema@.CDB_XYZ_Resolution(overview_z) INTO pixel_m; -- grid size in meters grid_m = grid_px * pixel_m; - attributes := _CDB_Aggregable_Attributes_Expression(reloid); - aggr_attributes := _CDB_Aggregated_Attributes_Expression(reloid); + attributes := @extschema@._CDB_Aggregable_Attributes_Expression(reloid); + aggr_attributes := @extschema@._CDB_Aggregated_Attributes_Expression(reloid); IF attributes <> '' THEN attributes := ', ' || attributes; END IF; @@ -913,7 +913,7 @@ AS $$ offset_y := Format('%2$s/2 - MOD((%1$s)::numeric, (%2$s)::numeric)::float8', cell_y, pixel_m); END IF; - point_geom := Format('ST_SetSRID(ST_MakePoint(%1$s + %3$s, %2$s + %4$s), 3857)', cell_x, cell_y, offset_x, offset_y); + point_geom := Format('@postgisschema@.ST_SetSRID(@postgisschema@.ST_MakePoint(%1$s + %3$s, %2$s + %4$s), 3857)', cell_x, cell_y, offset_x, offset_y); -- compute the resulting columns in the same order as in the base table WITH cols AS ( @@ -922,7 +922,7 @@ AS $$ WHEN 'cartodb_id' THEN 'cartodb_id' ELSE c END AS column - FROM CDB_ColumnNames(reloid) c + FROM @extschema@.CDB_ColumnNames(reloid) c ) SELECT string_agg(s.column, ',') FROM ( SELECT * FROM cols @@ -952,8 +952,8 @@ AS $$ SELECT %5$s count(*) AS n, - Floor(ST_X(_f.the_geom_webmercator)/%2$s)::int AS gx, - Floor(ST_Y(_f.the_geom_webmercator)/%2$s)::int AS gy, + Floor(@postgisschema@.ST_X(_f.the_geom_webmercator)/%2$s)::int AS gx, + Floor(@postgisschema@.ST_Y(_f.the_geom_webmercator)/%2$s)::int AS gy, MIN(cartodb_id) AS cartodb_id FROM %1$s _f GROUP BY gx, gy @@ -980,7 +980,7 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- created by the strategy must have the same columns -- as the base table and in the same order. -- Return value: Array with the names of the generated overview tables -CREATE OR REPLACE FUNCTION CDB_CreateOverviews(reloid REGCLASS, refscale_strategy regproc DEFAULT '_CDB_Feature_Density_Ref_Z_Strategy(REGCLASS,FLOAT8)'::regprocedure, reduce_strategy regproc DEFAULT '_CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8,BOOLEAN)'::regprocedure) +CREATE OR REPLACE FUNCTION @extschema@.CDB_CreateOverviews(reloid REGCLASS, refscale_strategy regproc DEFAULT '@extschema@._CDB_Feature_Density_Ref_Z_Strategy(REGCLASS,FLOAT8)'::regprocedure, reduce_strategy regproc DEFAULT '@extschema@._CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8,BOOLEAN)'::regprocedure) RETURNS text[] AS $$ DECLARE @@ -988,12 +988,12 @@ DECLARE BEGIN -- Use the default tolerance tolerance_px := 1.0; - RETURN CDB_CreateOverviewsWithToleranceInPixels(reloid, tolerance_px, refscale_strategy, reduce_strategy); + RETURN @extschema@.CDB_CreateOverviewsWithToleranceInPixels(reloid, tolerance_px, refscale_strategy, reduce_strategy); END; $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Create overviews with additional parameter to define the desired detail/tolerance in pixels -CREATE OR REPLACE FUNCTION CDB_CreateOverviewsWithToleranceInPixels(reloid REGCLASS, tolerance_px FLOAT8, refscale_strategy regproc DEFAULT '_CDB_Feature_Density_Ref_Z_Strategy(REGCLASS,FLOAT8)'::regprocedure, reduce_strategy regproc DEFAULT '_CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8,BOOLEAN)'::regprocedure) +CREATE OR REPLACE FUNCTION @extschema@.CDB_CreateOverviewsWithToleranceInPixels(reloid REGCLASS, tolerance_px FLOAT8, refscale_strategy regproc DEFAULT '@extschema@._CDB_Feature_Density_Ref_Z_Strategy(REGCLASS,FLOAT8)'::regprocedure, reduce_strategy regproc DEFAULT '@extschema@._CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8,BOOLEAN)'::regprocedure) RETURNS text[] AS $$ DECLARE @@ -1045,7 +1045,7 @@ BEGIN IF overview_tables IS NOT NULL AND array_length(overview_tables, 1) > 0 THEN SELECT EXISTS ( - SELECT * FROM CDB_ColumnNames(reloid) as colname WHERE colname = '_feature_count' + SELECT * FROM @extschema@.CDB_ColumnNames(reloid) as colname WHERE colname = '_feature_count' ) INTO has_counter_column; IF NOT has_counter_column THEN EXECUTE Format(' @@ -1061,10 +1061,10 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -- Here are some older signatures of these functions, no longer in use. -- They must be droped here, after the (new) definition of the function `CDB_CreateOverviews` -- because that function used to contain references to them in the default argument values. -DROP FUNCTION IF EXISTS _CDB_Feature_Density_Ref_Z_Strategy(REGCLASS); -DROP FUNCTION IF EXISTS _CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER); -DROP FUNCTION IF EXISTS _CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8); -DROP FUNCTION IF EXISTS _CDB_GridClusterCentroid_Reduce_Strategy(REGCLASS, INTEGER, INTEGER, FLOAT8); -DROP FUNCTION IF EXISTS _CDB_GridClusterSample_Reduce_Strategy(REGCLASS, INTEGER, INTEGER, FLOAT8); -DROP FUNCTION IF EXISTS _CDB_Sampling_Reduce_Strategy(REGCLASS,INTEGER,INTEGER); -DROP FUNCTION IF EXISTS _CDB_Sampling_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8); +DROP FUNCTION IF EXISTS @extschema@._CDB_Feature_Density_Ref_Z_Strategy(REGCLASS); +DROP FUNCTION IF EXISTS @extschema@._CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER); +DROP FUNCTION IF EXISTS @extschema@._CDB_GridCluster_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8); +DROP FUNCTION IF EXISTS @extschema@._CDB_GridClusterCentroid_Reduce_Strategy(REGCLASS, INTEGER, INTEGER, FLOAT8); +DROP FUNCTION IF EXISTS @extschema@._CDB_GridClusterSample_Reduce_Strategy(REGCLASS, INTEGER, INTEGER, FLOAT8); +DROP FUNCTION IF EXISTS @extschema@._CDB_Sampling_Reduce_Strategy(REGCLASS,INTEGER,INTEGER); +DROP FUNCTION IF EXISTS @extschema@._CDB_Sampling_Reduce_Strategy(REGCLASS,INTEGER,INTEGER,FLOAT8); diff --git a/scripts-available/CDB_OverviewsSupport.sql b/scripts-available/CDB_OverviewsSupport.sql index ba874d5..f5d8a9c 100644 --- a/scripts-available/CDB_OverviewsSupport.sql +++ b/scripts-available/CDB_OverviewsSupport.sql @@ -1,7 +1,7 @@ -- Auxiliary overviews FUNCTIONS -- Maximum zoom level for which overviews may be created -CREATE OR REPLACE FUNCTION _CDB_MaxOverviewLevel() +CREATE OR REPLACE FUNCTION @extschema@._CDB_MaxOverviewLevel() RETURNS INTEGER AS $$ BEGIN @@ -18,7 +18,7 @@ AS $$ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- Maximum zoom level usable with integer coordinates -CREATE OR REPLACE FUNCTION _CDB_MaxZoomLevel() +CREATE OR REPLACE FUNCTION @extschema@._CDB_MaxZoomLevel() RETURNS INTEGER AS $$ BEGIN @@ -31,7 +31,7 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- that may contain user tables are returned. -- For each table, the regclass, schema name and table name are returned. -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_UserTablesInSchema(schema_name text DEFAULT NULL) +CREATE OR REPLACE FUNCTION @extschema@._CDB_UserTablesInSchema(schema_name text DEFAULT NULL) RETURNS TABLE(table_regclass REGCLASS, schema_name TEXT, table_name TEXT) AS $$ SELECT @@ -43,7 +43,7 @@ AS $$ WHERE c.relkind = 'r' AND c.relname NOT IN ('cdb_tablemetadata', 'cdb_analysis_catalog', 'cdb_conf', 'spatial_ref_sys') AND CASE WHEN schema_name IS NULL - THEN n.nspname NOT IN ('pg_catalog', 'information_schema', 'topology', 'cartodb') + THEN n.nspname NOT IN ('pg_catalog', 'information_schema', 'topology', '@extschema@') ELSE n.nspname = schema_name END; $$ LANGUAGE 'sql' STABLE PARALLEL SAFE; @@ -51,7 +51,7 @@ $$ LANGUAGE 'sql' STABLE PARALLEL SAFE; -- Pattern that can be used to detect overview tables and Extract -- the intended zoom level from the table name. -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_OverviewTableDiscriminator() +CREATE OR REPLACE FUNCTION @extschema@._CDB_OverviewTableDiscriminator() RETURNS TEXT AS $$ BEGIN @@ -63,18 +63,18 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- Pattern matched by the overview tables of a given base table name. -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_OverviewTablePattern(base_table TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_OverviewTablePattern(base_table TEXT) RETURNS TEXT AS $$ BEGIN - RETURN _CDB_OverviewTableDiscriminator() || base_table; + RETURN @extschema@._CDB_OverviewTableDiscriminator() || base_table; END; $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- tablename SIMILAR TO _CDB_OverviewTablePattern(base_table) -- Name of an overview table, given the base table name and the Z level -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_OverviewTableName(base_table TEXT, z INTEGER) +CREATE OR REPLACE FUNCTION @extschema@._CDB_OverviewTableName(base_table TEXT, z INTEGER) RETURNS TEXT AS $$ BEGIN @@ -84,39 +84,39 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- Condition to check if a tabla is an overview table of some base table -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_IsOverviewTableOf(base_table TEXT, otable TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_IsOverviewTableOf(base_table TEXT, otable TEXT) RETURNS BOOLEAN AS $$ BEGIN - RETURN otable SIMILAR TO _CDB_OverviewTablePattern(base_table); + RETURN otable SIMILAR TO @extschema@._CDB_OverviewTablePattern(base_table); END; $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- Extract the Z level from an overview table name -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_OverviewTableZ(otable TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_OverviewTableZ(otable TEXT) RETURNS INTEGER AS $$ BEGIN - RETURN substring(otable from _CDB_OverviewTableDiscriminator())::integer; + RETURN substring(otable from @extschema@._CDB_OverviewTableDiscriminator())::integer; END; $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- Name of the base table corresponding to an overview table -- Scope: private. -CREATE OR REPLACE FUNCTION _CDB_OverviewBaseTableName(overview_table TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_OverviewBaseTableName(overview_table TEXT) RETURNS TEXT AS $$ BEGIN - IF _CDB_OverviewTableZ(overview_table) IS NULL THEN + IF @extschema@._CDB_OverviewTableZ(overview_table) IS NULL THEN RETURN overview_table; ELSE - RETURN regexp_replace(overview_table, _CDB_OverviewTableDiscriminator(), ''); + RETURN regexp_replace(overview_table, @extschema@._CDB_OverviewTableDiscriminator(), ''); END IF; END; $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -CREATE OR REPLACE FUNCTION _CDB_OverviewBaseTable(overview_table REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._CDB_OverviewBaseTable(overview_table REGCLASS) RETURNS REGCLASS AS $$ DECLARE @@ -125,8 +125,8 @@ AS $$ base_name TEXT; base_table REGCLASS; BEGIN - SELECT * FROM _cdb_split_table_name(overview_table) INTO schema_name, table_name; - base_name := _CDB_OverviewBaseTableName(table_name); + SELECT * FROM @extschema@._cdb_split_table_name(overview_table) INTO schema_name, table_name; + base_name := @extschema@._CDB_OverviewBaseTableName(table_name); IF base_name != table_name THEN base_table := Format('%I.%I', schema_name, base_name)::regclass; ELSE @@ -142,7 +142,7 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- reloid: oid of the table. -- Return (schema_name, table_name) -- note that returned names will be quoted if necessary -CREATE OR REPLACE FUNCTION _cdb_split_table_name(reloid REGCLASS, OUT schema_name TEXT, OUT table_name TEXT) +CREATE OR REPLACE FUNCTION @extschema@._cdb_split_table_name(reloid REGCLASS, OUT schema_name TEXT, OUT table_name TEXT) AS $$ BEGIN SELECT n.nspname, c.relname @@ -158,7 +158,7 @@ $$ LANGUAGE PLPGSQL IMMUTABLE PARALLEL SAFE; -- reloid: oid of the table. -- Return (schema_name, table_name) -- note that returned names will be quoted if necessary -CREATE OR REPLACE FUNCTION _cdb_schema_name(reloid REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@._cdb_schema_name(reloid REGCLASS) RETURNS TEXT AS $$ DECLARE diff --git a/scripts-available/CDB_QuantileBins.sql b/scripts-available/CDB_QuantileBins.sql index deaa79d..bbda6aa 100644 --- a/scripts-available/CDB_QuantileBins.sql +++ b/scripts-available/CDB_QuantileBins.sql @@ -7,7 +7,7 @@ -- @param breaks The number of bins you want to find. -- -- -CREATE OR REPLACE FUNCTION CDB_QuantileBins(in_array numeric[], breaks int) +CREATE OR REPLACE FUNCTION @extschema@.CDB_QuantileBins(in_array numeric[], breaks int) RETURNS numeric[] AS $$ SELECT diff --git a/scripts-available/CDB_QueryStatements.sql b/scripts-available/CDB_QueryStatements.sql index 39c69e4..54b7115 100644 --- a/scripts-available/CDB_QueryStatements.sql +++ b/scripts-available/CDB_QueryStatements.sql @@ -3,7 +3,7 @@ -- Regexp curtesy of Hubert Lubaczewski (depesz) -- Implemented in plpython for performance reasons -- -CREATE OR REPLACE FUNCTION CDB_QueryStatements(query text) +CREATE OR REPLACE FUNCTION @extschema@.CDB_QueryStatements(query text) RETURNS SETOF TEXT AS $$ import re pat = re.compile( r'''((?:[^'"$;]+|"[^"]*"|'[^']*'|(\$[^$]*\$).*?\2)+)''', re.DOTALL ) diff --git a/scripts-available/CDB_QueryTables.sql b/scripts-available/CDB_QueryTables.sql index b2fb1ca..8cf9d06 100644 --- a/scripts-available/CDB_QueryTables.sql +++ b/scripts-available/CDB_QueryTables.sql @@ -2,7 +2,7 @@ -- -- Requires PostgreSQL 9.x+ -- -CREATE OR REPLACE FUNCTION CDB_QueryTablesText(query text) +CREATE OR REPLACE FUNCTION @extschema@.CDB_QueryTablesText(query text) RETURNS text[] AS $$ DECLARE @@ -14,7 +14,7 @@ BEGIN tables := '{}'; - FOR rec IN SELECT CDB_QueryStatements(query) q LOOP + FOR rec IN SELECT @extschema@.CDB_QueryStatements(query) q LOOP BEGIN EXECUTE 'EXPLAIN (FORMAT XML, VERBOSE) ' || rec.q INTO STRICT exp; EXCEPTION WHEN syntax_error THEN @@ -66,10 +66,10 @@ $$ LANGUAGE 'plpgsql' VOLATILE STRICT PARALLEL UNSAFE; -- Keep CDB_QueryTables with same signature for backwards compatibility. -- It should probably be removed in the future. -CREATE OR REPLACE FUNCTION CDB_QueryTables(query text) +CREATE OR REPLACE FUNCTION @extschema@.CDB_QueryTables(query text) RETURNS name[] AS $$ BEGIN - RETURN CDB_QueryTablesText(query)::name[]; + RETURN @extschema@.CDB_QueryTablesText(query)::name[]; END $$ LANGUAGE 'plpgsql' VOLATILE STRICT PARALLEL UNSAFE; diff --git a/scripts-available/CDB_Quota.sql b/scripts-available/CDB_Quota.sql index f12f148..d3dc983 100644 --- a/scripts-available/CDB_Quota.sql +++ b/scripts-available/CDB_Quota.sql @@ -1,4 +1,4 @@ -CREATE OR REPLACE FUNCTION cartodb._CDB_total_relation_size(_schema_name TEXT, _table_name TEXT) +CREATE OR REPLACE FUNCTION @extschema@._CDB_total_relation_size(_schema_name TEXT, _table_name TEXT) RETURNS bigint AS $$ DECLARE relation_size bigint := 0; @@ -7,7 +7,7 @@ BEGIN SELECT pg_total_relation_size(format('"%s"."%s"', _schema_name, _table_name)) INTO relation_size; EXCEPTION WHEN undefined_table OR OTHERS THEN - RAISE NOTICE 'cartodb._CDB_total_relation_size(''%'', ''%'') caught error: % (%)', _schema_name, _table_name, SQLERRM, SQLSTATE; + RAISE NOTICE '@extschema@._CDB_total_relation_size(''%'', ''%'') caught error: % (%)', _schema_name, _table_name, SQLERRM, SQLSTATE; END; RETURN relation_size; END; @@ -15,7 +15,7 @@ $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -- Return the estimated size of user data. Used for quota checking. -CREATE OR REPLACE FUNCTION CDB_UserDataSize(schema_name TEXT) +CREATE OR REPLACE FUNCTION @extschema@.CDB_UserDataSize(schema_name TEXT) RETURNS bigint AS $$ DECLARE @@ -26,20 +26,20 @@ BEGIN WHERE o_table_schema = schema_name AND o_table_catalog = current_database() ), user_tables AS ( - SELECT table_name FROM _CDB_NonAnalysisTablesInSchema(schema_name) + SELECT table_name FROM @extschema@._CDB_NonAnalysisTablesInSchema(schema_name) ), table_cat AS ( SELECT table_name, ( EXISTS(select * from raster_tables where o_table_name = table_name) - OR table_name SIMILAR TO _CDB_OverviewTableDiscriminator() || '[\w\d]*' + OR table_name SIMILAR TO @extschema@._CDB_OverviewTableDiscriminator() || '[\w\d]*' ) AS is_overview, EXISTS(SELECT * FROM raster_tables WHERE r_table_name = table_name) AS is_raster FROM user_tables ), sizes AS ( - SELECT COALESCE(INT8(SUM(cartodb._CDB_total_relation_size(schema_name, table_name)))) table_size, + SELECT COALESCE(INT8(SUM(@extschema@._CDB_total_relation_size(schema_name, table_name)))) table_size, CASE WHEN is_overview THEN 0 WHEN is_raster THEN 1 @@ -60,15 +60,15 @@ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -- Return the estimated size of user data. Used for quota checking. -- Implicit schema version for backwards compatibility -CREATE OR REPLACE FUNCTION CDB_UserDataSize() +CREATE OR REPLACE FUNCTION @extschema@.CDB_UserDataSize() RETURNS bigint AS $$ - SELECT CDB_UserDataSize('public'); + SELECT @extschema@.CDB_UserDataSize('public'); $$ LANGUAGE 'sql' VOLATILE PARALLEL UNSAFE; -- Triggers cannot have declared arguments: pbfact float8, qmax int8, schema_name text -CREATE OR REPLACE FUNCTION CDB_CheckQuota() +CREATE OR REPLACE FUNCTION @extschema@.CDB_CheckQuota() RETURNS trigger AS $$ DECLARE @@ -80,7 +80,7 @@ DECLARE BEGIN IF TG_NARGS = 3 THEN schema_name := TG_ARGV[2]; - IF cartodb.schema_exists(schema_name) = false THEN + IF @extschema@.schema_exists(schema_name) = false THEN RAISE EXCEPTION 'Invalid schema name "%"', schema_name; END IF; ELSE @@ -111,7 +111,7 @@ BEGIN RETURN NEW; END IF; - SELECT public.CDB_UserDataSize(schema_name) INTO quota; + SELECT @extschema@.CDB_UserDataSize(schema_name) INTO quota; IF quota > qmax THEN RAISE EXCEPTION 'Quota exceeded by %KB', (quota-qmax)/1024; ELSE RAISE DEBUG 'User quota in bytes: % < % (max allowed)', quota, qmax; @@ -124,13 +124,13 @@ $$ LANGUAGE 'plpgsql' VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION CDB_SetUserQuotaInBytes(schema_name text, bytes int8) +CREATE OR REPLACE FUNCTION @extschema@.CDB_SetUserQuotaInBytes(schema_name text, bytes int8) RETURNS int8 AS $$ DECLARE sql text; BEGIN - IF cartodb.schema_exists(schema_name::text) = false THEN + IF @extschema@.schema_exists(schema_name::text) = false THEN RAISE EXCEPTION 'Invalid schema name "%"', schema_name::text; END IF; @@ -145,11 +145,11 @@ $$ LANGUAGE 'plpgsql' VOLATILE STRICT PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION CDB_SetUserQuotaInBytes(bytes int8) +CREATE OR REPLACE FUNCTION @extschema@.CDB_SetUserQuotaInBytes(bytes int8) RETURNS int8 AS $$ BEGIN - return public.CDB_SetUserQuotaInBytes('public', bytes); + return @extschema@.CDB_SetUserQuotaInBytes('public', bytes); END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT PARALLEL UNSAFE; diff --git a/scripts-available/CDB_RandomTids.sql b/scripts-available/CDB_RandomTids.sql index 438a594..d35ced8 100644 --- a/scripts-available/CDB_RandomTids.sql +++ b/scripts-available/CDB_RandomTids.sql @@ -15,7 +15,7 @@ -- -- -- }{ -CREATE OR REPLACE FUNCTION CDB_RandomTids(in_table regclass, in_nsamples integer) +CREATE OR REPLACE FUNCTION @extschema@.CDB_RandomTids(in_table regclass, in_nsamples integer) RETURNS tid[] AS $$ DECLARE diff --git a/scripts-available/CDB_RectangleGrid.sql b/scripts-available/CDB_RectangleGrid.sql index 6c01e03..14cb58e 100644 --- a/scripts-available/CDB_RectangleGrid.sql +++ b/scripts-available/CDB_RectangleGrid.sql @@ -1,5 +1,5 @@ -- In older versions of the extension, CDB_RectangleGrid had a different signature -DROP FUNCTION IF EXISTS cartodb.CDB_RectangleGrid(GEOMETRY, FLOAT8, FLOAT8, GEOMETRY); +DROP FUNCTION IF EXISTS @extschema@.CDB_RectangleGrid(GEOMETRY, FLOAT8, FLOAT8, GEOMETRY); -- -- Fill given extent with a rectangular coverage @@ -22,7 +22,7 @@ DROP FUNCTION IF EXISTS cartodb.CDB_RectangleGrid(GEOMETRY, FLOAT8, FLOAT8, GEOM -- if the grid requires more cells to cover the extent -- and exception will occur. -- -CREATE OR REPLACE FUNCTION CDB_RectangleGrid(ext GEOMETRY, width FLOAT8, height FLOAT8, origin GEOMETRY DEFAULT NULL, maxcells INTEGER DEFAULT 512*512) +CREATE OR REPLACE FUNCTION @extschema@.CDB_RectangleGrid(ext GEOMETRY, width FLOAT8, height FLOAT8, origin GEOMETRY DEFAULT NULL, maxcells INTEGER DEFAULT 512*512) RETURNS SETOF GEOMETRY AS $$ DECLARE @@ -44,17 +44,17 @@ DECLARE srid INTEGER; BEGIN - srid := ST_SRID(ext); + srid := @postgisschema@.ST_SRID(ext); xoff := 0; yoff := 0; IF origin IS NOT NULL THEN - IF ST_SRID(origin) != srid THEN + IF @postgisschema@.ST_SRID(origin) != srid THEN RAISE EXCEPTION 'SRID mismatch between extent (%) and origin (%)', srid, ST_SRID(origin); END IF; - xoff := ST_X(origin); - yoff := ST_Y(origin); + xoff := @postgisschema@.ST_X(origin); + yoff := @postgisschema@.ST_Y(origin); END IF; --RAISE DEBUG 'X offset: %', xoff; @@ -72,11 +72,11 @@ BEGIN vstep := height; -- Tweak horizontal start on hstep grid from origin - hstart := xoff + ceil((ST_XMin(ext)-xoff)/hstep)*hstep; + hstart := xoff + ceil((@postgisschema@.ST_XMin(ext)-xoff)/hstep)*hstep; --RAISE DEBUG 'hstart: %', hstart; -- Tweak vertical start on vstep grid from origin - vstart := yoff + ceil((ST_Ymin(ext)-yoff)/vstep)*vstep; + vstart := yoff + ceil((@postgisschema@.ST_Ymin(ext)-yoff)/vstep)*vstep; --RAISE DEBUG 'vstart: %', vstart; hend := ST_XMax(ext); @@ -94,10 +94,10 @@ BEGIN x := hstart; WHILE x < hend LOOP -- over X y := vstart; - h := ST_MakeEnvelope(x-hw, y-hh, x+hw, y+hh, srid); + h := @postgisschema@.ST_MakeEnvelope(x-hw, y-hh, x+hw, y+hh, srid); WHILE y < vend LOOP -- over Y RETURN NEXT h; - h := ST_Translate(h, 0, vstep); + h := @postgisschema@.ST_Translate(h, 0, vstep); y := yoff + round(((y + vstep)-yoff)/ygrd)*ygrd; -- round to grid END LOOP; x := xoff + round(((x + hstep)-xoff)/xgrd)*xgrd; -- round to grid diff --git a/scripts-available/CDB_SearchPath.sql b/scripts-available/CDB_SearchPath.sql index e5475f2..236e281 100644 --- a/scripts-available/CDB_SearchPath.sql +++ b/scripts-available/CDB_SearchPath.sql @@ -1,4 +1,4 @@ ----- Make sure 'cartodb' is in database search path +---- Make sure '@extschema@' is in database search path DO $$ DECLARE @@ -8,13 +8,13 @@ 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'; + IF var_cur_search_path LIKE '%@extschema@%' THEN + RAISE DEBUG '"@extschema@" already in database search_path'; ELSE - var_cur_search_path := var_cur_search_path || ', "cartodb"'; + var_cur_search_path := var_cur_search_path || ', "@extschema@"'; EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) || ' SET search_path = ' || var_cur_search_path; - RAISE DEBUG '"cartodb" has been added to end of database search_path'; + RAISE DEBUG '"@extschema@" has been added to end of database search_path'; END IF; -- Reset search_path diff --git a/scripts-available/CDB_Stats.sql b/scripts-available/CDB_Stats.sql index 62cadb9..103a2f4 100644 --- a/scripts-available/CDB_Stats.sql +++ b/scripts-available/CDB_Stats.sql @@ -9,7 +9,7 @@ -- -- Calculate kurtosis -CREATE OR REPLACE FUNCTION CDB_Kurtosis ( in_array NUMERIC[] ) RETURNS NUMERIC as $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_Kurtosis ( in_array NUMERIC[] ) RETURNS NUMERIC as $$ DECLARE a numeric; c numeric; @@ -32,7 +32,7 @@ END; $$ language plpgsql IMMUTABLE STRICT PARALLEL SAFE; -- Calculate skewness -CREATE OR REPLACE FUNCTION CDB_Skewness ( in_array NUMERIC[] ) RETURNS NUMERIC as $$ +CREATE OR REPLACE FUNCTION @extschema@.CDB_Skewness ( in_array NUMERIC[] ) RETURNS NUMERIC as $$ DECLARE a numeric; c numeric; diff --git a/scripts-available/CDB_StringToDate.sql b/scripts-available/CDB_StringToDate.sql index eb143a2..1a536fc 100644 --- a/scripts-available/CDB_StringToDate.sql +++ b/scripts-available/CDB_StringToDate.sql @@ -1,7 +1,7 @@ -- Convert string to date -- -DROP FUNCTION IF EXISTS CDB_StringToDate(character varying); -CREATE OR REPLACE FUNCTION CDB_StringToDate(input character varying) +DROP FUNCTION IF EXISTS @extschema@.CDB_StringToDate(character varying); +CREATE OR REPLACE FUNCTION @extschema@.CDB_StringToDate(input character varying) RETURNS TIMESTAMP AS $$ DECLARE output TIMESTAMP; BEGIN diff --git a/scripts-available/CDB_TableIndexes.sql b/scripts-available/CDB_TableIndexes.sql index 7d11cd9..533cbe9 100644 --- a/scripts-available/CDB_TableIndexes.sql +++ b/scripts-available/CDB_TableIndexes.sql @@ -1,5 +1,5 @@ -- Function returning indexes for a table -CREATE OR REPLACE FUNCTION CDB_TableIndexes(REGCLASS) +CREATE OR REPLACE FUNCTION @extschema@.CDB_TableIndexes(REGCLASS) RETURNS TABLE(index_name name, index_unique bool, index_primary bool, index_keys text array) AS $$ @@ -24,4 +24,4 @@ $$ LANGUAGE SQL STABLE PARALLEL SAFE; -- This is to migrate from pre-0.2.0 version -- See http://github.com/CartoDB/cartodb-postgresql/issues/36 -GRANT EXECUTE ON FUNCTION CDB_TableIndexes(REGCLASS) TO public; +GRANT EXECUTE ON FUNCTION @extschema@.CDB_TableIndexes(REGCLASS) TO public; diff --git a/scripts-available/CDB_TableMetadata.sql b/scripts-available/CDB_TableMetadata.sql index 16a69a4..849359e 100644 --- a/scripts-available/CDB_TableMetadata.sql +++ b/scripts-available/CDB_TableMetadata.sql @@ -1,18 +1,18 @@ CREATE TABLE IF NOT EXISTS - public.CDB_TableMetadata ( + @extschema@.CDB_TableMetadata ( tabname regclass not null primary key, updated_at timestamp with time zone not null default now() ); -CREATE OR REPLACE VIEW public.CDB_TableMetadata_Text AS +CREATE OR REPLACE VIEW @extschema@.CDB_TableMetadata_Text AS SELECT FORMAT('%I.%I', n.nspname::text, c.relname::text) tabname, updated_at - FROM public.CDB_TableMetadata m JOIN pg_catalog.pg_class c ON m.tabname::oid = c.oid + FROM @extschema@.CDB_TableMetadata m JOIN pg_catalog.pg_class c ON m.tabname::oid = c.oid LEFT JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid; -- No one can see this -- Updates are only possible trough the security definer trigger --- GRANT SELECT ON public.CDB_TableMetadata TO public; +-- GRANT SELECT ON @extschema@.CDB_TableMetadata TO public; -- -- Trigger logging updated_at in the CDB_TableMetadata @@ -27,17 +27,17 @@ CREATE OR REPLACE VIEW public.CDB_TableMetadata_Text AS -- -- NOTE: _never_ attach to CDB_TableMetadata ... -- -CREATE OR REPLACE FUNCTION CDB_TableMetadata_Trigger() +CREATE OR REPLACE FUNCTION @extschema@.CDB_TableMetadata_Trigger() RETURNS trigger AS $$ BEGIN -- Guard against infinite loop - IF TG_RELID = 'public.CDB_TableMetadata'::regclass::oid THEN + IF TG_RELID = '@extschema@.CDB_TableMetadata'::regclass::oid THEN RETURN NULL; END IF; -- Cleanup stale entries - DELETE FROM public.CDB_TableMetadata + DELETE FROM @extschema@.CDB_TableMetadata WHERE NOT EXISTS ( SELECT oid FROM pg_class WHERE oid = tabname ); @@ -45,11 +45,11 @@ BEGIN WITH nv as ( SELECT TG_RELID as tabname, NOW() as t ), updated as ( - UPDATE public.CDB_TableMetadata x SET updated_at = nv.t + UPDATE @extschema@.CDB_TableMetadata x SET updated_at = nv.t FROM nv WHERE x.tabname = nv.tabname RETURNING x.tabname ) - INSERT INTO public.CDB_TableMetadata SELECT nv.* + INSERT INTO @extschema@.CDB_TableMetadata SELECT nv.* FROM nv LEFT JOIN updated USING(tabname) WHERE updated.tabname IS NULL; @@ -62,7 +62,7 @@ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE SECURITY DEFINER; -- Trigger invalidating varnish whenever CDB_TableMetadata -- record change. -- -CREATE OR REPLACE FUNCTION _CDB_TableMetadata_Updated() +CREATE OR REPLACE FUNCTION @extschema@._CDB_TableMetadata_Updated() RETURNS trigger AS $$ DECLARE @@ -93,14 +93,14 @@ BEGIN -- -- Call the first varnish invalidation function owned - -- by a superuser found in cartodb or public schema + -- by a superuser found in @extschema@ or public schema -- (in that order) found := false; FOR rec IN SELECT u.usesuper, u.usename, n.nspname, p.proname FROM pg_proc p, pg_namespace n, pg_user u WHERE p.proname = 'cdb_invalidate_varnish' AND p.pronamespace = n.oid - AND n.nspname IN ('public', 'cartodb') + AND n.nspname IN ('public', '@extschema@') AND u.usesysid = p.proowner AND u.usesuper ORDER BY n.nspname @@ -119,26 +119,26 @@ END; $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE SECURITY DEFINER; -DROP TRIGGER IF EXISTS table_modified ON public.CDB_TableMetadata; +DROP TRIGGER IF EXISTS table_modified ON @extschema@.CDB_TableMetadata; -- NOTE: on DELETE we would be unable to convert the table -- oid (regclass) to its name CREATE TRIGGER table_modified AFTER INSERT OR UPDATE -ON public.CDB_TableMetadata FOR EACH ROW EXECUTE PROCEDURE +ON @extschema@.CDB_TableMetadata FOR EACH ROW EXECUTE PROCEDURE _CDB_TableMetadata_Updated(); -- similar to TOUCH(1) in unix filesystems but for table in cdb_tablemetadata -CREATE OR REPLACE FUNCTION public.CDB_TableMetadataTouch(tablename regclass) +CREATE OR REPLACE FUNCTION @extschema@.CDB_TableMetadataTouch(tablename regclass) RETURNS void AS $$ BEGIN WITH upsert AS ( - UPDATE public.cdb_tablemetadata + UPDATE @extschema@.cdb_tablemetadata SET updated_at = NOW() WHERE tabname = tablename RETURNING * ) - INSERT INTO public.cdb_tablemetadata (tabname, updated_at) + INSERT INTO @extschema@.cdb_tablemetadata (tabname, updated_at) SELECT tablename, NOW() WHERE NOT EXISTS (SELECT * FROM upsert); END; diff --git a/scripts-available/CDB_TransformToWebmercator.sql b/scripts-available/CDB_TransformToWebmercator.sql index 5ab7efd..b61e8da 100644 --- a/scripts-available/CDB_TransformToWebmercator.sql +++ b/scripts-available/CDB_TransformToWebmercator.sql @@ -5,19 +5,19 @@ -- for web mercator by "clipping" anything outside to the valid -- range. -- -CREATE OR REPLACE FUNCTION CDB_TransformToWebmercator(geom geometry) -RETURNS geometry +CREATE OR REPLACE FUNCTION @extschema@.CDB_TransformToWebmercator(geom @postgisschema@.geometry) +RETURNS @postgisschema@.geometry AS $$ DECLARE - valid_extent GEOMETRY; - latlon_input GEOMETRY; - clipped_input GEOMETRY; - to_webmercator GEOMETRY; - ret GEOMETRY; + valid_extent @postgisschema@.GEOMETRY; + latlon_input @postgisschema@.GEOMETRY; + clipped_input @postgisschema@.GEOMETRY; + to_webmercator @postgisschema@.GEOMETRY; + ret @postgisschema@.GEOMETRY; BEGIN - IF ST_Srid(geom) = 3857 THEN + IF @postgisschema@.ST_Srid(geom) = 3857 THEN RETURN geom; END IF; @@ -27,18 +27,18 @@ BEGIN -- to -85.0511 to 85.0511 but as long as proj -- does not complain we are happy -- - valid_extent := ST_MakeEnvelope(-180, -89, 180, 89, 4326); + valid_extent := @postgisschema@.ST_MakeEnvelope(-180, -89, 180, 89, 4326); -- Then we transform to WGS84 latlon, which is -- where we have known coordinates for the clipping -- - latlon_input := ST_Transform(geom, 4326); + latlon_input := @postgisschema@.ST_Transform(geom, 4326); -- Don't bother clipping if the geometry boundary doesn't -- go outside the valid extent. IF latlon_input @ valid_extent THEN BEGIN - RETURN ST_Transform(latlon_input, 3857); + RETURN @postgisschema@.ST_Transform(latlon_input, 3857); EXCEPTION WHEN OTHERS THEN RETURN NULL; END; @@ -47,33 +47,33 @@ BEGIN -- Since we're going to use ST_Intersection on input -- we'd better ensure the input is valid -- TODO: only do this if the first ST_Intersection fails ? - IF ST_Dimension(geom) != 0 AND + IF @postgisschema@.ST_Dimension(geom) != 0 AND -- See http://trac.osgeo.org/postgis/ticket/1719 - GeometryType(geom) != 'GEOMETRYCOLLECTION' + @postgisschema@.GeometryType(geom) != 'GEOMETRYCOLLECTION' THEN BEGIN - latlon_input := ST_MakeValid(latlon_input); + latlon_input := @postgisschema@.ST_MakeValid(latlon_input); EXCEPTION WHEN OTHERS THEN -- See http://github.com/Vizzuality/cartodb/issues/931 RAISE WARNING 'Could not clean input geometry: %', SQLERRM; RETURN NULL; END; - latlon_input := ST_CollectionExtract(latlon_input, ST_Dimension(geom)+1); + latlon_input := @postgisschema@.ST_CollectionExtract(latlon_input, ST_Dimension(geom)+1); END IF; -- Then we clip, trying to retain the input type -- TODO: catch exceptions here too ? - clipped_input := ST_Intersection(latlon_input, valid_extent); + clipped_input := @postgisschema@.ST_Intersection(latlon_input, valid_extent); -- We transform to web mercator - to_webmercator := ST_Transform(clipped_input, 3857); + to_webmercator := @postgisschema@.ST_Transform(clipped_input, 3857); -- Finally we convert EMPTY to NULL -- See https://github.com/Vizzuality/cartodb/issues/706 -- And retain "multi" status - ret := CASE WHEN ST_IsEmpty(to_webmercator) THEN NULL::geometry - WHEN GeometryType(geom) LIKE 'MULTI%' THEN ST_Multi(to_webmercator) + ret := CASE WHEN @postgisschema@.ST_IsEmpty(to_webmercator) THEN NULL::@postgisschema@.geometry + WHEN @postgisschema@.GeometryType(geom) LIKE 'MULTI%' THEN @postgisschema@.ST_Multi(to_webmercator) ELSE to_webmercator END; diff --git a/scripts-available/CDB_UserTables.sql b/scripts-available/CDB_UserTables.sql index 85a0918..ee76e1d 100644 --- a/scripts-available/CDB_UserTables.sql +++ b/scripts-available/CDB_UserTables.sql @@ -5,8 +5,8 @@ -- -- Currently accepted permissions are: 'public', 'private' or 'all' -- -DROP FUNCTION IF EXISTS CDB_UserTables(text); -CREATE OR REPLACE FUNCTION CDB_UserTables(perm text DEFAULT 'all') +DROP FUNCTION IF EXISTS @extschema@.CDB_UserTables(text); +CREATE OR REPLACE FUNCTION @extschema@.CDB_UserTables(perm text DEFAULT 'all') RETURNS SETOF name AS $$ @@ -15,7 +15,7 @@ FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' AND c.relname NOT IN ('cdb_tablemetadata', 'cdb_analysis_catalog', 'cdb_conf', 'spatial_ref_sys') -AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'topology', 'cartodb') +AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'topology', '@extschema@') AND CASE WHEN perm = 'public' THEN has_table_privilege('publicuser', c.oid, 'SELECT') WHEN perm = 'private' THEN has_table_privilege(current_user, c.oid, 'SELECT') AND NOT has_table_privilege('publicuser', c.oid, 'SELECT') WHEN perm = 'all' THEN has_table_privilege(current_user, c.oid, 'SELECT') OR has_table_privilege('publicuser', c.oid, 'SELECT') @@ -25,4 +25,4 @@ $$ LANGUAGE 'sql' STABLE PARALLEL SAFE; -- This is to migrate from pre-0.2.0 version -- See http://github.com/CartoDB/cartodb-postgresql/issues/36 -GRANT EXECUTE ON FUNCTION CDB_UserTables(text) TO public; +GRANT EXECUTE ON FUNCTION @extschema@.CDB_UserTables(text) TO public; diff --git a/scripts-available/CDB_Username.sql b/scripts-available/CDB_Username.sql index 71dcfa6..adc1427 100644 --- a/scripts-available/CDB_Username.sql +++ b/scripts-available/CDB_Username.sql @@ -1,6 +1,6 @@ -- Returns the cartodb username of the current PostgreSQL session -CREATE OR REPLACE FUNCTION cartodb.CDB_Username() +CREATE OR REPLACE FUNCTION @extschema@.CDB_Username() RETURNS text AS $$ - SELECT cartodb.CDB_Conf_GetConf(CONCAT('api_keys_', session_user))->>'username'; + SELECT @extschema@.CDB_Conf_GetConf(CONCAT('api_keys_', session_user))->>'username'; $$ LANGUAGE SQL STABLE PARALLEL SAFE SECURITY DEFINER; diff --git a/scripts-available/CDB_XYZ.sql b/scripts-available/CDB_XYZ.sql index 3fa2a99..d07ce46 100644 --- a/scripts-available/CDB_XYZ.sql +++ b/scripts-available/CDB_XYZ.sql @@ -1,7 +1,7 @@ -- { -- Return pixel resolution at the given zoom level -- }{ -CREATE OR REPLACE FUNCTION CDB_XYZ_Resolution(z INTEGER) +CREATE OR REPLACE FUNCTION @extschema@.CDB_XYZ_Resolution(z INTEGER) RETURNS FLOAT8 AS $$ -- circumference divided by 256 is z0 resolution, then divide by 2^z @@ -15,7 +15,7 @@ $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE STRICT; -- SRID of the returned polygon is forceably 3857 -- -- }{ -CREATE OR REPLACE FUNCTION CDB_XYZ_Extent(x INTEGER, y INTEGER, z INTEGER) +CREATE OR REPLACE FUNCTION @extschema@.CDB_XYZ_Extent(x INTEGER, y INTEGER, z INTEGER) RETURNS GEOMETRY AS $$ DECLARE @@ -34,7 +34,7 @@ BEGIN -- Size of each tile in pixels (1:1 aspect ratio) tile_size := 256; - initial_resolution := CDB_XYZ_Resolution(0); + initial_resolution := @extschema@.CDB_XYZ_Resolution(0); --RAISE DEBUG 'Initial resolution: %', initial_resolution; origin_shift := (initial_resolution * tile_size) / 2.0; @@ -56,7 +56,7 @@ BEGIN --RAISE DEBUG 'ymin: %', ymin; --RAISE DEBUG 'ymax: %', ymax; - RETURN ST_MakeEnvelope(xmin, ymin, xmax, ymax, 3857); + RETURN @postgisschema@.ST_MakeEnvelope(xmin, ymin, xmax, ymax, 3857); END $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT PARALLEL SAFE; -- } diff --git a/scripts-available/CDB_ZoomFromScale.sql b/scripts-available/CDB_ZoomFromScale.sql index 2c85e95..0866f51 100644 --- a/scripts-available/CDB_ZoomFromScale.sql +++ b/scripts-available/CDB_ZoomFromScale.sql @@ -1,5 +1,5 @@ -- Maximum supported zoom level -CREATE OR REPLACE FUNCTION _CDB_MaxSupportedZoom() +CREATE OR REPLACE FUNCTION @extschema@._CDB_MaxSupportedZoom() RETURNS int LANGUAGE SQL IMMUTABLE PARALLEL SAFE @@ -12,7 +12,7 @@ AS $$ SELECT 29; $$; -CREATE OR REPLACE FUNCTION cartodb.CDB_ZoomFromScale(scaleDenominator numeric) +CREATE OR REPLACE FUNCTION @extschema@.CDB_ZoomFromScale(scaleDenominator numeric) RETURNS int LANGUAGE SQL IMMUTABLE PARALLEL SAFE @@ -24,12 +24,12 @@ AS $$ NULL WHEN scaleDenominator = 0 THEN -- Actual zoom level would be infinite - _CDB_MaxSupportedZoom() + @extschema@._CDB_MaxSupportedZoom() ELSE CAST ( LEAST( ROUND(LOG(2, 559082264.028/scaleDenominator)), - _CDB_MaxSupportedZoom() + @extschema@._CDB_MaxSupportedZoom() ) AS INTEGER) END; diff --git a/util/create_from_unpackaged.sh b/util/create_from_unpackaged.sh index 109c9ae..9e2d64c 100755 --- a/util/create_from_unpackaged.sh +++ b/util/create_from_unpackaged.sh @@ -23,9 +23,9 @@ cat ${input} | grep -v 'duplicated extension$' >> ${output} # Migrate CDB_TableMetadata cat >> ${output} <<'EOF' -ALTER TABLE cartodb.CDB_TableMetadata DISABLE TRIGGER ALL; -INSERT INTO cartodb.CDB_TableMetadata SELECT * FROM public.CDB_TableMetadata; -ALTER TABLE cartodb.CDB_TableMetadata ENABLE TRIGGER ALL; +ALTER TABLE @extschema@.CDB_TableMetadata DISABLE TRIGGER ALL; +INSERT INTO @extschema@.CDB_TableMetadata SELECT * FROM public.CDB_TableMetadata; +ALTER TABLE @extschema@.CDB_TableMetadata ENABLE TRIGGER ALL; DROP TABLE public.CDB_TableMetadata; -- Set user quota @@ -40,7 +40,7 @@ BEGIN EXCEPTION WHEN undefined_function THEN RAISE EXCEPTION 'Please set user quota before switching to cartodb extension'; END; - PERFORM cartodb.CDB_SetUserQuotaInBytes(qmax); + PERFORM @extschema@.CDB_SetUserQuotaInBytes(qmax); DROP FUNCTION public._CDB_UserQuotaInBytes(); END; $$ LANGUAGE 'plpgsql'; @@ -49,7 +49,7 @@ EOF ## Cartodbfy tables with a trigger using 'CDB_CheckQuota' or ## 'CDB_TableMetadata_Trigger' from the 'public' schema #cat >> ${output} <<'EOF' -#select cartodb.CDB_CartodbfyTable(relname::regclass) from ( +#select @extschema@.CDB_CartodbfyTable(relname::regclass) from ( # -- names of tables using public.CDB_CheckQuota or # -- public.CDB_TableMetadata_Trigger in their triggers # SELECT distinct c.relname