@ -2040,7 +2040,16 @@ jsonb_bool(PG_FUNCTION_ARGS)
Jsonb * in = PG_GETARG_JSONB_P ( 0 ) ;
Jsonb * in = PG_GETARG_JSONB_P ( 0 ) ;
JsonbValue v ;
JsonbValue v ;
if ( ! JsonbExtractScalar ( & in - > root , & v ) | | v . type ! = jbvBool )
if ( ! JsonbExtractScalar ( & in - > root , & v ) )
cannotCastJsonbValue ( v . type , " boolean " ) ;
if ( v . type = = jbvNull )
{
PG_FREE_IF_COPY ( in , 0 ) ;
PG_RETURN_NULL ( ) ;
}
if ( v . type ! = jbvBool )
cannotCastJsonbValue ( v . type , " boolean " ) ;
cannotCastJsonbValue ( v . type , " boolean " ) ;
PG_FREE_IF_COPY ( in , 0 ) ;
PG_FREE_IF_COPY ( in , 0 ) ;
@ -2055,7 +2064,16 @@ jsonb_numeric(PG_FUNCTION_ARGS)
JsonbValue v ;
JsonbValue v ;
Numeric retValue ;
Numeric retValue ;
if ( ! JsonbExtractScalar ( & in - > root , & v ) | | v . type ! = jbvNumeric )
if ( ! JsonbExtractScalar ( & in - > root , & v ) )
cannotCastJsonbValue ( v . type , " numeric " ) ;
if ( v . type = = jbvNull )
{
PG_FREE_IF_COPY ( in , 0 ) ;
PG_RETURN_NULL ( ) ;
}
if ( v . type ! = jbvNumeric )
cannotCastJsonbValue ( v . type , " numeric " ) ;
cannotCastJsonbValue ( v . type , " numeric " ) ;
/*
/*
@ -2076,7 +2094,16 @@ jsonb_int2(PG_FUNCTION_ARGS)
JsonbValue v ;
JsonbValue v ;
Datum retValue ;
Datum retValue ;
if ( ! JsonbExtractScalar ( & in - > root , & v ) | | v . type ! = jbvNumeric )
if ( ! JsonbExtractScalar ( & in - > root , & v ) )
cannotCastJsonbValue ( v . type , " smallint " ) ;
if ( v . type = = jbvNull )
{
PG_FREE_IF_COPY ( in , 0 ) ;
PG_RETURN_NULL ( ) ;
}
if ( v . type ! = jbvNumeric )
cannotCastJsonbValue ( v . type , " smallint " ) ;
cannotCastJsonbValue ( v . type , " smallint " ) ;
retValue = DirectFunctionCall1 ( numeric_int2 ,
retValue = DirectFunctionCall1 ( numeric_int2 ,
@ -2094,7 +2121,16 @@ jsonb_int4(PG_FUNCTION_ARGS)
JsonbValue v ;
JsonbValue v ;
Datum retValue ;
Datum retValue ;
if ( ! JsonbExtractScalar ( & in - > root , & v ) | | v . type ! = jbvNumeric )
if ( ! JsonbExtractScalar ( & in - > root , & v ) )
cannotCastJsonbValue ( v . type , " integer " ) ;
if ( v . type = = jbvNull )
{
PG_FREE_IF_COPY ( in , 0 ) ;
PG_RETURN_NULL ( ) ;
}
if ( v . type ! = jbvNumeric )
cannotCastJsonbValue ( v . type , " integer " ) ;
cannotCastJsonbValue ( v . type , " integer " ) ;
retValue = DirectFunctionCall1 ( numeric_int4 ,
retValue = DirectFunctionCall1 ( numeric_int4 ,
@ -2112,7 +2148,16 @@ jsonb_int8(PG_FUNCTION_ARGS)
JsonbValue v ;
JsonbValue v ;
Datum retValue ;
Datum retValue ;
if ( ! JsonbExtractScalar ( & in - > root , & v ) | | v . type ! = jbvNumeric )
if ( ! JsonbExtractScalar ( & in - > root , & v ) )
cannotCastJsonbValue ( v . type , " bigint " ) ;
if ( v . type = = jbvNull )
{
PG_FREE_IF_COPY ( in , 0 ) ;
PG_RETURN_NULL ( ) ;
}
if ( v . type ! = jbvNumeric )
cannotCastJsonbValue ( v . type , " bigint " ) ;
cannotCastJsonbValue ( v . type , " bigint " ) ;
retValue = DirectFunctionCall1 ( numeric_int8 ,
retValue = DirectFunctionCall1 ( numeric_int8 ,
@ -2130,7 +2175,16 @@ jsonb_float4(PG_FUNCTION_ARGS)
JsonbValue v ;
JsonbValue v ;
Datum retValue ;
Datum retValue ;
if ( ! JsonbExtractScalar ( & in - > root , & v ) | | v . type ! = jbvNumeric )
if ( ! JsonbExtractScalar ( & in - > root , & v ) )
cannotCastJsonbValue ( v . type , " real " ) ;
if ( v . type = = jbvNull )
{
PG_FREE_IF_COPY ( in , 0 ) ;
PG_RETURN_NULL ( ) ;
}
if ( v . type ! = jbvNumeric )
cannotCastJsonbValue ( v . type , " real " ) ;
cannotCastJsonbValue ( v . type , " real " ) ;
retValue = DirectFunctionCall1 ( numeric_float4 ,
retValue = DirectFunctionCall1 ( numeric_float4 ,
@ -2148,7 +2202,16 @@ jsonb_float8(PG_FUNCTION_ARGS)
JsonbValue v ;
JsonbValue v ;
Datum retValue ;
Datum retValue ;
if ( ! JsonbExtractScalar ( & in - > root , & v ) | | v . type ! = jbvNumeric )
if ( ! JsonbExtractScalar ( & in - > root , & v ) )
cannotCastJsonbValue ( v . type , " double precision " ) ;
if ( v . type = = jbvNull )
{
PG_FREE_IF_COPY ( in , 0 ) ;
PG_RETURN_NULL ( ) ;
}
if ( v . type ! = jbvNumeric )
cannotCastJsonbValue ( v . type , " double precision " ) ;
cannotCastJsonbValue ( v . type , " double precision " ) ;
retValue = DirectFunctionCall1 ( numeric_float8 ,
retValue = DirectFunctionCall1 ( numeric_float8 ,