|
|
|
|
@ -48,8 +48,8 @@ static void convertJsonbObject(StringInfo buffer, JEntry *header, JsonbValue *va |
|
|
|
|
static void convertJsonbScalar(StringInfo buffer, JEntry *header, JsonbValue *scalarVal); |
|
|
|
|
|
|
|
|
|
static int reserveFromBuffer(StringInfo buffer, int len); |
|
|
|
|
static void appendToBuffer(StringInfo buffer, const char *data, int len); |
|
|
|
|
static void copyToBuffer(StringInfo buffer, int offset, const char *data, int len); |
|
|
|
|
static void appendToBuffer(StringInfo buffer, const void *data, int len); |
|
|
|
|
static void copyToBuffer(StringInfo buffer, int offset, const void *data, int len); |
|
|
|
|
static short padBufferToInt(StringInfo buffer); |
|
|
|
|
|
|
|
|
|
static JsonbIterator *iteratorFromContainer(JsonbContainer *container, JsonbIterator *parent); |
|
|
|
|
@ -1508,7 +1508,7 @@ reserveFromBuffer(StringInfo buffer, int len) |
|
|
|
|
* Copy 'len' bytes to a previously reserved area in buffer. |
|
|
|
|
*/ |
|
|
|
|
static void |
|
|
|
|
copyToBuffer(StringInfo buffer, int offset, const char *data, int len) |
|
|
|
|
copyToBuffer(StringInfo buffer, int offset, const void *data, int len) |
|
|
|
|
{ |
|
|
|
|
memcpy(buffer->data + offset, data, len); |
|
|
|
|
} |
|
|
|
|
@ -1517,7 +1517,7 @@ copyToBuffer(StringInfo buffer, int offset, const char *data, int len) |
|
|
|
|
* A shorthand for reserveFromBuffer + copyToBuffer. |
|
|
|
|
*/ |
|
|
|
|
static void |
|
|
|
|
appendToBuffer(StringInfo buffer, const char *data, int len) |
|
|
|
|
appendToBuffer(StringInfo buffer, const void *data, int len) |
|
|
|
|
{ |
|
|
|
|
int offset; |
|
|
|
|
|
|
|
|
|
@ -1646,7 +1646,7 @@ convertJsonbArray(StringInfo buffer, JEntry *header, JsonbValue *val, int level) |
|
|
|
|
containerhead |= JB_FSCALAR; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
appendToBuffer(buffer, (char *) &containerhead, sizeof(uint32)); |
|
|
|
|
appendToBuffer(buffer, &containerhead, sizeof(uint32)); |
|
|
|
|
|
|
|
|
|
/* Reserve space for the JEntries of the elements. */ |
|
|
|
|
jentry_offset = reserveFromBuffer(buffer, sizeof(JEntry) * nElems); |
|
|
|
|
@ -1684,7 +1684,7 @@ convertJsonbArray(StringInfo buffer, JEntry *header, JsonbValue *val, int level) |
|
|
|
|
if ((i % JB_OFFSET_STRIDE) == 0) |
|
|
|
|
meta = (meta & JENTRY_TYPEMASK) | totallen | JENTRY_HAS_OFF; |
|
|
|
|
|
|
|
|
|
copyToBuffer(buffer, jentry_offset, (char *) &meta, sizeof(JEntry)); |
|
|
|
|
copyToBuffer(buffer, jentry_offset, &meta, sizeof(JEntry)); |
|
|
|
|
jentry_offset += sizeof(JEntry); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1723,7 +1723,7 @@ convertJsonbObject(StringInfo buffer, JEntry *header, JsonbValue *val, int level |
|
|
|
|
* variable-length payload. |
|
|
|
|
*/ |
|
|
|
|
containerheader = nPairs | JB_FOBJECT; |
|
|
|
|
appendToBuffer(buffer, (char *) &containerheader, sizeof(uint32)); |
|
|
|
|
appendToBuffer(buffer, &containerheader, sizeof(uint32)); |
|
|
|
|
|
|
|
|
|
/* Reserve space for the JEntries of the keys and values. */ |
|
|
|
|
jentry_offset = reserveFromBuffer(buffer, sizeof(JEntry) * nPairs * 2); |
|
|
|
|
@ -1765,7 +1765,7 @@ convertJsonbObject(StringInfo buffer, JEntry *header, JsonbValue *val, int level |
|
|
|
|
if ((i % JB_OFFSET_STRIDE) == 0) |
|
|
|
|
meta = (meta & JENTRY_TYPEMASK) | totallen | JENTRY_HAS_OFF; |
|
|
|
|
|
|
|
|
|
copyToBuffer(buffer, jentry_offset, (char *) &meta, sizeof(JEntry)); |
|
|
|
|
copyToBuffer(buffer, jentry_offset, &meta, sizeof(JEntry)); |
|
|
|
|
jentry_offset += sizeof(JEntry); |
|
|
|
|
} |
|
|
|
|
for (i = 0; i < nPairs; i++) |
|
|
|
|
@ -1800,7 +1800,7 @@ convertJsonbObject(StringInfo buffer, JEntry *header, JsonbValue *val, int level |
|
|
|
|
if (((i + nPairs) % JB_OFFSET_STRIDE) == 0) |
|
|
|
|
meta = (meta & JENTRY_TYPEMASK) | totallen | JENTRY_HAS_OFF; |
|
|
|
|
|
|
|
|
|
copyToBuffer(buffer, jentry_offset, (char *) &meta, sizeof(JEntry)); |
|
|
|
|
copyToBuffer(buffer, jentry_offset, &meta, sizeof(JEntry)); |
|
|
|
|
jentry_offset += sizeof(JEntry); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1840,7 +1840,7 @@ convertJsonbScalar(StringInfo buffer, JEntry *header, JsonbValue *scalarVal) |
|
|
|
|
numlen = VARSIZE_ANY(scalarVal->val.numeric); |
|
|
|
|
padlen = padBufferToInt(buffer); |
|
|
|
|
|
|
|
|
|
appendToBuffer(buffer, (char *) scalarVal->val.numeric, numlen); |
|
|
|
|
appendToBuffer(buffer, scalarVal->val.numeric, numlen); |
|
|
|
|
|
|
|
|
|
*header = JENTRY_ISNUMERIC | (padlen + numlen); |
|
|
|
|
break; |
|
|
|
|
|