]> granicus.if.org Git - postgresql/commitdiff
Dodge a macro-name conflict with Perl.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 19 Nov 2015 19:54:05 +0000 (14:54 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 19 Nov 2015 19:54:11 +0000 (14:54 -0500)
Some versions of Perl export a macro named HS_KEY.  This creates a
conflict in contrib/hstore_plperl against hstore's macro of the same
name.  The most future-proof solution seems to be to rename our macro;
I chose HSTORE_KEY.  For consistency, rename HS_VAL and related macros
similarly.

Back-patch to 9.5.  contrib/hstore_plperl doesn't exist before that
so there is no need to worry about the conflict in older releases.

Per reports from Marco Atzeri and Mike Blackwell.

contrib/hstore/hstore.h
contrib/hstore/hstore_compat.c
contrib/hstore/hstore_gin.c
contrib/hstore/hstore_gist.c
contrib/hstore/hstore_io.c
contrib/hstore/hstore_op.c
contrib/hstore_plperl/hstore_plperl.c
contrib/hstore_plpython/hstore_plpython.c

index f9088f8b1b6c43510e751b8341816e9c69352e99..6bab08b7de0b8028f416b1a38ff6a495d0b12a88 100644 (file)
@@ -76,11 +76,11 @@ typedef struct
 #define STRPTR(x)              ( (char*)(ARRPTR(x) + HS_COUNT((HStore*)(x)) * 2) )
 
 /* note multiple/non evaluations */
-#define HS_KEY(arr_,str_,i_) ((str_) + HSE_OFF((arr_)[2*(i_)]))
-#define HS_VAL(arr_,str_,i_) ((str_) + HSE_OFF((arr_)[2*(i_)+1]))
-#define HS_KEYLEN(arr_,i_) (HSE_LEN((arr_)[2*(i_)]))
-#define HS_VALLEN(arr_,i_) (HSE_LEN((arr_)[2*(i_)+1]))
-#define HS_VALISNULL(arr_,i_) (HSE_ISNULL((arr_)[2*(i_)+1]))
+#define HSTORE_KEY(arr_,str_,i_)       ((str_) + HSE_OFF((arr_)[2*(i_)]))
+#define HSTORE_VAL(arr_,str_,i_)       ((str_) + HSE_OFF((arr_)[2*(i_)+1]))
+#define HSTORE_KEYLEN(arr_,i_)         (HSE_LEN((arr_)[2*(i_)]))
+#define HSTORE_VALLEN(arr_,i_)         (HSE_LEN((arr_)[2*(i_)+1]))
+#define HSTORE_VALISNULL(arr_,i_)      (HSE_ISNULL((arr_)[2*(i_)+1]))
 
 /*
  * currently, these following macros are the _only_ places that rely
index 6364f032f98bac8bb8a2cabb20bf6c530ecc5183..b95ce9b4aaa8ab2bbaed137db1d3afe9945d1342 100644 (file)
@@ -149,7 +149,7 @@ hstoreValidNewFormat(HStore *hs)
 
        for (i = 1; i < count; ++i)
        {
-               if (HS_KEYLEN(entries, i) < HS_KEYLEN(entries, i - 1))
+               if (HSTORE_KEYLEN(entries, i) < HSTORE_KEYLEN(entries, i - 1))
                        return 0;
                if (HSE_ISNULL(entries[2 * i]))
                        return 0;
index 919181d375e40371b9f03615c79153bb311c6c62..d98fb3845833d280f56069b4dcbf11e78e79a002 100644 (file)
@@ -59,14 +59,16 @@ gin_extract_hstore(PG_FUNCTION_ARGS)
        {
                text       *item;
 
-               item = makeitem(HS_KEY(hsent, ptr, i), HS_KEYLEN(hsent, i),
+               item = makeitem(HSTORE_KEY(hsent, ptr, i),
+                                               HSTORE_KEYLEN(hsent, i),
                                                KEYFLAG);
                entries[2 * i] = PointerGetDatum(item);
 
-               if (HS_VALISNULL(hsent, i))
+               if (HSTORE_VALISNULL(hsent, i))
                        item = makeitem(NULL, 0, NULLFLAG);
                else
-                       item = makeitem(HS_VAL(hsent, ptr, i), HS_VALLEN(hsent, i),
+                       item = makeitem(HSTORE_VAL(hsent, ptr, i),
+                                                       HSTORE_VALLEN(hsent, i),
                                                        VALFLAG);
                entries[2 * i + 1] = PointerGetDatum(item);
        }
index 0fb769de7da38c2e84dab89204170a0e5ebb1398..f8f5934e404e803eab2ac0aa1e82c984610b892e 100644 (file)
@@ -129,11 +129,13 @@ ghstore_compress(PG_FUNCTION_ARGS)
                {
                        int                     h;
 
-                       h = crc32_sz((char *) HS_KEY(hsent, ptr, i), HS_KEYLEN(hsent, i));
+                       h = crc32_sz((char *) HSTORE_KEY(hsent, ptr, i),
+                                                HSTORE_KEYLEN(hsent, i));
                        HASH(GETSIGN(res), h);
-                       if (!HS_VALISNULL(hsent, i))
+                       if (!HSTORE_VALISNULL(hsent, i))
                        {
-                               h = crc32_sz((char *) HS_VAL(hsent, ptr, i), HS_VALLEN(hsent, i));
+                               h = crc32_sz((char *) HSTORE_VAL(hsent, ptr, i),
+                                                        HSTORE_VALLEN(hsent, i));
                                HASH(GETSIGN(res), h);
                        }
                }
@@ -524,13 +526,15 @@ ghstore_consistent(PG_FUNCTION_ARGS)
 
                for (i = 0; res && i < count; ++i)
                {
-                       int                     crc = crc32_sz((char *) HS_KEY(qe, qv, i), HS_KEYLEN(qe, i));
+                       int                     crc = crc32_sz((char *) HSTORE_KEY(qe, qv, i),
+                                                                          HSTORE_KEYLEN(qe, i));
 
                        if (GETBIT(sign, HASHVAL(crc)))
                        {
-                               if (!HS_VALISNULL(qe, i))
+                               if (!HSTORE_VALISNULL(qe, i))
                                {
-                                       crc = crc32_sz((char *) HS_VAL(qe, qv, i), HS_VALLEN(qe, i));
+                                       crc = crc32_sz((char *) HSTORE_VAL(qe, qv, i),
+                                                                  HSTORE_VALLEN(qe, i));
                                        if (!GETBIT(sign, HASHVAL(crc)))
                                                res = false;
                                }
index 7d8986708fd7aeb56058326ac7a4b25b09874adf..aa7b7e1b3ef1c7f5c1974ab572146458593ff976 100644 (file)
@@ -1068,7 +1068,7 @@ hstore_populate_record(PG_FUNCTION_ARGS)
                        column_info->column_type = column_type;
                }
 
-               if (idx < 0 || HS_VALISNULL(entries, idx))
+               if (idx < 0 || HSTORE_VALISNULL(entries, idx))
                {
                        /*
                         * need InputFunctionCall to happen even for nulls, so that domain
@@ -1081,9 +1081,9 @@ hstore_populate_record(PG_FUNCTION_ARGS)
                }
                else
                {
-                       vallen = HS_VALLEN(entries, idx);
+                       vallen = HSTORE_VALLEN(entries, idx);
                        value = palloc(1 + vallen);
-                       memcpy(value, HS_VAL(entries, ptr, idx), vallen);
+                       memcpy(value, HSTORE_VAL(entries, ptr, idx), vallen);
                        value[vallen] = 0;
 
                        values[i] = InputFunctionCall(&column_info->proc, value,
@@ -1144,11 +1144,11 @@ hstore_out(PG_FUNCTION_ARGS)
        for (i = 0; i < count; i++)
        {
                /* include "" and => and comma-space */
-               buflen += 6 + 2 * HS_KEYLEN(entries, i);
+               buflen += 6 + 2 * HSTORE_KEYLEN(entries, i);
                /* include "" only if nonnull */
-               buflen += 2 + (HS_VALISNULL(entries, i)
+               buflen += 2 + (HSTORE_VALISNULL(entries, i)
                                           ? 2
-                                          : 2 * HS_VALLEN(entries, i));
+                                          : 2 * HSTORE_VALLEN(entries, i));
        }
 
        out = ptr = palloc(buflen);
@@ -1156,11 +1156,11 @@ hstore_out(PG_FUNCTION_ARGS)
        for (i = 0; i < count; i++)
        {
                *ptr++ = '"';
-               ptr = cpw(ptr, HS_KEY(entries, base, i), HS_KEYLEN(entries, i));
+               ptr = cpw(ptr, HSTORE_KEY(entries, base, i), HSTORE_KEYLEN(entries, i));
                *ptr++ = '"';
                *ptr++ = '=';
                *ptr++ = '>';
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                {
                        *ptr++ = 'N';
                        *ptr++ = 'U';
@@ -1170,7 +1170,7 @@ hstore_out(PG_FUNCTION_ARGS)
                else
                {
                        *ptr++ = '"';
-                       ptr = cpw(ptr, HS_VAL(entries, base, i), HS_VALLEN(entries, i));
+                       ptr = cpw(ptr, HSTORE_VAL(entries, base, i), HSTORE_VALLEN(entries, i));
                        *ptr++ = '"';
                }
 
@@ -1203,20 +1203,20 @@ hstore_send(PG_FUNCTION_ARGS)
 
        for (i = 0; i < count; i++)
        {
-               int32           keylen = HS_KEYLEN(entries, i);
+               int32           keylen = HSTORE_KEYLEN(entries, i);
 
                pq_sendint(&buf, keylen, 4);
-               pq_sendtext(&buf, HS_KEY(entries, base, i), keylen);
-               if (HS_VALISNULL(entries, i))
+               pq_sendtext(&buf, HSTORE_KEY(entries, base, i), keylen);
+               if (HSTORE_VALISNULL(entries, i))
                {
                        pq_sendint(&buf, -1, 4);
                }
                else
                {
-                       int32           vallen = HS_VALLEN(entries, i);
+                       int32           vallen = HSTORE_VALLEN(entries, i);
 
                        pq_sendint(&buf, vallen, 4);
-                       pq_sendtext(&buf, HS_VAL(entries, base, i), vallen);
+                       pq_sendtext(&buf, HSTORE_VAL(entries, base, i), vallen);
                }
        }
 
@@ -1255,20 +1255,24 @@ hstore_to_json_loose(PG_FUNCTION_ARGS)
        for (i = 0; i < count; i++)
        {
                resetStringInfo(&tmp);
-               appendBinaryStringInfo(&tmp, HS_KEY(entries, base, i), HS_KEYLEN(entries, i));
+               appendBinaryStringInfo(&tmp, HSTORE_KEY(entries, base, i),
+                                                          HSTORE_KEYLEN(entries, i));
                escape_json(&dst, tmp.data);
                appendStringInfoString(&dst, ": ");
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                        appendStringInfoString(&dst, "null");
                /* guess that values of 't' or 'f' are booleans */
-               else if (HS_VALLEN(entries, i) == 1 && *(HS_VAL(entries, base, i)) == 't')
+               else if (HSTORE_VALLEN(entries, i) == 1 &&
+                                *(HSTORE_VAL(entries, base, i)) == 't')
                        appendStringInfoString(&dst, "true");
-               else if (HS_VALLEN(entries, i) == 1 && *(HS_VAL(entries, base, i)) == 'f')
+               else if (HSTORE_VALLEN(entries, i) == 1 &&
+                                *(HSTORE_VAL(entries, base, i)) == 'f')
                        appendStringInfoString(&dst, "false");
                else
                {
                        resetStringInfo(&tmp);
-                       appendBinaryStringInfo(&tmp, HS_VAL(entries, base, i), HS_VALLEN(entries, i));
+                       appendBinaryStringInfo(&tmp, HSTORE_VAL(entries, base, i),
+                                                                  HSTORE_VALLEN(entries, i));
                        if (IsValidJsonNumber(tmp.data, tmp.len))
                                appendBinaryStringInfo(&dst, tmp.data, tmp.len);
                        else
@@ -1306,15 +1310,17 @@ hstore_to_json(PG_FUNCTION_ARGS)
        for (i = 0; i < count; i++)
        {
                resetStringInfo(&tmp);
-               appendBinaryStringInfo(&tmp, HS_KEY(entries, base, i), HS_KEYLEN(entries, i));
+               appendBinaryStringInfo(&tmp, HSTORE_KEY(entries, base, i),
+                                                          HSTORE_KEYLEN(entries, i));
                escape_json(&dst, tmp.data);
                appendStringInfoString(&dst, ": ");
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                        appendStringInfoString(&dst, "null");
                else
                {
                        resetStringInfo(&tmp);
-                       appendBinaryStringInfo(&tmp, HS_VAL(entries, base, i), HS_VALLEN(entries, i));
+                       appendBinaryStringInfo(&tmp, HSTORE_VAL(entries, base, i),
+                                                                  HSTORE_VALLEN(entries, i));
                        escape_json(&dst, tmp.data);
                }
 
@@ -1346,20 +1352,20 @@ hstore_to_jsonb(PG_FUNCTION_ARGS)
                                        val;
 
                key.type = jbvString;
-               key.val.string.len = HS_KEYLEN(entries, i);
-               key.val.string.val = HS_KEY(entries, base, i);
+               key.val.string.len = HSTORE_KEYLEN(entries, i);
+               key.val.string.val = HSTORE_KEY(entries, base, i);
 
                (void) pushJsonbValue(&state, WJB_KEY, &key);
 
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                {
                        val.type = jbvNull;
                }
                else
                {
                        val.type = jbvString;
-                       val.val.string.len = HS_VALLEN(entries, i);
-                       val.val.string.val = HS_VAL(entries, base, i);
+                       val.val.string.len = HSTORE_VALLEN(entries, i);
+                       val.val.string.val = HSTORE_VAL(entries, base, i);
                }
                (void) pushJsonbValue(&state, WJB_VALUE, &val);
        }
@@ -1393,22 +1399,24 @@ hstore_to_jsonb_loose(PG_FUNCTION_ARGS)
                                        val;
 
                key.type = jbvString;
-               key.val.string.len = HS_KEYLEN(entries, i);
-               key.val.string.val = HS_KEY(entries, base, i);
+               key.val.string.len = HSTORE_KEYLEN(entries, i);
+               key.val.string.val = HSTORE_KEY(entries, base, i);
 
                (void) pushJsonbValue(&state, WJB_KEY, &key);
 
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                {
                        val.type = jbvNull;
                }
                /* guess that values of 't' or 'f' are booleans */
-               else if (HS_VALLEN(entries, i) == 1 && *(HS_VAL(entries, base, i)) == 't')
+               else if (HSTORE_VALLEN(entries, i) == 1 &&
+                                *(HSTORE_VAL(entries, base, i)) == 't')
                {
                        val.type = jbvBool;
                        val.val.boolean = true;
                }
-               else if (HS_VALLEN(entries, i) == 1 && *(HS_VAL(entries, base, i)) == 'f')
+               else if (HSTORE_VALLEN(entries, i) == 1 &&
+                                *(HSTORE_VAL(entries, base, i)) == 'f')
                {
                        val.type = jbvBool;
                        val.val.boolean = false;
@@ -1418,7 +1426,8 @@ hstore_to_jsonb_loose(PG_FUNCTION_ARGS)
                        is_number = false;
                        resetStringInfo(&tmp);
 
-                       appendBinaryStringInfo(&tmp, HS_VAL(entries, base, i), HS_VALLEN(entries, i));
+                       appendBinaryStringInfo(&tmp, HSTORE_VAL(entries, base, i),
+                                                                  HSTORE_VALLEN(entries, i));
 
                        /*
                         * don't treat something with a leading zero followed by another
@@ -1461,14 +1470,14 @@ hstore_to_jsonb_loose(PG_FUNCTION_ARGS)
                        {
                                val.type = jbvNumeric;
                                val.val.numeric = DatumGetNumeric(
-                                                                                                 DirectFunctionCall3(numeric_in, CStringGetDatum(tmp.data), 0, -1));
-
+                                                                                         DirectFunctionCall3(numeric_in,
+                                                                                 CStringGetDatum(tmp.data), 0, -1));
                        }
                        else
                        {
                                val.type = jbvString;
-                               val.val.string.len = HS_VALLEN(entries, i);
-                               val.val.string.val = HS_VAL(entries, base, i);
+                               val.val.string.len = HSTORE_VALLEN(entries, i);
+                               val.val.string.val = HSTORE_VAL(entries, base, i);
                        }
                }
                (void) pushJsonbValue(&state, WJB_VALUE, &val);
index 9e18a2b5128b416cdbabcc2cf03092afb90f0817..1e2dc881c14e1b6f02b955d6327c07a35a4ddbad 100644 (file)
@@ -48,10 +48,10 @@ hstoreFindKey(HStore *hs, int *lowbound, char *key, int keylen)
 
                stopMiddle = stopLow + (stopHigh - stopLow) / 2;
 
-               if (HS_KEYLEN(entries, stopMiddle) == keylen)
-                       difference = memcmp(HS_KEY(entries, base, stopMiddle), key, keylen);
+               if (HSTORE_KEYLEN(entries, stopMiddle) == keylen)
+                       difference = memcmp(HSTORE_KEY(entries, base, stopMiddle), key, keylen);
                else
-                       difference = (HS_KEYLEN(entries, stopMiddle) > keylen) ? 1 : -1;
+                       difference = (HSTORE_KEYLEN(entries, stopMiddle) > keylen) ? 1 : -1;
 
                if (difference == 0)
                {
@@ -137,11 +137,11 @@ hstore_fetchval(PG_FUNCTION_ARGS)
        int                     idx = hstoreFindKey(hs, NULL,
                                                                        VARDATA_ANY(key), VARSIZE_ANY_EXHDR(key));
 
-       if (idx < 0 || HS_VALISNULL(entries, idx))
+       if (idx < 0 || HSTORE_VALISNULL(entries, idx))
                PG_RETURN_NULL();
 
-       out = cstring_to_text_with_len(HS_VAL(entries, STRPTR(hs), idx),
-                                                                  HS_VALLEN(entries, idx));
+       out = cstring_to_text_with_len(HSTORE_VAL(entries, STRPTR(hs), idx),
+                                                                  HSTORE_VALLEN(entries, idx));
 
        PG_RETURN_TEXT_P(out);
 }
@@ -237,7 +237,7 @@ hstore_defined(PG_FUNCTION_ARGS)
        HEntry     *entries = ARRPTR(hs);
        int                     idx = hstoreFindKey(hs, NULL,
                                                                        VARDATA_ANY(key), VARSIZE_ANY_EXHDR(key));
-       bool            res = (idx >= 0 && !HS_VALISNULL(entries, idx));
+       bool            res = (idx >= 0 && !HSTORE_VALISNULL(entries, idx));
 
        PG_RETURN_BOOL(res);
 }
@@ -271,14 +271,15 @@ hstore_delete(PG_FUNCTION_ARGS)
 
        for (i = 0; i < count; ++i)
        {
-               int                     len = HS_KEYLEN(es, i);
-               char       *ptrs = HS_KEY(es, bufs, i);
+               int                     len = HSTORE_KEYLEN(es, i);
+               char       *ptrs = HSTORE_KEY(es, bufs, i);
 
                if (!(len == keylen && memcmp(ptrs, keyptr, keylen) == 0))
                {
-                       int                     vallen = HS_VALLEN(es, i);
+                       int                     vallen = HSTORE_VALLEN(es, i);
 
-                       HS_COPYITEM(ed, bufd, ptrd, ptrs, len, vallen, HS_VALISNULL(es, i));
+                       HS_COPYITEM(ed, bufd, ptrd, ptrs, len, vallen,
+                                               HSTORE_VALISNULL(es, i));
                        ++outcount;
                }
        }
@@ -338,10 +339,10 @@ hstore_delete_array(PG_FUNCTION_ARGS)
                        difference = -1;
                else
                {
-                       int                     skeylen = HS_KEYLEN(es, i);
+                       int                     skeylen = HSTORE_KEYLEN(es, i);
 
                        if (skeylen == key_pairs[j].keylen)
-                               difference = memcmp(HS_KEY(es, ps, i),
+                               difference = memcmp(HSTORE_KEY(es, ps, i),
                                                                        key_pairs[j].key,
                                                                        key_pairs[j].keylen);
                        else
@@ -355,8 +356,8 @@ hstore_delete_array(PG_FUNCTION_ARGS)
                else
                {
                        HS_COPYITEM(ed, bufd, pd,
-                                               HS_KEY(es, ps, i), HS_KEYLEN(es, i),
-                                               HS_VALLEN(es, i), HS_VALISNULL(es, i));
+                                               HSTORE_KEY(es, ps, i), HSTORE_KEYLEN(es, i),
+                                               HSTORE_VALLEN(es, i), HSTORE_VALISNULL(es, i));
                        ++outcount;
                        ++i;
                }
@@ -421,12 +422,12 @@ hstore_delete_hstore(PG_FUNCTION_ARGS)
                        difference = -1;
                else
                {
-                       int                     skeylen = HS_KEYLEN(es, i);
-                       int                     s2keylen = HS_KEYLEN(es2, j);
+                       int                     skeylen = HSTORE_KEYLEN(es, i);
+                       int                     s2keylen = HSTORE_KEYLEN(es2, j);
 
                        if (skeylen == s2keylen)
-                               difference = memcmp(HS_KEY(es, ps, i),
-                                                                       HS_KEY(es2, ps2, j),
+                               difference = memcmp(HSTORE_KEY(es, ps, i),
+                                                                       HSTORE_KEY(es2, ps2, j),
                                                                        skeylen);
                        else
                                difference = (skeylen > s2keylen) ? 1 : -1;
@@ -436,16 +437,17 @@ hstore_delete_hstore(PG_FUNCTION_ARGS)
                        ++j;
                else if (difference == 0)
                {
-                       int                     svallen = HS_VALLEN(es, i);
-                       int                     snullval = HS_VALISNULL(es, i);
-
-                       if (snullval != HS_VALISNULL(es2, j)
-                               || (!snullval
-                                       && (svallen != HS_VALLEN(es2, j)
-                       || memcmp(HS_VAL(es, ps, i), HS_VAL(es2, ps2, j), svallen) != 0)))
+                       int                     svallen = HSTORE_VALLEN(es, i);
+                       int                     snullval = HSTORE_VALISNULL(es, i);
+
+                       if (snullval != HSTORE_VALISNULL(es2, j) ||
+                               (!snullval && (svallen != HSTORE_VALLEN(es2, j) ||
+                                                          memcmp(HSTORE_VAL(es, ps, i),
+                                                                         HSTORE_VAL(es2, ps2, j),
+                                                                         svallen) != 0)))
                        {
                                HS_COPYITEM(ed, bufd, pd,
-                                                       HS_KEY(es, ps, i), HS_KEYLEN(es, i),
+                                                       HSTORE_KEY(es, ps, i), HSTORE_KEYLEN(es, i),
                                                        svallen, snullval);
                                ++outcount;
                        }
@@ -454,8 +456,8 @@ hstore_delete_hstore(PG_FUNCTION_ARGS)
                else
                {
                        HS_COPYITEM(ed, bufd, pd,
-                                               HS_KEY(es, ps, i), HS_KEYLEN(es, i),
-                                               HS_VALLEN(es, i), HS_VALISNULL(es, i));
+                                               HSTORE_KEY(es, ps, i), HSTORE_KEYLEN(es, i),
+                                               HSTORE_VALLEN(es, i), HSTORE_VALISNULL(es, i));
                        ++outcount;
                        ++i;
                }
@@ -530,12 +532,12 @@ hstore_concat(PG_FUNCTION_ARGS)
                        difference = -1;
                else
                {
-                       int                     s1keylen = HS_KEYLEN(es1, s1idx);
-                       int                     s2keylen = HS_KEYLEN(es2, s2idx);
+                       int                     s1keylen = HSTORE_KEYLEN(es1, s1idx);
+                       int                     s2keylen = HSTORE_KEYLEN(es2, s2idx);
 
                        if (s1keylen == s2keylen)
-                               difference = memcmp(HS_KEY(es1, ps1, s1idx),
-                                                                       HS_KEY(es2, ps2, s2idx),
+                               difference = memcmp(HSTORE_KEY(es1, ps1, s1idx),
+                                                                       HSTORE_KEY(es2, ps2, s2idx),
                                                                        s1keylen);
                        else
                                difference = (s1keylen > s2keylen) ? 1 : -1;
@@ -544,8 +546,8 @@ hstore_concat(PG_FUNCTION_ARGS)
                if (difference >= 0)
                {
                        HS_COPYITEM(ed, bufd, pd,
-                                               HS_KEY(es2, ps2, s2idx), HS_KEYLEN(es2, s2idx),
-                                               HS_VALLEN(es2, s2idx), HS_VALISNULL(es2, s2idx));
+                                         HSTORE_KEY(es2, ps2, s2idx), HSTORE_KEYLEN(es2, s2idx),
+                                       HSTORE_VALLEN(es2, s2idx), HSTORE_VALISNULL(es2, s2idx));
                        ++s2idx;
                        if (difference == 0)
                                ++s1idx;
@@ -553,8 +555,8 @@ hstore_concat(PG_FUNCTION_ARGS)
                else
                {
                        HS_COPYITEM(ed, bufd, pd,
-                                               HS_KEY(es1, ps1, s1idx), HS_KEYLEN(es1, s1idx),
-                                               HS_VALLEN(es1, s1idx), HS_VALISNULL(es1, s1idx));
+                                         HSTORE_KEY(es1, ps1, s1idx), HSTORE_KEYLEN(es1, s1idx),
+                                       HSTORE_VALLEN(es1, s1idx), HSTORE_VALISNULL(es1, s1idx));
                        ++s1idx;
                }
        }
@@ -604,7 +606,7 @@ hstore_slice_to_array(PG_FUNCTION_ARGS)
                else
                        idx = hstoreFindKey(hs, NULL, VARDATA(key), VARSIZE(key) - VARHDRSZ);
 
-               if (idx < 0 || HS_VALISNULL(entries, idx))
+               if (idx < 0 || HSTORE_VALISNULL(entries, idx))
                {
                        out_nulls[i] = true;
                        out_datums[i] = (Datum) 0;
@@ -612,8 +614,8 @@ hstore_slice_to_array(PG_FUNCTION_ARGS)
                else
                {
                        out_datums[i] = PointerGetDatum(
-                                                 cstring_to_text_with_len(HS_VAL(entries, ptr, idx),
-                                                                                                  HS_VALLEN(entries, idx)));
+                                         cstring_to_text_with_len(HSTORE_VAL(entries, ptr, idx),
+                                                                                          HSTORE_VALLEN(entries, idx)));
                        out_nulls[i] = false;
                }
        }
@@ -671,9 +673,9 @@ hstore_slice_to_hstore(PG_FUNCTION_ARGS)
                {
                        out_pairs[out_count].key = key_pairs[i].key;
                        bufsiz += (out_pairs[out_count].keylen = key_pairs[i].keylen);
-                       out_pairs[out_count].val = HS_VAL(entries, ptr, idx);
-                       bufsiz += (out_pairs[out_count].vallen = HS_VALLEN(entries, idx));
-                       out_pairs[out_count].isnull = HS_VALISNULL(entries, idx);
+                       out_pairs[out_count].val = HSTORE_VAL(entries, ptr, idx);
+                       bufsiz += (out_pairs[out_count].vallen = HSTORE_VALLEN(entries, idx));
+                       out_pairs[out_count].isnull = HSTORE_VALISNULL(entries, idx);
                        out_pairs[out_count].needfree = false;
                        ++out_count;
                }
@@ -712,10 +714,10 @@ hstore_akeys(PG_FUNCTION_ARGS)
 
        for (i = 0; i < count; ++i)
        {
-               text       *item = cstring_to_text_with_len(HS_KEY(entries, base, i),
-                                                                                                       HS_KEYLEN(entries, i));
+               text       *t = cstring_to_text_with_len(HSTORE_KEY(entries, base, i),
+                                                                                                HSTORE_KEYLEN(entries, i));
 
-               d[i] = PointerGetDatum(item);
+               d[i] = PointerGetDatum(t);
        }
 
        a = construct_array(d, count,
@@ -750,15 +752,15 @@ hstore_avals(PG_FUNCTION_ARGS)
 
        for (i = 0; i < count; ++i)
        {
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                {
                        d[i] = (Datum) 0;
                        nulls[i] = true;
                }
                else
                {
-                       text       *item = cstring_to_text_with_len(HS_VAL(entries, base, i),
-                                                                                                         HS_VALLEN(entries, i));
+                       text       *item = cstring_to_text_with_len(HSTORE_VAL(entries, base, i),
+                                                                                                 HSTORE_VALLEN(entries, i));
 
                        d[i] = PointerGetDatum(item);
                        nulls[i] = false;
@@ -795,21 +797,21 @@ hstore_to_array_internal(HStore *hs, int ndims)
 
        for (i = 0; i < count; ++i)
        {
-               text       *key = cstring_to_text_with_len(HS_KEY(entries, base, i),
-                                                                                                  HS_KEYLEN(entries, i));
+               text       *key = cstring_to_text_with_len(HSTORE_KEY(entries, base, i),
+                                                                                                  HSTORE_KEYLEN(entries, i));
 
                out_datums[i * 2] = PointerGetDatum(key);
                out_nulls[i * 2] = false;
 
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                {
                        out_datums[i * 2 + 1] = (Datum) 0;
                        out_nulls[i * 2 + 1] = true;
                }
                else
                {
-                       text       *item = cstring_to_text_with_len(HS_VAL(entries, base, i),
-                                                                                                         HS_VALLEN(entries, i));
+                       text       *item = cstring_to_text_with_len(HSTORE_VAL(entries, base, i),
+                                                                                                 HSTORE_VALLEN(entries, i));
 
                        out_datums[i * 2 + 1] = PointerGetDatum(item);
                        out_nulls[i * 2 + 1] = false;
@@ -903,8 +905,8 @@ hstore_skeys(PG_FUNCTION_ARGS)
                HEntry     *entries = ARRPTR(hs);
                text       *item;
 
-               item = cstring_to_text_with_len(HS_KEY(entries, STRPTR(hs), i),
-                                                                               HS_KEYLEN(entries, i));
+               item = cstring_to_text_with_len(HSTORE_KEY(entries, STRPTR(hs), i),
+                                                                               HSTORE_KEYLEN(entries, i));
 
                SRF_RETURN_NEXT(funcctx, PointerGetDatum(item));
        }
@@ -936,7 +938,7 @@ hstore_svals(PG_FUNCTION_ARGS)
        {
                HEntry     *entries = ARRPTR(hs);
 
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                {
                        ReturnSetInfo *rsi;
 
@@ -950,8 +952,8 @@ hstore_svals(PG_FUNCTION_ARGS)
                {
                        text       *item;
 
-                       item = cstring_to_text_with_len(HS_VAL(entries, STRPTR(hs), i),
-                                                                                       HS_VALLEN(entries, i));
+                       item = cstring_to_text_with_len(HSTORE_VAL(entries, STRPTR(hs), i),
+                                                                                       HSTORE_VALLEN(entries, i));
 
                        SRF_RETURN_NEXT(funcctx, PointerGetDatum(item));
                }
@@ -986,17 +988,19 @@ hstore_contains(PG_FUNCTION_ARGS)
        for (i = 0; res && i < tcount; ++i)
        {
                int                     idx = hstoreFindKey(val, &lastidx,
-                                                                         HS_KEY(te, tstr, i), HS_KEYLEN(te, i));
+                                                                               HSTORE_KEY(te, tstr, i),
+                                                                               HSTORE_KEYLEN(te, i));
 
                if (idx >= 0)
                {
-                       bool            nullval = HS_VALISNULL(te, i);
-                       int                     vallen = HS_VALLEN(te, i);
-
-                       if (nullval != HS_VALISNULL(ve, idx)
-                               || (!nullval
-                                       && (vallen != HS_VALLEN(ve, idx)
-                        || memcmp(HS_VAL(te, tstr, i), HS_VAL(ve, vstr, idx), vallen))))
+                       bool            nullval = HSTORE_VALISNULL(te, i);
+                       int                     vallen = HSTORE_VALLEN(te, i);
+
+                       if (nullval != HSTORE_VALISNULL(ve, idx) ||
+                               (!nullval && (vallen != HSTORE_VALLEN(ve, idx) ||
+                                                         memcmp(HSTORE_VAL(te, tstr, i),
+                                                                        HSTORE_VAL(ve, vstr, idx),
+                                                                        vallen) != 0)))
                                res = false;
                }
                else
@@ -1047,19 +1051,19 @@ hstore_each(PG_FUNCTION_ARGS)
                text       *item;
                HeapTuple       tuple;
 
-               item = cstring_to_text_with_len(HS_KEY(entries, ptr, i),
-                                                                               HS_KEYLEN(entries, i));
+               item = cstring_to_text_with_len(HSTORE_KEY(entries, ptr, i),
+                                                                               HSTORE_KEYLEN(entries, i));
                dvalues[0] = PointerGetDatum(item);
 
-               if (HS_VALISNULL(entries, i))
+               if (HSTORE_VALISNULL(entries, i))
                {
                        dvalues[1] = (Datum) 0;
                        nulls[1] = true;
                }
                else
                {
-                       item = cstring_to_text_with_len(HS_VAL(entries, ptr, i),
-                                                                                       HS_VALLEN(entries, i));
+                       item = cstring_to_text_with_len(HSTORE_VAL(entries, ptr, i),
+                                                                                       HSTORE_VALLEN(entries, i));
                        dvalues[1] = PointerGetDatum(item);
                }
 
index fbbb4c8e762ab494337f325f371b890e7458d243..d40a792730779c4b443ef0c0b356f3daf315c01f 100644 (file)
@@ -27,8 +27,11 @@ hstore_to_plperl(PG_FUNCTION_ARGS)
                const char *key;
                SV                 *value;
 
-               key = pnstrdup(HS_KEY(entries, base, i), HS_KEYLEN(entries, i));
-               value = HS_VALISNULL(entries, i) ? newSV(0) : cstr2sv(pnstrdup(HS_VAL(entries, base, i), HS_VALLEN(entries, i)));
+               key = pnstrdup(HSTORE_KEY(entries, base, i),
+                                          HSTORE_KEYLEN(entries, i));
+               value = HSTORE_VALISNULL(entries, i) ? newSV(0) :
+                       cstr2sv(pnstrdup(HSTORE_VAL(entries, base, i),
+                                                        HSTORE_VALLEN(entries, i)));
 
                (void) hv_store(hv, key, strlen(key), value, 0);
        }
index a3316dd9eb1a5f3de40089b8ef0abe8b5e579840..6f2751a8df44905a74a2645966edb2e15d60d31a 100644 (file)
@@ -25,14 +25,16 @@ hstore_to_plpython(PG_FUNCTION_ARGS)
        {
                PyObject   *key;
 
-               key = PyString_FromStringAndSize(HS_KEY(entries, base, i), HS_KEYLEN(entries, i));
-               if (HS_VALISNULL(entries, i))
+               key = PyString_FromStringAndSize(HSTORE_KEY(entries, base, i),
+                                                                                HSTORE_KEYLEN(entries, i));
+               if (HSTORE_VALISNULL(entries, i))
                        PyDict_SetItem(dict, key, Py_None);
                else
                {
                        PyObject   *value;
 
-                       value = PyString_FromStringAndSize(HS_VAL(entries, base, i), HS_VALLEN(entries, i));
+                       value = PyString_FromStringAndSize(HSTORE_VAL(entries, base, i),
+                                                                                          HSTORE_VALLEN(entries, i));
                        PyDict_SetItem(dict, key, value);
                        Py_XDECREF(value);
                }