~ubuntu-branches/ubuntu/maverick/slony1/maverick

« back to all changes in this revision

Viewing changes to src/xxid/xxid.c

  • Committer: Bazaar Package Importer
  • Author(s): Peter Eisentraut
  • Date: 2007-09-05 11:01:55 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20070905110155-fy18zbv3jn9bnvfg
Tags: 1.2.11-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 *      Copyright (c) 2003-2004, PostgreSQL Global Development Group
7
7
 *      Author: Jan Wieck, Afilias USA INC.
8
8
 *
9
 
 *      $Id: xxid.c,v 1.12 2006-06-22 14:14:42 darcyb Exp $
 
9
 *      $Id: xxid.c,v 1.12.2.3 2007-05-14 22:04:49 wieck Exp $
10
10
 *-------------------------------------------------------------------------
11
11
 */
12
12
 
23
23
PG_MODULE_MAGIC;
24
24
#endif
25
25
 
 
26
/* -- Change from PostgreSQL Ver 8.3 -- */
 
27
#if !((PG_VERSION_MAJOR > 8) || ((PG_VERSION_MAJOR == 8) && (PG_VERSION_MINOR >= 3)))
 
28
#define SET_VARSIZE(datum, size) (VARATT_SIZEP(datum)=(size))
 
29
#endif
 
30
 
 
31
 
26
32
#ifndef PG_GETARG_TRANSACTIONID
27
33
#define PG_GETARG_TRANSACTIONID(n)      DatumGetTransactionId(PG_GETARG_DATUM(n))
28
34
#endif
33
39
 
34
40
typedef struct
35
41
{
36
 
        int32           varsz;
37
42
        TransactionId xmin;
38
43
        TransactionId xmax;
39
44
        int                     nxip;
260
265
        int                     a_used = 0;
261
266
        TransactionId xmin;
262
267
        TransactionId xmax;
 
268
        void             *result;
263
269
        xxid_snapshot *snap;
264
270
        int                     size;
265
271
 
317
323
        }
318
324
 
319
325
        size = offsetof(xxid_snapshot, xip) + sizeof(TransactionId) * a_used;
320
 
        snap = (xxid_snapshot *) palloc(size);
321
 
        snap->varsz = size;
 
326
        result = (void *) palloc(size + VARHDRSZ);
 
327
        SET_VARSIZE(result, size + VARHDRSZ);
 
328
        snap = (xxid_snapshot *) VARDATA(result);
322
329
        snap->xmin = xmin;
323
330
        snap->xmax = xmax;
324
331
        snap->nxip = a_used;
325
332
        if (a_used > 0)
326
333
                memcpy(&(snap->xip[0]), xip, sizeof(TransactionId) * a_used);
327
334
 
328
 
        PG_RETURN_POINTER(snap);
 
335
        PG_RETURN_POINTER(result);
329
336
}
330
337
 
331
338
 
335
342
Datum
336
343
_Slony_I_xxid_snapshot_out(PG_FUNCTION_ARGS)
337
344
{
338
 
        xxid_snapshot *snap = (xxid_snapshot *) PG_GETARG_VARLENA_P(0);
 
345
        xxid_snapshot *snap = (xxid_snapshot *) VARDATA(PG_DETOAST_DATUM((PG_GETARG_DATUM(0))));
339
346
 
340
347
        char       *str = palloc(28 + snap->nxip * 13);
341
348
        char       *cp = str;
363
370
_Slony_I_xxid_lt_snapshot(PG_FUNCTION_ARGS)
364
371
{
365
372
        TransactionId value = PG_GETARG_TRANSACTIONID(0);
366
 
        xxid_snapshot *snap = (xxid_snapshot *) PG_GETARG_VARLENA_P(1);
 
373
        xxid_snapshot *snap = (xxid_snapshot *) VARDATA(PG_DETOAST_DATUM((PG_GETARG_DATUM(1))));
367
374
        int                     i;
368
375
 
369
376
        if (TransactionIdPrecedes(value, snap->xmin))
389
396
_Slony_I_xxid_ge_snapshot(PG_FUNCTION_ARGS)
390
397
{
391
398
        TransactionId value = PG_GETARG_TRANSACTIONID(0);
392
 
        xxid_snapshot *snap = (xxid_snapshot *) PG_GETARG_VARLENA_P(1);
 
399
        xxid_snapshot *snap = (xxid_snapshot *) VARDATA(PG_DETOAST_DATUM((PG_GETARG_DATUM(1))));
393
400
        int                     i;
394
401
 
395
402
        if (TransactionIdEquals(value, snap->xmax))