--- lib/rserv.c 2003/08/06 16:14:53 1.3 +++ lib/rserv.c 2003/11/03 21:30:37 1.5 @@ -3,10 +3,10 @@ * (c) 2000 Vadim Mikheev, PostgreSQL Inc. */ -#include "executor/spi.h" /* this is what you need to work with SPI */ +#include "executor/spi.h" /* this is what you need to work with SPI */ #include "commands/trigger.h" /* -"- and triggers */ -#include "utils/tqual.h" /* -"- and SnapshotData */ -#include /* tolower () */ +#include "utils/tqual.h" /* -"- and SnapshotData */ +#include /* tolower () */ #ifdef PG_FUNCTION_INFO_V1 #define CurrentTriggerData ((TriggerData *) fcinfo->context) @@ -16,14 +16,17 @@ PG_FUNCTION_INFO_V1(_rserv_log_); PG_FUNCTION_INFO_V1(_rserv_sync_); PG_FUNCTION_INFO_V1(_rserv_debug_); +PG_FUNCTION_INFO_V1(_rserv_xid_); Datum _rserv_log_(PG_FUNCTION_ARGS); Datum _rserv_sync_(PG_FUNCTION_ARGS); Datum _rserv_debug_(PG_FUNCTION_ARGS); +Datum _rserv_xid_(PG_FUNCTION_ARGS); #else HeapTuple _rserv_log_(void); int32 _rserv_sync_(int32); int32 _rserv_debug_(int32); +int32 _rserv_xid_(void); #endif static int debug = 0; @@ -54,6 +57,7 @@ char outbuf[8192]; char oidbuf[64]; int ret; + int server; /* Called by trigger manager ? */ if (!CurrentTriggerData) @@ -69,10 +73,11 @@ nargs = trigger->tgnargs; args = trigger->tgargs; - if (nargs != 1) /* odd number of arguments! */ - elog(ERROR, "_rserv_log_: need in *one* argument"); + if (nargs != 2) /* odd number of arguments! */ + elog(ERROR, "_rserv_log_: need in *two* arguments, key number and server number"); keynum = atoi(args[0]); + server = atoi(args[1]); if (keynum < 0 && keynum != ObjectIdAttributeNumber) elog(ERROR, "_rserv_log_: invalid keynum %d", keynum); @@ -152,10 +157,10 @@ else if (SPI_processed == 0) { snprintf(sql, 8192, "insert into _RSERV_LOG_ " - "(reloid, logid, logtime, insert, update, delete, key) " - "values (%u, %d, now(), %d, %d, %d, '%s')", + "(reloid, logid, logtime, insert, update, delete, key, server) " + "values (%u, %d, now(), %d, %d, %d, '%s', %d)", rel->rd_id, GetCurrentTransactionId(), - inserted, updated, deleted, okey); + inserted, updated, deleted, okey, server); if (debug) elog(DEBUG3, "sql: %s", sql); @@ -177,9 +182,9 @@ okey = newkey; snprintf(sql, 8192, "insert into _RSERV_LOG_ " - "(reloid, logid, logtime, insert, update, deleted, key) " - "values (%u, %d, now(), %d, %d, 0, '%s')", - rel->rd_id, GetCurrentTransactionId(), inserted, updated, okey); + "(reloid, logid, logtime, insert, update, deleted, key, server) " + "values (%u, %d, now(), %d, %d, 0, '%s', %d)", + rel->rd_id, GetCurrentTransactionId(), inserted, updated, okey, server); if (debug) elog(DEBUG3, "sql: %s", sql); @@ -333,3 +338,17 @@ return (out); } + +#ifdef PG_FUNCTION_INFO_V1 +Datum +_rserv_xid_(PG_FUNCTION_ARGS) +#else +int32 +_rserv_xid_(void) +#endif +{ + int32 curr_xid = GetCurrentTransactionId(); + + return (curr_xid); +} +