bdr: Correct parameter types for bdr_get_local_nodeid()
authorCraig Ringer <craig@2ndquadrant.com>
Tue, 3 Feb 2015 00:18:27 +0000 (11:18 +1100)
committerCraig Ringer <craig@2ndquadrant.com>
Wed, 4 Feb 2015 12:24:39 +0000 (23:24 +1100)
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
bdr--0.8.0.6--0.8.0.7.sql [new file with mode: 0644]
bdr.c
bdr.control
expected/upgrade.out
sql/upgrade.sql

index eaf84c55992bdaec97b6b504c5b179999defe1fc..4955f6c5255ff0cd4c62bb9577c6b598d68c4aeb 100644 (file)
@@ -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 (file)
index 0000000..77902eb
--- /dev/null
@@ -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 a05b5ea4571712e1a418c3b3c2557ca3a328b37e..e1e19d5640863d44bb07ad4a2b39f1b5228a4a96 100644 (file)
--- 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);
 
index c4758fe4b14356e9e7ed820dfc90f0c30bea35e9..51ad065e64164049dfd45c97e6f5e537836a412b 100644 (file)
@@ -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
index 55fc27972c94895496c02d0ceead0068143b8f22..d3388c62577839f7df32d1a3b7766f82bd1f5ec5 100644 (file)
@@ -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;
index 4275ffa25ad3493789c9d425717b10a3de4d644a..a757d757be36583d5a7ec28b88095d99a0f36a1a 100644 (file)
@@ -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.