@ -81,7 +81,7 @@
/* Write a character-string (possibly NULL) field */
# define WRITE_STRING_FIELD(fldname) \
( appendStringInfo ( str , " : " CppAsString ( fldname ) " " ) , \
_ outToken( str , node - > fldname ) )
outToken ( str , node - > fldname ) )
/* Write a parse location field (actually same as INT case) */
# define WRITE_LOCATION_FIELD(fldname) \
@ -95,21 +95,21 @@
/* Write a bitmapset field */
# define WRITE_BITMAPSET_FIELD(fldname) \
( appendStringInfo ( str , " : " CppAsString ( fldname ) " " ) , \
_ outBitmapset( str , node - > fldname ) )
outBitmapset ( str , node - > fldname ) )
# define booltostr(x) ((x) ? "true" : "false")
/*
* _ outToken
* outToken
* Convert an ordinary string ( eg , an identifier ) into a form that
* will be decoded back to a plain token by read . c ' s functions .
*
* If a null or empty string is given , it is encoded as " <> " .
*/
static void
_ outToken( StringInfo str , const char * s )
void
outToken ( StringInfo str , const char * s )
{
if ( s = = NULL | | * s = = ' \0 ' )
{
@ -140,13 +140,6 @@ _outToken(StringInfo str, const char *s)
}
}
/* for use by extensions which define extensible nodes */
void
outToken ( StringInfo str , const char * s )
{
_outToken ( str , s ) ;
}
static void
_outList ( StringInfo str , const List * node )
{
@ -185,13 +178,13 @@ _outList(StringInfo str, const List *node)
}
/*
* _ outBitmapset -
* outBitmapset -
* converts a bitmap set of integers
*
* Note : the output format is " (b int int ...) " , similar to an integer List .
*/
static void
_ outBitmapset( StringInfo str , const Bitmapset * bms )
void
outBitmapset ( StringInfo str , const Bitmapset * bms )
{
int x ;
@ -203,13 +196,6 @@ _outBitmapset(StringInfo str, const Bitmapset *bms)
appendStringInfoChar ( str , ' ) ' ) ;
}
/* for use by extensions which define extensible nodes */
void
outBitmapset ( StringInfo str , const Bitmapset * bms )
{
_outBitmapset ( str , bms ) ;
}
/*
* Print the value of a Datum given its type .
*/
@ -632,7 +618,7 @@ _outCustomScan(StringInfo str, const CustomScan *node)
WRITE_BITMAPSET_FIELD ( custom_relids ) ;
/* CustomName is a key to lookup CustomScanMethods */
appendStringInfoString ( str , " :methods " ) ;
_ outToken( str , node - > methods - > CustomName ) ;
outToken ( str , node - > methods - > CustomName ) ;
}
static void
@ -1196,7 +1182,7 @@ _outBoolExpr(StringInfo str, const BoolExpr *node)
break ;
}
appendStringInfoString ( str , " :boolop " ) ;
_ outToken( str , opstr ) ;
outToken ( str , opstr ) ;
WRITE_NODE_FIELD ( args ) ;
WRITE_LOCATION_FIELD ( location ) ;
@ -1609,14 +1595,14 @@ _outPathInfo(StringInfo str, const Path *node)
{
WRITE_ENUM_FIELD ( pathtype , NodeTag ) ;
appendStringInfoString ( str , " :parent_relids " ) ;
_ outBitmapset( str , node - > parent - > relids ) ;
outBitmapset ( str , node - > parent - > relids ) ;
if ( node - > pathtarget ! = node - > parent - > reltarget )
WRITE_NODE_FIELD ( pathtarget ) ;
appendStringInfoString ( str , " :required_outer " ) ;
if ( node - > param_info )
_ outBitmapset( str , node - > param_info - > ppi_req_outer ) ;
outBitmapset ( str , node - > param_info - > ppi_req_outer ) ;
else
_ outBitmapset( str , NULL ) ;
outBitmapset ( str , NULL ) ;
WRITE_BOOL_FIELD ( parallel_aware ) ;
WRITE_BOOL_FIELD ( parallel_safe ) ;
WRITE_INT_FIELD ( parallel_workers ) ;
@ -1740,7 +1726,7 @@ _outCustomPath(StringInfo str, const CustomPath *node)
WRITE_NODE_FIELD ( custom_paths ) ;
WRITE_NODE_FIELD ( custom_private ) ;
appendStringInfoString ( str , " :methods " ) ;
_ outToken( str , node - > methods - > CustomName ) ;
outToken ( str , node - > methods - > CustomName ) ;
}
static void
@ -2994,12 +2980,12 @@ _outValue(StringInfo str, const Value *value)
case T_String :
/*
* We use _ outToken to provide escaping of the string ' s content ,
* We use outToken to provide escaping of the string ' s content ,
* but we don ' t want it to do anything with an empty string .
*/
appendStringInfoChar ( str , ' " ' ) ;
if ( value - > val . str [ 0 ] ! = ' \0 ' )
_ outToken( str , value - > val . str ) ;
outToken ( str , value - > val . str ) ;
appendStringInfoChar ( str , ' " ' ) ;
break ;
case T_BitString :
@ -3895,3 +3881,18 @@ nodeToString(const void *obj)
outNode ( & str , obj ) ;
return str . data ;
}
/*
* bmsToString -
* returns the ascii representation of the Bitmapset as a palloc ' d string
*/
char *
bmsToString ( const Bitmapset * bms )
{
StringInfoData str ;
/* see stringinfo.h for an explanation of this maneuver */
initStringInfo ( & str ) ;
outBitmapset ( & str , bms ) ;
return str . data ;
}