Clarification of nodeToString() use cases - Mailing list pgsql-hackers

From Andrey Lepikhov
Subject Clarification of nodeToString() use cases
Date
Msg-id [email protected]
Whole thread Raw
Responses XMLNAMESPACES (was Re: Clarification of nodeToString() use cases)
List pgsql-hackers
Hi, Hackers!

In the AQO project (Adaptive Query Optimization) [1] the nodeToString() 
function is used by the planner to convert an query parse tree into a 
string to generate a hash value [2].
In PostgreSQL v.11 call nodeToString(parse) segfaulted.
The reason is: parse tree node for XMLNAMESPACES clause has null pointer 
in the case of DEFAULT namespace (the pointer will be initialized at 
executor on the first call). Function _outValue() uses value->val.str[0] 
[3] without checking of value->val.str.

I want to know, which of next options is correct:
1. Converting a parse tree into string with nodeToString() is illegal 
operation. We need to add a comment to the description of nodeToString().
2. We can use nodeToString() for parse tree convertation. In this case 
we need to check node variable 'value->val.str' to NULL pointer (Now I 
use this approach, see attachment).

[1] https://github.com/postgrespro/aqo
[2] hash.c, line 55.
[3] outfuncs.c, line 3312.

-- 
Andrey Lepikhov
Postgres Professional
https://postgrespro.com
The Russian Postgres Company

Attachment

pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: Collation versioning
Next
From: Bruce Momjian
Date:
Subject: Re: Postgres 11 release notes