Jan Wieck wieck at lists.slony.info
Wed May 9 06:39:18 PDT 2007
Update of /home/cvsd/slony1/slony1-engine/src/xxid
In directory main.slony.info:/tmp/cvs-serv11860

Modified Files:
	xxid.c 
Log Message:
Fix the xxid_snapshot for 8.3's packed varlena headers.

Jan


Index: xxid.c
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/src/xxid/xxid.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** xxid.c	22 Jun 2006 14:14:42 -0000	1.12
--- xxid.c	9 May 2007 13:39:16 -0000	1.13
***************
*** 24,27 ****
--- 24,37 ----
  #endif
  
+ #ifndef SET_VARSIZE
+ #define SET_VARSIZE(PTR,len) (*((uint32 *)(PTR)) = (len) & 0x3FFFFFFF)
+ #endif
+ #ifndef VARDATA_ANY
+ #define VARDATA_ANY(PTR) VARDATA(PTR)
+ #endif
+ #ifndef PG_DETOAST_DATUM_PACKED
+ #define PG_DETOAST_DATUM_PACKED(X) PG_DETOAST_DATUM(X)
+ #endif
+ 
  #ifndef PG_GETARG_TRANSACTIONID
  #define PG_GETARG_TRANSACTIONID(n)	DatumGetTransactionId(PG_GETARG_DATUM(n))
***************
*** 34,38 ****
  typedef struct
  {
- 	int32		varsz;
  	TransactionId xmin;
  	TransactionId xmax;
--- 44,47 ----
***************
*** 261,264 ****
--- 270,274 ----
  	TransactionId xmin;
  	TransactionId xmax;
+ 	void		 *result;
  	xxid_snapshot *snap;
  	int			size;
***************
*** 318,323 ****
  
  	size = offsetof(xxid_snapshot, xip) + sizeof(TransactionId) * a_used;
! 	snap = (xxid_snapshot *) palloc(size);
! 	snap->varsz = size;
  	snap->xmin = xmin;
  	snap->xmax = xmax;
--- 328,334 ----
  
  	size = offsetof(xxid_snapshot, xip) + sizeof(TransactionId) * a_used;
! 	result = (void *) palloc(size + VARHDRSZ);
! 	SET_VARSIZE(result, size + VARHDRSZ);
! 	snap = (xxid_snapshot *) VARDATA(result);
  	snap->xmin = xmin;
  	snap->xmax = xmax;
***************
*** 326,330 ****
  		memcpy(&(snap->xip[0]), xip, sizeof(TransactionId) * a_used);
  
! 	PG_RETURN_POINTER(snap);
  }
  
--- 337,341 ----
  		memcpy(&(snap->xip[0]), xip, sizeof(TransactionId) * a_used);
  
! 	PG_RETURN_POINTER(result);
  }
  
***************
*** 336,340 ****
  _Slony_I_xxid_snapshot_out(PG_FUNCTION_ARGS)
  {
! 	xxid_snapshot *snap = (xxid_snapshot *) PG_GETARG_VARLENA_P(0);
  
  	char	   *str = palloc(28 + snap->nxip * 13);
--- 347,351 ----
  _Slony_I_xxid_snapshot_out(PG_FUNCTION_ARGS)
  {
! 	xxid_snapshot *snap = (xxid_snapshot *) VARDATA_ANY(PG_DETOAST_DATUM_PACKED((PG_GETARG_DATUM(0))));
  
  	char	   *str = palloc(28 + snap->nxip * 13);
***************
*** 364,368 ****
  {
  	TransactionId value = PG_GETARG_TRANSACTIONID(0);
! 	xxid_snapshot *snap = (xxid_snapshot *) PG_GETARG_VARLENA_P(1);
  	int			i;
  
--- 375,379 ----
  {
  	TransactionId value = PG_GETARG_TRANSACTIONID(0);
! 	xxid_snapshot *snap = (xxid_snapshot *) VARDATA_ANY(PG_DETOAST_DATUM_PACKED((PG_GETARG_DATUM(1))));
  	int			i;
  
***************
*** 390,394 ****
  {
  	TransactionId value = PG_GETARG_TRANSACTIONID(0);
! 	xxid_snapshot *snap = (xxid_snapshot *) PG_GETARG_VARLENA_P(1);
  	int			i;
  
--- 401,405 ----
  {
  	TransactionId value = PG_GETARG_TRANSACTIONID(0);
! 	xxid_snapshot *snap = (xxid_snapshot *) VARDATA_ANY(PG_DETOAST_DATUM_PACKED((PG_GETARG_DATUM(1))));
  	int			i;
  



More information about the Slony1-commit mailing list