@ -32,9 +32,6 @@
# include "utils/typcache.h"
# include "utils/syscache.h"
/* String to output for infinite dates and timestamps */
# define DT_INFINITY "\"infinity\""
/*
* The context of the parser is maintained by the recursive descent
* mechanism , but is passed explicitly to the error reporting routine
@ -365,8 +362,8 @@ json_count_array_elements(JsonLexContext *lex)
/*
* It ' s safe to do this with a shallow copy because the lexical routines
* don ' t scribble on the input . They do scribble on the other pointers etc ,
* so doing this with a copy makes that safe .
* don ' t scribble on the input . They do scribble on the other pointers
* etc , so doing this with a copy makes that safe .
*/
memcpy ( & copylex , lex , sizeof ( JsonLexContext ) ) ;
copylex . strval = NULL ; /* not interested in values here */
@ -1492,19 +1489,16 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
char buf [ MAXDATELEN + 1 ] ;
date = DatumGetDateADT ( val ) ;
/* Same as date_out(), but forcing DateStyle */
if ( DATE_NOT_FINITE ( date ) )
{
/* we have to format infinity ourselves */
appendStringInfoString ( result , DT_INFINITY ) ;
}
EncodeSpecialDate ( date , buf ) ;
else
{
j2date ( date + POSTGRES_EPOCH_JDATE ,
& ( tm . tm_year ) , & ( tm . tm_mon ) , & ( tm . tm_mday ) ) ;
EncodeDateOnly ( & tm , USE_XSD_DATES , buf ) ;
appendStringInfo ( result , " \" %s \" " , buf ) ;
}
appendStringInfo ( result , " \" %s \" " , buf ) ;
}
break ;
case JSONTYPE_TIMESTAMP :
@ -1515,21 +1509,16 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
char buf [ MAXDATELEN + 1 ] ;
timestamp = DatumGetTimestamp ( val ) ;
/* Same as timestamp_out(), but forcing DateStyle */
if ( TIMESTAMP_NOT_FINITE ( timestamp ) )
{
/* we have to format infinity ourselves */
appendStringInfoString ( result , DT_INFINITY ) ;
}
EncodeSpecialTimestamp ( timestamp , buf ) ;
else if ( timestamp2tm ( timestamp , NULL , & tm , & fsec , NULL , NULL ) = = 0 )
{
EncodeDateTime ( & tm , fsec , false , 0 , NULL , USE_XSD_DATES , buf ) ;
appendStringInfo ( result , " \" %s \" " , buf ) ;
}
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " timestamp out of range " ) ) ) ;
appendStringInfo ( result , " \" %s \" " , buf ) ;
}
break ;
case JSONTYPE_TIMESTAMPTZ :
@ -1541,22 +1530,17 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
const char * tzn = NULL ;
char buf [ MAXDATELEN + 1 ] ;
timestamp = DatumGetTimestamp ( val ) ;
timestamp = DatumGetTimestampTz ( val ) ;
/* Same as timestamptz_out(), but forcing DateStyle */
if ( TIMESTAMP_NOT_FINITE ( timestamp ) )
{
/* we have to format infinity ourselves */
appendStringInfoString ( result , DT_INFINITY ) ;
}
EncodeSpecialTimestamp ( timestamp , buf ) ;
else if ( timestamp2tm ( timestamp , & tz , & tm , & fsec , & tzn , NULL ) = = 0 )
{
EncodeDateTime ( & tm , fsec , true , tz , tzn , USE_XSD_DATES , buf ) ;
appendStringInfo ( result , " \" %s \" " , buf ) ;
}
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " timestamp out of range " ) ) ) ;
appendStringInfo ( result , " \" %s \" " , buf ) ;
}
break ;
case JSONTYPE_JSON :