]> granicus.if.org Git - postgresql/commitdiff
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);