* outNode - * converts a Node into ascii string and append it to 'str' */
| 4205 | * converts a Node into ascii string and append it to 'str' |
| 4206 | */ |
| 4207 | void |
| 4208 | outNode(StringInfo str, const void *obj) |
| 4209 | { |
| 4210 | /* Guard against stack overflow due to overly complex expressions */ |
| 4211 | check_stack_depth(); |
| 4212 | |
| 4213 | if (obj == NULL) |
| 4214 | appendStringInfoString(str, "<>"); |
| 4215 | else if (IsA(obj, List) || IsA(obj, IntList) || IsA(obj, OidList)) |
| 4216 | _outList(str, obj); |
| 4217 | else if (IsA(obj, Integer) || |
| 4218 | IsA(obj, Float) || |
| 4219 | IsA(obj, String) || |
| 4220 | IsA(obj, BitString)) |
| 4221 | { |
| 4222 | /* nodeRead does not want to see { } around these! */ |
| 4223 | _outValue(str, obj); |
| 4224 | } |
| 4225 | else |
| 4226 | { |
| 4227 | appendStringInfoChar(str, '{'); |
| 4228 | switch (nodeTag(obj)) |
| 4229 | { |
| 4230 | case T_PlannedStmt: |
| 4231 | _outPlannedStmt(str, obj); |
| 4232 | break; |
| 4233 | case T_QueryDispatchDesc: |
| 4234 | _outQueryDispatchDesc(str, obj); |
| 4235 | break; |
| 4236 | case T_SerializedParams: |
| 4237 | _outSerializedParams(str, obj); |
| 4238 | break; |
| 4239 | case T_OidAssignment: |
| 4240 | _outOidAssignment(str, obj); |
| 4241 | break; |
| 4242 | case T_Plan: |
| 4243 | _outPlan(str, obj); |
| 4244 | break; |
| 4245 | case T_Result: |
| 4246 | _outResult(str, obj); |
| 4247 | break; |
| 4248 | case T_ProjectSet: |
| 4249 | _outProjectSet(str, obj); |
| 4250 | break; |
| 4251 | case T_ModifyTable: |
| 4252 | _outModifyTable(str, obj); |
| 4253 | break; |
| 4254 | case T_Append: |
| 4255 | _outAppend(str, obj); |
| 4256 | break; |
| 4257 | case T_MergeAppend: |
| 4258 | _outMergeAppend(str, obj); |
| 4259 | break; |
| 4260 | case T_Sequence: |
| 4261 | _outSequence(str, obj); |
| 4262 | break; |
| 4263 | case T_RecursiveUnion: |
| 4264 | _outRecursiveUnion(str, obj); |
no test coverage detected