static bool IsMergeableConst(Node *element) { if (IsA(element, RelabelType)) element = (Node *) ((RelabelType *) element)->arg; if (IsA(element, CoerceViaIO)) element = (Node *) ((CoerceViaIO *) element)->arg; if (IsA(element, FuncExpr)) { FuncExpr *func = (FuncExpr *) element; ListCell *temp; if (func->funcformat != COERCE_IMPLICIT_CAST) return false; foreach(temp, func->args) { Node *arg = lfirst(temp); if (IsA(arg, Const)) return true; } } else if (IsA(element, Const)) return true; else if (IsA(element, Param)) { Param *p = (Param *) element; if (p->paramkind == PARAM_EXTERN) return true; } return false; }