From c0102c035e4b13c24e83a75b4c824093a6700bcb Mon Sep 17 00:00:00 2001 From: Craig Ringer Date: Tue, 3 Feb 2015 11:18:27 +1100 Subject: [PATCH] bdr: Correct parameter types for bdr_get_local_nodeid() bdr_get_local_nodeid() was returning 'oid' for sysid, but it's a uint64 that won't fit that type's width. Use 'text'. --- Makefile.in | 12 ++++++++++-- bdr--0.8.0.6--0.8.0.7.sql | 14 ++++++++++++++ bdr.c | 6 +++++- bdr.control | 4 ++-- expected/upgrade.out | 5 ++++- sql/upgrade.sql | 4 ++++ 6 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 bdr--0.8.0.6--0.8.0.7.sql diff --git a/Makefile.in b/Makefile.in index eaf84c5599..4955f6c525 100644 --- a/Makefile.in +++ b/Makefile.in @@ -12,10 +12,12 @@ DATA = bdr--0.8.0.sql \ bdr--0.8.0.2--0.8.0.3.sql \ bdr--0.8.0.3--0.8.0.4.sql \ bdr--0.8.0.4--0.8.0.5.sql \ - bdr--0.8.0.5--0.8.0.6.sql + bdr--0.8.0.5--0.8.0.6.sql \ + bdr--0.8.0.6--0.8.0.7.sql DATA_built = bdr--0.8.0.1.sql bdr--0.8.0.2.sql bdr--0.8.0.3.sql \ - bdr--0.8.0.4.sql bdr--0.8.0.5.sql bdr--0.8.0.6.sql + bdr--0.8.0.4.sql bdr--0.8.0.5.sql bdr--0.8.0.6.sql \ + bdr--0.8.0.7.sql DOCS = bdr.conf.sample README.bdr SCRIPTS = scripts/bdr_initial_load bdr_init_copy bdr_resetxlog bdr_dump @@ -121,6 +123,12 @@ bdr--0.8.0.6.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql \ bdr--0.8.0.5--0.8.0.6.sql cat $^ > $@ +bdr--0.8.0.7.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql \ + bdr--0.8.0.1--0.8.0.2.sql bdr--0.8.0.2--0.8.0.3.sql \ + bdr--0.8.0.3--0.8.0.4.sql bdr--0.8.0.4--0.8.0.5.sql \ + bdr--0.8.0.5--0.8.0.6.sql bdr--0.8.0.6--0.8.0.7.sql + cat $^ > $@ + bdr_resetxlog: pg_resetxlog.o $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(libpq_pgport) $(LIBS) -o $@$(X) diff --git a/bdr--0.8.0.6--0.8.0.7.sql b/bdr--0.8.0.6--0.8.0.7.sql new file mode 100644 index 0000000000..77902eb20b --- /dev/null +++ b/bdr--0.8.0.6--0.8.0.7.sql @@ -0,0 +1,14 @@ +SET LOCAL search_path = bdr; +SET LOCAL bdr.permit_unsafe_ddl_commands = true; +SET LOCAL bdr.skip_ddl_replication = true; + +DROP FUNCTION bdr_get_local_nodeid( sysid OUT oid, timeline OUT oid, dboid OUT oid); + +CREATE FUNCTION bdr_get_local_nodeid( sysid OUT text, timeline OUT oid, dboid OUT oid) +RETURNS record LANGUAGE c AS 'MODULE_PATHNAME'; + +-- bdr_get_local_nodeid is intentionally not revoked from all, it's read-only + +RESET bdr.permit_unsafe_ddl_commands; +RESET bdr.skip_ddl_replication; +RESET search_path; diff --git a/bdr.c b/bdr.c index a05b5ea457..e1e19d5640 100644 --- a/bdr.c +++ b/bdr.c @@ -1653,11 +1653,15 @@ bdr_get_local_nodeid(PG_FUNCTION_ARGS) bool isnull[3] = {false, false, false}; TupleDesc tupleDesc; HeapTuple returnTuple; + char sysid_str[33]; if (get_call_result_type(fcinfo, NULL, &tupleDesc) != TYPEFUNC_COMPOSITE) elog(ERROR, "return type must be a row type"); - values[0] = ObjectIdGetDatum(GetSystemIdentifier()); + snprintf(sysid_str, sizeof(sysid_str), UINT64_FORMAT, GetSystemIdentifier()); + sysid_str[sizeof(sysid_str)-1] = '\0'; + + values[0] = CStringGetTextDatum(sysid_str); values[1] = ObjectIdGetDatum(ThisTimeLineID); values[2] = ObjectIdGetDatum(MyDatabaseId); diff --git a/bdr.control b/bdr.control index c4758fe4b1..51ad065e64 100644 --- a/bdr.control +++ b/bdr.control @@ -1,6 +1,6 @@ # bdr extension -comment = 'bdr support functions' -default_version = '0.8.0.6' +comment = 'Bi-directional replication for PostgreSQL' +default_version = '0.8.0.7' module_pathname = '$libdir/bdr' relocatable = false requires = btree_gist diff --git a/expected/upgrade.out b/expected/upgrade.out index 55fc27972c..d3388c6257 100644 --- a/expected/upgrade.out +++ b/expected/upgrade.out @@ -21,6 +21,8 @@ CREATE EXTENSION bdr VERSION '0.8.0.5'; DROP EXTENSION bdr; CREATE EXTENSION bdr VERSION '0.8.0.6'; DROP EXTENSION bdr; +CREATE EXTENSION bdr VERSION '0.8.0.7'; +DROP EXTENSION bdr; -- evolve version one by one from the oldest to the newest one CREATE EXTENSION bdr VERSION '0.8.0'; ALTER EXTENSION bdr UPDATE TO '0.8.0.1'; @@ -29,8 +31,9 @@ ALTER EXTENSION bdr UPDATE TO '0.8.0.3'; ALTER EXTENSION bdr UPDATE TO '0.8.0.4'; ALTER EXTENSION bdr UPDATE TO '0.8.0.5'; ALTER EXTENSION bdr UPDATE TO '0.8.0.6'; +ALTER EXTENSION bdr UPDATE TO '0.8.0.7'; -- Should never have to do anything: You missed adding the new version above. ALTER EXTENSION bdr UPDATE; -NOTICE: version "0.8.0.6" of extension "bdr" is already installed +NOTICE: version "0.8.0.7" of extension "bdr" is already installed \c postgres DROP DATABASE extension_upgrade; diff --git a/sql/upgrade.sql b/sql/upgrade.sql index 4275ffa25a..a757d757be 100644 --- a/sql/upgrade.sql +++ b/sql/upgrade.sql @@ -30,6 +30,9 @@ DROP EXTENSION bdr; CREATE EXTENSION bdr VERSION '0.8.0.6'; DROP EXTENSION bdr; +CREATE EXTENSION bdr VERSION '0.8.0.7'; +DROP EXTENSION bdr; + -- evolve version one by one from the oldest to the newest one CREATE EXTENSION bdr VERSION '0.8.0'; ALTER EXTENSION bdr UPDATE TO '0.8.0.1'; @@ -38,6 +41,7 @@ ALTER EXTENSION bdr UPDATE TO '0.8.0.3'; ALTER EXTENSION bdr UPDATE TO '0.8.0.4'; ALTER EXTENSION bdr UPDATE TO '0.8.0.5'; ALTER EXTENSION bdr UPDATE TO '0.8.0.6'; +ALTER EXTENSION bdr UPDATE TO '0.8.0.7'; -- Should never have to do anything: You missed adding the new version above. -- 2.39.5