@ -57,13 +57,13 @@ static short padBufferToInt(StringInfo buffer);
static JsonbIterator * iteratorFromContainer ( JsonbContainer * container , JsonbIterator * parent ) ;
static JsonbIterator * freeAndGetParent ( JsonbIterator * it ) ;
static JsonbParseState * pushState ( JsonbParseState * * pstate ) ;
static void appendKey ( JsonbParseState * pstate , JsonbValue * scalarVal ) ;
static void appendKey ( JsonbParseState * pstate , JsonbValue * string ) ;
static void appendValue ( JsonbParseState * pstate , JsonbValue * scalarVal ) ;
static void appendElement ( JsonbParseState * pstate , JsonbValue * scalarVal ) ;
static int lengthCompareJsonbStringValue ( const void * a , const void * b ) ;
static int lengthCompareJsonbString ( const char * val1 , int len1 ,
const char * val2 , int len2 ) ;
static int lengthCompareJsonbPair ( const void * a , const void * b , void * arg ) ;
static int lengthCompareJsonbPair ( const void * a , const void * b , void * binequal ) ;
static void uniqueifyJsonbObject ( JsonbValue * object ) ;
static JsonbValue * pushJsonbValueScalar ( JsonbParseState * * pstate ,
JsonbIteratorToken seq ,
@ -1394,22 +1394,22 @@ JsonbHashScalarValueExtended(const JsonbValue *scalarVal, uint64 *hash,
* Are two scalar JsonbValues of the same type a and b equal ?
*/
static bool
equalsJsonbScalarValue ( JsonbValue * aScalar , JsonbValue * bScalar )
equalsJsonbScalarValue ( JsonbValue * a , JsonbValue * b )
{
if ( aScalar - > type = = bScalar - > type )
if ( a - > type = = b - > type )
{
switch ( aScalar - > type )
switch ( a - > type )
{
case jbvNull :
return true ;
case jbvString :
return lengthCompareJsonbStringValue ( aScalar , bScalar ) = = 0 ;
return lengthCompareJsonbStringValue ( a , b ) = = 0 ;
case jbvNumeric :
return DatumGetBool ( DirectFunctionCall2 ( numeric_eq ,
PointerGetDatum ( aScalar - > val . numeric ) ,
PointerGetDatum ( bScalar - > val . numeric ) ) ) ;
PointerGetDatum ( a - > val . numeric ) ,
PointerGetDatum ( b - > val . numeric ) ) ) ;
case jbvBool :
return aScalar - > val . boolean = = bScalar - > val . boolean ;
return a - > val . boolean = = b - > val . boolean ;
default :
elog ( ERROR , " invalid jsonb scalar type " ) ;
@ -1426,28 +1426,28 @@ equalsJsonbScalarValue(JsonbValue *aScalar, JsonbValue *bScalar)
* operators , where a lexical sort order is generally expected .
*/
static int
compareJsonbScalarValue ( JsonbValue * aScalar , JsonbValue * bScalar )
compareJsonbScalarValue ( JsonbValue * a , JsonbValue * b )
{
if ( aScalar - > type = = bScalar - > type )
if ( a - > type = = b - > type )
{
switch ( aScalar - > type )
switch ( a - > type )
{
case jbvNull :
return 0 ;
case jbvString :
return varstr_cmp ( aScalar - > val . string . val ,
aScalar - > val . string . len ,
bScalar - > val . string . val ,
bScalar - > val . string . len ,
return varstr_cmp ( a - > val . string . val ,
a - > val . string . len ,
b - > val . string . val ,
b - > val . string . len ,
DEFAULT_COLLATION_OID ) ;
case jbvNumeric :
return DatumGetInt32 ( DirectFunctionCall2 ( numeric_cmp ,
PointerGetDatum ( aScalar - > val . numeric ) ,
PointerGetDatum ( bScalar - > val . numeric ) ) ) ;
PointerGetDatum ( a - > val . numeric ) ,
PointerGetDatum ( b - > val . numeric ) ) ) ;
case jbvBool :
if ( aScalar - > val . boolean = = bScalar - > val . boolean )
if ( a - > val . boolean = = b - > val . boolean )
return 0 ;
else if ( aScalar - > val . boolean > bScalar - > val . boolean )
else if ( a - > val . boolean > b - > val . boolean )
return 1 ;
else
return - 1 ;
@ -1608,13 +1608,13 @@ convertJsonbValue(StringInfo buffer, JEntry *header, JsonbValue *val, int level)
}
static void
convertJsonbArray ( StringInfo buffer , JEntry * p header, JsonbValue * val , int level )
convertJsonbArray ( StringInfo buffer , JEntry * header , JsonbValue * val , int level )
{
int base_offset ;
int jentry_offset ;
int i ;
int totallen ;
uint32 header ;
uint32 container head;
int nElems = val - > val . array . nElems ;
/* Remember where in the buffer this array starts. */
@ -1627,15 +1627,15 @@ convertJsonbArray(StringInfo buffer, JEntry *pheader, JsonbValue *val, int level
* Construct the header Jentry and store it in the beginning of the
* variable - length payload .
*/
header = nElems | JB_FARRAY ;
container head = nElems | JB_FARRAY ;
if ( val - > val . array . rawScalar )
{
Assert ( nElems = = 1 ) ;
Assert ( level = = 0 ) ;
header | = JB_FSCALAR ;
container head | = JB_FSCALAR ;
}
appendToBuffer ( buffer , ( char * ) & header , sizeof ( uint32 ) ) ;
appendToBuffer ( buffer , ( char * ) & container head, sizeof ( uint32 ) ) ;
/* Reserve space for the JEntries of the elements. */
jentry_offset = reserveFromBuffer ( buffer , sizeof ( JEntry ) * nElems ) ;
@ -1688,17 +1688,17 @@ convertJsonbArray(StringInfo buffer, JEntry *pheader, JsonbValue *val, int level
JENTRY_OFFLENMASK ) ) ) ;
/* Initialize the header of this node in the container's JEntry array */
* p header = JENTRY_ISCONTAINER | totallen ;
* header = JENTRY_ISCONTAINER | totallen ;
}
static void
convertJsonbObject ( StringInfo buffer , JEntry * p header, JsonbValue * val , int level )
convertJsonbObject ( StringInfo buffer , JEntry * header , JsonbValue * val , int level )
{
int base_offset ;
int jentry_offset ;
int i ;
int totallen ;
uint32 header ;
uint32 container header;
int nPairs = val - > val . object . nPairs ;
/* Remember where in the buffer this object starts. */
@ -1711,8 +1711,8 @@ convertJsonbObject(StringInfo buffer, JEntry *pheader, JsonbValue *val, int leve
* Construct the header Jentry and store it in the beginning of the
* variable - length payload .
*/
header = nPairs | JB_FOBJECT ;
appendToBuffer ( buffer , ( char * ) & header , sizeof ( uint32 ) ) ;
container header = nPairs | JB_FOBJECT ;
appendToBuffer ( buffer , ( char * ) & container header, sizeof ( uint32 ) ) ;
/* Reserve space for the JEntries of the keys and values. */
jentry_offset = reserveFromBuffer ( buffer , sizeof ( JEntry ) * nPairs * 2 ) ;
@ -1804,11 +1804,11 @@ convertJsonbObject(StringInfo buffer, JEntry *pheader, JsonbValue *val, int leve
JENTRY_OFFLENMASK ) ) ) ;
/* Initialize the header of this node in the container's JEntry array */
* p header = JENTRY_ISCONTAINER | totallen ;
* header = JENTRY_ISCONTAINER | totallen ;
}
static void
convertJsonbScalar ( StringInfo buffer , JEntry * jentry , JsonbValue * scalarVal )
convertJsonbScalar ( StringInfo buffer , JEntry * header , JsonbValue * scalarVal )
{
int numlen ;
short padlen ;
@ -1816,13 +1816,13 @@ convertJsonbScalar(StringInfo buffer, JEntry *jentry, JsonbValue *scalarVal)
switch ( scalarVal - > type )
{
case jbvNull :
* jentry = JENTRY_ISNULL ;
* header = JENTRY_ISNULL ;
break ;
case jbvString :
appendToBuffer ( buffer , scalarVal - > val . string . val , scalarVal - > val . string . len ) ;
* jentry = scalarVal - > val . string . len ;
* header = scalarVal - > val . string . len ;
break ;
case jbvNumeric :
@ -1831,11 +1831,11 @@ convertJsonbScalar(StringInfo buffer, JEntry *jentry, JsonbValue *scalarVal)
appendToBuffer ( buffer , ( char * ) scalarVal - > val . numeric , numlen ) ;
* jentry = JENTRY_ISNUMERIC | ( padlen + numlen ) ;
* header = JENTRY_ISNUMERIC | ( padlen + numlen ) ;
break ;
case jbvBool :
* jentry = ( scalarVal - > val . boolean ) ?
* header = ( scalarVal - > val . boolean ) ?
JENTRY_ISBOOL_TRUE : JENTRY_ISBOOL_FALSE ;
break ;
@ -1851,7 +1851,7 @@ convertJsonbScalar(StringInfo buffer, JEntry *jentry, JsonbValue *scalarVal)
len = strlen ( buf ) ;
appendToBuffer ( buffer , buf , len ) ;
* jentry = len ;
* header = len ;
}
break ;