Fix up several contrib modules that were using varlena datatypes in not-so-obvious
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Feb 2007 22:44:38 +0000 (22:44 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Feb 2007 22:44:38 +0000 (22:44 +0000)
ways.  I'm not totally sure that I caught everything, but at least now they pass
their regression tests with VARSIZE/SET_VARSIZE defined to reverse byte order.

24 files changed:
contrib/hstore/hstore.h
contrib/hstore/hstore_gist.c
contrib/hstore/hstore_io.c
contrib/hstore/hstore_op.c
contrib/intarray/_int.h
contrib/intarray/_int_bool.c
contrib/intarray/_intbig_gist.c
contrib/ltree/_ltree_gist.c
contrib/ltree/_ltree_op.c
contrib/ltree/ltree.h
contrib/ltree/ltree_gist.c
contrib/ltree/ltree_io.c
contrib/ltree/ltree_op.c
contrib/ltree/ltxtquery_io.c
contrib/pg_trgm/trgm.h
contrib/pg_trgm/trgm_gist.c
contrib/pg_trgm/trgm_op.c
contrib/tsearch2/gistidx.c
contrib/tsearch2/gistidx.h
contrib/tsearch2/query.c
contrib/tsearch2/query.h
contrib/tsearch2/query_rewrite.c
contrib/tsearch2/query_support.c
contrib/tsearch2/query_util.c

index 20ae203416a38abbbe0a9082e9185365c8578387..a601906764b0be30794a67b922f5acbbc64c7173 100644 (file)
@@ -2,6 +2,7 @@
 #define __HSTORE_H__
 
 #include "postgres.h"
+
 #include "funcapi.h"
 #include "access/gist.h"
 #include "access/itup.h"
@@ -23,12 +24,12 @@ typedef struct
 
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    int4        size;
    char        data[1];
 }  HStore;
 
-#define HSHRDSIZE  (2*sizeof(int4))
+#define HSHRDSIZE  (VARHDRSZ + sizeof(int4))
 #define CALCDATASIZE(x, lenstr) ( (x) * sizeof(HEntry) + HSHRDSIZE + (lenstr) )
 #define ARRPTR(x)      ( (HEntry*) ( (char*)(x) + HSHRDSIZE ) )
 #define STRPTR(x)      ( (char*)(x) + HSHRDSIZE + ( sizeof(HEntry) * ((HStore*)x)->size ) )
index 4220a5541d193f09bbbfe552e0d8671f6d3f746e..c3923dacf253e48785d072d42c5ae5c8bab6f5cb 100644 (file)
@@ -2,7 +2,6 @@
 
 #include "access/gist.h"
 #include "access/itup.h"
-/*#include "access/rtree.h"*/
 #include "crc32.h"
 
 /* bigint defines */
@@ -38,7 +37,7 @@ typedef char *BITVECP;
 
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    int4        flag;
    char        data[1];
 }  GISTTYPE;
@@ -47,7 +46,7 @@ typedef struct
 
 #define ISALLTRUE(x)   ( ((GISTTYPE*)x)->flag & ALLISTRUE )
 
-#define GTHDRSIZE      ( sizeof(int4)*2  )
+#define GTHDRSIZE      (VARHDRSZ + sizeof(int4))
 #define CALCGTSIZE(flag) ( GTHDRSIZE+(((flag) & ALLISTRUE) ? 0 : SIGLEN) )
 
 #define GETSIGN(x)     ( (BITVECP)( (char*)x+GTHDRSIZE ) )
@@ -112,14 +111,13 @@ ghstore_compress(PG_FUNCTION_ARGS)
 
    if (entry->leafkey)
    {
-       GISTTYPE   *res = (GISTTYPE *) palloc(CALCGTSIZE(0));
+       GISTTYPE   *res = (GISTTYPE *) palloc0(CALCGTSIZE(0));
        HStore     *toastedval = (HStore *) DatumGetPointer(entry->key);
        HStore     *val = (HStore *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
        HEntry     *ptr = ARRPTR(val);
        char       *words = STRPTR(val);
 
-       memset(res, 0, CALCGTSIZE(0));
-       res->len = CALCGTSIZE(0);
+       SET_VARSIZE(res, CALCGTSIZE(0));
 
        while (ptr - ARRPTR(val) < val->size)
        {
@@ -156,7 +154,7 @@ ghstore_compress(PG_FUNCTION_ARGS)
        );
 
        res = (GISTTYPE *) palloc(CALCGTSIZE(ALLISTRUE));
-       res->len = CALCGTSIZE(ALLISTRUE);
+       SET_VARSIZE(res, CALCGTSIZE(ALLISTRUE));
        res->flag = ALLISTRUE;
 
        retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
@@ -286,10 +284,11 @@ ghstore_union(PG_FUNCTION_ARGS)
 
    len = CALCGTSIZE(flag);
    result = (GISTTYPE *) palloc(len);
-   *size = result->len = len;
+   SET_VARSIZE(result, len);
    result->flag = flag;
    if (!ISALLTRUE(result))
        memcpy((void *) GETSIGN(result), (void *) base, sizeof(BITVEC));
+   *size = len;
 
    PG_RETURN_POINTER(result);
 }
@@ -383,13 +382,13 @@ ghstore_picksplit(PG_FUNCTION_ARGS)
    if (ISALLTRUE(GETENTRY(entryvec, seed_1)))
    {
        datum_l = (GISTTYPE *) palloc(GTHDRSIZE);
-       datum_l->len = GTHDRSIZE;
+       SET_VARSIZE(datum_l, GTHDRSIZE);
        datum_l->flag = ALLISTRUE;
    }
    else
    {
        datum_l = (GISTTYPE *) palloc(GTHDRSIZE + SIGLEN);
-       datum_l->len = GTHDRSIZE + SIGLEN;
+       SET_VARSIZE(datum_l, GTHDRSIZE + SIGLEN);
        datum_l->flag = 0;
        memcpy((void *) GETSIGN(datum_l), (void *) GETSIGN(GETENTRY(entryvec, seed_1)), sizeof(BITVEC))
            ;
@@ -397,13 +396,13 @@ ghstore_picksplit(PG_FUNCTION_ARGS)
    if (ISALLTRUE(GETENTRY(entryvec, seed_2)))
    {
        datum_r = (GISTTYPE *) palloc(GTHDRSIZE);
-       datum_r->len = GTHDRSIZE;
+       SET_VARSIZE(datum_r, GTHDRSIZE);
        datum_r->flag = ALLISTRUE;
    }
    else
    {
        datum_r = (GISTTYPE *) palloc(GTHDRSIZE + SIGLEN);
-       datum_r->len = GTHDRSIZE + SIGLEN;
+       SET_VARSIZE(datum_r, GTHDRSIZE + SIGLEN);
        datum_r->flag = 0;
        memcpy((void *) GETSIGN(datum_r), (void *) GETSIGN(GETENTRY(entryvec, seed_2)), sizeof(BITVEC));
    }
index ac5df492239d197904453a603c2b7c285fa258df..6a395a2b867767c8ba96c5cc8d7eaa3bc8b0b52c 100644 (file)
@@ -363,7 +363,7 @@ hstore_in(PG_FUNCTION_ARGS)
        freeHSParse(&state);
        len = CALCDATASIZE(0, 0);
        out = palloc(len);
-       out->len = len;
+       SET_VARSIZE(out, len);
        out->size = 0;
        PG_RETURN_POINTER(out);
    }
@@ -372,7 +372,7 @@ hstore_in(PG_FUNCTION_ARGS)
 
    len = CALCDATASIZE(state.pcur, buflen);
    out = palloc(len);
-   out->len = len;
+   SET_VARSIZE(out, len);
    out->size = state.pcur;
 
    entries = ARRPTR(out);
@@ -436,7 +436,7 @@ hstore_out(PG_FUNCTION_ARGS)
    }
 
    buflen = (4 /* " */ + 2 /* => */ + 2 /* , */ ) * in->size +
-       2 /* esc */ * (in->len - CALCDATASIZE(in->size, 0));
+       2 /* esc */ * (VARSIZE(in) - CALCDATASIZE(in->size, 0));
 
    out = ptr = palloc(buflen);
    for (i = 0; i < in->size; i++)
index f16a58988e1e3a1b90402f8ea4731bd8ed04fb33..ef3eb86ca3eaae154ced1b91e84a91b79fa045ec 100644 (file)
@@ -105,13 +105,13 @@ delete(PG_FUNCTION_ARGS)
 {
    HStore     *hs = PG_GETARG_HS(0);
    text       *key = PG_GETARG_TEXT_P(1);
-   HStore     *out = palloc(hs->len);
+   HStore     *out = palloc(VARSIZE(hs));
    char       *ptrs,
               *ptrd;
    HEntry     *es,
               *ed;
 
-   out->len = hs->len;
+   SET_VARSIZE(out, VARSIZE(hs));
    out->size = hs->size;       /* temporary! */
 
    ptrs = STRPTR(hs);
@@ -142,7 +142,7 @@ delete(PG_FUNCTION_ARGS)
        out->size = ed - ARRPTR(out);
 
        memmove(STRPTR(out), ptrd, buflen);
-       out->len = CALCDATASIZE(out->size, buflen);
+       SET_VARSIZE(out, CALCDATASIZE(out->size, buflen));
    }
 
 
@@ -159,7 +159,7 @@ hs_concat(PG_FUNCTION_ARGS)
 {
    HStore     *s1 = PG_GETARG_HS(0);
    HStore     *s2 = PG_GETARG_HS(1);
-   HStore     *out = palloc(s1->len + s2->len);
+   HStore     *out = palloc(VARSIZE(s1) + VARSIZE(s2));
    char       *ps1,
               *ps2,
               *pd;
@@ -167,7 +167,7 @@ hs_concat(PG_FUNCTION_ARGS)
               *es2,
               *ed;
 
-   out->len = s1->len + s2->len;
+   SET_VARSIZE(out, VARSIZE(s1) + VARSIZE(s2));
    out->size = s1->size + s2->size;
 
    ps1 = STRPTR(s1);
@@ -256,7 +256,7 @@ hs_concat(PG_FUNCTION_ARGS)
        out->size = ed - ARRPTR(out);
 
        memmove(STRPTR(out), pd, buflen);
-       out->len = CALCDATASIZE(out->size, buflen);
+       SET_VARSIZE(out, CALCDATASIZE(out->size, buflen));
    }
 
    PG_FREE_IF_COPY(s1, 0);
@@ -277,7 +277,7 @@ tconvert(PG_FUNCTION_ARGS)
 
    len = CALCDATASIZE(1, VARSIZE(key) + VARSIZE(val) - 2 * VARHDRSZ);
    out = palloc(len);
-   out->len = len;
+   SET_VARSIZE(out, len);
    out->size = 1;
 
    ARRPTR(out)->keylen = VARSIZE(key) - VARHDRSZ;
@@ -399,8 +399,8 @@ setup_firstcall(FuncCallContext *funcctx, HStore * hs)
 
    st = (AKStore *) palloc(sizeof(AKStore));
    st->i = 0;
-   st->hs = (HStore *) palloc(hs->len);
-   memcpy(st->hs, hs, hs->len);
+   st->hs = (HStore *) palloc(VARSIZE(hs));
+   memcpy(st->hs, hs, VARSIZE(hs));
 
    funcctx->user_fctx = (void *) st;
    MemoryContextSwitchTo(oldcontext);
@@ -568,8 +568,8 @@ each(PG_FUNCTION_ARGS)
        oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
        st = (AKStore *) palloc(sizeof(AKStore));
        st->i = 0;
-       st->hs = (HStore *) palloc(hs->len);
-       memcpy(st->hs, hs, hs->len);
+       st->hs = (HStore *) palloc(VARSIZE(hs));
+       memcpy(st->hs, hs, VARSIZE(hs));
        funcctx->user_fctx = (void *) st;
 
        tupdesc = RelationNameGetTupleDesc("hs_each");
index cee970d1b1f2251ac4e530a917814c9fe61edcd8..97e6fe642fcac86a6c7c6666314ed0552a4e285b 100644 (file)
@@ -85,7 +85,7 @@ typedef char *BITVECP;
  */
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    int4        flag;
    char        data[1];
 }  GISTTYPE;
@@ -94,7 +94,7 @@ typedef struct
 
 #define ISALLTRUE(x)   ( ((GISTTYPE*)x)->flag & ALLISTRUE )
 
-#define GTHDRSIZE      ( sizeof(int4)*2  )
+#define GTHDRSIZE      (VARHDRSZ + sizeof(int4))
 #define CALCGTSIZE(flag) ( GTHDRSIZE+(((flag) & ALLISTRUE) ? 0 : SIGLEN) )
 
 #define GETSIGN(x)     ( (BITVECP)( (char*)x+GTHDRSIZE ) )
@@ -145,12 +145,12 @@ typedef struct ITEM
 
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    int4        size;
    char        data[1];
 }  QUERYTYPE;
 
-#define HDRSIZEQT  ( 2*sizeof(int4) )
+#define HDRSIZEQT  (VARHDRSZ + sizeof(int4))
 #define COMPUTESIZE(size)  ( HDRSIZEQT + size * sizeof(ITEM) )
 #define GETQUERY(x)  (ITEM*)( (char*)(x)+HDRSIZEQT )
 
index b6a5d1b1e8984d82b37f1665b64cbed765747948..2a9d80bfdbc471cb2267e019c7c5377f1fcba5cf 100644 (file)
@@ -465,7 +465,7 @@ bqarr_in(PG_FUNCTION_ARGS)
 
    commonlen = COMPUTESIZE(state.num);
    query = (QUERYTYPE *) palloc(commonlen);
-   query->len = commonlen;
+   SET_VARSIZE(query, commonlen);
    query->size = state.num;
    ptr = GETQUERY(query);
 
index cb80d8f6f2452cb77df4d8bd7a356dbea2c8aafc..ffbbe71a9563d44f33568387dccdb8595e9d9edc 100644 (file)
@@ -147,7 +147,7 @@ g_intbig_compress(PG_FUNCTION_ARGS)
        ArrayType  *in = (ArrayType *) PG_DETOAST_DATUM(entry->key);
        int4       *ptr;
        int         num;
-       GISTTYPE   *res = (GISTTYPE *) palloc(CALCGTSIZE(0));
+       GISTTYPE   *res = (GISTTYPE *) palloc0(CALCGTSIZE(0));
 
        CHECKARRVALID(in);
        if (ARRISVOID(in))
@@ -160,8 +160,7 @@ g_intbig_compress(PG_FUNCTION_ARGS)
            ptr = ARRPTR(in);
            num = ARRNELEMS(in);
        }
-       memset(res, 0, CALCGTSIZE(0));
-       res->len = CALCGTSIZE(0);
+       SET_VARSIZE(res, CALCGTSIZE(0));
 
        while (num--)
        {
@@ -192,7 +191,7 @@ g_intbig_compress(PG_FUNCTION_ARGS)
        );
 
        res = (GISTTYPE *) palloc(CALCGTSIZE(ALLISTRUE));
-       res->len = CALCGTSIZE(ALLISTRUE);
+       SET_VARSIZE(res, CALCGTSIZE(ALLISTRUE));
        res->flag = ALLISTRUE;
 
        retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
@@ -292,10 +291,11 @@ g_intbig_union(PG_FUNCTION_ARGS)
 
    len = CALCGTSIZE(flag);
    result = (GISTTYPE *) palloc(len);
-   *size = result->len = len;
+   SET_VARSIZE(result, len);
    result->flag = flag;
    if (!ISALLTRUE(result))
        memcpy((void *) GETSIGN(result), (void *) base, sizeof(BITVEC));
+   *size = len;
 
    PG_RETURN_POINTER(result);
 }
@@ -389,26 +389,26 @@ g_intbig_picksplit(PG_FUNCTION_ARGS)
    if (ISALLTRUE(GETENTRY(entryvec, seed_1)))
    {
        datum_l = (GISTTYPE *) palloc(GTHDRSIZE);
-       datum_l->len = GTHDRSIZE;
+       SET_VARSIZE(datum_l, GTHDRSIZE);
        datum_l->flag = ALLISTRUE;
    }
    else
    {
        datum_l = (GISTTYPE *) palloc(GTHDRSIZE + SIGLEN);
-       datum_l->len = GTHDRSIZE + SIGLEN;
+       SET_VARSIZE(datum_l, GTHDRSIZE + SIGLEN);
        datum_l->flag = 0;
        memcpy((void *) GETSIGN(datum_l), (void *) GETSIGN(GETENTRY(entryvec, seed_1)), sizeof(BITVEC));
    }
    if (ISALLTRUE(GETENTRY(entryvec, seed_2)))
    {
        datum_r = (GISTTYPE *) palloc(GTHDRSIZE);
-       datum_r->len = GTHDRSIZE;
+       SET_VARSIZE(datum_r, GTHDRSIZE);
        datum_r->flag = ALLISTRUE;
    }
    else
    {
        datum_r = (GISTTYPE *) palloc(GTHDRSIZE + SIGLEN);
-       datum_r->len = GTHDRSIZE + SIGLEN;
+       SET_VARSIZE(datum_r, GTHDRSIZE + SIGLEN);
        datum_r->flag = 0;
        memcpy((void *) GETSIGN(datum_r), (void *) GETSIGN(GETENTRY(entryvec, seed_2)), sizeof(BITVEC));
    }
index 0bac6475478dc9b34e72ad901ff5d8be6463bab5..4ce8864fb39dae625038965227c8a71187673ce4 100644 (file)
@@ -94,7 +94,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
                     errmsg("array must not contain nulls")));
 
        key = (ltree_gist *) palloc(len);
-       key->len = len;
+       SET_VARSIZE(key, len);
        key->flag = 0;
 
        MemSet(LTG_SIGN(key), 0, ASIGLEN);
@@ -124,7 +124,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
        );
        len = LTG_HDRSIZE;
        key = (ltree_gist *) palloc(len);
-       key->len = len;
+       SET_VARSIZE(key, len);
        key->flag = LTG_ALLTRUE;
 
        retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
@@ -204,10 +204,11 @@ _ltree_union(PG_FUNCTION_ARGS)
 
    len = LTG_HDRSIZE + ((flag & LTG_ALLTRUE) ? 0 : ASIGLEN);
    result = (ltree_gist *) palloc(len);
-   *size = result->len = len;
+   SET_VARSIZE(result, len);
    result->flag = flag;
    if (!LTG_ISALLTRUE(result))
        memcpy((void *) LTG_SIGN(result), (void *) base, sizeof(ABITVEC));
+   *size = len;
 
    PG_RETURN_POINTER(result);
 }
@@ -340,26 +341,26 @@ _ltree_picksplit(PG_FUNCTION_ARGS)
    if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_1)))
    {
        datum_l = (ltree_gist *) palloc(LTG_HDRSIZE);
-       datum_l->len = LTG_HDRSIZE;
+       SET_VARSIZE(datum_l, LTG_HDRSIZE);
        datum_l->flag = LTG_ALLTRUE;
    }
    else
    {
        datum_l = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN);
-       datum_l->len = LTG_HDRSIZE + ASIGLEN;
+       SET_VARSIZE(datum_l, LTG_HDRSIZE + ASIGLEN);
        datum_l->flag = 0;
        memcpy((void *) LTG_SIGN(datum_l), (void *) LTG_SIGN(GETENTRY(entryvec, seed_1)), sizeof(ABITVEC));
    }
    if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_2)))
    {
        datum_r = (ltree_gist *) palloc(LTG_HDRSIZE);
-       datum_r->len = LTG_HDRSIZE;
+       SET_VARSIZE(datum_r, LTG_HDRSIZE);
        datum_r->flag = LTG_ALLTRUE;
    }
    else
    {
        datum_r = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN);
-       datum_r->len = LTG_HDRSIZE + ASIGLEN;
+       SET_VARSIZE(datum_r, LTG_HDRSIZE + ASIGLEN);
        datum_r->flag = 0;
        memcpy((void *) LTG_SIGN(datum_r), (void *) LTG_SIGN(GETENTRY(entryvec, seed_2)), sizeof(ABITVEC));
    }
index ff8eec793a644eae571635638aca4c03ed3277ac..f93d2bb8889574dc54efec1cdb2eee8cf5418a1c 100644 (file)
@@ -215,8 +215,8 @@ _ltree_extract_isparent(PG_FUNCTION_ARGS)
        PG_RETURN_NULL();
    }
 
-   item = (ltree *) palloc(found->len);
-   memcpy(item, found, found->len);
+   item = (ltree *) palloc(VARSIZE(found));
+   memcpy(item, found, VARSIZE(found));
 
    PG_FREE_IF_COPY(la, 0);
    PG_FREE_IF_COPY(query, 1);
@@ -238,8 +238,8 @@ _ltree_extract_risparent(PG_FUNCTION_ARGS)
        PG_RETURN_NULL();
    }
 
-   item = (ltree *) palloc(found->len);
-   memcpy(item, found, found->len);
+   item = (ltree *) palloc(VARSIZE(found));
+   memcpy(item, found, VARSIZE(found));
 
    PG_FREE_IF_COPY(la, 0);
    PG_FREE_IF_COPY(query, 1);
@@ -261,8 +261,8 @@ _ltq_extract_regex(PG_FUNCTION_ARGS)
        PG_RETURN_NULL();
    }
 
-   item = (ltree *) palloc(found->len);
-   memcpy(item, found, found->len);
+   item = (ltree *) palloc(VARSIZE(found));
+   memcpy(item, found, VARSIZE(found));
 
    PG_FREE_IF_COPY(la, 0);
    PG_FREE_IF_COPY(query, 1);
@@ -284,8 +284,8 @@ _ltxtq_extract_exec(PG_FUNCTION_ARGS)
        PG_RETURN_NULL();
    }
 
-   item = (ltree *) palloc(found->len);
-   memcpy(item, found, found->len);
+   item = (ltree *) palloc(VARSIZE(found));
+   memcpy(item, found, VARSIZE(found));
 
    PG_FREE_IF_COPY(la, 0);
    PG_FREE_IF_COPY(query, 1);
index 1ff5707fb13a23ba3c7fd607f7dbc82cca221108..d627c45bd3629e9744634bf4abb87004dd8454ce 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/ltree/ltree.h,v 1.17 2006/10/04 00:29:45 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/ltree/ltree.h,v 1.18 2007/02/28 22:44:38 tgl Exp $ */
 
 #ifndef __LTREE_H__
 #define __LTREE_H__
@@ -18,12 +18,12 @@ typedef struct
 
 typedef struct
 {
-   int32       len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    uint16      numlevel;
    char        data[1];
 }  ltree;
 
-#define LTREE_HDRSIZE  MAXALIGN( sizeof(int32) + sizeof(uint16) )
+#define LTREE_HDRSIZE  MAXALIGN(VARHDRSZ + sizeof(uint16))
 #define LTREE_FIRST(x) ( (ltree_level*)( ((char*)(x))+LTREE_HDRSIZE ) )
 
 
@@ -68,14 +68,14 @@ typedef struct
 
 typedef struct
 {
-   int32       len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    uint16      numlevel;
    uint16      firstgood;
    uint16      flag;
    char        data[1];
 }  lquery;
 
-#define LQUERY_HDRSIZE  MAXALIGN( sizeof(int32) + 3*sizeof(uint16) )
+#define LQUERY_HDRSIZE  MAXALIGN(VARHDRSZ + 3*sizeof(uint16))
 #define LQUERY_FIRST(x)   ( (lquery_level*)( ((char*)(x))+LQUERY_HDRSIZE ) )
 
 #define LQUERY_HASNOT      0x01
@@ -105,12 +105,12 @@ typedef struct ITEM
  */
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    int4        size;
    char        data[1];
 }  ltxtquery;
 
-#define HDRSIZEQT      MAXALIGN( 2*sizeof(int4) )
+#define HDRSIZEQT      MAXALIGN(VARHDRSZ + sizeof(int4))
 #define COMPUTESIZE(size,lenofoperand) ( HDRSIZEQT + (size) * sizeof(ITEM) + (lenofoperand) )
 #define GETQUERY(x)  (ITEM*)( (char*)(x)+HDRSIZEQT )
 #define GETOPERAND(x)  ( (char*)GETQUERY(x) + ((ltxtquery*)x)->size * sizeof(ITEM) )
@@ -205,7 +205,7 @@ typedef unsigned char *BITVECP;
 
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    uint32      flag;
    char        data[1];
 }  ltree_gist;
@@ -214,14 +214,14 @@ typedef struct
 #define LTG_ALLTRUE 0x02
 #define LTG_NORIGHT 0x04
 
-#define LTG_HDRSIZE MAXALIGN( sizeof(int4) + sizeof(uint32) )
+#define LTG_HDRSIZE MAXALIGN(VARHDRSZ + sizeof(uint32))
 #define LTG_SIGN(x) ( (BITVECP)( ((char*)(x))+LTG_HDRSIZE ) )
 #define LTG_NODE(x) ( (ltree*)( ((char*)(x))+LTG_HDRSIZE ) )
 #define LTG_ISONENODE(x) ( ((ltree_gist*)(x))->flag & LTG_ONENODE )
 #define LTG_ISALLTRUE(x) ( ((ltree_gist*)(x))->flag & LTG_ALLTRUE )
 #define LTG_ISNORIGHT(x) ( ((ltree_gist*)(x))->flag & LTG_NORIGHT )
 #define LTG_LNODE(x)   ( (ltree*)( ( ((char*)(x))+LTG_HDRSIZE ) + ( LTG_ISALLTRUE(x) ? 0 : SIGLEN ) ) )
-#define LTG_RENODE(x)  ( (ltree*)( ((char*)LTG_LNODE(x)) + LTG_LNODE(x)->len) )
+#define LTG_RENODE(x)  ( (ltree*)( ((char*)LTG_LNODE(x)) + VARSIZE(LTG_LNODE(x))) )
 #define LTG_RNODE(x)   ( LTG_ISNORIGHT(x) ? LTG_LNODE(x) : LTG_RENODE(x) )
 
 #define LTG_GETLNODE(x) ( LTG_ISONENODE(x) ? LTG_NODE(x) : LTG_LNODE(x) )
index 0239c5fe991c183444c51d3a04e16cdd6031f200..b74110d8f50ed198aecef89471736d5233d0eeb1 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * GiST support for ltree
  * Teodor Sigaev <teodor@stack.net>
- * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.19 2006/10/04 00:29:45 momjian Exp $
+ * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.20 2007/02/28 22:44:38 tgl Exp $
  */
 
 #include "ltree.h"
@@ -71,12 +71,12 @@ ltree_compress(PG_FUNCTION_ARGS)
    {                           /* ltree */
        ltree_gist *key;
        ltree      *val = (ltree *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
-       int4        len = LTG_HDRSIZE + val->len;
+       int4        len = LTG_HDRSIZE + VARSIZE(val);
 
        key = (ltree_gist *) palloc(len);
-       key->len = len;
+       SET_VARSIZE(key, len);
        key->flag = LTG_ONENODE;
-       memcpy((void *) LTG_NODE(key), (void *) val, val->len);
+       memcpy((void *) LTG_NODE(key), (void *) val, VARSIZE(val));
 
        retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
        gistentryinit(*retval, PointerGetDatum(key),
@@ -225,10 +225,10 @@ ltree_union(PG_FUNCTION_ARGS)
    }
 
    isleqr = (left == right || ISEQ(left, right)) ? true : false;
-   *size = LTG_HDRSIZE + ((isalltrue) ? 0 : SIGLEN) + left->len + ((isleqr) ? 0 : right->len);
+   *size = LTG_HDRSIZE + ((isalltrue) ? 0 : SIGLEN) + VARSIZE(left) + ((isleqr) ? 0 : VARSIZE(right));
 
    result = (ltree_gist *) palloc(*size);
-   result->len = *size;
+   SET_VARSIZE(result, *size);
    result->flag = 0;
 
    if (isalltrue)
@@ -236,11 +236,11 @@ ltree_union(PG_FUNCTION_ARGS)
    else
        memcpy((void *) LTG_SIGN(result), base, SIGLEN);
 
-   memcpy((void *) LTG_LNODE(result), (void *) left, left->len);
+   memcpy((void *) LTG_LNODE(result), (void *) left, VARSIZE(left));
    if (isleqr)
        result->flag |= LTG_NORIGHT;
    else
-       memcpy((void *) LTG_RNODE(result), (void *) right, right->len);
+       memcpy((void *) LTG_RNODE(result), (void *) right, VARSIZE(right));
 
    PG_RETURN_POINTER(result);
 }
@@ -399,36 +399,36 @@ ltree_picksplit(PG_FUNCTION_ARGS)
 
    lu_l = LTG_GETLNODE(GETENTRY(entryvec, array[FirstOffsetNumber].index));
    isleqr = (lu_l == lu_r || ISEQ(lu_l, lu_r)) ? true : false;
-   size = LTG_HDRSIZE + ((lisat) ? 0 : SIGLEN) + lu_l->len + ((isleqr) ? 0 : lu_r->len);
+   size = LTG_HDRSIZE + ((lisat) ? 0 : SIGLEN) + VARSIZE(lu_l) + ((isleqr) ? 0 : VARSIZE(lu_r));
    lu = (ltree_gist *) palloc(size);
-   lu->len = size;
+   SET_VARSIZE(lu, size);
    lu->flag = 0;
    if (lisat)
        lu->flag |= LTG_ALLTRUE;
    else
        memcpy((void *) LTG_SIGN(lu), ls, SIGLEN);
-   memcpy((void *) LTG_LNODE(lu), (void *) lu_l, lu_l->len);
+   memcpy((void *) LTG_LNODE(lu), (void *) lu_l, VARSIZE(lu_l));
    if (isleqr)
        lu->flag |= LTG_NORIGHT;
    else
-       memcpy((void *) LTG_RNODE(lu), (void *) lu_r, lu_r->len);
+       memcpy((void *) LTG_RNODE(lu), (void *) lu_r, VARSIZE(lu_r));
 
 
    ru_l = LTG_GETLNODE(GETENTRY(entryvec, array[1 + ((maxoff - FirstOffsetNumber + 1) / 2)].index));
    isleqr = (ru_l == ru_r || ISEQ(ru_l, ru_r)) ? true : false;
-   size = LTG_HDRSIZE + ((risat) ? 0 : SIGLEN) + ru_l->len + ((isleqr) ? 0 : ru_r->len);
+   size = LTG_HDRSIZE + ((risat) ? 0 : SIGLEN) + VARSIZE(ru_l) + ((isleqr) ? 0 : VARSIZE(ru_r));
    ru = (ltree_gist *) palloc(size);
-   ru->len = size;
+   SET_VARSIZE(ru, size);
    ru->flag = 0;
    if (risat)
        ru->flag |= LTG_ALLTRUE;
    else
        memcpy((void *) LTG_SIGN(ru), rs, SIGLEN);
-   memcpy((void *) LTG_LNODE(ru), (void *) ru_l, ru_l->len);
+   memcpy((void *) LTG_LNODE(ru), (void *) ru_l, VARSIZE(ru_l));
    if (isleqr)
        ru->flag |= LTG_NORIGHT;
    else
-       memcpy((void *) LTG_RNODE(ru), (void *) ru_r, ru_r->len);
+       memcpy((void *) LTG_RNODE(ru), (void *) ru_r, VARSIZE(ru_r));
 
    v->spl_ldatum = PointerGetDatum(lu);
    v->spl_rdatum = PointerGetDatum(ru);
@@ -459,9 +459,9 @@ gist_isparent(ltree_gist * key, ltree * query)
 static ltree *
 copy_ltree(ltree * src)
 {
-   ltree      *dst = (ltree *) palloc(src->len);
+   ltree      *dst = (ltree *) palloc(VARSIZE(src));
 
-   memcpy(dst, src, src->len);
+   memcpy(dst, src, VARSIZE(src));
    return dst;
 }
 
index eb22894079c7896e79f6d68bb5f69da0e17904e2..a6cb357d27bc55415edba2562548090e82e5f06c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * in/out function for ltree and lquery
  * Teodor Sigaev <teodor@stack.net>
- * $PostgreSQL: pgsql/contrib/ltree/ltree_io.c,v 1.13 2006/09/22 21:39:57 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/ltree/ltree_io.c,v 1.14 2007/02/28 22:44:38 tgl Exp $
  */
 
 #include "ltree.h"
@@ -119,7 +119,7 @@ ltree_in(PG_FUNCTION_ARGS)
                 errdetail("Unexpected end of line.")));
 
    result = (ltree *) palloc(LTREE_HDRSIZE + totallen);
-   result->len = LTREE_HDRSIZE + totallen;
+   SET_VARSIZE(result, LTREE_HDRSIZE + totallen);
    result->numlevel = lptr - list;
    curlevel = LTREE_FIRST(result);
    lptr = list;
@@ -144,7 +144,7 @@ ltree_out(PG_FUNCTION_ARGS)
    int         i;
    ltree_level *curlevel;
 
-   ptr = buf = (char *) palloc(in->len);
+   ptr = buf = (char *) palloc(VARSIZE(in));
    curlevel = LTREE_FIRST(in);
    for (i = 0; i < in->numlevel; i++)
    {
@@ -449,7 +449,7 @@ lquery_in(PG_FUNCTION_ARGS)
    }
 
    result = (lquery *) palloc(totallen);
-   result->len = totallen;
+   SET_VARSIZE(result, totallen);
    result->numlevel = num;
    result->firstgood = 0;
    result->flag = 0;
index 5f80394a713c566fe63bc8053cfcc38a11966251..be2733273fb7f7cd6953b4e2e9e749a1cee883b9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * op function for ltree
  * Teodor Sigaev <teodor@stack.net>
- * $PostgreSQL: pgsql/contrib/ltree/ltree_op.c,v 1.15 2007/02/27 23:48:06 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/ltree/ltree_op.c,v 1.16 2007/02/28 22:44:38 tgl Exp $
  */
 
 #include "ltree.h"
@@ -230,7 +230,7 @@ inner_subltree(ltree * t, int4 startpos, int4 endpos)
    }
 
    res = (ltree *) palloc(LTREE_HDRSIZE + (end - start));
-   res->len = LTREE_HDRSIZE + (end - start);
+   SET_VARSIZE(res, LTREE_HDRSIZE + (end - start));
    res->numlevel = endpos - startpos;
 
    memcpy(LTREE_FIRST(res), start, end - start);
@@ -286,13 +286,14 @@ ltree_concat(ltree * a, ltree * b)
 {
    ltree      *r;
 
-   r = (ltree *) palloc(a->len + b->len - LTREE_HDRSIZE);
-   r->len = a->len + b->len - LTREE_HDRSIZE;
+   r = (ltree *) palloc(VARSIZE(a) + VARSIZE(b) - LTREE_HDRSIZE);
+   SET_VARSIZE(r, VARSIZE(a) + VARSIZE(b) - LTREE_HDRSIZE);
    r->numlevel = a->numlevel + b->numlevel;
 
-   memcpy(LTREE_FIRST(r), LTREE_FIRST(a), a->len - LTREE_HDRSIZE);
-   memcpy(((char *) LTREE_FIRST(r)) + a->len - LTREE_HDRSIZE, LTREE_FIRST(b), b->len -
-          LTREE_HDRSIZE);
+   memcpy(LTREE_FIRST(r), LTREE_FIRST(a), VARSIZE(a) - LTREE_HDRSIZE);
+   memcpy(((char *) LTREE_FIRST(r)) + VARSIZE(a) - LTREE_HDRSIZE,
+          LTREE_FIRST(b),
+          VARSIZE(b) - LTREE_HDRSIZE);
    return r;
 }
 
@@ -476,7 +477,7 @@ lca_inner(ltree ** a, int len)
    }
 
    res = (ltree *) palloc(reslen);
-   res->len = reslen;
+   SET_VARSIZE(res, reslen);
    res->numlevel = num;
 
    l1 = LTREE_FIRST(*a);
@@ -542,7 +543,7 @@ ltree2text(PG_FUNCTION_ARGS)
    ltree_level *curlevel;
    text       *out;
 
-   out = (text *) palloc(in->len + VARHDRSZ);
+   out = (text *) palloc(VARSIZE(in) + VARHDRSZ);
    ptr = VARDATA(out);
    curlevel = LTREE_FIRST(in);
    for (i = 0; i < in->numlevel; i++)
index ca6325adf72b1f59f486bfa4cf33b0f66f306149..904d4490dc9b46ab917d7b1ae57c95cd398cb58b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * txtquery io
  * Teodor Sigaev <teodor@stack.net>
- * $PostgreSQL: pgsql/contrib/ltree/ltxtquery_io.c,v 1.12 2006/09/22 21:39:57 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/ltree/ltxtquery_io.c,v 1.13 2007/02/28 22:44:38 tgl Exp $
  */
 
 #include "ltree.h"
@@ -337,7 +337,7 @@ queryin(char *buf)
    /* make finish struct */
    commonlen = COMPUTESIZE(state.num, state.sumlen);
    query = (ltxtquery *) palloc(commonlen);
-   query->len = commonlen;
+   SET_VARSIZE(query, commonlen);
    query->size = state.num;
    ptr = GETQUERY(query);
 
index b7674c52b583c35c299a81ceb46ab9962d35b33c..bc2a4dc44a85d10280548d5afbb2b988e741958c 100644 (file)
@@ -31,12 +31,12 @@ typedef char trgm[3];
 
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    uint8       flag;
    char        data[1];
 }  TRGM;
 
-#define TRGMHRDSIZE          (sizeof(int4)+sizeof(uint8))
+#define TRGMHDRSIZE          (VARHDRSZ + sizeof(uint8))
 
 /* gist */
 #define BITBYTE 8
@@ -70,12 +70,13 @@ typedef char *BITVECP;
 #define ISSIGNKEY(x)   ( ((TRGM*)x)->flag & SIGNKEY )
 #define ISALLTRUE(x)   ( ((TRGM*)x)->flag & ALLISTRUE )
 
-#define CALCGTSIZE(flag, len) ( TRGMHRDSIZE + ( ( (flag) & ARRKEY ) ? ((len)*sizeof(trgm)) : (((flag) & ALLISTRUE) ? 0 : SIGLEN) ) )
-#define GETSIGN(x)     ( (BITVECP)( (char*)x+TRGMHRDSIZE ) )
-#define GETARR(x)      ( (trgm*)( (char*)x+TRGMHRDSIZE ) )
-#define ARRNELEM(x) ( ( ((TRGM*)x)->len - TRGMHRDSIZE )/sizeof(trgm) )
+#define CALCGTSIZE(flag, len) ( TRGMHDRSIZE + ( ( (flag) & ARRKEY ) ? ((len)*sizeof(trgm)) : (((flag) & ALLISTRUE) ? 0 : SIGLEN) ) )
+#define GETSIGN(x)     ( (BITVECP)( (char*)x+TRGMHDRSIZE ) )
+#define GETARR(x)      ( (trgm*)( (char*)x+TRGMHDRSIZE ) )
+#define ARRNELEM(x) ( ( VARSIZE(x) - TRGMHDRSIZE )/sizeof(trgm) )
 
 extern float4 trgm_limit;
+
 TRGM      *generate_trgm(char *str, int slen);
 float4     cnt_sml(TRGM * trg1, TRGM * trg2);
 
index 41a827ae0c3357a157a57983abb02745968a9097..476cb1b9763f72462370449eba9a45003054107b 100644 (file)
@@ -120,7 +120,7 @@ gtrgm_compress(PG_FUNCTION_ARGS)
 
        len = CALCGTSIZE(SIGNKEY | ALLISTRUE, 0);
        res = (TRGM *) palloc(len);
-       res->len = len;
+       SET_VARSIZE(res, len);
        res->flag = SIGNKEY | ALLISTRUE;
 
        retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
@@ -235,10 +235,11 @@ gtrgm_union(PG_FUNCTION_ARGS)
    flag |= SIGNKEY;
    len = CALCGTSIZE(flag, 0);
    result = (TRGM *) palloc(len);
-   *size = result->len = len;
+   SET_VARSIZE(result, len);
    result->flag = flag;
    if (!ISALLTRUE(result))
        memcpy((void *) GETSIGN(result), (void *) base, sizeof(BITVEC));
+   *size = len;
 
    PG_RETURN_POINTER(result);
 }
@@ -486,26 +487,26 @@ gtrgm_picksplit(PG_FUNCTION_ARGS)
    if (cache[seed_1].allistrue)
    {
        datum_l = (TRGM *) palloc(CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
-       datum_l->len = CALCGTSIZE(SIGNKEY | ALLISTRUE, 0);
+       SET_VARSIZE(datum_l, CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
        datum_l->flag = SIGNKEY | ALLISTRUE;
    }
    else
    {
        datum_l = (TRGM *) palloc(CALCGTSIZE(SIGNKEY, 0));
-       datum_l->len = CALCGTSIZE(SIGNKEY, 0);
+       SET_VARSIZE(datum_l, CALCGTSIZE(SIGNKEY, 0));
        datum_l->flag = SIGNKEY;
        memcpy((void *) GETSIGN(datum_l), (void *) cache[seed_1].sign, sizeof(BITVEC));
    }
    if (cache[seed_2].allistrue)
    {
        datum_r = (TRGM *) palloc(CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
-       datum_r->len = CALCGTSIZE(SIGNKEY | ALLISTRUE, 0);
+       SET_VARSIZE(datum_r, CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
        datum_r->flag = SIGNKEY | ALLISTRUE;
    }
    else
    {
        datum_r = (TRGM *) palloc(CALCGTSIZE(SIGNKEY, 0));
-       datum_r->len = CALCGTSIZE(SIGNKEY, 0);
+       SET_VARSIZE(datum_r, CALCGTSIZE(SIGNKEY, 0));
        datum_r->flag = SIGNKEY;
        memcpy((void *) GETSIGN(datum_r), (void *) cache[seed_2].sign, sizeof(BITVEC));
    }
index e247756a39996c136fa9a1ac3628909d5a7e35a2..e9afef4b21f7fc5033d8c314679e0249383dabcc 100644 (file)
@@ -70,9 +70,9 @@ generate_trgm(char *str, int slen)
    int         wl,
                len;
 
-   trg = (TRGM *) palloc(TRGMHRDSIZE + sizeof(trgm) * (slen / 2 + 1) * 3);
+   trg = (TRGM *) palloc(TRGMHDRSIZE + sizeof(trgm) * (slen / 2 + 1) * 3);
    trg->flag = ARRKEY;
-   trg->len = TRGMHRDSIZE;
+   SET_VARSIZE(trg, TRGMHDRSIZE);
 
    if (slen + LPADDING + RPADDING < 3 || slen == 0)
        return trg;
@@ -178,7 +178,7 @@ generate_trgm(char *str, int slen)
        len = unique_array(GETARR(trg), len);
    }
 
-   trg->len = CALCGTSIZE(ARRKEY, len);
+   SET_VARSIZE(trg, CALCGTSIZE(ARRKEY, len));
 
    return trg;
 }
index a4d9b2312ed828ea79b9a8c0a25bbac419b0c92b..14fdecb0b8d3759120e20841a8b98de42b27f0b4 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/tsearch2/gistidx.c,v 1.15 2006/10/04 00:29:46 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/tsearch2/gistidx.c,v 1.16 2007/02/28 22:44:38 tgl Exp $ */
 
 #include "postgres.h"
 
@@ -163,7 +163,7 @@ gtsvector_compress(PG_FUNCTION_ARGS)
 
        len = CALCGTSIZE(ARRKEY, val->size);
        res = (GISTTYPE *) palloc(len);
-       res->len = len;
+       SET_VARSIZE(res, len);
        res->flag = ARRKEY;
        arr = GETARR(res);
        len = val->size;
@@ -183,17 +183,17 @@ gtsvector_compress(PG_FUNCTION_ARGS)
             */
            len = CALCGTSIZE(ARRKEY, len);
            res = (GISTTYPE *) repalloc((void *) res, len);
-           res->len = len;
+           SET_VARSIZE(res, len);
        }
 
        /* make signature, if array is too long */
-       if (res->len > TOAST_INDEX_TARGET)
+       if (VARSIZE(res) > TOAST_INDEX_TARGET)
        {
            GISTTYPE   *ressign;
 
            len = CALCGTSIZE(SIGNKEY, 0);
            ressign = (GISTTYPE *) palloc(len);
-           ressign->len = len;
+           SET_VARSIZE(ressign, len);
            ressign->flag = SIGNKEY;
            makesign(GETSIGN(ressign), res);
            res = ressign;
@@ -219,7 +219,7 @@ gtsvector_compress(PG_FUNCTION_ARGS)
 
        len = CALCGTSIZE(SIGNKEY | ALLISTRUE, 0);
        res = (GISTTYPE *) palloc(len);
-       res->len = len;
+       SET_VARSIZE(res, len);
        res->flag = SIGNKEY | ALLISTRUE;
 
        retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
@@ -375,10 +375,11 @@ gtsvector_union(PG_FUNCTION_ARGS)
    flag |= SIGNKEY;
    len = CALCGTSIZE(flag, 0);
    result = (GISTTYPE *) palloc(len);
-   *size = result->len = len;
+   SET_VARSIZE(result, len);
    result->flag = flag;
    if (!ISALLTRUE(result))
        memcpy((void *) GETSIGN(result), (void *) base, sizeof(BITVEC));
+   *size = len;
 
    PG_RETURN_POINTER(result);
 }
@@ -627,26 +628,26 @@ gtsvector_picksplit(PG_FUNCTION_ARGS)
    if (cache[seed_1].allistrue)
    {
        datum_l = (GISTTYPE *) palloc(CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
-       datum_l->len = CALCGTSIZE(SIGNKEY | ALLISTRUE, 0);
+       SET_VARSIZE(datum_l, CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
        datum_l->flag = SIGNKEY | ALLISTRUE;
    }
    else
    {
        datum_l = (GISTTYPE *) palloc(CALCGTSIZE(SIGNKEY, 0));
-       datum_l->len = CALCGTSIZE(SIGNKEY, 0);
+       SET_VARSIZE(datum_l, CALCGTSIZE(SIGNKEY, 0));
        datum_l->flag = SIGNKEY;
        memcpy((void *) GETSIGN(datum_l), (void *) cache[seed_1].sign, sizeof(BITVEC));
    }
    if (cache[seed_2].allistrue)
    {
        datum_r = (GISTTYPE *) palloc(CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
-       datum_r->len = CALCGTSIZE(SIGNKEY | ALLISTRUE, 0);
+       SET_VARSIZE(datum_r, CALCGTSIZE(SIGNKEY | ALLISTRUE, 0));
        datum_r->flag = SIGNKEY | ALLISTRUE;
    }
    else
    {
        datum_r = (GISTTYPE *) palloc(CALCGTSIZE(SIGNKEY, 0));
-       datum_r->len = CALCGTSIZE(SIGNKEY, 0);
+       SET_VARSIZE(datum_r, CALCGTSIZE(SIGNKEY, 0));
        datum_r->flag = SIGNKEY;
        memcpy((void *) GETSIGN(datum_r), (void *) cache[seed_2].sign, sizeof(BITVEC));
    }
index 9545946e31568536848701c28452063eae6c9f8a..5362584b80787af5df615510bb8b949d34eded9b 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/tsearch2/gistidx.h,v 1.7 2006/03/11 04:38:30 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/tsearch2/gistidx.h,v 1.8 2007/02/28 22:44:38 tgl Exp $ */
 
 #ifndef __GISTIDX_H__
 #define __GISTIDX_H__
@@ -39,7 +39,7 @@ typedef char *BITVECP;
  */
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    int4        flag;
    char        data[1];
 }  GISTTYPE;
@@ -52,11 +52,11 @@ typedef struct
 #define ISSIGNKEY(x)   ( ((GISTTYPE*)(x))->flag & SIGNKEY )
 #define ISALLTRUE(x)   ( ((GISTTYPE*)(x))->flag & ALLISTRUE )
 
-#define GTHDRSIZE  ( sizeof(int4) * 2  )
+#define GTHDRSIZE  ( VARHDRSZ + sizeof(int4) )
 #define CALCGTSIZE(flag, len) ( GTHDRSIZE + ( ( (flag) & ARRKEY ) ? ((len)*sizeof(int4)) : (((flag) & ALLISTRUE) ? 0 : SIGLEN) ) )
 
 #define GETSIGN(x) ( (BITVECP)( (char*)(x)+GTHDRSIZE ) )
 #define GETARR(x)  ( (int4*)( (char*)(x)+GTHDRSIZE ) )
-#define ARRNELEM(x) ( ( ((GISTTYPE*)(x))->len - GTHDRSIZE )/sizeof(int4) )
+#define ARRNELEM(x) ( ( VARSIZE(x) - GTHDRSIZE )/sizeof(int4) )
 
 #endif
index eb2d30e15921f5d11a225be5181dc69635d779da..62a305ed1e8eef89cb94f8293f5684bec00ff986 100644 (file)
@@ -658,7 +658,7 @@ static QUERYTYPE *
                (errmsg("tsearch query doesn't contain lexeme(s): \"%s\"",
                        state.buffer)));
        query = (QUERYTYPE *) palloc(HDRSIZEQT);
-       query->len = HDRSIZEQT;
+       SET_VARSIZE(query, HDRSIZEQT);
        query->size = 0;
        return query;
    }
@@ -666,7 +666,7 @@ static QUERYTYPE *
    /* make finish struct */
    commonlen = COMPUTESIZE(state.num, state.sumlen);
    query = (QUERYTYPE *) palloc(commonlen);
-   query->len = commonlen;
+   SET_VARSIZE(query, commonlen);
    query->size = state.num;
    ptr = GETQUERY(query);
 
@@ -961,7 +961,7 @@ to_tsquery(PG_FUNCTION_ARGS)
    res = clean_fakeval_v2(GETQUERY(query), &len);
    if (!res)
    {
-       query->len = HDRSIZEQT;
+       SET_VARSIZE(query, HDRSIZEQT);
        query->size = 0;
        PG_RETURN_POINTER(query);
    }
@@ -1016,7 +1016,7 @@ plainto_tsquery(PG_FUNCTION_ARGS)
    res = clean_fakeval_v2(GETQUERY(query), &len);
    if (!res)
    {
-       query->len = HDRSIZEQT;
+       SET_VARSIZE(query, HDRSIZEQT);
        query->size = 0;
        PG_RETURN_POINTER(query);
    }
index b4d586a684b085c043c0eb611a269a73a0edf97d..44f87012130dce8b0bc9d20d793b89672dc2e585 100644 (file)
@@ -28,12 +28,12 @@ typedef struct ITEM
  */
 typedef struct
 {
-   int4        len;
+   int32       vl_len_;        /* varlena header (do not touch directly!) */
    int4        size;
    char        data[1];
 }  QUERYTYPE;
 
-#define HDRSIZEQT  ( 2 * sizeof(int4) )
+#define HDRSIZEQT  ( VARHDRSZ + sizeof(int4) )
 #define COMPUTESIZE(size,lenofoperand) ( HDRSIZEQT + (size) * sizeof(ITEM) + (lenofoperand) )
 #define GETQUERY(x)  (ITEM*)( (char*)(x)+HDRSIZEQT )
 #define GETOPERAND(x)  ( (char*)GETQUERY(x) + ((QUERYTYPE*)(x))->size * sizeof(ITEM) )
index 63d8140a6c296863cf8b87cee64cf1bda43102a5..0604a49927a25ab6680b3ca54f54a3b166b58f48 100644 (file)
@@ -250,7 +250,7 @@ rewrite_accum(PG_FUNCTION_ARGS)
    if (acc == NULL || PG_ARGISNULL(0))
    {
        acc = (QUERYTYPE *) MEMALLOC(AggMemory, sizeof(QUERYTYPE));
-       acc->len = HDRSIZEQT;
+       SET_VARSIZE(acc, HDRSIZEQT);
        acc->size = 0;
    }
 
@@ -287,7 +287,7 @@ rewrite_accum(PG_FUNCTION_ARGS)
 
    if (!acc->size)
    {
-       if (acc->len > HDRSIZEQT)
+       if (VARSIZE(acc) > HDRSIZEQT)
        {
            pfree(elemsp);
            PG_RETURN_POINTER(acc);
@@ -328,7 +328,7 @@ rewrite_accum(PG_FUNCTION_ARGS)
        else
        {
            acc = (QUERYTYPE *) MEMALLOC(AggMemory, HDRSIZEQT * 2);
-           acc->len = HDRSIZEQT * 2;
+           SET_VARSIZE(acc, HDRSIZEQT * 2);
            acc->size = 0;
        }
    }
@@ -353,12 +353,12 @@ rewrite_finish(PG_FUNCTION_ARGS)
    if (acc == NULL || PG_ARGISNULL(0) || acc->size == 0)
    {
        acc = (QUERYTYPE *) palloc(sizeof(QUERYTYPE));
-       acc->len = HDRSIZEQT;
+       SET_VARSIZE(acc, HDRSIZEQT);
        acc->size = 0;
    }
 
-   rewrited = (QUERYTYPE *) palloc(acc->len);
-   memcpy(rewrited, acc, acc->len);
+   rewrited = (QUERYTYPE *) palloc(VARSIZE(acc));
+   memcpy(rewrited, acc, VARSIZE(acc));
    pfree(acc);
 
    PG_RETURN_POINTER(rewrited);
@@ -481,7 +481,7 @@ tsquery_rewrite(PG_FUNCTION_ARGS)
    }
    else
    {
-       rewrited->len = HDRSIZEQT;
+       SET_VARSIZE(rewrited, HDRSIZEQT);
        rewrited->size = 0;
    }
 
@@ -529,7 +529,7 @@ tsquery_rewrite_query(PG_FUNCTION_ARGS)
 
    if (!tree)
    {
-       rewrited->len = HDRSIZEQT;
+       SET_VARSIZE(rewrited, HDRSIZEQT);
        rewrited->size = 0;
        PG_FREE_IF_COPY(ex, 1);
        PG_FREE_IF_COPY(subst, 2);
index dfdd71407396ff1f5f9826a7a2ef80f1c1ce2604..0fc6fe334d2858587331d013299ead4c731412e4 100644 (file)
@@ -144,9 +144,9 @@ CompareTSQ(QUERYTYPE * a, QUERYTYPE * b)
    {
        return (a->size < b->size) ? -1 : 1;
    }
-   else if (a->len != b->len)
+   else if (VARSIZE(a) != VARSIZE(b))
    {
-       return (a->len < b->len) ? -1 : 1;
+       return (VARSIZE(a) < VARSIZE(b)) ? -1 : 1;
    }
    else
    {
index efa74fe053ca16fbc939e9918ac6f877d77a0498..083d173d1320478b654fe59afab28080e220ba58 100644 (file)
@@ -260,7 +260,7 @@ QTN2QT(QTNode * in, MemoryType memtype)
    len = COMPUTESIZE(nnode, sumlen);
 
    out = (QUERYTYPE *) MEMALLOC(memtype, len);
-   out->len = len;
+   SET_VARSIZE(out, len);
    out->size = nnode;
 
    state.curitem = GETQUERY(out);