]> granicus.if.org Git - postgresql/blobdiff - src/backend/nodes/outfuncs.c
Support UPDATE/DELETE WHERE CURRENT OF cursor_name, per SQL standard.
[postgresql] / src / backend / nodes / outfuncs.c
index 1b85b9a8063d8543c5033e2d67f937c97f1b3d3a..869905f0cc548e01b42ecf74f314bbc850b43597 100644 (file)
@@ -3,12 +3,12 @@
  * outfuncs.c
  *       Output functions for Postgres tree nodes.
  *
- * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/nodes/outfuncs.c,v 1.278 2006/07/14 14:52:20 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/nodes/outfuncs.c,v 1.310 2007/06/11 01:16:22 tgl Exp $
  *
  * NOTES
  *       Every node type that can appear in stored rules' parsetrees *must*
@@ -234,6 +234,25 @@ _outDatum(StringInfo str, Datum value, int typlen, bool typbyval)
  *     Stuff from plannodes.h
  */
 
+static void
+_outPlannedStmt(StringInfo str, PlannedStmt *node)
+{
+       WRITE_NODE_TYPE("PLANNEDSTMT");
+
+       WRITE_ENUM_FIELD(commandType, CmdType);
+       WRITE_BOOL_FIELD(canSetTag);
+       WRITE_NODE_FIELD(planTree);
+       WRITE_NODE_FIELD(rtable);
+       WRITE_NODE_FIELD(resultRelations);
+       WRITE_NODE_FIELD(utilityStmt);
+       WRITE_NODE_FIELD(intoClause);
+       WRITE_NODE_FIELD(subplans);
+       WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+       WRITE_NODE_FIELD(returningLists);
+       WRITE_NODE_FIELD(rowMarks);
+       WRITE_INT_FIELD(nParamExec);
+}
+
 /*
  * print the basic stuff of all nodes that inherit from Plan
  */
@@ -251,7 +270,6 @@ _outPlanInfo(StringInfo str, Plan *node)
        WRITE_NODE_FIELD(initPlan);
        WRITE_BITMAPSET_FIELD(extParam);
        WRITE_BITMAPSET_FIELD(allParam);
-       WRITE_INT_FIELD(nParamExec);
 }
 
 /*
@@ -400,6 +418,7 @@ _outSubqueryScan(StringInfo str, SubqueryScan *node)
        _outScanInfo(str, (Scan *) node);
 
        WRITE_NODE_FIELD(subplan);
+       WRITE_NODE_FIELD(subrtable);
 }
 
 static void
@@ -408,6 +427,21 @@ _outFunctionScan(StringInfo str, FunctionScan *node)
        WRITE_NODE_TYPE("FUNCTIONSCAN");
 
        _outScanInfo(str, (Scan *) node);
+
+       WRITE_NODE_FIELD(funcexpr);
+       WRITE_NODE_FIELD(funccolnames);
+       WRITE_NODE_FIELD(funccoltypes);
+       WRITE_NODE_FIELD(funccoltypmods);
+}
+
+static void
+_outValuesScan(StringInfo str, ValuesScan *node)
+{
+       WRITE_NODE_TYPE("VALUESSCAN");
+
+       _outScanInfo(str, (Scan *) node);
+
+       WRITE_NODE_FIELD(values_lists);
 }
 
 static void
@@ -429,11 +463,28 @@ _outNestLoop(StringInfo str, NestLoop *node)
 static void
 _outMergeJoin(StringInfo str, MergeJoin *node)
 {
+       int                     numCols;
+       int                     i;
+
        WRITE_NODE_TYPE("MERGEJOIN");
 
        _outJoinPlanInfo(str, (Join *) node);
 
        WRITE_NODE_FIELD(mergeclauses);
+
+       numCols = list_length(node->mergeclauses);
+
+       appendStringInfo(str, " :mergeFamilies");
+       for (i = 0; i < numCols; i++)
+               appendStringInfo(str, " %u", node->mergeFamilies[i]);
+
+       appendStringInfo(str, " :mergeStrategies");
+       for (i = 0; i < numCols; i++)
+               appendStringInfo(str, " %d", node->mergeStrategies[i]);
+
+       appendStringInfo(str, " :mergeNullsFirst");
+       for (i = 0; i < numCols; i++)
+               appendStringInfo(str, " %d", (int) node->mergeNullsFirst[i]);
 }
 
 static void
@@ -472,6 +523,10 @@ _outGroup(StringInfo str, Group *node)
        appendStringInfo(str, " :grpColIdx");
        for (i = 0; i < node->numCols; i++)
                appendStringInfo(str, " %d", node->grpColIdx[i]);
+
+       appendStringInfo(str, " :grpOperators");
+       for (i = 0; i < node->numCols; i++)
+               appendStringInfo(str, " %u", node->grpOperators[i]);
 }
 
 static void
@@ -500,6 +555,10 @@ _outSort(StringInfo str, Sort *node)
        appendStringInfo(str, " :sortOperators");
        for (i = 0; i < node->numCols; i++)
                appendStringInfo(str, " %u", node->sortOperators[i]);
+
+       appendStringInfo(str, " :nullsFirst");
+       for (i = 0; i < node->numCols; i++)
+               appendStringInfo(str, " %s", booltostr(node->nullsFirst[i]));
 }
 
 static void
@@ -516,6 +575,10 @@ _outUnique(StringInfo str, Unique *node)
        appendStringInfo(str, " :uniqColIdx");
        for (i = 0; i < node->numCols; i++)
                appendStringInfo(str, " %d", node->uniqColIdx[i]);
+
+       appendStringInfo(str, " :uniqOperators");
+       for (i = 0; i < node->numCols; i++)
+               appendStringInfo(str, " %u", node->uniqOperators[i]);
 }
 
 static void
@@ -534,6 +597,10 @@ _outSetOp(StringInfo str, SetOp *node)
        for (i = 0; i < node->numCols; i++)
                appendStringInfo(str, " %d", node->dupColIdx[i]);
 
+       appendStringInfo(str, " :dupOperators");
+       for (i = 0; i < node->numCols; i++)
+               appendStringInfo(str, " %d", node->dupOperators[i]);
+
        WRITE_INT_FIELD(flagColIdx);
 }
 
@@ -587,6 +654,18 @@ _outRangeVar(StringInfo str, RangeVar *node)
        WRITE_NODE_FIELD(alias);
 }
 
+static void
+_outIntoClause(StringInfo str, IntoClause *node)
+{
+       WRITE_NODE_TYPE("INTOCLAUSE");
+
+       WRITE_NODE_FIELD(rel);
+       WRITE_NODE_FIELD(colNames);
+       WRITE_NODE_FIELD(options);
+       WRITE_ENUM_FIELD(onCommit, OnCommitAction);
+       WRITE_STRING_FIELD(tableSpaceName);
+}
+
 static void
 _outVar(StringInfo str, Var *node)
 {
@@ -607,6 +686,7 @@ _outConst(StringInfo str, Const *node)
        WRITE_NODE_TYPE("CONST");
 
        WRITE_OID_FIELD(consttype);
+       WRITE_INT_FIELD(consttypmod);
        WRITE_INT_FIELD(constlen);
        WRITE_BOOL_FIELD(constbyval);
        WRITE_BOOL_FIELD(constisnull);
@@ -626,6 +706,7 @@ _outParam(StringInfo str, Param *node)
        WRITE_ENUM_FIELD(paramkind, ParamKind);
        WRITE_INT_FIELD(paramid);
        WRITE_OID_FIELD(paramtype);
+       WRITE_INT_FIELD(paramtypmod);
 }
 
 static void
@@ -635,7 +716,7 @@ _outAggref(StringInfo str, Aggref *node)
 
        WRITE_OID_FIELD(aggfnoid);
        WRITE_OID_FIELD(aggtype);
-       WRITE_NODE_FIELD(target);
+       WRITE_NODE_FIELD(args);
        WRITE_UINT_FIELD(agglevelsup);
        WRITE_BOOL_FIELD(aggstar);
        WRITE_BOOL_FIELD(aggdistinct);
@@ -646,9 +727,9 @@ _outArrayRef(StringInfo str, ArrayRef *node)
 {
        WRITE_NODE_TYPE("ARRAYREF");
 
-       WRITE_OID_FIELD(refrestype);
        WRITE_OID_FIELD(refarraytype);
        WRITE_OID_FIELD(refelemtype);
+       WRITE_INT_FIELD(reftypmod);
        WRITE_NODE_FIELD(refupperindexpr);
        WRITE_NODE_FIELD(reflowerindexpr);
        WRITE_NODE_FIELD(refexpr);
@@ -747,9 +828,8 @@ _outSubPlan(StringInfo str, SubPlan *node)
        WRITE_ENUM_FIELD(subLinkType, SubLinkType);
        WRITE_NODE_FIELD(testexpr);
        WRITE_NODE_FIELD(paramIds);
-       WRITE_NODE_FIELD(plan);
        WRITE_INT_FIELD(plan_id);
-       WRITE_NODE_FIELD(rtable);
+       WRITE_OID_FIELD(firstColType);
        WRITE_BOOL_FIELD(useHashTable);
        WRITE_BOOL_FIELD(unknownEqFalse);
        WRITE_NODE_FIELD(setParam);
@@ -790,6 +870,29 @@ _outRelabelType(StringInfo str, RelabelType *node)
        WRITE_ENUM_FIELD(relabelformat, CoercionForm);
 }
 
+static void
+_outCoerceViaIO(StringInfo str, CoerceViaIO *node)
+{
+       WRITE_NODE_TYPE("COERCEVIAIO");
+
+       WRITE_NODE_FIELD(arg);
+       WRITE_OID_FIELD(resulttype);
+       WRITE_ENUM_FIELD(coerceformat, CoercionForm);
+}
+
+static void
+_outArrayCoerceExpr(StringInfo str, ArrayCoerceExpr *node)
+{
+       WRITE_NODE_TYPE("ARRAYCOERCEEXPR");
+
+       WRITE_NODE_FIELD(arg);
+       WRITE_OID_FIELD(elemfuncid);
+       WRITE_OID_FIELD(resulttype);
+       WRITE_INT_FIELD(resulttypmod);
+       WRITE_BOOL_FIELD(isExplicit);
+       WRITE_ENUM_FIELD(coerceformat, CoercionForm);
+}
+
 static void
 _outConvertRowtypeExpr(StringInfo str, ConvertRowtypeExpr *node)
 {
@@ -857,7 +960,7 @@ _outRowCompareExpr(StringInfo str, RowCompareExpr *node)
 
        WRITE_ENUM_FIELD(rctype, RowCompareType);
        WRITE_NODE_FIELD(opnos);
-       WRITE_NODE_FIELD(opclasses);
+       WRITE_NODE_FIELD(opfamilies);
        WRITE_NODE_FIELD(largs);
        WRITE_NODE_FIELD(rargs);
 }
@@ -881,6 +984,21 @@ _outMinMaxExpr(StringInfo str, MinMaxExpr *node)
        WRITE_NODE_FIELD(args);
 }
 
+static void
+_outXmlExpr(StringInfo str, XmlExpr *node)
+{
+       WRITE_NODE_TYPE("XMLEXPR");
+       
+       WRITE_ENUM_FIELD(op, XmlExprOp);
+       WRITE_STRING_FIELD(name);
+       WRITE_NODE_FIELD(named_args);
+       WRITE_NODE_FIELD(arg_names);
+       WRITE_NODE_FIELD(args);
+       WRITE_ENUM_FIELD(xmloption, XmlOptionType);
+       WRITE_OID_FIELD(type);
+       WRITE_INT_FIELD(typmod);
+}
+
 static void
 _outNullIfExpr(StringInfo str, NullIfExpr *node)
 {
@@ -940,6 +1058,15 @@ _outSetToDefault(StringInfo str, SetToDefault *node)
        WRITE_INT_FIELD(typeMod);
 }
 
+static void
+_outCurrentOfExpr(StringInfo str, CurrentOfExpr *node)
+{
+       WRITE_NODE_TYPE("CURRENTOFEXPR");
+
+       WRITE_UINT_FIELD(cvarno);
+       WRITE_STRING_FIELD(cursor_name);
+}
+
 static void
 _outTargetEntry(StringInfo str, TargetEntry *node)
 {
@@ -1161,6 +1288,19 @@ _outHashPath(StringInfo str, HashPath *node)
        WRITE_NODE_FIELD(path_hashclauses);
 }
 
+static void
+_outPlannerGlobal(StringInfo str, PlannerGlobal *node)
+{
+       WRITE_NODE_TYPE("PLANNERGLOBAL");
+
+       /* NB: this isn't a complete set of fields */
+       WRITE_NODE_FIELD(paramlist);
+       WRITE_NODE_FIELD(subplans);
+       WRITE_NODE_FIELD(subrtables);
+       WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+       WRITE_NODE_FIELD(finalrtable);
+}
+
 static void
 _outPlannerInfo(StringInfo str, PlannerInfo *node)
 {
@@ -1168,8 +1308,14 @@ _outPlannerInfo(StringInfo str, PlannerInfo *node)
 
        /* NB: this isn't a complete set of fields */
        WRITE_NODE_FIELD(parse);
+       WRITE_NODE_FIELD(glob);
+       WRITE_UINT_FIELD(query_level);
        WRITE_NODE_FIELD(join_rel_list);
-       WRITE_NODE_FIELD(equi_key_list);
+       WRITE_NODE_FIELD(resultRelations);
+       WRITE_NODE_FIELD(returningLists);
+       WRITE_NODE_FIELD(init_plans);
+       WRITE_NODE_FIELD(eq_classes);
+       WRITE_NODE_FIELD(canon_pathkeys);
        WRITE_NODE_FIELD(left_join_clauses);
        WRITE_NODE_FIELD(right_join_clauses);
        WRITE_NODE_FIELD(full_join_clauses);
@@ -1179,6 +1325,7 @@ _outPlannerInfo(StringInfo str, PlannerInfo *node)
        WRITE_NODE_FIELD(query_pathkeys);
        WRITE_NODE_FIELD(group_pathkeys);
        WRITE_NODE_FIELD(sort_pathkeys);
+       WRITE_FLOAT_FIELD(total_table_pages, "%.0f");
        WRITE_FLOAT_FIELD(tuple_fraction, "%.4f");
        WRITE_BOOL_FIELD(hasJoinRTEs);
        WRITE_BOOL_FIELD(hasOuterJoins);
@@ -1209,8 +1356,10 @@ _outRelOptInfo(StringInfo str, RelOptInfo *node)
        WRITE_UINT_FIELD(pages);
        WRITE_FLOAT_FIELD(tuples, "%.0f");
        WRITE_NODE_FIELD(subplan);
+       WRITE_NODE_FIELD(subrtable);
        WRITE_NODE_FIELD(baserestrictinfo);
        WRITE_NODE_FIELD(joininfo);
+       WRITE_BOOL_FIELD(has_eclass_joins);
        WRITE_BITMAPSET_FIELD(index_outer_relids);
        WRITE_NODE_FIELD(index_inner_paths);
 }
@@ -1233,12 +1382,49 @@ _outIndexOptInfo(StringInfo str, IndexOptInfo *node)
 }
 
 static void
-_outPathKeyItem(StringInfo str, PathKeyItem *node)
+_outEquivalenceClass(StringInfo str, EquivalenceClass *node)
 {
-       WRITE_NODE_TYPE("PATHKEYITEM");
+       /*
+        * To simplify reading, we just chase up to the topmost merged EC and
+        * print that, without bothering to show the merge-ees separately.
+        */
+       while (node->ec_merged)
+               node = node->ec_merged;
 
-       WRITE_NODE_FIELD(key);
-       WRITE_OID_FIELD(sortop);
+       WRITE_NODE_TYPE("EQUIVALENCECLASS");
+
+       WRITE_NODE_FIELD(ec_opfamilies);
+       WRITE_NODE_FIELD(ec_members);
+       WRITE_NODE_FIELD(ec_sources);
+       WRITE_NODE_FIELD(ec_derives);
+       WRITE_BITMAPSET_FIELD(ec_relids);
+       WRITE_BOOL_FIELD(ec_has_const);
+       WRITE_BOOL_FIELD(ec_has_volatile);
+       WRITE_BOOL_FIELD(ec_below_outer_join);
+       WRITE_BOOL_FIELD(ec_broken);
+}
+
+static void
+_outEquivalenceMember(StringInfo str, EquivalenceMember *node)
+{
+       WRITE_NODE_TYPE("EQUIVALENCEMEMBER");
+
+       WRITE_NODE_FIELD(em_expr);
+       WRITE_BITMAPSET_FIELD(em_relids);
+       WRITE_BOOL_FIELD(em_is_const);
+       WRITE_BOOL_FIELD(em_is_child);
+       WRITE_OID_FIELD(em_datatype);
+}
+
+static void
+_outPathKey(StringInfo str, PathKey *node)
+{
+       WRITE_NODE_TYPE("PATHKEY");
+
+       WRITE_NODE_FIELD(pk_eclass);
+       WRITE_OID_FIELD(pk_opfamily);
+       WRITE_INT_FIELD(pk_strategy);
+       WRITE_BOOL_FIELD(pk_nulls_first);
 }
 
 static void
@@ -1257,11 +1443,13 @@ _outRestrictInfo(StringInfo str, RestrictInfo *node)
        WRITE_BITMAPSET_FIELD(left_relids);
        WRITE_BITMAPSET_FIELD(right_relids);
        WRITE_NODE_FIELD(orclause);
-       WRITE_OID_FIELD(mergejoinoperator);
-       WRITE_OID_FIELD(left_sortop);
-       WRITE_OID_FIELD(right_sortop);
-       WRITE_NODE_FIELD(left_pathkey);
-       WRITE_NODE_FIELD(right_pathkey);
+       /* don't write parent_ec, leads to infinite recursion in plan tree dump */
+       WRITE_NODE_FIELD(mergeopfamilies);
+       /* don't write left_ec, leads to infinite recursion in plan tree dump */
+       /* don't write right_ec, leads to infinite recursion in plan tree dump */
+       WRITE_NODE_FIELD(left_em);
+       WRITE_NODE_FIELD(right_em);
+       WRITE_BOOL_FIELD(outer_is_left);
        WRITE_OID_FIELD(hashjoinoperator);
 }
 
@@ -1271,7 +1459,8 @@ _outInnerIndexscanInfo(StringInfo str, InnerIndexscanInfo *node)
        WRITE_NODE_TYPE("INNERINDEXSCANINFO");
        WRITE_BITMAPSET_FIELD(other_relids);
        WRITE_BOOL_FIELD(isouterjoin);
-       WRITE_NODE_FIELD(best_innerpath);
+       WRITE_NODE_FIELD(cheapest_startup_innerpath);
+       WRITE_NODE_FIELD(cheapest_total_innerpath);
 }
 
 static void
@@ -1283,6 +1472,7 @@ _outOuterJoinInfo(StringInfo str, OuterJoinInfo *node)
        WRITE_BITMAPSET_FIELD(min_righthand);
        WRITE_BOOL_FIELD(is_full_join);
        WRITE_BOOL_FIELD(lhs_strict);
+       WRITE_BOOL_FIELD(delay_upper_joins);
 }
 
 static void
@@ -1293,6 +1483,7 @@ _outInClauseInfo(StringInfo str, InClauseInfo *node)
        WRITE_BITMAPSET_FIELD(lefthand);
        WRITE_BITMAPSET_FIELD(righthand);
        WRITE_NODE_FIELD(sub_targetlist);
+       WRITE_NODE_FIELD(in_operators);
 }
 
 static void
@@ -1309,6 +1500,15 @@ _outAppendRelInfo(StringInfo str, AppendRelInfo *node)
        WRITE_OID_FIELD(parent_reloid);
 }
 
+static void
+_outPlannerParamItem(StringInfo str, PlannerParamItem *node)
+{
+       WRITE_NODE_TYPE("PLANNERPARAMITEM");
+
+       WRITE_NODE_FIELD(item);
+       WRITE_UINT_FIELD(abslevel);
+}
+
 /*****************************************************************************
  *
  *     Stuff from parsenodes.h.
@@ -1341,10 +1541,10 @@ _outIndexStmt(StringInfo str, IndexStmt *node)
        WRITE_NODE_FIELD(indexParams);
        WRITE_NODE_FIELD(options);
        WRITE_NODE_FIELD(whereClause);
-       WRITE_NODE_FIELD(rangetable);
        WRITE_BOOL_FIELD(unique);
        WRITE_BOOL_FIELD(primary);
        WRITE_BOOL_FIELD(isconstraint);
+       WRITE_BOOL_FIELD(concurrent);
 }
 
 static void
@@ -1371,16 +1571,13 @@ _outSelectStmt(StringInfo str, SelectStmt *node)
        WRITE_NODE_TYPE("SELECT");
 
        WRITE_NODE_FIELD(distinctClause);
-       WRITE_NODE_FIELD(into);
-       WRITE_NODE_FIELD(intoColNames);
-       WRITE_NODE_FIELD(intoOptions);
-       WRITE_ENUM_FIELD(intoOnCommit, OnCommitAction);
-       WRITE_STRING_FIELD(intoTableSpaceName);
+       WRITE_NODE_FIELD(intoClause);
        WRITE_NODE_FIELD(targetList);
        WRITE_NODE_FIELD(fromClause);
        WRITE_NODE_FIELD(whereClause);
        WRITE_NODE_FIELD(groupClause);
        WRITE_NODE_FIELD(havingClause);
+       WRITE_NODE_FIELD(valuesLists);
        WRITE_NODE_FIELD(sortClause);
        WRITE_NODE_FIELD(limitOffset);
        WRITE_NODE_FIELD(limitCount);
@@ -1422,6 +1619,16 @@ _outLockingClause(StringInfo str, LockingClause *node)
        WRITE_BOOL_FIELD(noWait);
 }
 
+static void
+_outXmlSerialize(StringInfo str, XmlSerialize *node)
+{
+       WRITE_NODE_TYPE("XMLSERIALIZE");
+
+       WRITE_ENUM_FIELD(xmloption, XmlOptionType);
+       WRITE_NODE_FIELD(expr);
+       WRITE_NODE_FIELD(typename);
+}
+
 static void
 _outColumnDef(StringInfo str, ColumnDef *node)
 {
@@ -1435,7 +1642,6 @@ _outColumnDef(StringInfo str, ColumnDef *node)
        WRITE_NODE_FIELD(raw_default);
        WRITE_STRING_FIELD(cooked_default);
        WRITE_NODE_FIELD(constraints);
-       WRITE_NODE_FIELD(support);
 }
 
 static void
@@ -1448,7 +1654,8 @@ _outTypeName(StringInfo str, TypeName *node)
        WRITE_BOOL_FIELD(timezone);
        WRITE_BOOL_FIELD(setof);
        WRITE_BOOL_FIELD(pct_type);
-       WRITE_INT_FIELD(typmod);
+       WRITE_NODE_FIELD(typmods);
+       WRITE_INT_FIELD(typemod);
        WRITE_NODE_FIELD(arrayBounds);
        WRITE_INT_FIELD(location);
 }
@@ -1470,6 +1677,8 @@ _outIndexElem(StringInfo str, IndexElem *node)
        WRITE_STRING_FIELD(name);
        WRITE_NODE_FIELD(expr);
        WRITE_NODE_FIELD(opclass);
+       WRITE_ENUM_FIELD(ordering, SortByDir);
+       WRITE_ENUM_FIELD(nulls_ordering, SortByNulls);
 }
 
 static void
@@ -1507,15 +1716,13 @@ _outQuery(StringInfo str, Query *node)
                appendStringInfo(str, " :utilityStmt <>");
 
        WRITE_INT_FIELD(resultRelation);
-       WRITE_NODE_FIELD(into);
-       WRITE_NODE_FIELD(intoOptions);
-       WRITE_ENUM_FIELD(intoOnCommit, OnCommitAction);
-       WRITE_STRING_FIELD(intoTableSpaceName);
+       WRITE_NODE_FIELD(intoClause);
        WRITE_BOOL_FIELD(hasAggs);
        WRITE_BOOL_FIELD(hasSubLinks);
        WRITE_NODE_FIELD(rtable);
        WRITE_NODE_FIELD(jointree);
        WRITE_NODE_FIELD(targetList);
+       WRITE_NODE_FIELD(returningList);
        WRITE_NODE_FIELD(groupClause);
        WRITE_NODE_FIELD(havingQual);
        WRITE_NODE_FIELD(distinctClause);
@@ -1524,7 +1731,6 @@ _outQuery(StringInfo str, Query *node)
        WRITE_NODE_FIELD(limitCount);
        WRITE_NODE_FIELD(rowMarks);
        WRITE_NODE_FIELD(setOperations);
-       WRITE_NODE_FIELD(resultRelations);
 }
 
 static void
@@ -1534,6 +1740,7 @@ _outSortClause(StringInfo str, SortClause *node)
 
        WRITE_UINT_FIELD(tleSortGroupRef);
        WRITE_OID_FIELD(sortop);
+       WRITE_BOOL_FIELD(nulls_first);
 }
 
 static void
@@ -1543,6 +1750,7 @@ _outGroupClause(StringInfo str, GroupClause *node)
 
        WRITE_UINT_FIELD(tleSortGroupRef);
        WRITE_OID_FIELD(sortop);
+       WRITE_BOOL_FIELD(nulls_first);
 }
 
 static void
@@ -1565,6 +1773,7 @@ _outSetOperationStmt(StringInfo str, SetOperationStmt *node)
        WRITE_NODE_FIELD(larg);
        WRITE_NODE_FIELD(rarg);
        WRITE_NODE_FIELD(colTypes);
+       WRITE_NODE_FIELD(colTypmods);
 }
 
 static void
@@ -1591,6 +1800,9 @@ _outRangeTblEntry(StringInfo str, RangeTblEntry *node)
                        WRITE_NODE_FIELD(funccoltypes);
                        WRITE_NODE_FIELD(funccoltypmods);
                        break;
+               case RTE_VALUES:
+                       WRITE_NODE_FIELD(values_lists);
+                       break;
                case RTE_JOIN:
                        WRITE_ENUM_FIELD(jointype, JoinType);
                        WRITE_NODE_FIELD(joinaliasvars);
@@ -1837,6 +2049,9 @@ _outNode(StringInfo str, void *obj)
                appendStringInfoChar(str, '{');
                switch (nodeTag(obj))
                {
+                       case T_PlannedStmt:
+                               _outPlannedStmt(str, obj);
+                               break;
                        case T_Plan:
                                _outPlan(str, obj);
                                break;
@@ -1876,6 +2091,9 @@ _outNode(StringInfo str, void *obj)
                        case T_FunctionScan:
                                _outFunctionScan(str, obj);
                                break;
+                       case T_ValuesScan:
+                               _outValuesScan(str, obj);
+                               break;
                        case T_Join:
                                _outJoin(str, obj);
                                break;
@@ -1918,6 +2136,9 @@ _outNode(StringInfo str, void *obj)
                        case T_RangeVar:
                                _outRangeVar(str, obj);
                                break;
+                       case T_IntoClause:
+                               _outIntoClause(str, obj);
+                               break;
                        case T_Var:
                                _outVar(str, obj);
                                break;
@@ -1963,6 +2184,12 @@ _outNode(StringInfo str, void *obj)
                        case T_RelabelType:
                                _outRelabelType(str, obj);
                                break;
+                       case T_CoerceViaIO:
+                               _outCoerceViaIO(str, obj);
+                               break;
+                       case T_ArrayCoerceExpr:
+                               _outArrayCoerceExpr(str, obj);
+                               break;
                        case T_ConvertRowtypeExpr:
                                _outConvertRowtypeExpr(str, obj);
                                break;
@@ -1990,6 +2217,9 @@ _outNode(StringInfo str, void *obj)
                        case T_MinMaxExpr:
                                _outMinMaxExpr(str, obj);
                                break;
+                       case T_XmlExpr:
+                               _outXmlExpr(str, obj);
+                               break;
                        case T_NullIfExpr:
                                _outNullIfExpr(str, obj);
                                break;
@@ -2008,6 +2238,9 @@ _outNode(StringInfo str, void *obj)
                        case T_SetToDefault:
                                _outSetToDefault(str, obj);
                                break;
+                       case T_CurrentOfExpr:
+                               _outCurrentOfExpr(str, obj);
+                               break;
                        case T_TargetEntry:
                                _outTargetEntry(str, obj);
                                break;
@@ -2060,6 +2293,9 @@ _outNode(StringInfo str, void *obj)
                        case T_HashPath:
                                _outHashPath(str, obj);
                                break;
+                       case T_PlannerGlobal:
+                               _outPlannerGlobal(str, obj);
+                               break;
                        case T_PlannerInfo:
                                _outPlannerInfo(str, obj);
                                break;
@@ -2069,8 +2305,14 @@ _outNode(StringInfo str, void *obj)
                        case T_IndexOptInfo:
                                _outIndexOptInfo(str, obj);
                                break;
-                       case T_PathKeyItem:
-                               _outPathKeyItem(str, obj);
+                       case T_EquivalenceClass:
+                               _outEquivalenceClass(str, obj);
+                               break;
+                       case T_EquivalenceMember:
+                               _outEquivalenceMember(str, obj);
+                               break;
+                       case T_PathKey:
+                               _outPathKey(str, obj);
                                break;
                        case T_RestrictInfo:
                                _outRestrictInfo(str, obj);
@@ -2087,6 +2329,9 @@ _outNode(StringInfo str, void *obj)
                        case T_AppendRelInfo:
                                _outAppendRelInfo(str, obj);
                                break;
+                       case T_PlannerParamItem:
+                               _outPlannerParamItem(str, obj);
+                               break;
 
                        case T_CreateStmt:
                                _outCreateStmt(str, obj);
@@ -2169,6 +2414,9 @@ _outNode(StringInfo str, void *obj)
                        case T_LockingClause:
                                _outLockingClause(str, obj);
                                break;
+                       case T_XmlSerialize:
+                               _outXmlSerialize(str, obj);
+                               break;
 
                        default: