packages feed

postgresql-syntax-0.1: foreign/libpg_query/src/pg_query_json_defs.c

static void
_outAlias(StringInfo str, const Alias *node)
{
  WRITE_NODE_TYPE("Alias");

  WRITE_STRING_FIELD(aliasname);
  WRITE_NODE_PTR_FIELD(colnames);
}

static void
_outRangeVar(StringInfo str, const RangeVar *node)
{
  WRITE_NODE_TYPE("RangeVar");

  WRITE_STRING_FIELD(schemaname);
  WRITE_STRING_FIELD(relname);
  WRITE_ENUM_FIELD(inhOpt);
  WRITE_CHAR_FIELD(relpersistence);
  WRITE_NODE_PTR_FIELD(alias);
  WRITE_INT_FIELD(location);
}

static void
_outVar(StringInfo str, const Var *node)
{
  WRITE_NODE_TYPE("Var");

  WRITE_UINT_FIELD(varno);
  WRITE_INT_FIELD(varattno);
  WRITE_UINT_FIELD(vartype);
  WRITE_INT_FIELD(vartypmod);
  WRITE_UINT_FIELD(varcollid);
  WRITE_UINT_FIELD(varlevelsup);
  WRITE_UINT_FIELD(varnoold);
  WRITE_INT_FIELD(varoattno);
  WRITE_INT_FIELD(location);
}

static void
_outParam(StringInfo str, const Param *node)
{
  WRITE_NODE_TYPE("Param");

  WRITE_ENUM_FIELD(paramkind);
  WRITE_INT_FIELD(paramid);
  WRITE_UINT_FIELD(paramtype);
  WRITE_INT_FIELD(paramtypmod);
  WRITE_UINT_FIELD(paramcollid);
  WRITE_INT_FIELD(location);
}

static void
_outAggref(StringInfo str, const Aggref *node)
{
  WRITE_NODE_TYPE("Aggref");

  WRITE_UINT_FIELD(aggfnoid);
  WRITE_UINT_FIELD(aggtype);
  WRITE_UINT_FIELD(aggcollid);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_NODE_PTR_FIELD(aggdirectargs);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(aggorder);
  WRITE_NODE_PTR_FIELD(aggdistinct);
  WRITE_NODE_PTR_FIELD(aggfilter);
  WRITE_BOOL_FIELD(aggstar);
  WRITE_BOOL_FIELD(aggvariadic);
  WRITE_CHAR_FIELD(aggkind);
  WRITE_UINT_FIELD(agglevelsup);
  WRITE_INT_FIELD(location);
}

static void
_outGroupingFunc(StringInfo str, const GroupingFunc *node)
{
  WRITE_NODE_TYPE("GroupingFunc");

  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(refs);
  WRITE_NODE_PTR_FIELD(cols);
  WRITE_UINT_FIELD(agglevelsup);
  WRITE_INT_FIELD(location);
}

static void
_outWindowFunc(StringInfo str, const WindowFunc *node)
{
  WRITE_NODE_TYPE("WindowFunc");

  WRITE_UINT_FIELD(winfnoid);
  WRITE_UINT_FIELD(wintype);
  WRITE_UINT_FIELD(wincollid);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(aggfilter);
  WRITE_UINT_FIELD(winref);
  WRITE_BOOL_FIELD(winstar);
  WRITE_BOOL_FIELD(winagg);
  WRITE_INT_FIELD(location);
}

static void
_outArrayRef(StringInfo str, const ArrayRef *node)
{
  WRITE_NODE_TYPE("ArrayRef");

  WRITE_UINT_FIELD(refarraytype);
  WRITE_UINT_FIELD(refelemtype);
  WRITE_INT_FIELD(reftypmod);
  WRITE_UINT_FIELD(refcollid);
  WRITE_NODE_PTR_FIELD(refupperindexpr);
  WRITE_NODE_PTR_FIELD(reflowerindexpr);
  WRITE_NODE_PTR_FIELD(refexpr);
  WRITE_NODE_PTR_FIELD(refassgnexpr);
}

static void
_outFuncExpr(StringInfo str, const FuncExpr *node)
{
  WRITE_NODE_TYPE("FuncExpr");

  WRITE_UINT_FIELD(funcid);
  WRITE_UINT_FIELD(funcresulttype);
  WRITE_BOOL_FIELD(funcretset);
  WRITE_BOOL_FIELD(funcvariadic);
  WRITE_ENUM_FIELD(funcformat);
  WRITE_UINT_FIELD(funccollid);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outNamedArgExpr(StringInfo str, const NamedArgExpr *node)
{
  WRITE_NODE_TYPE("NamedArgExpr");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_STRING_FIELD(name);
  WRITE_INT_FIELD(argnumber);
  WRITE_INT_FIELD(location);
}

static void
_outOpExpr(StringInfo str, const OpExpr *node)
{
  WRITE_NODE_TYPE("OpExpr");

  WRITE_UINT_FIELD(opno);
  WRITE_UINT_FIELD(opfuncid);
  WRITE_UINT_FIELD(opresulttype);
  WRITE_BOOL_FIELD(opretset);
  WRITE_UINT_FIELD(opcollid);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outDistinctExpr(StringInfo str, const DistinctExpr *node)
{
  WRITE_NODE_TYPE("OpExpr");

  WRITE_UINT_FIELD(opno);
  WRITE_UINT_FIELD(opfuncid);
  WRITE_UINT_FIELD(opresulttype);
  WRITE_BOOL_FIELD(opretset);
  WRITE_UINT_FIELD(opcollid);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outNullIfExpr(StringInfo str, const NullIfExpr *node)
{
  WRITE_NODE_TYPE("OpExpr");

  WRITE_UINT_FIELD(opno);
  WRITE_UINT_FIELD(opfuncid);
  WRITE_UINT_FIELD(opresulttype);
  WRITE_BOOL_FIELD(opretset);
  WRITE_UINT_FIELD(opcollid);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outScalarArrayOpExpr(StringInfo str, const ScalarArrayOpExpr *node)
{
  WRITE_NODE_TYPE("ScalarArrayOpExpr");

  WRITE_UINT_FIELD(opno);
  WRITE_UINT_FIELD(opfuncid);
  WRITE_BOOL_FIELD(useOr);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outBoolExpr(StringInfo str, const BoolExpr *node)
{
  WRITE_NODE_TYPE("BoolExpr");

  WRITE_ENUM_FIELD(boolop);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outSubLink(StringInfo str, const SubLink *node)
{
  WRITE_NODE_TYPE("SubLink");

  WRITE_ENUM_FIELD(subLinkType);
  WRITE_INT_FIELD(subLinkId);
  WRITE_NODE_PTR_FIELD(testexpr);
  WRITE_NODE_PTR_FIELD(operName);
  WRITE_NODE_PTR_FIELD(subselect);
  WRITE_INT_FIELD(location);
}

static void
_outSubPlan(StringInfo str, const SubPlan *node)
{
  WRITE_NODE_TYPE("SubPlan");

  WRITE_ENUM_FIELD(subLinkType);
  WRITE_NODE_PTR_FIELD(testexpr);
  WRITE_NODE_PTR_FIELD(paramIds);
  WRITE_INT_FIELD(plan_id);
  WRITE_STRING_FIELD(plan_name);
  WRITE_UINT_FIELD(firstColType);
  WRITE_INT_FIELD(firstColTypmod);
  WRITE_UINT_FIELD(firstColCollation);
  WRITE_BOOL_FIELD(useHashTable);
  WRITE_BOOL_FIELD(unknownEqFalse);
  WRITE_NODE_PTR_FIELD(setParam);
  WRITE_NODE_PTR_FIELD(parParam);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_FLOAT_FIELD(startup_cost);
  WRITE_FLOAT_FIELD(per_call_cost);
}

static void
_outAlternativeSubPlan(StringInfo str, const AlternativeSubPlan *node)
{
  WRITE_NODE_TYPE("AlternativeSubPlan");

  WRITE_NODE_PTR_FIELD(subplans);
}

static void
_outFieldSelect(StringInfo str, const FieldSelect *node)
{
  WRITE_NODE_TYPE("FieldSelect");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_INT_FIELD(fieldnum);
  WRITE_UINT_FIELD(resulttype);
  WRITE_INT_FIELD(resulttypmod);
  WRITE_UINT_FIELD(resultcollid);
}

static void
_outFieldStore(StringInfo str, const FieldStore *node)
{
  WRITE_NODE_TYPE("FieldStore");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_NODE_PTR_FIELD(newvals);
  WRITE_NODE_PTR_FIELD(fieldnums);
  WRITE_UINT_FIELD(resulttype);
}

static void
_outRelabelType(StringInfo str, const RelabelType *node)
{
  WRITE_NODE_TYPE("RelabelType");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_UINT_FIELD(resulttype);
  WRITE_INT_FIELD(resulttypmod);
  WRITE_UINT_FIELD(resultcollid);
  WRITE_ENUM_FIELD(relabelformat);
  WRITE_INT_FIELD(location);
}

static void
_outCoerceViaIO(StringInfo str, const CoerceViaIO *node)
{
  WRITE_NODE_TYPE("CoerceViaIO");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_UINT_FIELD(resulttype);
  WRITE_UINT_FIELD(resultcollid);
  WRITE_ENUM_FIELD(coerceformat);
  WRITE_INT_FIELD(location);
}

static void
_outArrayCoerceExpr(StringInfo str, const ArrayCoerceExpr *node)
{
  WRITE_NODE_TYPE("ArrayCoerceExpr");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_UINT_FIELD(elemfuncid);
  WRITE_UINT_FIELD(resulttype);
  WRITE_INT_FIELD(resulttypmod);
  WRITE_UINT_FIELD(resultcollid);
  WRITE_BOOL_FIELD(isExplicit);
  WRITE_ENUM_FIELD(coerceformat);
  WRITE_INT_FIELD(location);
}

static void
_outConvertRowtypeExpr(StringInfo str, const ConvertRowtypeExpr *node)
{
  WRITE_NODE_TYPE("ConvertRowtypeExpr");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_UINT_FIELD(resulttype);
  WRITE_ENUM_FIELD(convertformat);
  WRITE_INT_FIELD(location);
}

static void
_outCollateExpr(StringInfo str, const CollateExpr *node)
{
  WRITE_NODE_TYPE("CollateExpr");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_UINT_FIELD(collOid);
  WRITE_INT_FIELD(location);
}

static void
_outCaseExpr(StringInfo str, const CaseExpr *node)
{
  WRITE_NODE_TYPE("CaseExpr");

  WRITE_UINT_FIELD(casetype);
  WRITE_UINT_FIELD(casecollid);
  WRITE_NODE_PTR_FIELD(arg);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(defresult);
  WRITE_INT_FIELD(location);
}

static void
_outCaseWhen(StringInfo str, const CaseWhen *node)
{
  WRITE_NODE_TYPE("CaseWhen");

  WRITE_NODE_PTR_FIELD(expr);
  WRITE_NODE_PTR_FIELD(result);
  WRITE_INT_FIELD(location);
}

static void
_outCaseTestExpr(StringInfo str, const CaseTestExpr *node)
{
  WRITE_NODE_TYPE("CaseTestExpr");

  WRITE_UINT_FIELD(typeId);
  WRITE_INT_FIELD(typeMod);
  WRITE_UINT_FIELD(collation);
}

static void
_outArrayExpr(StringInfo str, const ArrayExpr *node)
{
  WRITE_NODE_TYPE("ArrayExpr");

  WRITE_UINT_FIELD(array_typeid);
  WRITE_UINT_FIELD(array_collid);
  WRITE_UINT_FIELD(element_typeid);
  WRITE_NODE_PTR_FIELD(elements);
  WRITE_BOOL_FIELD(multidims);
  WRITE_INT_FIELD(location);
}

static void
_outRowExpr(StringInfo str, const RowExpr *node)
{
  WRITE_NODE_TYPE("RowExpr");

  WRITE_NODE_PTR_FIELD(args);
  WRITE_UINT_FIELD(row_typeid);
  WRITE_ENUM_FIELD(row_format);
  WRITE_NODE_PTR_FIELD(colnames);
  WRITE_INT_FIELD(location);
}

static void
_outRowCompareExpr(StringInfo str, const RowCompareExpr *node)
{
  WRITE_NODE_TYPE("RowCompareExpr");

  WRITE_ENUM_FIELD(rctype);
  WRITE_NODE_PTR_FIELD(opnos);
  WRITE_NODE_PTR_FIELD(opfamilies);
  WRITE_NODE_PTR_FIELD(inputcollids);
  WRITE_NODE_PTR_FIELD(largs);
  WRITE_NODE_PTR_FIELD(rargs);
}

static void
_outCoalesceExpr(StringInfo str, const CoalesceExpr *node)
{
  WRITE_NODE_TYPE("CoalesceExpr");

  WRITE_UINT_FIELD(coalescetype);
  WRITE_UINT_FIELD(coalescecollid);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outMinMaxExpr(StringInfo str, const MinMaxExpr *node)
{
  WRITE_NODE_TYPE("MinMaxExpr");

  WRITE_UINT_FIELD(minmaxtype);
  WRITE_UINT_FIELD(minmaxcollid);
  WRITE_UINT_FIELD(inputcollid);
  WRITE_ENUM_FIELD(op);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(location);
}

static void
_outXmlExpr(StringInfo str, const XmlExpr *node)
{
  WRITE_NODE_TYPE("XmlExpr");

  WRITE_ENUM_FIELD(op);
  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(named_args);
  WRITE_NODE_PTR_FIELD(arg_names);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_ENUM_FIELD(xmloption);
  WRITE_UINT_FIELD(type);
  WRITE_INT_FIELD(typmod);
  WRITE_INT_FIELD(location);
}

static void
_outNullTest(StringInfo str, const NullTest *node)
{
  WRITE_NODE_TYPE("NullTest");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_ENUM_FIELD(nulltesttype);
  WRITE_BOOL_FIELD(argisrow);
  WRITE_INT_FIELD(location);
}

static void
_outBooleanTest(StringInfo str, const BooleanTest *node)
{
  WRITE_NODE_TYPE("BooleanTest");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_ENUM_FIELD(booltesttype);
  WRITE_INT_FIELD(location);
}

static void
_outCoerceToDomain(StringInfo str, const CoerceToDomain *node)
{
  WRITE_NODE_TYPE("CoerceToDomain");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_UINT_FIELD(resulttype);
  WRITE_INT_FIELD(resulttypmod);
  WRITE_UINT_FIELD(resultcollid);
  WRITE_ENUM_FIELD(coercionformat);
  WRITE_INT_FIELD(location);
}

static void
_outCoerceToDomainValue(StringInfo str, const CoerceToDomainValue *node)
{
  WRITE_NODE_TYPE("CoerceToDomainValue");

  WRITE_UINT_FIELD(typeId);
  WRITE_INT_FIELD(typeMod);
  WRITE_UINT_FIELD(collation);
  WRITE_INT_FIELD(location);
}

static void
_outSetToDefault(StringInfo str, const SetToDefault *node)
{
  WRITE_NODE_TYPE("SetToDefault");

  WRITE_UINT_FIELD(typeId);
  WRITE_INT_FIELD(typeMod);
  WRITE_UINT_FIELD(collation);
  WRITE_INT_FIELD(location);
}

static void
_outCurrentOfExpr(StringInfo str, const CurrentOfExpr *node)
{
  WRITE_NODE_TYPE("CurrentOfExpr");

  WRITE_UINT_FIELD(cvarno);
  WRITE_STRING_FIELD(cursor_name);
  WRITE_INT_FIELD(cursor_param);
}

static void
_outInferenceElem(StringInfo str, const InferenceElem *node)
{
  WRITE_NODE_TYPE("InferenceElem");

  WRITE_NODE_PTR_FIELD(expr);
  WRITE_UINT_FIELD(infercollid);
  WRITE_UINT_FIELD(inferopclass);
}

static void
_outTargetEntry(StringInfo str, const TargetEntry *node)
{
  WRITE_NODE_TYPE("TargetEntry");

  WRITE_NODE_PTR_FIELD(expr);
  WRITE_INT_FIELD(resno);
  WRITE_STRING_FIELD(resname);
  WRITE_UINT_FIELD(ressortgroupref);
  WRITE_UINT_FIELD(resorigtbl);
  WRITE_INT_FIELD(resorigcol);
  WRITE_BOOL_FIELD(resjunk);
}

static void
_outRangeTblRef(StringInfo str, const RangeTblRef *node)
{
  WRITE_NODE_TYPE("RangeTblRef");

  WRITE_INT_FIELD(rtindex);
}

static void
_outJoinExpr(StringInfo str, const JoinExpr *node)
{
  WRITE_NODE_TYPE("JoinExpr");

  WRITE_ENUM_FIELD(jointype);
  WRITE_BOOL_FIELD(isNatural);
  WRITE_NODE_PTR_FIELD(larg);
  WRITE_NODE_PTR_FIELD(rarg);
  WRITE_NODE_PTR_FIELD(usingClause);
  WRITE_NODE_PTR_FIELD(quals);
  WRITE_NODE_PTR_FIELD(alias);
  WRITE_INT_FIELD(rtindex);
}

static void
_outFromExpr(StringInfo str, const FromExpr *node)
{
  WRITE_NODE_TYPE("FromExpr");

  WRITE_NODE_PTR_FIELD(fromlist);
  WRITE_NODE_PTR_FIELD(quals);
}

static void
_outOnConflictExpr(StringInfo str, const OnConflictExpr *node)
{
  WRITE_NODE_TYPE("OnConflictExpr");

  WRITE_ENUM_FIELD(action);
  WRITE_NODE_PTR_FIELD(arbiterElems);
  WRITE_NODE_PTR_FIELD(arbiterWhere);
  WRITE_UINT_FIELD(constraint);
  WRITE_NODE_PTR_FIELD(onConflictSet);
  WRITE_NODE_PTR_FIELD(onConflictWhere);
  WRITE_INT_FIELD(exclRelIndex);
  WRITE_NODE_PTR_FIELD(exclRelTlist);
}

static void
_outIntoClause(StringInfo str, const IntoClause *node)
{
  WRITE_NODE_TYPE("IntoClause");

  WRITE_NODE_PTR_FIELD(rel);
  WRITE_NODE_PTR_FIELD(colNames);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_ENUM_FIELD(onCommit);
  WRITE_STRING_FIELD(tableSpaceName);
  WRITE_NODE_PTR_FIELD(viewQuery);
  WRITE_BOOL_FIELD(skipData);
}

static void
_outQuery(StringInfo str, const Query *node)
{
  WRITE_NODE_TYPE("Query");

  WRITE_ENUM_FIELD(commandType);
  WRITE_ENUM_FIELD(querySource);
  WRITE_BOOL_FIELD(canSetTag);
  WRITE_NODE_PTR_FIELD(utilityStmt);
  WRITE_INT_FIELD(resultRelation);
  WRITE_BOOL_FIELD(hasAggs);
  WRITE_BOOL_FIELD(hasWindowFuncs);
  WRITE_BOOL_FIELD(hasSubLinks);
  WRITE_BOOL_FIELD(hasDistinctOn);
  WRITE_BOOL_FIELD(hasRecursive);
  WRITE_BOOL_FIELD(hasModifyingCTE);
  WRITE_BOOL_FIELD(hasForUpdate);
  WRITE_BOOL_FIELD(hasRowSecurity);
  WRITE_NODE_PTR_FIELD(cteList);
  WRITE_NODE_PTR_FIELD(rtable);
  WRITE_NODE_PTR_FIELD(jointree);
  WRITE_NODE_PTR_FIELD(targetList);
  WRITE_NODE_PTR_FIELD(onConflict);
  WRITE_NODE_PTR_FIELD(returningList);
  WRITE_NODE_PTR_FIELD(groupClause);
  WRITE_NODE_PTR_FIELD(groupingSets);
  WRITE_NODE_PTR_FIELD(havingQual);
  WRITE_NODE_PTR_FIELD(windowClause);
  WRITE_NODE_PTR_FIELD(distinctClause);
  WRITE_NODE_PTR_FIELD(sortClause);
  WRITE_NODE_PTR_FIELD(limitOffset);
  WRITE_NODE_PTR_FIELD(limitCount);
  WRITE_NODE_PTR_FIELD(rowMarks);
  WRITE_NODE_PTR_FIELD(setOperations);
  WRITE_NODE_PTR_FIELD(constraintDeps);
  WRITE_NODE_PTR_FIELD(withCheckOptions);
}

static void
_outInsertStmt(StringInfo str, const InsertStmt *node)
{
  WRITE_NODE_TYPE("InsertStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(cols);
  WRITE_NODE_PTR_FIELD(selectStmt);
  WRITE_NODE_PTR_FIELD(onConflictClause);
  WRITE_NODE_PTR_FIELD(returningList);
  WRITE_NODE_PTR_FIELD(withClause);
}

static void
_outDeleteStmt(StringInfo str, const DeleteStmt *node)
{
  WRITE_NODE_TYPE("DeleteStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(usingClause);
  WRITE_NODE_PTR_FIELD(whereClause);
  WRITE_NODE_PTR_FIELD(returningList);
  WRITE_NODE_PTR_FIELD(withClause);
}

static void
_outUpdateStmt(StringInfo str, const UpdateStmt *node)
{
  WRITE_NODE_TYPE("UpdateStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(targetList);
  WRITE_NODE_PTR_FIELD(whereClause);
  WRITE_NODE_PTR_FIELD(fromClause);
  WRITE_NODE_PTR_FIELD(returningList);
  WRITE_NODE_PTR_FIELD(withClause);
}

static void
_outSelectStmt(StringInfo str, const SelectStmt *node)
{
  WRITE_NODE_TYPE("SelectStmt");

  WRITE_NODE_PTR_FIELD(distinctClause);
  WRITE_NODE_PTR_FIELD(intoClause);
  WRITE_NODE_PTR_FIELD(targetList);
  WRITE_NODE_PTR_FIELD(fromClause);
  WRITE_NODE_PTR_FIELD(whereClause);
  WRITE_NODE_PTR_FIELD(groupClause);
  WRITE_NODE_PTR_FIELD(havingClause);
  WRITE_NODE_PTR_FIELD(windowClause);
  WRITE_NODE_PTR_FIELD(valuesLists);
  WRITE_NODE_PTR_FIELD(sortClause);
  WRITE_NODE_PTR_FIELD(limitOffset);
  WRITE_NODE_PTR_FIELD(limitCount);
  WRITE_NODE_PTR_FIELD(lockingClause);
  WRITE_NODE_PTR_FIELD(withClause);
  WRITE_ENUM_FIELD(op);
  WRITE_BOOL_FIELD(all);
  WRITE_NODE_PTR_FIELD(larg);
  WRITE_NODE_PTR_FIELD(rarg);
}

static void
_outAlterTableStmt(StringInfo str, const AlterTableStmt *node)
{
  WRITE_NODE_TYPE("AlterTableStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(cmds);
  WRITE_ENUM_FIELD(relkind);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outAlterTableCmd(StringInfo str, const AlterTableCmd *node)
{
  WRITE_NODE_TYPE("AlterTableCmd");

  WRITE_ENUM_FIELD(subtype);
  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(newowner);
  WRITE_NODE_PTR_FIELD(def);
  WRITE_ENUM_FIELD(behavior);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outAlterDomainStmt(StringInfo str, const AlterDomainStmt *node)
{
  WRITE_NODE_TYPE("AlterDomainStmt");

  WRITE_CHAR_FIELD(subtype);
  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(def);
  WRITE_ENUM_FIELD(behavior);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outSetOperationStmt(StringInfo str, const SetOperationStmt *node)
{
  WRITE_NODE_TYPE("SetOperationStmt");

  WRITE_ENUM_FIELD(op);
  WRITE_BOOL_FIELD(all);
  WRITE_NODE_PTR_FIELD(larg);
  WRITE_NODE_PTR_FIELD(rarg);
  WRITE_NODE_PTR_FIELD(colTypes);
  WRITE_NODE_PTR_FIELD(colTypmods);
  WRITE_NODE_PTR_FIELD(colCollations);
  WRITE_NODE_PTR_FIELD(groupClauses);
}

static void
_outGrantStmt(StringInfo str, const GrantStmt *node)
{
  WRITE_NODE_TYPE("GrantStmt");

  WRITE_BOOL_FIELD(is_grant);
  WRITE_ENUM_FIELD(targtype);
  WRITE_ENUM_FIELD(objtype);
  WRITE_NODE_PTR_FIELD(objects);
  WRITE_NODE_PTR_FIELD(privileges);
  WRITE_NODE_PTR_FIELD(grantees);
  WRITE_BOOL_FIELD(grant_option);
  WRITE_ENUM_FIELD(behavior);
}

static void
_outGrantRoleStmt(StringInfo str, const GrantRoleStmt *node)
{
  WRITE_NODE_TYPE("GrantRoleStmt");

  WRITE_NODE_PTR_FIELD(granted_roles);
  WRITE_NODE_PTR_FIELD(grantee_roles);
  WRITE_BOOL_FIELD(is_grant);
  WRITE_BOOL_FIELD(admin_opt);
  WRITE_NODE_PTR_FIELD(grantor);
  WRITE_ENUM_FIELD(behavior);
}

static void
_outAlterDefaultPrivilegesStmt(StringInfo str, const AlterDefaultPrivilegesStmt *node)
{
  WRITE_NODE_TYPE("AlterDefaultPrivilegesStmt");

  WRITE_NODE_PTR_FIELD(options);
  WRITE_NODE_PTR_FIELD(action);
}

static void
_outClosePortalStmt(StringInfo str, const ClosePortalStmt *node)
{
  WRITE_NODE_TYPE("ClosePortalStmt");

  WRITE_STRING_FIELD(portalname);
}

static void
_outClusterStmt(StringInfo str, const ClusterStmt *node)
{
  WRITE_NODE_TYPE("ClusterStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_STRING_FIELD(indexname);
  WRITE_BOOL_FIELD(verbose);
}

static void
_outCopyStmt(StringInfo str, const CopyStmt *node)
{
  WRITE_NODE_TYPE("CopyStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(query);
  WRITE_NODE_PTR_FIELD(attlist);
  WRITE_BOOL_FIELD(is_from);
  WRITE_BOOL_FIELD(is_program);
  WRITE_STRING_FIELD(filename);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outCreateStmt(StringInfo str, const CreateStmt *node)
{
  WRITE_NODE_TYPE("CreateStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(tableElts);
  WRITE_NODE_PTR_FIELD(inhRelations);
  WRITE_NODE_PTR_FIELD(ofTypename);
  WRITE_NODE_PTR_FIELD(constraints);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_ENUM_FIELD(oncommit);
  WRITE_STRING_FIELD(tablespacename);
  WRITE_BOOL_FIELD(if_not_exists);
}

static void
_outDefineStmt(StringInfo str, const DefineStmt *node)
{
  WRITE_NODE_TYPE("DefineStmt");

  WRITE_ENUM_FIELD(kind);
  WRITE_BOOL_FIELD(oldstyle);
  WRITE_NODE_PTR_FIELD(defnames);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(definition);
}

static void
_outDropStmt(StringInfo str, const DropStmt *node)
{
  WRITE_NODE_TYPE("DropStmt");

  WRITE_NODE_PTR_FIELD(objects);
  WRITE_NODE_PTR_FIELD(arguments);
  WRITE_ENUM_FIELD(removeType);
  WRITE_ENUM_FIELD(behavior);
  WRITE_BOOL_FIELD(missing_ok);
  WRITE_BOOL_FIELD(concurrent);
}

static void
_outTruncateStmt(StringInfo str, const TruncateStmt *node)
{
  WRITE_NODE_TYPE("TruncateStmt");

  WRITE_NODE_PTR_FIELD(relations);
  WRITE_BOOL_FIELD(restart_seqs);
  WRITE_ENUM_FIELD(behavior);
}

static void
_outCommentStmt(StringInfo str, const CommentStmt *node)
{
  WRITE_NODE_TYPE("CommentStmt");

  WRITE_ENUM_FIELD(objtype);
  WRITE_NODE_PTR_FIELD(objname);
  WRITE_NODE_PTR_FIELD(objargs);
  WRITE_STRING_FIELD(comment);
}

static void
_outFetchStmt(StringInfo str, const FetchStmt *node)
{
  WRITE_NODE_TYPE("FetchStmt");

  WRITE_ENUM_FIELD(direction);
  WRITE_LONG_FIELD(howMany);
  WRITE_STRING_FIELD(portalname);
  WRITE_BOOL_FIELD(ismove);
}

static void
_outIndexStmt(StringInfo str, const IndexStmt *node)
{
  WRITE_NODE_TYPE("IndexStmt");

  WRITE_STRING_FIELD(idxname);
  WRITE_NODE_PTR_FIELD(relation);
  WRITE_STRING_FIELD(accessMethod);
  WRITE_STRING_FIELD(tableSpace);
  WRITE_NODE_PTR_FIELD(indexParams);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_NODE_PTR_FIELD(whereClause);
  WRITE_NODE_PTR_FIELD(excludeOpNames);
  WRITE_STRING_FIELD(idxcomment);
  WRITE_UINT_FIELD(indexOid);
  WRITE_UINT_FIELD(oldNode);
  WRITE_BOOL_FIELD(unique);
  WRITE_BOOL_FIELD(primary);
  WRITE_BOOL_FIELD(isconstraint);
  WRITE_BOOL_FIELD(deferrable);
  WRITE_BOOL_FIELD(initdeferred);
  WRITE_BOOL_FIELD(transformed);
  WRITE_BOOL_FIELD(concurrent);
  WRITE_BOOL_FIELD(if_not_exists);
}

static void
_outCreateFunctionStmt(StringInfo str, const CreateFunctionStmt *node)
{
  WRITE_NODE_TYPE("CreateFunctionStmt");

  WRITE_BOOL_FIELD(replace);
  WRITE_NODE_PTR_FIELD(funcname);
  WRITE_NODE_PTR_FIELD(parameters);
  WRITE_NODE_PTR_FIELD(returnType);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_NODE_PTR_FIELD(withClause);
}

static void
_outAlterFunctionStmt(StringInfo str, const AlterFunctionStmt *node)
{
  WRITE_NODE_TYPE("AlterFunctionStmt");

  WRITE_NODE_PTR_FIELD(func);
  WRITE_NODE_PTR_FIELD(actions);
}

static void
_outDoStmt(StringInfo str, const DoStmt *node)
{
  WRITE_NODE_TYPE("DoStmt");

  WRITE_NODE_PTR_FIELD(args);
}

static void
_outRenameStmt(StringInfo str, const RenameStmt *node)
{
  WRITE_NODE_TYPE("RenameStmt");

  WRITE_ENUM_FIELD(renameType);
  WRITE_ENUM_FIELD(relationType);
  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(object);
  WRITE_NODE_PTR_FIELD(objarg);
  WRITE_STRING_FIELD(subname);
  WRITE_STRING_FIELD(newname);
  WRITE_ENUM_FIELD(behavior);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outRuleStmt(StringInfo str, const RuleStmt *node)
{
  WRITE_NODE_TYPE("RuleStmt");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_STRING_FIELD(rulename);
  WRITE_NODE_PTR_FIELD(whereClause);
  WRITE_ENUM_FIELD(event);
  WRITE_BOOL_FIELD(instead);
  WRITE_NODE_PTR_FIELD(actions);
  WRITE_BOOL_FIELD(replace);
}

static void
_outNotifyStmt(StringInfo str, const NotifyStmt *node)
{
  WRITE_NODE_TYPE("NotifyStmt");

  WRITE_STRING_FIELD(conditionname);
  WRITE_STRING_FIELD(payload);
}

static void
_outListenStmt(StringInfo str, const ListenStmt *node)
{
  WRITE_NODE_TYPE("ListenStmt");

  WRITE_STRING_FIELD(conditionname);
}

static void
_outUnlistenStmt(StringInfo str, const UnlistenStmt *node)
{
  WRITE_NODE_TYPE("UnlistenStmt");

  WRITE_STRING_FIELD(conditionname);
}

static void
_outTransactionStmt(StringInfo str, const TransactionStmt *node)
{
  WRITE_NODE_TYPE("TransactionStmt");

  WRITE_ENUM_FIELD(kind);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_STRING_FIELD(gid);
}

static void
_outViewStmt(StringInfo str, const ViewStmt *node)
{
  WRITE_NODE_TYPE("ViewStmt");

  WRITE_NODE_PTR_FIELD(view);
  WRITE_NODE_PTR_FIELD(aliases);
  WRITE_NODE_PTR_FIELD(query);
  WRITE_BOOL_FIELD(replace);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_ENUM_FIELD(withCheckOption);
}

static void
_outLoadStmt(StringInfo str, const LoadStmt *node)
{
  WRITE_NODE_TYPE("LoadStmt");

  WRITE_STRING_FIELD(filename);
}

static void
_outCreateDomainStmt(StringInfo str, const CreateDomainStmt *node)
{
  WRITE_NODE_TYPE("CreateDomainStmt");

  WRITE_NODE_PTR_FIELD(domainname);
  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_NODE_PTR_FIELD(collClause);
  WRITE_NODE_PTR_FIELD(constraints);
}

static void
_outCreatedbStmt(StringInfo str, const CreatedbStmt *node)
{
  WRITE_NODE_TYPE("CreatedbStmt");

  WRITE_STRING_FIELD(dbname);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outDropdbStmt(StringInfo str, const DropdbStmt *node)
{
  WRITE_NODE_TYPE("DropdbStmt");

  WRITE_STRING_FIELD(dbname);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outVacuumStmt(StringInfo str, const VacuumStmt *node)
{
  WRITE_NODE_TYPE("VacuumStmt");

  WRITE_INT_FIELD(options);
  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(va_cols);
}

static void
_outExplainStmt(StringInfo str, const ExplainStmt *node)
{
  WRITE_NODE_TYPE("ExplainStmt");

  WRITE_NODE_PTR_FIELD(query);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outCreateTableAsStmt(StringInfo str, const CreateTableAsStmt *node)
{
  WRITE_NODE_TYPE("CreateTableAsStmt");

  WRITE_NODE_PTR_FIELD(query);
  WRITE_NODE_PTR_FIELD(into);
  WRITE_ENUM_FIELD(relkind);
  WRITE_BOOL_FIELD(is_select_into);
  WRITE_BOOL_FIELD(if_not_exists);
}

static void
_outCreateSeqStmt(StringInfo str, const CreateSeqStmt *node)
{
  WRITE_NODE_TYPE("CreateSeqStmt");

  WRITE_NODE_PTR_FIELD(sequence);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_UINT_FIELD(ownerId);
  WRITE_BOOL_FIELD(if_not_exists);
}

static void
_outAlterSeqStmt(StringInfo str, const AlterSeqStmt *node)
{
  WRITE_NODE_TYPE("AlterSeqStmt");

  WRITE_NODE_PTR_FIELD(sequence);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outVariableSetStmt(StringInfo str, const VariableSetStmt *node)
{
  WRITE_NODE_TYPE("VariableSetStmt");

  WRITE_ENUM_FIELD(kind);
  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_BOOL_FIELD(is_local);
}

static void
_outVariableShowStmt(StringInfo str, const VariableShowStmt *node)
{
  WRITE_NODE_TYPE("VariableShowStmt");

  WRITE_STRING_FIELD(name);
}

static void
_outDiscardStmt(StringInfo str, const DiscardStmt *node)
{
  WRITE_NODE_TYPE("DiscardStmt");

  WRITE_ENUM_FIELD(target);
}

static void
_outCreateTrigStmt(StringInfo str, const CreateTrigStmt *node)
{
  WRITE_NODE_TYPE("CreateTrigStmt");

  WRITE_STRING_FIELD(trigname);
  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(funcname);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_BOOL_FIELD(row);
  WRITE_INT_FIELD(timing);
  WRITE_INT_FIELD(events);
  WRITE_NODE_PTR_FIELD(columns);
  WRITE_NODE_PTR_FIELD(whenClause);
  WRITE_BOOL_FIELD(isconstraint);
  WRITE_BOOL_FIELD(deferrable);
  WRITE_BOOL_FIELD(initdeferred);
  WRITE_NODE_PTR_FIELD(constrrel);
}

static void
_outCreatePLangStmt(StringInfo str, const CreatePLangStmt *node)
{
  WRITE_NODE_TYPE("CreatePLangStmt");

  WRITE_BOOL_FIELD(replace);
  WRITE_STRING_FIELD(plname);
  WRITE_NODE_PTR_FIELD(plhandler);
  WRITE_NODE_PTR_FIELD(plinline);
  WRITE_NODE_PTR_FIELD(plvalidator);
  WRITE_BOOL_FIELD(pltrusted);
}

static void
_outCreateRoleStmt(StringInfo str, const CreateRoleStmt *node)
{
  WRITE_NODE_TYPE("CreateRoleStmt");

  WRITE_ENUM_FIELD(stmt_type);
  WRITE_STRING_FIELD(role);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterRoleStmt(StringInfo str, const AlterRoleStmt *node)
{
  WRITE_NODE_TYPE("AlterRoleStmt");

  WRITE_NODE_PTR_FIELD(role);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_INT_FIELD(action);
}

static void
_outDropRoleStmt(StringInfo str, const DropRoleStmt *node)
{
  WRITE_NODE_TYPE("DropRoleStmt");

  WRITE_NODE_PTR_FIELD(roles);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outLockStmt(StringInfo str, const LockStmt *node)
{
  WRITE_NODE_TYPE("LockStmt");

  WRITE_NODE_PTR_FIELD(relations);
  WRITE_INT_FIELD(mode);
  WRITE_BOOL_FIELD(nowait);
}

static void
_outConstraintsSetStmt(StringInfo str, const ConstraintsSetStmt *node)
{
  WRITE_NODE_TYPE("ConstraintsSetStmt");

  WRITE_NODE_PTR_FIELD(constraints);
  WRITE_BOOL_FIELD(deferred);
}

static void
_outReindexStmt(StringInfo str, const ReindexStmt *node)
{
  WRITE_NODE_TYPE("ReindexStmt");

  WRITE_ENUM_FIELD(kind);
  WRITE_NODE_PTR_FIELD(relation);
  WRITE_STRING_FIELD(name);
  WRITE_INT_FIELD(options);
}

static void
_outCheckPointStmt(StringInfo str, const CheckPointStmt *node)
{
  WRITE_NODE_TYPE("CheckPointStmt");

}

static void
_outCreateSchemaStmt(StringInfo str, const CreateSchemaStmt *node)
{
  WRITE_NODE_TYPE("CreateSchemaStmt");

  WRITE_STRING_FIELD(schemaname);
  WRITE_NODE_PTR_FIELD(authrole);
  WRITE_NODE_PTR_FIELD(schemaElts);
  WRITE_BOOL_FIELD(if_not_exists);
}

static void
_outAlterDatabaseStmt(StringInfo str, const AlterDatabaseStmt *node)
{
  WRITE_NODE_TYPE("AlterDatabaseStmt");

  WRITE_STRING_FIELD(dbname);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterDatabaseSetStmt(StringInfo str, const AlterDatabaseSetStmt *node)
{
  WRITE_NODE_TYPE("AlterDatabaseSetStmt");

  WRITE_STRING_FIELD(dbname);
  WRITE_NODE_PTR_FIELD(setstmt);
}

static void
_outAlterRoleSetStmt(StringInfo str, const AlterRoleSetStmt *node)
{
  WRITE_NODE_TYPE("AlterRoleSetStmt");

  WRITE_NODE_PTR_FIELD(role);
  WRITE_STRING_FIELD(database);
  WRITE_NODE_PTR_FIELD(setstmt);
}

static void
_outCreateConversionStmt(StringInfo str, const CreateConversionStmt *node)
{
  WRITE_NODE_TYPE("CreateConversionStmt");

  WRITE_NODE_PTR_FIELD(conversion_name);
  WRITE_STRING_FIELD(for_encoding_name);
  WRITE_STRING_FIELD(to_encoding_name);
  WRITE_NODE_PTR_FIELD(func_name);
  WRITE_BOOL_FIELD(def);
}

static void
_outCreateCastStmt(StringInfo str, const CreateCastStmt *node)
{
  WRITE_NODE_TYPE("CreateCastStmt");

  WRITE_NODE_PTR_FIELD(sourcetype);
  WRITE_NODE_PTR_FIELD(targettype);
  WRITE_NODE_PTR_FIELD(func);
  WRITE_ENUM_FIELD(context);
  WRITE_BOOL_FIELD(inout);
}

static void
_outCreateOpClassStmt(StringInfo str, const CreateOpClassStmt *node)
{
  WRITE_NODE_TYPE("CreateOpClassStmt");

  WRITE_NODE_PTR_FIELD(opclassname);
  WRITE_NODE_PTR_FIELD(opfamilyname);
  WRITE_STRING_FIELD(amname);
  WRITE_NODE_PTR_FIELD(datatype);
  WRITE_NODE_PTR_FIELD(items);
  WRITE_BOOL_FIELD(isDefault);
}

static void
_outCreateOpFamilyStmt(StringInfo str, const CreateOpFamilyStmt *node)
{
  WRITE_NODE_TYPE("CreateOpFamilyStmt");

  WRITE_NODE_PTR_FIELD(opfamilyname);
  WRITE_STRING_FIELD(amname);
}

static void
_outAlterOpFamilyStmt(StringInfo str, const AlterOpFamilyStmt *node)
{
  WRITE_NODE_TYPE("AlterOpFamilyStmt");

  WRITE_NODE_PTR_FIELD(opfamilyname);
  WRITE_STRING_FIELD(amname);
  WRITE_BOOL_FIELD(isDrop);
  WRITE_NODE_PTR_FIELD(items);
}

static void
_outPrepareStmt(StringInfo str, const PrepareStmt *node)
{
  WRITE_NODE_TYPE("PrepareStmt");

  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(argtypes);
  WRITE_NODE_PTR_FIELD(query);
}

static void
_outExecuteStmt(StringInfo str, const ExecuteStmt *node)
{
  WRITE_NODE_TYPE("ExecuteStmt");

  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(params);
}

static void
_outDeallocateStmt(StringInfo str, const DeallocateStmt *node)
{
  WRITE_NODE_TYPE("DeallocateStmt");

  WRITE_STRING_FIELD(name);
}

static void
_outDeclareCursorStmt(StringInfo str, const DeclareCursorStmt *node)
{
  WRITE_NODE_TYPE("DeclareCursorStmt");

  WRITE_STRING_FIELD(portalname);
  WRITE_INT_FIELD(options);
  WRITE_NODE_PTR_FIELD(query);
}

static void
_outCreateTableSpaceStmt(StringInfo str, const CreateTableSpaceStmt *node)
{
  WRITE_NODE_TYPE("CreateTableSpaceStmt");

  WRITE_STRING_FIELD(tablespacename);
  WRITE_NODE_PTR_FIELD(owner);
  WRITE_STRING_FIELD(location);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outDropTableSpaceStmt(StringInfo str, const DropTableSpaceStmt *node)
{
  WRITE_NODE_TYPE("DropTableSpaceStmt");

  WRITE_STRING_FIELD(tablespacename);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outAlterObjectSchemaStmt(StringInfo str, const AlterObjectSchemaStmt *node)
{
  WRITE_NODE_TYPE("AlterObjectSchemaStmt");

  WRITE_ENUM_FIELD(objectType);
  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(object);
  WRITE_NODE_PTR_FIELD(objarg);
  WRITE_STRING_FIELD(newschema);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outAlterOwnerStmt(StringInfo str, const AlterOwnerStmt *node)
{
  WRITE_NODE_TYPE("AlterOwnerStmt");

  WRITE_ENUM_FIELD(objectType);
  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(object);
  WRITE_NODE_PTR_FIELD(objarg);
  WRITE_NODE_PTR_FIELD(newowner);
}

static void
_outDropOwnedStmt(StringInfo str, const DropOwnedStmt *node)
{
  WRITE_NODE_TYPE("DropOwnedStmt");

  WRITE_NODE_PTR_FIELD(roles);
  WRITE_ENUM_FIELD(behavior);
}

static void
_outReassignOwnedStmt(StringInfo str, const ReassignOwnedStmt *node)
{
  WRITE_NODE_TYPE("ReassignOwnedStmt");

  WRITE_NODE_PTR_FIELD(roles);
  WRITE_NODE_PTR_FIELD(newrole);
}

static void
_outCompositeTypeStmt(StringInfo str, const CompositeTypeStmt *node)
{
  WRITE_NODE_TYPE("CompositeTypeStmt");

  WRITE_NODE_PTR_FIELD(typevar);
  WRITE_NODE_PTR_FIELD(coldeflist);
}

static void
_outCreateEnumStmt(StringInfo str, const CreateEnumStmt *node)
{
  WRITE_NODE_TYPE("CreateEnumStmt");

  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_NODE_PTR_FIELD(vals);
}

static void
_outCreateRangeStmt(StringInfo str, const CreateRangeStmt *node)
{
  WRITE_NODE_TYPE("CreateRangeStmt");

  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_NODE_PTR_FIELD(params);
}

static void
_outAlterEnumStmt(StringInfo str, const AlterEnumStmt *node)
{
  WRITE_NODE_TYPE("AlterEnumStmt");

  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_STRING_FIELD(newVal);
  WRITE_STRING_FIELD(newValNeighbor);
  WRITE_BOOL_FIELD(newValIsAfter);
  WRITE_BOOL_FIELD(skipIfExists);
}

static void
_outAlterTSDictionaryStmt(StringInfo str, const AlterTSDictionaryStmt *node)
{
  WRITE_NODE_TYPE("AlterTSDictionaryStmt");

  WRITE_NODE_PTR_FIELD(dictname);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterTSConfigurationStmt(StringInfo str, const AlterTSConfigurationStmt *node)
{
  WRITE_NODE_TYPE("AlterTSConfigurationStmt");

  WRITE_ENUM_FIELD(kind);
  WRITE_NODE_PTR_FIELD(cfgname);
  WRITE_NODE_PTR_FIELD(tokentype);
  WRITE_NODE_PTR_FIELD(dicts);
  WRITE_BOOL_FIELD(override);
  WRITE_BOOL_FIELD(replace);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outCreateFdwStmt(StringInfo str, const CreateFdwStmt *node)
{
  WRITE_NODE_TYPE("CreateFdwStmt");

  WRITE_STRING_FIELD(fdwname);
  WRITE_NODE_PTR_FIELD(func_options);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterFdwStmt(StringInfo str, const AlterFdwStmt *node)
{
  WRITE_NODE_TYPE("AlterFdwStmt");

  WRITE_STRING_FIELD(fdwname);
  WRITE_NODE_PTR_FIELD(func_options);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outCreateForeignServerStmt(StringInfo str, const CreateForeignServerStmt *node)
{
  WRITE_NODE_TYPE("CreateForeignServerStmt");

  WRITE_STRING_FIELD(servername);
  WRITE_STRING_FIELD(servertype);
  WRITE_STRING_FIELD(version);
  WRITE_STRING_FIELD(fdwname);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterForeignServerStmt(StringInfo str, const AlterForeignServerStmt *node)
{
  WRITE_NODE_TYPE("AlterForeignServerStmt");

  WRITE_STRING_FIELD(servername);
  WRITE_STRING_FIELD(version);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_BOOL_FIELD(has_version);
}

static void
_outCreateUserMappingStmt(StringInfo str, const CreateUserMappingStmt *node)
{
  WRITE_NODE_TYPE("CreateUserMappingStmt");

  WRITE_NODE_PTR_FIELD(user);
  WRITE_STRING_FIELD(servername);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterUserMappingStmt(StringInfo str, const AlterUserMappingStmt *node)
{
  WRITE_NODE_TYPE("AlterUserMappingStmt");

  WRITE_NODE_PTR_FIELD(user);
  WRITE_STRING_FIELD(servername);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outDropUserMappingStmt(StringInfo str, const DropUserMappingStmt *node)
{
  WRITE_NODE_TYPE("DropUserMappingStmt");

  WRITE_NODE_PTR_FIELD(user);
  WRITE_STRING_FIELD(servername);
  WRITE_BOOL_FIELD(missing_ok);
}

static void
_outAlterTableSpaceOptionsStmt(StringInfo str, const AlterTableSpaceOptionsStmt *node)
{
  WRITE_NODE_TYPE("AlterTableSpaceOptionsStmt");

  WRITE_STRING_FIELD(tablespacename);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_BOOL_FIELD(isReset);
}

static void
_outAlterTableMoveAllStmt(StringInfo str, const AlterTableMoveAllStmt *node)
{
  WRITE_NODE_TYPE("AlterTableMoveAllStmt");

  WRITE_STRING_FIELD(orig_tablespacename);
  WRITE_ENUM_FIELD(objtype);
  WRITE_NODE_PTR_FIELD(roles);
  WRITE_STRING_FIELD(new_tablespacename);
  WRITE_BOOL_FIELD(nowait);
}

static void
_outSecLabelStmt(StringInfo str, const SecLabelStmt *node)
{
  WRITE_NODE_TYPE("SecLabelStmt");

  WRITE_ENUM_FIELD(objtype);
  WRITE_NODE_PTR_FIELD(objname);
  WRITE_NODE_PTR_FIELD(objargs);
  WRITE_STRING_FIELD(provider);
  WRITE_STRING_FIELD(label);
}

static void
_outCreateForeignTableStmt(StringInfo str, const CreateForeignTableStmt *node)
{
  WRITE_NODE_TYPE("CreateForeignTableStmt");

  WRITE_NODE_FIELD_WITH_TYPE(base, CreateStmt);
  WRITE_STRING_FIELD(servername);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outImportForeignSchemaStmt(StringInfo str, const ImportForeignSchemaStmt *node)
{
  WRITE_NODE_TYPE("ImportForeignSchemaStmt");

  WRITE_STRING_FIELD(server_name);
  WRITE_STRING_FIELD(remote_schema);
  WRITE_STRING_FIELD(local_schema);
  WRITE_ENUM_FIELD(list_type);
  WRITE_NODE_PTR_FIELD(table_list);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outCreateExtensionStmt(StringInfo str, const CreateExtensionStmt *node)
{
  WRITE_NODE_TYPE("CreateExtensionStmt");

  WRITE_STRING_FIELD(extname);
  WRITE_BOOL_FIELD(if_not_exists);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterExtensionStmt(StringInfo str, const AlterExtensionStmt *node)
{
  WRITE_NODE_TYPE("AlterExtensionStmt");

  WRITE_STRING_FIELD(extname);
  WRITE_NODE_PTR_FIELD(options);
}

static void
_outAlterExtensionContentsStmt(StringInfo str, const AlterExtensionContentsStmt *node)
{
  WRITE_NODE_TYPE("AlterExtensionContentsStmt");

  WRITE_STRING_FIELD(extname);
  WRITE_INT_FIELD(action);
  WRITE_ENUM_FIELD(objtype);
  WRITE_NODE_PTR_FIELD(objname);
  WRITE_NODE_PTR_FIELD(objargs);
}

static void
_outCreateEventTrigStmt(StringInfo str, const CreateEventTrigStmt *node)
{
  WRITE_NODE_TYPE("CreateEventTrigStmt");

  WRITE_STRING_FIELD(trigname);
  WRITE_STRING_FIELD(eventname);
  WRITE_NODE_PTR_FIELD(whenclause);
  WRITE_NODE_PTR_FIELD(funcname);
}

static void
_outAlterEventTrigStmt(StringInfo str, const AlterEventTrigStmt *node)
{
  WRITE_NODE_TYPE("AlterEventTrigStmt");

  WRITE_STRING_FIELD(trigname);
  WRITE_CHAR_FIELD(tgenabled);
}

static void
_outRefreshMatViewStmt(StringInfo str, const RefreshMatViewStmt *node)
{
  WRITE_NODE_TYPE("RefreshMatViewStmt");

  WRITE_BOOL_FIELD(concurrent);
  WRITE_BOOL_FIELD(skipData);
  WRITE_NODE_PTR_FIELD(relation);
}

static void
_outReplicaIdentityStmt(StringInfo str, const ReplicaIdentityStmt *node)
{
  WRITE_NODE_TYPE("ReplicaIdentityStmt");

  WRITE_CHAR_FIELD(identity_type);
  WRITE_STRING_FIELD(name);
}

static void
_outAlterSystemStmt(StringInfo str, const AlterSystemStmt *node)
{
  WRITE_NODE_TYPE("AlterSystemStmt");

  WRITE_NODE_PTR_FIELD(setstmt);
}

static void
_outCreatePolicyStmt(StringInfo str, const CreatePolicyStmt *node)
{
  WRITE_NODE_TYPE("CreatePolicyStmt");

  WRITE_STRING_FIELD(policy_name);
  WRITE_NODE_PTR_FIELD(table);
  WRITE_STRING_FIELD(cmd_name);
  WRITE_NODE_PTR_FIELD(roles);
  WRITE_NODE_PTR_FIELD(qual);
  WRITE_NODE_PTR_FIELD(with_check);
}

static void
_outAlterPolicyStmt(StringInfo str, const AlterPolicyStmt *node)
{
  WRITE_NODE_TYPE("AlterPolicyStmt");

  WRITE_STRING_FIELD(policy_name);
  WRITE_NODE_PTR_FIELD(table);
  WRITE_NODE_PTR_FIELD(roles);
  WRITE_NODE_PTR_FIELD(qual);
  WRITE_NODE_PTR_FIELD(with_check);
}

static void
_outCreateTransformStmt(StringInfo str, const CreateTransformStmt *node)
{
  WRITE_NODE_TYPE("CreateTransformStmt");

  WRITE_BOOL_FIELD(replace);
  WRITE_NODE_PTR_FIELD(type_name);
  WRITE_STRING_FIELD(lang);
  WRITE_NODE_PTR_FIELD(fromsql);
  WRITE_NODE_PTR_FIELD(tosql);
}

static void
_outA_Expr(StringInfo str, const A_Expr *node)
{
  WRITE_NODE_TYPE("A_Expr");

  WRITE_ENUM_FIELD(kind);
  WRITE_NODE_PTR_FIELD(name);
  WRITE_NODE_PTR_FIELD(lexpr);
  WRITE_NODE_PTR_FIELD(rexpr);
  WRITE_INT_FIELD(location);
}

static void
_outColumnRef(StringInfo str, const ColumnRef *node)
{
  WRITE_NODE_TYPE("ColumnRef");

  WRITE_NODE_PTR_FIELD(fields);
  WRITE_INT_FIELD(location);
}

static void
_outParamRef(StringInfo str, const ParamRef *node)
{
  WRITE_NODE_TYPE("ParamRef");

  WRITE_INT_FIELD(number);
  WRITE_INT_FIELD(location);
}

static void
_outA_Const(StringInfo str, const A_Const *node)
{
  WRITE_NODE_TYPE("A_Const");

  WRITE_NODE_FIELD(val);
  WRITE_INT_FIELD(location);
}

static void
_outFuncCall(StringInfo str, const FuncCall *node)
{
  WRITE_NODE_TYPE("FuncCall");

  WRITE_NODE_PTR_FIELD(funcname);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(agg_order);
  WRITE_NODE_PTR_FIELD(agg_filter);
  WRITE_BOOL_FIELD(agg_within_group);
  WRITE_BOOL_FIELD(agg_star);
  WRITE_BOOL_FIELD(agg_distinct);
  WRITE_BOOL_FIELD(func_variadic);
  WRITE_NODE_PTR_FIELD(over);
  WRITE_INT_FIELD(location);
}

static void
_outA_Star(StringInfo str, const A_Star *node)
{
  WRITE_NODE_TYPE("A_Star");

}

static void
_outA_Indices(StringInfo str, const A_Indices *node)
{
  WRITE_NODE_TYPE("A_Indices");

  WRITE_NODE_PTR_FIELD(lidx);
  WRITE_NODE_PTR_FIELD(uidx);
}

static void
_outA_Indirection(StringInfo str, const A_Indirection *node)
{
  WRITE_NODE_TYPE("A_Indirection");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_NODE_PTR_FIELD(indirection);
}

static void
_outA_ArrayExpr(StringInfo str, const A_ArrayExpr *node)
{
  WRITE_NODE_TYPE("A_ArrayExpr");

  WRITE_NODE_PTR_FIELD(elements);
  WRITE_INT_FIELD(location);
}

static void
_outResTarget(StringInfo str, const ResTarget *node)
{
  WRITE_NODE_TYPE("ResTarget");

  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(indirection);
  WRITE_NODE_PTR_FIELD(val);
  WRITE_INT_FIELD(location);
}

static void
_outMultiAssignRef(StringInfo str, const MultiAssignRef *node)
{
  WRITE_NODE_TYPE("MultiAssignRef");

  WRITE_NODE_PTR_FIELD(source);
  WRITE_INT_FIELD(colno);
  WRITE_INT_FIELD(ncolumns);
}

static void
_outTypeCast(StringInfo str, const TypeCast *node)
{
  WRITE_NODE_TYPE("TypeCast");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_INT_FIELD(location);
}

static void
_outCollateClause(StringInfo str, const CollateClause *node)
{
  WRITE_NODE_TYPE("CollateClause");

  WRITE_NODE_PTR_FIELD(arg);
  WRITE_NODE_PTR_FIELD(collname);
  WRITE_INT_FIELD(location);
}

static void
_outSortBy(StringInfo str, const SortBy *node)
{
  WRITE_NODE_TYPE("SortBy");

  WRITE_NODE_PTR_FIELD(node);
  WRITE_ENUM_FIELD(sortby_dir);
  WRITE_ENUM_FIELD(sortby_nulls);
  WRITE_NODE_PTR_FIELD(useOp);
  WRITE_INT_FIELD(location);
}

static void
_outWindowDef(StringInfo str, const WindowDef *node)
{
  WRITE_NODE_TYPE("WindowDef");

  WRITE_STRING_FIELD(name);
  WRITE_STRING_FIELD(refname);
  WRITE_NODE_PTR_FIELD(partitionClause);
  WRITE_NODE_PTR_FIELD(orderClause);
  WRITE_INT_FIELD(frameOptions);
  WRITE_NODE_PTR_FIELD(startOffset);
  WRITE_NODE_PTR_FIELD(endOffset);
  WRITE_INT_FIELD(location);
}

static void
_outRangeSubselect(StringInfo str, const RangeSubselect *node)
{
  WRITE_NODE_TYPE("RangeSubselect");

  WRITE_BOOL_FIELD(lateral);
  WRITE_NODE_PTR_FIELD(subquery);
  WRITE_NODE_PTR_FIELD(alias);
}

static void
_outRangeFunction(StringInfo str, const RangeFunction *node)
{
  WRITE_NODE_TYPE("RangeFunction");

  WRITE_BOOL_FIELD(lateral);
  WRITE_BOOL_FIELD(ordinality);
  WRITE_BOOL_FIELD(is_rowsfrom);
  WRITE_NODE_PTR_FIELD(functions);
  WRITE_NODE_PTR_FIELD(alias);
  WRITE_NODE_PTR_FIELD(coldeflist);
}

static void
_outRangeTableSample(StringInfo str, const RangeTableSample *node)
{
  WRITE_NODE_TYPE("RangeTableSample");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_NODE_PTR_FIELD(method);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(repeatable);
  WRITE_INT_FIELD(location);
}

static void
_outTypeName(StringInfo str, const TypeName *node)
{
  WRITE_NODE_TYPE("TypeName");

  WRITE_NODE_PTR_FIELD(names);
  WRITE_UINT_FIELD(typeOid);
  WRITE_BOOL_FIELD(setof);
  WRITE_BOOL_FIELD(pct_type);
  WRITE_NODE_PTR_FIELD(typmods);
  WRITE_INT_FIELD(typemod);
  WRITE_NODE_PTR_FIELD(arrayBounds);
  WRITE_INT_FIELD(location);
}

static void
_outColumnDef(StringInfo str, const ColumnDef *node)
{
  WRITE_NODE_TYPE("ColumnDef");

  WRITE_STRING_FIELD(colname);
  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_INT_FIELD(inhcount);
  WRITE_BOOL_FIELD(is_local);
  WRITE_BOOL_FIELD(is_not_null);
  WRITE_BOOL_FIELD(is_from_type);
  WRITE_CHAR_FIELD(storage);
  WRITE_NODE_PTR_FIELD(raw_default);
  WRITE_NODE_PTR_FIELD(cooked_default);
  WRITE_NODE_PTR_FIELD(collClause);
  WRITE_UINT_FIELD(collOid);
  WRITE_NODE_PTR_FIELD(constraints);
  WRITE_NODE_PTR_FIELD(fdwoptions);
  WRITE_INT_FIELD(location);
}

static void
_outIndexElem(StringInfo str, const IndexElem *node)
{
  WRITE_NODE_TYPE("IndexElem");

  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(expr);
  WRITE_STRING_FIELD(indexcolname);
  WRITE_NODE_PTR_FIELD(collation);
  WRITE_NODE_PTR_FIELD(opclass);
  WRITE_ENUM_FIELD(ordering);
  WRITE_ENUM_FIELD(nulls_ordering);
}

static void
_outConstraint(StringInfo str, const Constraint *node)
{
  WRITE_NODE_TYPE("Constraint");

  WRITE_ENUM_FIELD(contype);
  WRITE_STRING_FIELD(conname);
  WRITE_BOOL_FIELD(deferrable);
  WRITE_BOOL_FIELD(initdeferred);
  WRITE_INT_FIELD(location);
  WRITE_BOOL_FIELD(is_no_inherit);
  WRITE_NODE_PTR_FIELD(raw_expr);
  WRITE_STRING_FIELD(cooked_expr);
  WRITE_NODE_PTR_FIELD(keys);
  WRITE_NODE_PTR_FIELD(exclusions);
  WRITE_NODE_PTR_FIELD(options);
  WRITE_STRING_FIELD(indexname);
  WRITE_STRING_FIELD(indexspace);
  WRITE_STRING_FIELD(access_method);
  WRITE_NODE_PTR_FIELD(where_clause);
  WRITE_NODE_PTR_FIELD(pktable);
  WRITE_NODE_PTR_FIELD(fk_attrs);
  WRITE_NODE_PTR_FIELD(pk_attrs);
  WRITE_CHAR_FIELD(fk_matchtype);
  WRITE_CHAR_FIELD(fk_upd_action);
  WRITE_CHAR_FIELD(fk_del_action);
  WRITE_NODE_PTR_FIELD(old_conpfeqop);
  WRITE_UINT_FIELD(old_pktable_oid);
  WRITE_BOOL_FIELD(skip_validation);
  WRITE_BOOL_FIELD(initially_valid);
}

static void
_outDefElem(StringInfo str, const DefElem *node)
{
  WRITE_NODE_TYPE("DefElem");

  WRITE_STRING_FIELD(defnamespace);
  WRITE_STRING_FIELD(defname);
  WRITE_NODE_PTR_FIELD(arg);
  WRITE_ENUM_FIELD(defaction);
  WRITE_INT_FIELD(location);
}

static void
_outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
{
  WRITE_NODE_TYPE("RangeTblEntry");

  WRITE_ENUM_FIELD(rtekind);
  WRITE_UINT_FIELD(relid);
  WRITE_CHAR_FIELD(relkind);
  WRITE_NODE_PTR_FIELD(tablesample);
  WRITE_NODE_PTR_FIELD(subquery);
  WRITE_BOOL_FIELD(security_barrier);
  WRITE_ENUM_FIELD(jointype);
  WRITE_NODE_PTR_FIELD(joinaliasvars);
  WRITE_NODE_PTR_FIELD(functions);
  WRITE_BOOL_FIELD(funcordinality);
  WRITE_NODE_PTR_FIELD(values_lists);
  WRITE_NODE_PTR_FIELD(values_collations);
  WRITE_STRING_FIELD(ctename);
  WRITE_UINT_FIELD(ctelevelsup);
  WRITE_BOOL_FIELD(self_reference);
  WRITE_NODE_PTR_FIELD(ctecoltypes);
  WRITE_NODE_PTR_FIELD(ctecoltypmods);
  WRITE_NODE_PTR_FIELD(ctecolcollations);
  WRITE_NODE_PTR_FIELD(alias);
  WRITE_NODE_PTR_FIELD(eref);
  WRITE_BOOL_FIELD(lateral);
  WRITE_BOOL_FIELD(inh);
  WRITE_BOOL_FIELD(inFromCl);
  WRITE_ENUM_FIELD(requiredPerms);
  WRITE_UINT_FIELD(checkAsUser);
  WRITE_BITMAPSET_FIELD(selectedCols);
  WRITE_BITMAPSET_FIELD(insertedCols);
  WRITE_BITMAPSET_FIELD(updatedCols);
  WRITE_NODE_PTR_FIELD(securityQuals);
}

static void
_outRangeTblFunction(StringInfo str, const RangeTblFunction *node)
{
  WRITE_NODE_TYPE("RangeTblFunction");

  WRITE_NODE_PTR_FIELD(funcexpr);
  WRITE_INT_FIELD(funccolcount);
  WRITE_NODE_PTR_FIELD(funccolnames);
  WRITE_NODE_PTR_FIELD(funccoltypes);
  WRITE_NODE_PTR_FIELD(funccoltypmods);
  WRITE_NODE_PTR_FIELD(funccolcollations);
  WRITE_BITMAPSET_FIELD(funcparams);
}

static void
_outTableSampleClause(StringInfo str, const TableSampleClause *node)
{
  WRITE_NODE_TYPE("TableSampleClause");

  WRITE_UINT_FIELD(tsmhandler);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_NODE_PTR_FIELD(repeatable);
}

static void
_outWithCheckOption(StringInfo str, const WithCheckOption *node)
{
  WRITE_NODE_TYPE("WithCheckOption");

  WRITE_ENUM_FIELD(kind);
  WRITE_STRING_FIELD(relname);
  WRITE_STRING_FIELD(polname);
  WRITE_NODE_PTR_FIELD(qual);
  WRITE_BOOL_FIELD(cascaded);
}

static void
_outSortGroupClause(StringInfo str, const SortGroupClause *node)
{
  WRITE_NODE_TYPE("SortGroupClause");

  WRITE_UINT_FIELD(tleSortGroupRef);
  WRITE_UINT_FIELD(eqop);
  WRITE_UINT_FIELD(sortop);
  WRITE_BOOL_FIELD(nulls_first);
  WRITE_BOOL_FIELD(hashable);
}

static void
_outGroupingSet(StringInfo str, const GroupingSet *node)
{
  WRITE_NODE_TYPE("GroupingSet");

  WRITE_ENUM_FIELD(kind);
  WRITE_NODE_PTR_FIELD(content);
  WRITE_INT_FIELD(location);
}

static void
_outWindowClause(StringInfo str, const WindowClause *node)
{
  WRITE_NODE_TYPE("WindowClause");

  WRITE_STRING_FIELD(name);
  WRITE_STRING_FIELD(refname);
  WRITE_NODE_PTR_FIELD(partitionClause);
  WRITE_NODE_PTR_FIELD(orderClause);
  WRITE_INT_FIELD(frameOptions);
  WRITE_NODE_PTR_FIELD(startOffset);
  WRITE_NODE_PTR_FIELD(endOffset);
  WRITE_UINT_FIELD(winref);
  WRITE_BOOL_FIELD(copiedOrder);
}

static void
_outFuncWithArgs(StringInfo str, const FuncWithArgs *node)
{
  WRITE_NODE_TYPE("FuncWithArgs");

  WRITE_NODE_PTR_FIELD(funcname);
  WRITE_NODE_PTR_FIELD(funcargs);
}

static void
_outAccessPriv(StringInfo str, const AccessPriv *node)
{
  WRITE_NODE_TYPE("AccessPriv");

  WRITE_STRING_FIELD(priv_name);
  WRITE_NODE_PTR_FIELD(cols);
}

static void
_outCreateOpClassItem(StringInfo str, const CreateOpClassItem *node)
{
  WRITE_NODE_TYPE("CreateOpClassItem");

  WRITE_INT_FIELD(itemtype);
  WRITE_NODE_PTR_FIELD(name);
  WRITE_NODE_PTR_FIELD(args);
  WRITE_INT_FIELD(number);
  WRITE_NODE_PTR_FIELD(order_family);
  WRITE_NODE_PTR_FIELD(class_args);
  WRITE_NODE_PTR_FIELD(storedtype);
}

static void
_outTableLikeClause(StringInfo str, const TableLikeClause *node)
{
  WRITE_NODE_TYPE("TableLikeClause");

  WRITE_NODE_PTR_FIELD(relation);
  WRITE_UINT_FIELD(options);
}

static void
_outFunctionParameter(StringInfo str, const FunctionParameter *node)
{
  WRITE_NODE_TYPE("FunctionParameter");

  WRITE_STRING_FIELD(name);
  WRITE_NODE_PTR_FIELD(argType);
  WRITE_ENUM_FIELD(mode);
  WRITE_NODE_PTR_FIELD(defexpr);
}

static void
_outLockingClause(StringInfo str, const LockingClause *node)
{
  WRITE_NODE_TYPE("LockingClause");

  WRITE_NODE_PTR_FIELD(lockedRels);
  WRITE_ENUM_FIELD(strength);
  WRITE_ENUM_FIELD(waitPolicy);
}

static void
_outRowMarkClause(StringInfo str, const RowMarkClause *node)
{
  WRITE_NODE_TYPE("RowMarkClause");

  WRITE_UINT_FIELD(rti);
  WRITE_ENUM_FIELD(strength);
  WRITE_ENUM_FIELD(waitPolicy);
  WRITE_BOOL_FIELD(pushedDown);
}

static void
_outXmlSerialize(StringInfo str, const XmlSerialize *node)
{
  WRITE_NODE_TYPE("XmlSerialize");

  WRITE_ENUM_FIELD(xmloption);
  WRITE_NODE_PTR_FIELD(expr);
  WRITE_NODE_PTR_FIELD(typeName);
  WRITE_INT_FIELD(location);
}

static void
_outWithClause(StringInfo str, const WithClause *node)
{
  WRITE_NODE_TYPE("WithClause");

  WRITE_NODE_PTR_FIELD(ctes);
  WRITE_BOOL_FIELD(recursive);
  WRITE_INT_FIELD(location);
}

static void
_outInferClause(StringInfo str, const InferClause *node)
{
  WRITE_NODE_TYPE("InferClause");

  WRITE_NODE_PTR_FIELD(indexElems);
  WRITE_NODE_PTR_FIELD(whereClause);
  WRITE_STRING_FIELD(conname);
  WRITE_INT_FIELD(location);
}

static void
_outOnConflictClause(StringInfo str, const OnConflictClause *node)
{
  WRITE_NODE_TYPE("OnConflictClause");

  WRITE_ENUM_FIELD(action);
  WRITE_NODE_PTR_FIELD(infer);
  WRITE_NODE_PTR_FIELD(targetList);
  WRITE_NODE_PTR_FIELD(whereClause);
  WRITE_INT_FIELD(location);
}

static void
_outCommonTableExpr(StringInfo str, const CommonTableExpr *node)
{
  WRITE_NODE_TYPE("CommonTableExpr");

  WRITE_STRING_FIELD(ctename);
  WRITE_NODE_PTR_FIELD(aliascolnames);
  WRITE_NODE_PTR_FIELD(ctequery);
  WRITE_INT_FIELD(location);
  WRITE_BOOL_FIELD(cterecursive);
  WRITE_INT_FIELD(cterefcount);
  WRITE_NODE_PTR_FIELD(ctecolnames);
  WRITE_NODE_PTR_FIELD(ctecoltypes);
  WRITE_NODE_PTR_FIELD(ctecoltypmods);
  WRITE_NODE_PTR_FIELD(ctecolcollations);
}

static void
_outRoleSpec(StringInfo str, const RoleSpec *node)
{
  WRITE_NODE_TYPE("RoleSpec");

  WRITE_ENUM_FIELD(roletype);
  WRITE_STRING_FIELD(rolename);
  WRITE_INT_FIELD(location);
}

static void
_outInlineCodeBlock(StringInfo str, const InlineCodeBlock *node)
{
  WRITE_NODE_TYPE("InlineCodeBlock");

  WRITE_STRING_FIELD(source_text);
  WRITE_UINT_FIELD(langOid);
  WRITE_BOOL_FIELD(langIsTrusted);
}