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
}
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,
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);
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';
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++ = '"';
}
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);
}
}
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
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);
}
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);
}
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;
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
{
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);
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)
{
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);
}
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);
}
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;
}
}
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
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;
}
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;
++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;
}
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;
}
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;
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;
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;
}
}
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;
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;
}
}
{
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;
}
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,
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;
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;
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));
}
{
HEntry *entries = ARRPTR(hs);
- if (HS_VALISNULL(entries, i))
+ if (HSTORE_VALISNULL(entries, i))
{
ReturnSetInfo *rsi;
{
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));
}
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
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);
}