From f2fed2415d88533aa1de78afb2838c1a7cf0d897 Mon Sep 17 00:00:00 2001 From: Masahiko Sakamoto Date: Tue, 1 May 2012 06:11:49 +0000 Subject: [PATCH] Fixes for 9.2devel. reported by Josh. - Since 9.2, RenameRelationInternal() has changed its signature. - In CREATE FUNCTION, LANGUAGE clause does not accept string. --- lib/pg_reorg.sql.in | 16 ++++++++-------- lib/reorg.c | 31 +++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/lib/pg_reorg.sql.in b/lib/pg_reorg.sql.in index 7600ba0..b836130 100755 --- a/lib/pg_reorg.sql.in +++ b/lib/pg_reorg.sql.in @@ -14,7 +14,7 @@ CREATE SCHEMA reorg; CREATE FUNCTION reorg.version() RETURNS text AS 'MODULE_PATHNAME', 'reorg_version' -LANGUAGE 'C' IMMUTABLE STRICT; +LANGUAGE C IMMUTABLE STRICT; CREATE AGGREGATE reorg.array_accum ( sfunc = array_append, @@ -46,7 +46,7 @@ LANGUAGE sql STABLE STRICT; CREATE FUNCTION reorg.get_index_keys(oid, oid) RETURNS text AS 'MODULE_PATHNAME', 'reorg_get_index_keys' -LANGUAGE 'C' STABLE STRICT; +LANGUAGE C STABLE STRICT; CREATE FUNCTION reorg.get_create_index_type(oid, name) RETURNS text AS $$ @@ -196,11 +196,11 @@ CREATE VIEW reorg.tables AS CREATE FUNCTION reorg.reorg_indexdef(oid, oid) RETURNS text AS 'MODULE_PATHNAME', 'reorg_indexdef' -LANGUAGE 'C' STABLE STRICT; +LANGUAGE C STABLE STRICT; CREATE FUNCTION reorg.reorg_trigger() RETURNS trigger AS 'MODULE_PATHNAME', 'reorg_trigger' -LANGUAGE 'C' VOLATILE STRICT SECURITY DEFINER; +LANGUAGE C VOLATILE STRICT SECURITY DEFINER; CREATE FUNCTION reorg.conflicted_triggers(oid) RETURNS SETOF name AS $$ @@ -211,7 +211,7 @@ LANGUAGE sql STABLE STRICT; CREATE FUNCTION reorg.disable_autovacuum(regclass) RETURNS void AS 'MODULE_PATHNAME', 'reorg_disable_autovacuum' -LANGUAGE 'C' VOLATILE STRICT; +LANGUAGE C VOLATILE STRICT; CREATE FUNCTION reorg.reorg_apply( sql_peek cstring, @@ -222,14 +222,14 @@ CREATE FUNCTION reorg.reorg_apply( count integer) RETURNS integer AS 'MODULE_PATHNAME', 'reorg_apply' -LANGUAGE 'C' VOLATILE; +LANGUAGE C VOLATILE; CREATE FUNCTION reorg.reorg_swap(oid) RETURNS void AS 'MODULE_PATHNAME', 'reorg_swap' -LANGUAGE 'C' VOLATILE STRICT; +LANGUAGE C VOLATILE STRICT; CREATE FUNCTION reorg.reorg_drop(oid) RETURNS void AS 'MODULE_PATHNAME', 'reorg_drop' -LANGUAGE 'C' VOLATILE STRICT; +LANGUAGE C VOLATILE STRICT; COMMIT; diff --git a/lib/reorg.c b/lib/reorg.c index 47da889..d2bb776 100755 --- a/lib/reorg.c +++ b/lib/reorg.c @@ -70,10 +70,25 @@ must_be_superuser(const char *func) elog(ERROR, "must be superuser to use %s function", func); } + +/* Include an implementation of RenameRelationInternal for old + * versions which don't have one. + */ #if PG_VERSION_NUM < 80400 static void RenameRelationInternal(Oid myrelid, const char *newrelname, Oid namespaceId); #endif + +/* The API of RenameRelationInternal() was changed in 9.2. + * Use the RENAME_REL macro for compatibility across versions. + */ +#if PG_VERSION_NUM < 90200 +#define RENAME_REL(relid, newrelname) RenameRelationInternal(relid, newrelname, PG_TOAST_NAMESPACE); +#else +#define RENAME_REL(relid, newrelname) RenameRelationInternal(relid, newrelname); +#endif + + Datum reorg_version(PG_FUNCTION_ARGS) { @@ -730,9 +745,9 @@ reorg_swap(PG_FUNCTION_ARGS) /* rename X to Y */ snprintf(name, NAMEDATALEN, "pg_toast_%u", oid2); - RenameRelationInternal(reltoastrelid1, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastrelid1, name); snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid2); - RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastidxid1, name); CommandCounterIncrement(); } else if (reltoastrelid1 != InvalidOid) @@ -742,23 +757,23 @@ reorg_swap(PG_FUNCTION_ARGS) /* rename X to TEMP */ snprintf(name, NAMEDATALEN, "pg_toast_pid%d", pid); - RenameRelationInternal(reltoastrelid1, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastrelid1, name); snprintf(name, NAMEDATALEN, "pg_toast_pid%d_index", pid); - RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastidxid1, name); CommandCounterIncrement(); /* rename Y to X */ snprintf(name, NAMEDATALEN, "pg_toast_%u", oid); - RenameRelationInternal(reltoastrelid2, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastrelid2, name); snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid); - RenameRelationInternal(reltoastidxid2, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastidxid2, name); CommandCounterIncrement(); /* rename TEMP to Y */ snprintf(name, NAMEDATALEN, "pg_toast_%u", oid2); - RenameRelationInternal(reltoastrelid1, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastrelid1, name); snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid2); - RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE); + RENAME_REL(reltoastidxid1, name); CommandCounterIncrement(); }