in src/pg_query_normalize.c [295:352]
static bool const_record_walker(Node *node, pgssConstLocations *jstate)
{
bool result;
if (node == NULL) return false;
if (IsA(node, A_Const))
{
RecordConstLocation(jstate, castNode(A_Const, node)->location);
}
else if (IsA(node, ParamRef))
{
/* Track the highest ParamRef number */
if (((ParamRef *) node)->number > jstate->highest_extern_param_id)
jstate->highest_extern_param_id = castNode(ParamRef, node)->number;
}
else if (IsA(node, DefElem))
{
return const_record_walker((Node *) ((DefElem *) node)->arg, jstate);
}
else if (IsA(node, RawStmt))
{
return const_record_walker((Node *) ((RawStmt *) node)->stmt, jstate);
}
else if (IsA(node, VariableSetStmt))
{
return const_record_walker((Node *) ((VariableSetStmt *) node)->args, jstate);
}
else if (IsA(node, CopyStmt))
{
return const_record_walker((Node *) ((CopyStmt *) node)->query, jstate);
}
else if (IsA(node, ExplainStmt))
{
return const_record_walker((Node *) ((ExplainStmt *) node)->query, jstate);
}
else if (IsA(node, AlterRoleStmt))
{
return const_record_walker((Node *) ((AlterRoleStmt *) node)->options, jstate);
}
else if (IsA(node, DeclareCursorStmt))
{
return const_record_walker((Node *) ((DeclareCursorStmt *) node)->query, jstate);
}
PG_TRY();
{
result = raw_expression_tree_walker(node, const_record_walker, (void*) jstate);
}
PG_CATCH();
{
FlushErrorState();
result = false;
}
PG_END_TRY();
return result;
}