X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=src%2Fbackend%2Fnodes%2Foutfuncs.c;h=02a0f62a53a4e3d06a3ad48d523e959d5d6b2ab7;hb=46c508fbcf98ac334f1e831d21021d731c882fbb;hp=db4a33c30d134844e9381ab1ace4510dfb2ac639;hpb=b310b6e31ce5aa9e456c43c0e8e93248b0c84c02;p=postgresql diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index db4a33c30d..02a0f62a53 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -3,7 +3,7 @@ * outfuncs.c * Output functions for Postgres tree nodes. * - * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * @@ -24,7 +24,6 @@ #include #include "lib/stringinfo.h" -#include "foreign/fdwapi.h" #include "nodes/plannodes.h" #include "nodes/relation.h" #include "utils/datum.h" @@ -97,7 +96,7 @@ #define booltostr(x) ((x) ? "true" : "false") -static void _outNode(StringInfo str, void *obj); +static void _outNode(StringInfo str, const void *obj); /* @@ -108,7 +107,7 @@ static void _outNode(StringInfo str, void *obj); * If a null or empty string is given, it is encoded as "<>". */ static void -_outToken(StringInfo str, char *s) +_outToken(StringInfo str, const char *s) { if (s == NULL || *s == '\0') { @@ -140,9 +139,9 @@ _outToken(StringInfo str, char *s) } static void -_outList(StringInfo str, List *node) +_outList(StringInfo str, const List *node) { - ListCell *lc; + const ListCell *lc; appendStringInfoChar(str, '('); @@ -183,7 +182,7 @@ _outList(StringInfo str, List *node) * Note: the output format is "(b int int ...)", similar to an integer List. */ static void -_outBitmapset(StringInfo str, Bitmapset *bms) +_outBitmapset(StringInfo str, const Bitmapset *bms) { Bitmapset *tmpset; int x; @@ -238,11 +237,12 @@ _outDatum(StringInfo str, Datum value, int typlen, bool typbyval) */ static void -_outPlannedStmt(StringInfo str, PlannedStmt *node) +_outPlannedStmt(StringInfo str, const PlannedStmt *node) { WRITE_NODE_TYPE("PLANNEDSTMT"); WRITE_ENUM_FIELD(commandType, CmdType); + WRITE_UINT_FIELD(queryId); WRITE_BOOL_FIELD(hasReturning); WRITE_BOOL_FIELD(hasModifyingCTE); WRITE_BOOL_FIELD(canSetTag); @@ -251,7 +251,6 @@ _outPlannedStmt(StringInfo str, PlannedStmt *node) 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(rowMarks); @@ -264,7 +263,7 @@ _outPlannedStmt(StringInfo str, PlannedStmt *node) * print the basic stuff of all nodes that inherit from Plan */ static void -_outPlanInfo(StringInfo str, Plan *node) +_outPlanInfo(StringInfo str, const Plan *node) { WRITE_FLOAT_FIELD(startup_cost, "%.2f"); WRITE_FLOAT_FIELD(total_cost, "%.2f"); @@ -283,9 +282,9 @@ _outPlanInfo(StringInfo str, Plan *node) * print the basic stuff of all nodes that inherit from Scan */ static void -_outScanInfo(StringInfo str, Scan *node) +_outScanInfo(StringInfo str, const Scan *node) { - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_UINT_FIELD(scanrelid); } @@ -294,9 +293,9 @@ _outScanInfo(StringInfo str, Scan *node) * print the basic stuff of all nodes that inherit from Join */ static void -_outJoinPlanInfo(StringInfo str, Join *node) +_outJoinPlanInfo(StringInfo str, const Join *node) { - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_ENUM_FIELD(jointype, JoinType); WRITE_NODE_FIELD(joinqual); @@ -304,29 +303,29 @@ _outJoinPlanInfo(StringInfo str, Join *node) static void -_outPlan(StringInfo str, Plan *node) +_outPlan(StringInfo str, const Plan *node) { WRITE_NODE_TYPE("PLAN"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); } static void -_outResult(StringInfo str, Result *node) +_outResult(StringInfo str, const Result *node) { WRITE_NODE_TYPE("RESULT"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_NODE_FIELD(resconstantqual); } static void -_outModifyTable(StringInfo str, ModifyTable *node) +_outModifyTable(StringInfo str, const ModifyTable *node) { WRITE_NODE_TYPE("MODIFYTABLE"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_ENUM_FIELD(operation, CmdType); WRITE_BOOL_FIELD(canSetTag); @@ -339,23 +338,23 @@ _outModifyTable(StringInfo str, ModifyTable *node) } static void -_outAppend(StringInfo str, Append *node) +_outAppend(StringInfo str, const Append *node) { WRITE_NODE_TYPE("APPEND"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_NODE_FIELD(appendplans); } static void -_outMergeAppend(StringInfo str, MergeAppend *node) +_outMergeAppend(StringInfo str, const MergeAppend *node) { int i; WRITE_NODE_TYPE("MERGEAPPEND"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_NODE_FIELD(mergeplans); @@ -379,13 +378,13 @@ _outMergeAppend(StringInfo str, MergeAppend *node) } static void -_outRecursiveUnion(StringInfo str, RecursiveUnion *node) +_outRecursiveUnion(StringInfo str, const RecursiveUnion *node) { int i; WRITE_NODE_TYPE("RECURSIVEUNION"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_INT_FIELD(wtParam); WRITE_INT_FIELD(numCols); @@ -402,47 +401,47 @@ _outRecursiveUnion(StringInfo str, RecursiveUnion *node) } static void -_outBitmapAnd(StringInfo str, BitmapAnd *node) +_outBitmapAnd(StringInfo str, const BitmapAnd *node) { WRITE_NODE_TYPE("BITMAPAND"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_NODE_FIELD(bitmapplans); } static void -_outBitmapOr(StringInfo str, BitmapOr *node) +_outBitmapOr(StringInfo str, const BitmapOr *node) { WRITE_NODE_TYPE("BITMAPOR"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_NODE_FIELD(bitmapplans); } static void -_outScan(StringInfo str, Scan *node) +_outScan(StringInfo str, const Scan *node) { WRITE_NODE_TYPE("SCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, node); } static void -_outSeqScan(StringInfo str, SeqScan *node) +_outSeqScan(StringInfo str, const SeqScan *node) { WRITE_NODE_TYPE("SEQSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); } static void -_outIndexScan(StringInfo str, IndexScan *node) +_outIndexScan(StringInfo str, const IndexScan *node) { WRITE_NODE_TYPE("INDEXSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_OID_FIELD(indexid); WRITE_NODE_FIELD(indexqual); @@ -453,11 +452,25 @@ _outIndexScan(StringInfo str, IndexScan *node) } static void -_outBitmapIndexScan(StringInfo str, BitmapIndexScan *node) +_outIndexOnlyScan(StringInfo str, const IndexOnlyScan *node) +{ + WRITE_NODE_TYPE("INDEXONLYSCAN"); + + _outScanInfo(str, (const Scan *) node); + + WRITE_OID_FIELD(indexid); + WRITE_NODE_FIELD(indexqual); + WRITE_NODE_FIELD(indexorderby); + WRITE_NODE_FIELD(indextlist); + WRITE_ENUM_FIELD(indexorderdir, ScanDirection); +} + +static void +_outBitmapIndexScan(StringInfo str, const BitmapIndexScan *node) { WRITE_NODE_TYPE("BITMAPINDEXSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_OID_FIELD(indexid); WRITE_NODE_FIELD(indexqual); @@ -465,43 +478,41 @@ _outBitmapIndexScan(StringInfo str, BitmapIndexScan *node) } static void -_outBitmapHeapScan(StringInfo str, BitmapHeapScan *node) +_outBitmapHeapScan(StringInfo str, const BitmapHeapScan *node) { WRITE_NODE_TYPE("BITMAPHEAPSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_NODE_FIELD(bitmapqualorig); } static void -_outTidScan(StringInfo str, TidScan *node) +_outTidScan(StringInfo str, const TidScan *node) { WRITE_NODE_TYPE("TIDSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_NODE_FIELD(tidquals); } static void -_outSubqueryScan(StringInfo str, SubqueryScan *node) +_outSubqueryScan(StringInfo str, const SubqueryScan *node) { WRITE_NODE_TYPE("SUBQUERYSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_NODE_FIELD(subplan); - WRITE_NODE_FIELD(subrtable); - WRITE_NODE_FIELD(subrowmark); } static void -_outFunctionScan(StringInfo str, FunctionScan *node) +_outFunctionScan(StringInfo str, const FunctionScan *node) { WRITE_NODE_TYPE("FUNCTIONSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_NODE_FIELD(funcexpr); WRITE_NODE_FIELD(funccolnames); @@ -511,84 +522,75 @@ _outFunctionScan(StringInfo str, FunctionScan *node) } static void -_outValuesScan(StringInfo str, ValuesScan *node) +_outValuesScan(StringInfo str, const ValuesScan *node) { WRITE_NODE_TYPE("VALUESSCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_NODE_FIELD(values_lists); } static void -_outCteScan(StringInfo str, CteScan *node) +_outCteScan(StringInfo str, const CteScan *node) { WRITE_NODE_TYPE("CTESCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_INT_FIELD(ctePlanId); WRITE_INT_FIELD(cteParam); } static void -_outWorkTableScan(StringInfo str, WorkTableScan *node) +_outWorkTableScan(StringInfo str, const WorkTableScan *node) { WRITE_NODE_TYPE("WORKTABLESCAN"); - _outScanInfo(str, (Scan *) node); + _outScanInfo(str, (const Scan *) node); WRITE_INT_FIELD(wtParam); } static void -_outForeignScan(StringInfo str, ForeignScan *node) +_outForeignScan(StringInfo str, const ForeignScan *node) { WRITE_NODE_TYPE("FOREIGNSCAN"); - _outScanInfo(str, (Scan *) node); - - WRITE_BOOL_FIELD(fsSystemCol); - WRITE_NODE_FIELD(fdwplan); -} - -static void -_outFdwPlan(StringInfo str, FdwPlan *node) -{ - WRITE_NODE_TYPE("FDWPLAN"); + _outScanInfo(str, (const Scan *) node); - WRITE_FLOAT_FIELD(startup_cost, "%.2f"); - WRITE_FLOAT_FIELD(total_cost, "%.2f"); + WRITE_NODE_FIELD(fdw_exprs); WRITE_NODE_FIELD(fdw_private); + WRITE_BOOL_FIELD(fsSystemCol); } static void -_outJoin(StringInfo str, Join *node) +_outJoin(StringInfo str, const Join *node) { WRITE_NODE_TYPE("JOIN"); - _outJoinPlanInfo(str, (Join *) node); + _outJoinPlanInfo(str, (const Join *) node); } static void -_outNestLoop(StringInfo str, NestLoop *node) +_outNestLoop(StringInfo str, const NestLoop *node) { WRITE_NODE_TYPE("NESTLOOP"); - _outJoinPlanInfo(str, (Join *) node); + _outJoinPlanInfo(str, (const Join *) node); WRITE_NODE_FIELD(nestParams); } static void -_outMergeJoin(StringInfo str, MergeJoin *node) +_outMergeJoin(StringInfo str, const MergeJoin *node) { int numCols; int i; WRITE_NODE_TYPE("MERGEJOIN"); - _outJoinPlanInfo(str, (Join *) node); + _outJoinPlanInfo(str, (const Join *) node); WRITE_NODE_FIELD(mergeclauses); @@ -612,23 +614,23 @@ _outMergeJoin(StringInfo str, MergeJoin *node) } static void -_outHashJoin(StringInfo str, HashJoin *node) +_outHashJoin(StringInfo str, const HashJoin *node) { WRITE_NODE_TYPE("HASHJOIN"); - _outJoinPlanInfo(str, (Join *) node); + _outJoinPlanInfo(str, (const Join *) node); WRITE_NODE_FIELD(hashclauses); } static void -_outAgg(StringInfo str, Agg *node) +_outAgg(StringInfo str, const Agg *node) { int i; WRITE_NODE_TYPE("AGG"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_ENUM_FIELD(aggstrategy, AggStrategy); WRITE_INT_FIELD(numCols); @@ -645,13 +647,13 @@ _outAgg(StringInfo str, Agg *node) } static void -_outWindowAgg(StringInfo str, WindowAgg *node) +_outWindowAgg(StringInfo str, const WindowAgg *node) { int i; WRITE_NODE_TYPE("WINDOWAGG"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_UINT_FIELD(winref); WRITE_INT_FIELD(partNumCols); @@ -680,13 +682,13 @@ _outWindowAgg(StringInfo str, WindowAgg *node) } static void -_outGroup(StringInfo str, Group *node) +_outGroup(StringInfo str, const Group *node) { int i; WRITE_NODE_TYPE("GROUP"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_INT_FIELD(numCols); @@ -700,21 +702,21 @@ _outGroup(StringInfo str, Group *node) } static void -_outMaterial(StringInfo str, Material *node) +_outMaterial(StringInfo str, const Material *node) { WRITE_NODE_TYPE("MATERIAL"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); } static void -_outSort(StringInfo str, Sort *node) +_outSort(StringInfo str, const Sort *node) { int i; WRITE_NODE_TYPE("SORT"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_INT_FIELD(numCols); @@ -736,13 +738,13 @@ _outSort(StringInfo str, Sort *node) } static void -_outUnique(StringInfo str, Unique *node) +_outUnique(StringInfo str, const Unique *node) { int i; WRITE_NODE_TYPE("UNIQUE"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_INT_FIELD(numCols); @@ -756,11 +758,11 @@ _outUnique(StringInfo str, Unique *node) } static void -_outHash(StringInfo str, Hash *node) +_outHash(StringInfo str, const Hash *node) { WRITE_NODE_TYPE("HASH"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_OID_FIELD(skewTable); WRITE_INT_FIELD(skewColumn); @@ -770,13 +772,13 @@ _outHash(StringInfo str, Hash *node) } static void -_outSetOp(StringInfo str, SetOp *node) +_outSetOp(StringInfo str, const SetOp *node) { int i; WRITE_NODE_TYPE("SETOP"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_ENUM_FIELD(cmd, SetOpCmd); WRITE_ENUM_FIELD(strategy, SetOpStrategy); @@ -796,29 +798,29 @@ _outSetOp(StringInfo str, SetOp *node) } static void -_outLockRows(StringInfo str, LockRows *node) +_outLockRows(StringInfo str, const LockRows *node) { WRITE_NODE_TYPE("LOCKROWS"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_NODE_FIELD(rowMarks); WRITE_INT_FIELD(epqParam); } static void -_outLimit(StringInfo str, Limit *node) +_outLimit(StringInfo str, const Limit *node) { WRITE_NODE_TYPE("LIMIT"); - _outPlanInfo(str, (Plan *) node); + _outPlanInfo(str, (const Plan *) node); WRITE_NODE_FIELD(limitOffset); WRITE_NODE_FIELD(limitCount); } static void -_outNestLoopParam(StringInfo str, NestLoopParam *node) +_outNestLoopParam(StringInfo str, const NestLoopParam *node) { WRITE_NODE_TYPE("NESTLOOPPARAM"); @@ -827,7 +829,7 @@ _outNestLoopParam(StringInfo str, NestLoopParam *node) } static void -_outPlanRowMark(StringInfo str, PlanRowMark *node) +_outPlanRowMark(StringInfo str, const PlanRowMark *node) { WRITE_NODE_TYPE("PLANROWMARK"); @@ -840,14 +842,12 @@ _outPlanRowMark(StringInfo str, PlanRowMark *node) } static void -_outPlanInvalItem(StringInfo str, PlanInvalItem *node) +_outPlanInvalItem(StringInfo str, const PlanInvalItem *node) { WRITE_NODE_TYPE("PLANINVALITEM"); WRITE_INT_FIELD(cacheId); - appendStringInfo(str, " :tupleId (%u,%u)", - ItemPointerGetBlockNumber(&node->tupleId), - ItemPointerGetOffsetNumber(&node->tupleId)); + WRITE_UINT_FIELD(hashValue); } /***************************************************************************** @@ -857,7 +857,7 @@ _outPlanInvalItem(StringInfo str, PlanInvalItem *node) *****************************************************************************/ static void -_outAlias(StringInfo str, Alias *node) +_outAlias(StringInfo str, const Alias *node) { WRITE_NODE_TYPE("ALIAS"); @@ -866,7 +866,7 @@ _outAlias(StringInfo str, Alias *node) } static void -_outRangeVar(StringInfo str, RangeVar *node) +_outRangeVar(StringInfo str, const RangeVar *node) { WRITE_NODE_TYPE("RANGEVAR"); @@ -883,7 +883,7 @@ _outRangeVar(StringInfo str, RangeVar *node) } static void -_outIntoClause(StringInfo str, IntoClause *node) +_outIntoClause(StringInfo str, const IntoClause *node) { WRITE_NODE_TYPE("INTOCLAUSE"); @@ -892,10 +892,11 @@ _outIntoClause(StringInfo str, IntoClause *node) WRITE_NODE_FIELD(options); WRITE_ENUM_FIELD(onCommit, OnCommitAction); WRITE_STRING_FIELD(tableSpaceName); + WRITE_BOOL_FIELD(skipData); } static void -_outVar(StringInfo str, Var *node) +_outVar(StringInfo str, const Var *node) { WRITE_NODE_TYPE("VAR"); @@ -911,7 +912,7 @@ _outVar(StringInfo str, Var *node) } static void -_outConst(StringInfo str, Const *node) +_outConst(StringInfo str, const Const *node) { WRITE_NODE_TYPE("CONST"); @@ -931,7 +932,7 @@ _outConst(StringInfo str, Const *node) } static void -_outParam(StringInfo str, Param *node) +_outParam(StringInfo str, const Param *node) { WRITE_NODE_TYPE("PARAM"); @@ -944,7 +945,7 @@ _outParam(StringInfo str, Param *node) } static void -_outAggref(StringInfo str, Aggref *node) +_outAggref(StringInfo str, const Aggref *node) { WRITE_NODE_TYPE("AGGREF"); @@ -961,7 +962,7 @@ _outAggref(StringInfo str, Aggref *node) } static void -_outWindowFunc(StringInfo str, WindowFunc *node) +_outWindowFunc(StringInfo str, const WindowFunc *node) { WRITE_NODE_TYPE("WINDOWFUNC"); @@ -977,7 +978,7 @@ _outWindowFunc(StringInfo str, WindowFunc *node) } static void -_outArrayRef(StringInfo str, ArrayRef *node) +_outArrayRef(StringInfo str, const ArrayRef *node) { WRITE_NODE_TYPE("ARRAYREF"); @@ -992,7 +993,7 @@ _outArrayRef(StringInfo str, ArrayRef *node) } static void -_outFuncExpr(StringInfo str, FuncExpr *node) +_outFuncExpr(StringInfo str, const FuncExpr *node) { WRITE_NODE_TYPE("FUNCEXPR"); @@ -1007,7 +1008,7 @@ _outFuncExpr(StringInfo str, FuncExpr *node) } static void -_outNamedArgExpr(StringInfo str, NamedArgExpr *node) +_outNamedArgExpr(StringInfo str, const NamedArgExpr *node) { WRITE_NODE_TYPE("NAMEDARGEXPR"); @@ -1018,7 +1019,7 @@ _outNamedArgExpr(StringInfo str, NamedArgExpr *node) } static void -_outOpExpr(StringInfo str, OpExpr *node) +_outOpExpr(StringInfo str, const OpExpr *node) { WRITE_NODE_TYPE("OPEXPR"); @@ -1033,7 +1034,7 @@ _outOpExpr(StringInfo str, OpExpr *node) } static void -_outDistinctExpr(StringInfo str, DistinctExpr *node) +_outDistinctExpr(StringInfo str, const DistinctExpr *node) { WRITE_NODE_TYPE("DISTINCTEXPR"); @@ -1048,7 +1049,7 @@ _outDistinctExpr(StringInfo str, DistinctExpr *node) } static void -_outNullIfExpr(StringInfo str, NullIfExpr *node) +_outNullIfExpr(StringInfo str, const NullIfExpr *node) { WRITE_NODE_TYPE("NULLIFEXPR"); @@ -1063,7 +1064,7 @@ _outNullIfExpr(StringInfo str, NullIfExpr *node) } static void -_outScalarArrayOpExpr(StringInfo str, ScalarArrayOpExpr *node) +_outScalarArrayOpExpr(StringInfo str, const ScalarArrayOpExpr *node) { WRITE_NODE_TYPE("SCALARARRAYOPEXPR"); @@ -1076,7 +1077,7 @@ _outScalarArrayOpExpr(StringInfo str, ScalarArrayOpExpr *node) } static void -_outBoolExpr(StringInfo str, BoolExpr *node) +_outBoolExpr(StringInfo str, const BoolExpr *node) { char *opstr = NULL; @@ -1103,7 +1104,7 @@ _outBoolExpr(StringInfo str, BoolExpr *node) } static void -_outSubLink(StringInfo str, SubLink *node) +_outSubLink(StringInfo str, const SubLink *node) { WRITE_NODE_TYPE("SUBLINK"); @@ -1115,7 +1116,7 @@ _outSubLink(StringInfo str, SubLink *node) } static void -_outSubPlan(StringInfo str, SubPlan *node) +_outSubPlan(StringInfo str, const SubPlan *node) { WRITE_NODE_TYPE("SUBPLAN"); @@ -1137,7 +1138,7 @@ _outSubPlan(StringInfo str, SubPlan *node) } static void -_outAlternativeSubPlan(StringInfo str, AlternativeSubPlan *node) +_outAlternativeSubPlan(StringInfo str, const AlternativeSubPlan *node) { WRITE_NODE_TYPE("ALTERNATIVESUBPLAN"); @@ -1145,7 +1146,7 @@ _outAlternativeSubPlan(StringInfo str, AlternativeSubPlan *node) } static void -_outFieldSelect(StringInfo str, FieldSelect *node) +_outFieldSelect(StringInfo str, const FieldSelect *node) { WRITE_NODE_TYPE("FIELDSELECT"); @@ -1157,7 +1158,7 @@ _outFieldSelect(StringInfo str, FieldSelect *node) } static void -_outFieldStore(StringInfo str, FieldStore *node) +_outFieldStore(StringInfo str, const FieldStore *node) { WRITE_NODE_TYPE("FIELDSTORE"); @@ -1168,7 +1169,7 @@ _outFieldStore(StringInfo str, FieldStore *node) } static void -_outRelabelType(StringInfo str, RelabelType *node) +_outRelabelType(StringInfo str, const RelabelType *node) { WRITE_NODE_TYPE("RELABELTYPE"); @@ -1181,7 +1182,7 @@ _outRelabelType(StringInfo str, RelabelType *node) } static void -_outCoerceViaIO(StringInfo str, CoerceViaIO *node) +_outCoerceViaIO(StringInfo str, const CoerceViaIO *node) { WRITE_NODE_TYPE("COERCEVIAIO"); @@ -1193,7 +1194,7 @@ _outCoerceViaIO(StringInfo str, CoerceViaIO *node) } static void -_outArrayCoerceExpr(StringInfo str, ArrayCoerceExpr *node) +_outArrayCoerceExpr(StringInfo str, const ArrayCoerceExpr *node) { WRITE_NODE_TYPE("ARRAYCOERCEEXPR"); @@ -1208,7 +1209,7 @@ _outArrayCoerceExpr(StringInfo str, ArrayCoerceExpr *node) } static void -_outConvertRowtypeExpr(StringInfo str, ConvertRowtypeExpr *node) +_outConvertRowtypeExpr(StringInfo str, const ConvertRowtypeExpr *node) { WRITE_NODE_TYPE("CONVERTROWTYPEEXPR"); @@ -1219,7 +1220,7 @@ _outConvertRowtypeExpr(StringInfo str, ConvertRowtypeExpr *node) } static void -_outCollateExpr(StringInfo str, CollateExpr *node) +_outCollateExpr(StringInfo str, const CollateExpr *node) { WRITE_NODE_TYPE("COLLATE"); @@ -1229,7 +1230,7 @@ _outCollateExpr(StringInfo str, CollateExpr *node) } static void -_outCaseExpr(StringInfo str, CaseExpr *node) +_outCaseExpr(StringInfo str, const CaseExpr *node) { WRITE_NODE_TYPE("CASE"); @@ -1242,7 +1243,7 @@ _outCaseExpr(StringInfo str, CaseExpr *node) } static void -_outCaseWhen(StringInfo str, CaseWhen *node) +_outCaseWhen(StringInfo str, const CaseWhen *node) { WRITE_NODE_TYPE("WHEN"); @@ -1252,7 +1253,7 @@ _outCaseWhen(StringInfo str, CaseWhen *node) } static void -_outCaseTestExpr(StringInfo str, CaseTestExpr *node) +_outCaseTestExpr(StringInfo str, const CaseTestExpr *node) { WRITE_NODE_TYPE("CASETESTEXPR"); @@ -1262,7 +1263,7 @@ _outCaseTestExpr(StringInfo str, CaseTestExpr *node) } static void -_outArrayExpr(StringInfo str, ArrayExpr *node) +_outArrayExpr(StringInfo str, const ArrayExpr *node) { WRITE_NODE_TYPE("ARRAY"); @@ -1275,7 +1276,7 @@ _outArrayExpr(StringInfo str, ArrayExpr *node) } static void -_outRowExpr(StringInfo str, RowExpr *node) +_outRowExpr(StringInfo str, const RowExpr *node) { WRITE_NODE_TYPE("ROW"); @@ -1287,7 +1288,7 @@ _outRowExpr(StringInfo str, RowExpr *node) } static void -_outRowCompareExpr(StringInfo str, RowCompareExpr *node) +_outRowCompareExpr(StringInfo str, const RowCompareExpr *node) { WRITE_NODE_TYPE("ROWCOMPARE"); @@ -1300,7 +1301,7 @@ _outRowCompareExpr(StringInfo str, RowCompareExpr *node) } static void -_outCoalesceExpr(StringInfo str, CoalesceExpr *node) +_outCoalesceExpr(StringInfo str, const CoalesceExpr *node) { WRITE_NODE_TYPE("COALESCE"); @@ -1311,7 +1312,7 @@ _outCoalesceExpr(StringInfo str, CoalesceExpr *node) } static void -_outMinMaxExpr(StringInfo str, MinMaxExpr *node) +_outMinMaxExpr(StringInfo str, const MinMaxExpr *node) { WRITE_NODE_TYPE("MINMAX"); @@ -1324,7 +1325,7 @@ _outMinMaxExpr(StringInfo str, MinMaxExpr *node) } static void -_outXmlExpr(StringInfo str, XmlExpr *node) +_outXmlExpr(StringInfo str, const XmlExpr *node) { WRITE_NODE_TYPE("XMLEXPR"); @@ -1340,7 +1341,7 @@ _outXmlExpr(StringInfo str, XmlExpr *node) } static void -_outNullTest(StringInfo str, NullTest *node) +_outNullTest(StringInfo str, const NullTest *node) { WRITE_NODE_TYPE("NULLTEST"); @@ -1350,7 +1351,7 @@ _outNullTest(StringInfo str, NullTest *node) } static void -_outBooleanTest(StringInfo str, BooleanTest *node) +_outBooleanTest(StringInfo str, const BooleanTest *node) { WRITE_NODE_TYPE("BOOLEANTEST"); @@ -1359,7 +1360,7 @@ _outBooleanTest(StringInfo str, BooleanTest *node) } static void -_outCoerceToDomain(StringInfo str, CoerceToDomain *node) +_outCoerceToDomain(StringInfo str, const CoerceToDomain *node) { WRITE_NODE_TYPE("COERCETODOMAIN"); @@ -1372,7 +1373,7 @@ _outCoerceToDomain(StringInfo str, CoerceToDomain *node) } static void -_outCoerceToDomainValue(StringInfo str, CoerceToDomainValue *node) +_outCoerceToDomainValue(StringInfo str, const CoerceToDomainValue *node) { WRITE_NODE_TYPE("COERCETODOMAINVALUE"); @@ -1383,7 +1384,7 @@ _outCoerceToDomainValue(StringInfo str, CoerceToDomainValue *node) } static void -_outSetToDefault(StringInfo str, SetToDefault *node) +_outSetToDefault(StringInfo str, const SetToDefault *node) { WRITE_NODE_TYPE("SETTODEFAULT"); @@ -1394,7 +1395,7 @@ _outSetToDefault(StringInfo str, SetToDefault *node) } static void -_outCurrentOfExpr(StringInfo str, CurrentOfExpr *node) +_outCurrentOfExpr(StringInfo str, const CurrentOfExpr *node) { WRITE_NODE_TYPE("CURRENTOFEXPR"); @@ -1404,7 +1405,7 @@ _outCurrentOfExpr(StringInfo str, CurrentOfExpr *node) } static void -_outTargetEntry(StringInfo str, TargetEntry *node) +_outTargetEntry(StringInfo str, const TargetEntry *node) { WRITE_NODE_TYPE("TARGETENTRY"); @@ -1418,7 +1419,7 @@ _outTargetEntry(StringInfo str, TargetEntry *node) } static void -_outRangeTblRef(StringInfo str, RangeTblRef *node) +_outRangeTblRef(StringInfo str, const RangeTblRef *node) { WRITE_NODE_TYPE("RANGETBLREF"); @@ -1426,7 +1427,7 @@ _outRangeTblRef(StringInfo str, RangeTblRef *node) } static void -_outJoinExpr(StringInfo str, JoinExpr *node) +_outJoinExpr(StringInfo str, const JoinExpr *node) { WRITE_NODE_TYPE("JOINEXPR"); @@ -1441,7 +1442,7 @@ _outJoinExpr(StringInfo str, JoinExpr *node) } static void -_outFromExpr(StringInfo str, FromExpr *node) +_outFromExpr(StringInfo str, const FromExpr *node) { WRITE_NODE_TYPE("FROMEXPR"); @@ -1460,13 +1461,22 @@ _outFromExpr(StringInfo str, FromExpr *node) * * Note we do NOT print the parent, else we'd be in infinite recursion. * We can print the parent's relids for identification purposes, though. + * We also do not print the whole of param_info, since it's printed by + * _outRelOptInfo; it's sufficient and less cluttering to print just the + * required outer relids. */ static void -_outPathInfo(StringInfo str, Path *node) +_outPathInfo(StringInfo str, const Path *node) { WRITE_ENUM_FIELD(pathtype, NodeTag); appendStringInfo(str, " :parent_relids "); _outBitmapset(str, node->parent->relids); + appendStringInfo(str, " :required_outer "); + if (node->param_info) + _outBitmapset(str, node->param_info->ppi_req_outer); + else + _outBitmapset(str, NULL); + WRITE_FLOAT_FIELD(rows, "%.0f"); WRITE_FLOAT_FIELD(startup_cost, "%.2f"); WRITE_FLOAT_FIELD(total_cost, "%.2f"); WRITE_NODE_FIELD(pathkeys); @@ -1476,9 +1486,9 @@ _outPathInfo(StringInfo str, Path *node) * print the basic stuff of all nodes that inherit from JoinPath */ static void -_outJoinPathInfo(StringInfo str, JoinPath *node) +_outJoinPathInfo(StringInfo str, const JoinPath *node) { - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_ENUM_FIELD(jointype, JoinType); WRITE_NODE_FIELD(outerjoinpath); @@ -1487,154 +1497,151 @@ _outJoinPathInfo(StringInfo str, JoinPath *node) } static void -_outPath(StringInfo str, Path *node) +_outPath(StringInfo str, const Path *node) { WRITE_NODE_TYPE("PATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); } static void -_outIndexPath(StringInfo str, IndexPath *node) +_outIndexPath(StringInfo str, const IndexPath *node) { WRITE_NODE_TYPE("INDEXPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(indexinfo); WRITE_NODE_FIELD(indexclauses); WRITE_NODE_FIELD(indexquals); + WRITE_NODE_FIELD(indexqualcols); WRITE_NODE_FIELD(indexorderbys); - WRITE_BOOL_FIELD(isjoininner); + WRITE_NODE_FIELD(indexorderbycols); WRITE_ENUM_FIELD(indexscandir, ScanDirection); WRITE_FLOAT_FIELD(indextotalcost, "%.2f"); WRITE_FLOAT_FIELD(indexselectivity, "%.4f"); - WRITE_FLOAT_FIELD(rows, "%.0f"); } static void -_outBitmapHeapPath(StringInfo str, BitmapHeapPath *node) +_outBitmapHeapPath(StringInfo str, const BitmapHeapPath *node) { WRITE_NODE_TYPE("BITMAPHEAPPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(bitmapqual); - WRITE_BOOL_FIELD(isjoininner); - WRITE_FLOAT_FIELD(rows, "%.0f"); } static void -_outBitmapAndPath(StringInfo str, BitmapAndPath *node) +_outBitmapAndPath(StringInfo str, const BitmapAndPath *node) { WRITE_NODE_TYPE("BITMAPANDPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(bitmapquals); WRITE_FLOAT_FIELD(bitmapselectivity, "%.4f"); } static void -_outBitmapOrPath(StringInfo str, BitmapOrPath *node) +_outBitmapOrPath(StringInfo str, const BitmapOrPath *node) { WRITE_NODE_TYPE("BITMAPORPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(bitmapquals); WRITE_FLOAT_FIELD(bitmapselectivity, "%.4f"); } static void -_outTidPath(StringInfo str, TidPath *node) +_outTidPath(StringInfo str, const TidPath *node) { WRITE_NODE_TYPE("TIDPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(tidquals); } static void -_outForeignPath(StringInfo str, ForeignPath *node) +_outForeignPath(StringInfo str, const ForeignPath *node) { WRITE_NODE_TYPE("FOREIGNPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); - WRITE_NODE_FIELD(fdwplan); + WRITE_NODE_FIELD(fdw_private); } static void -_outAppendPath(StringInfo str, AppendPath *node) +_outAppendPath(StringInfo str, const AppendPath *node) { WRITE_NODE_TYPE("APPENDPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(subpaths); } static void -_outMergeAppendPath(StringInfo str, MergeAppendPath *node) +_outMergeAppendPath(StringInfo str, const MergeAppendPath *node) { WRITE_NODE_TYPE("MERGEAPPENDPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(subpaths); WRITE_FLOAT_FIELD(limit_tuples, "%.0f"); } static void -_outResultPath(StringInfo str, ResultPath *node) +_outResultPath(StringInfo str, const ResultPath *node) { WRITE_NODE_TYPE("RESULTPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(quals); } static void -_outMaterialPath(StringInfo str, MaterialPath *node) +_outMaterialPath(StringInfo str, const MaterialPath *node) { WRITE_NODE_TYPE("MATERIALPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(subpath); } static void -_outUniquePath(StringInfo str, UniquePath *node) +_outUniquePath(StringInfo str, const UniquePath *node) { WRITE_NODE_TYPE("UNIQUEPATH"); - _outPathInfo(str, (Path *) node); + _outPathInfo(str, (const Path *) node); WRITE_NODE_FIELD(subpath); WRITE_ENUM_FIELD(umethod, UniquePathMethod); WRITE_NODE_FIELD(in_operators); WRITE_NODE_FIELD(uniq_exprs); - WRITE_FLOAT_FIELD(rows, "%.0f"); } static void -_outNestPath(StringInfo str, NestPath *node) +_outNestPath(StringInfo str, const NestPath *node) { WRITE_NODE_TYPE("NESTPATH"); - _outJoinPathInfo(str, (JoinPath *) node); + _outJoinPathInfo(str, (const JoinPath *) node); } static void -_outMergePath(StringInfo str, MergePath *node) +_outMergePath(StringInfo str, const MergePath *node) { WRITE_NODE_TYPE("MERGEPATH"); - _outJoinPathInfo(str, (JoinPath *) node); + _outJoinPathInfo(str, (const JoinPath *) node); WRITE_NODE_FIELD(path_mergeclauses); WRITE_NODE_FIELD(outersortkeys); @@ -1643,39 +1650,37 @@ _outMergePath(StringInfo str, MergePath *node) } static void -_outHashPath(StringInfo str, HashPath *node) +_outHashPath(StringInfo str, const HashPath *node) { WRITE_NODE_TYPE("HASHPATH"); - _outJoinPathInfo(str, (JoinPath *) node); + _outJoinPathInfo(str, (const JoinPath *) node); WRITE_NODE_FIELD(path_hashclauses); WRITE_INT_FIELD(num_batches); } static void -_outPlannerGlobal(StringInfo str, PlannerGlobal *node) +_outPlannerGlobal(StringInfo str, const 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_NODE_FIELD(subrowmarks); WRITE_BITMAPSET_FIELD(rewindPlanIDs); WRITE_NODE_FIELD(finalrtable); WRITE_NODE_FIELD(finalrowmarks); WRITE_NODE_FIELD(resultRelations); WRITE_NODE_FIELD(relationOids); WRITE_NODE_FIELD(invalItems); + WRITE_INT_FIELD(nParamExec); WRITE_UINT_FIELD(lastPHId); WRITE_UINT_FIELD(lastRowMarkId); WRITE_BOOL_FIELD(transientPlan); } static void -_outPlannerInfo(StringInfo str, PlannerInfo *node) +_outPlannerInfo(StringInfo str, const PlannerInfo *node) { WRITE_NODE_TYPE("PLANNERINFO"); @@ -1683,6 +1688,8 @@ _outPlannerInfo(StringInfo str, PlannerInfo *node) WRITE_NODE_FIELD(parse); WRITE_NODE_FIELD(glob); WRITE_UINT_FIELD(query_level); + WRITE_NODE_FIELD(plan_params); + WRITE_BITMAPSET_FIELD(all_baserels); WRITE_NODE_FIELD(join_rel_list); WRITE_INT_FIELD(join_cur_level); WRITE_NODE_FIELD(init_plans); @@ -1693,6 +1700,7 @@ _outPlannerInfo(StringInfo str, PlannerInfo *node) WRITE_NODE_FIELD(right_join_clauses); WRITE_NODE_FIELD(full_join_clauses); WRITE_NODE_FIELD(join_info_list); + WRITE_NODE_FIELD(lateral_info_list); WRITE_NODE_FIELD(append_rel_list); WRITE_NODE_FIELD(rowMarks); WRITE_NODE_FIELD(placeholder_list); @@ -1707,6 +1715,7 @@ _outPlannerInfo(StringInfo str, PlannerInfo *node) WRITE_FLOAT_FIELD(limit_tuples, "%.0f"); WRITE_BOOL_FIELD(hasInheritedTarget); WRITE_BOOL_FIELD(hasJoinRTEs); + WRITE_BOOL_FIELD(hasLateralRTEs); WRITE_BOOL_FIELD(hasHavingQual); WRITE_BOOL_FIELD(hasPseudoConstantQuals); WRITE_BOOL_FIELD(hasRecursion); @@ -1716,7 +1725,7 @@ _outPlannerInfo(StringInfo str, PlannerInfo *node) } static void -_outRelOptInfo(StringInfo str, RelOptInfo *node) +_outRelOptInfo(StringInfo str, const RelOptInfo *node) { WRITE_NODE_TYPE("RELOPTINFO"); @@ -1725,31 +1734,36 @@ _outRelOptInfo(StringInfo str, RelOptInfo *node) WRITE_BITMAPSET_FIELD(relids); WRITE_FLOAT_FIELD(rows, "%.0f"); WRITE_INT_FIELD(width); + WRITE_BOOL_FIELD(consider_startup); WRITE_NODE_FIELD(reltargetlist); WRITE_NODE_FIELD(pathlist); + WRITE_NODE_FIELD(ppilist); WRITE_NODE_FIELD(cheapest_startup_path); WRITE_NODE_FIELD(cheapest_total_path); WRITE_NODE_FIELD(cheapest_unique_path); + WRITE_NODE_FIELD(cheapest_parameterized_paths); WRITE_UINT_FIELD(relid); WRITE_UINT_FIELD(reltablespace); WRITE_ENUM_FIELD(rtekind, RTEKind); WRITE_INT_FIELD(min_attr); WRITE_INT_FIELD(max_attr); + WRITE_NODE_FIELD(lateral_vars); + WRITE_BITMAPSET_FIELD(lateral_relids); WRITE_NODE_FIELD(indexlist); WRITE_UINT_FIELD(pages); WRITE_FLOAT_FIELD(tuples, "%.0f"); + WRITE_FLOAT_FIELD(allvisfrac, "%.6f"); WRITE_NODE_FIELD(subplan); - WRITE_NODE_FIELD(subrtable); - WRITE_NODE_FIELD(subrowmark); + WRITE_NODE_FIELD(subroot); + WRITE_NODE_FIELD(subplan_params); + /* we don't try to print fdwroutine or fdw_private */ 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); } static void -_outIndexOptInfo(StringInfo str, IndexOptInfo *node) +_outIndexOptInfo(StringInfo str, const IndexOptInfo *node) { WRITE_NODE_TYPE("INDEXOPTINFO"); @@ -1760,15 +1774,17 @@ _outIndexOptInfo(StringInfo str, IndexOptInfo *node) WRITE_FLOAT_FIELD(tuples, "%.0f"); WRITE_INT_FIELD(ncolumns); WRITE_OID_FIELD(relam); - WRITE_NODE_FIELD(indexprs); + /* indexprs is redundant since we print indextlist */ WRITE_NODE_FIELD(indpred); + WRITE_NODE_FIELD(indextlist); WRITE_BOOL_FIELD(predOK); WRITE_BOOL_FIELD(unique); + WRITE_BOOL_FIELD(immediate); WRITE_BOOL_FIELD(hypothetical); } static void -_outEquivalenceClass(StringInfo str, EquivalenceClass *node) +_outEquivalenceClass(StringInfo str, const EquivalenceClass *node) { /* * To simplify reading, we just chase up to the topmost merged EC and @@ -1793,7 +1809,7 @@ _outEquivalenceClass(StringInfo str, EquivalenceClass *node) } static void -_outEquivalenceMember(StringInfo str, EquivalenceMember *node) +_outEquivalenceMember(StringInfo str, const EquivalenceMember *node) { WRITE_NODE_TYPE("EQUIVALENCEMEMBER"); @@ -1805,7 +1821,7 @@ _outEquivalenceMember(StringInfo str, EquivalenceMember *node) } static void -_outPathKey(StringInfo str, PathKey *node) +_outPathKey(StringInfo str, const PathKey *node) { WRITE_NODE_TYPE("PATHKEY"); @@ -1816,7 +1832,17 @@ _outPathKey(StringInfo str, PathKey *node) } static void -_outRestrictInfo(StringInfo str, RestrictInfo *node) +_outParamPathInfo(StringInfo str, const ParamPathInfo *node) +{ + WRITE_NODE_TYPE("PARAMPATHINFO"); + + WRITE_BITMAPSET_FIELD(ppi_req_outer); + WRITE_FLOAT_FIELD(ppi_rows, "%.0f"); + WRITE_NODE_FIELD(ppi_clauses); +} + +static void +_outRestrictInfo(StringInfo str, const RestrictInfo *node) { WRITE_NODE_TYPE("RESTRICTINFO"); @@ -1828,6 +1854,7 @@ _outRestrictInfo(StringInfo str, RestrictInfo *node) WRITE_BOOL_FIELD(pseudoconstant); WRITE_BITMAPSET_FIELD(clause_relids); WRITE_BITMAPSET_FIELD(required_relids); + WRITE_BITMAPSET_FIELD(outer_relids); WRITE_BITMAPSET_FIELD(nullable_relids); WRITE_BITMAPSET_FIELD(left_relids); WRITE_BITMAPSET_FIELD(right_relids); @@ -1845,17 +1872,7 @@ _outRestrictInfo(StringInfo str, RestrictInfo *node) } static void -_outInnerIndexscanInfo(StringInfo str, InnerIndexscanInfo *node) -{ - WRITE_NODE_TYPE("INNERINDEXSCANINFO"); - WRITE_BITMAPSET_FIELD(other_relids); - WRITE_BOOL_FIELD(isouterjoin); - WRITE_NODE_FIELD(cheapest_startup_innerpath); - WRITE_NODE_FIELD(cheapest_total_innerpath); -} - -static void -_outPlaceHolderVar(StringInfo str, PlaceHolderVar *node) +_outPlaceHolderVar(StringInfo str, const PlaceHolderVar *node) { WRITE_NODE_TYPE("PLACEHOLDERVAR"); @@ -1866,7 +1883,7 @@ _outPlaceHolderVar(StringInfo str, PlaceHolderVar *node) } static void -_outSpecialJoinInfo(StringInfo str, SpecialJoinInfo *node) +_outSpecialJoinInfo(StringInfo str, const SpecialJoinInfo *node) { WRITE_NODE_TYPE("SPECIALJOININFO"); @@ -1881,7 +1898,16 @@ _outSpecialJoinInfo(StringInfo str, SpecialJoinInfo *node) } static void -_outAppendRelInfo(StringInfo str, AppendRelInfo *node) +_outLateralJoinInfo(StringInfo str, const LateralJoinInfo *node) +{ + WRITE_NODE_TYPE("LATERALJOININFO"); + + WRITE_UINT_FIELD(lateral_rhs); + WRITE_BITMAPSET_FIELD(lateral_lhs); +} + +static void +_outAppendRelInfo(StringInfo str, const AppendRelInfo *node) { WRITE_NODE_TYPE("APPENDRELINFO"); @@ -1894,7 +1920,7 @@ _outAppendRelInfo(StringInfo str, AppendRelInfo *node) } static void -_outPlaceHolderInfo(StringInfo str, PlaceHolderInfo *node) +_outPlaceHolderInfo(StringInfo str, const PlaceHolderInfo *node) { WRITE_NODE_TYPE("PLACEHOLDERINFO"); @@ -1907,23 +1933,26 @@ _outPlaceHolderInfo(StringInfo str, PlaceHolderInfo *node) } static void -_outMinMaxAggInfo(StringInfo str, MinMaxAggInfo *node) +_outMinMaxAggInfo(StringInfo str, const MinMaxAggInfo *node) { WRITE_NODE_TYPE("MINMAXAGGINFO"); WRITE_OID_FIELD(aggfnoid); WRITE_OID_FIELD(aggsortop); WRITE_NODE_FIELD(target); - WRITE_NODE_FIELD(pathkeys); + /* We intentionally omit subroot --- too large, not interesting enough */ + WRITE_NODE_FIELD(path); + WRITE_FLOAT_FIELD(pathcost, "%.2f"); + WRITE_NODE_FIELD(param); } static void -_outPlannerParamItem(StringInfo str, PlannerParamItem *node) +_outPlannerParamItem(StringInfo str, const PlannerParamItem *node) { WRITE_NODE_TYPE("PLANNERPARAMITEM"); WRITE_NODE_FIELD(item); - WRITE_UINT_FIELD(abslevel); + WRITE_INT_FIELD(paramId); } /***************************************************************************** @@ -1932,11 +1961,12 @@ _outPlannerParamItem(StringInfo str, PlannerParamItem *node) * *****************************************************************************/ +/* + * print the basic stuff of all nodes that inherit from CreateStmt + */ static void -_outCreateStmt(StringInfo str, CreateStmt *node) +_outCreateStmtInfo(StringInfo str, const CreateStmt *node) { - WRITE_NODE_TYPE("CREATESTMT"); - WRITE_NODE_FIELD(relation); WRITE_NODE_FIELD(tableElts); WRITE_NODE_FIELD(inhRelations); @@ -1949,18 +1979,26 @@ _outCreateStmt(StringInfo str, CreateStmt *node) } static void -_outCreateForeignTableStmt(StringInfo str, CreateForeignTableStmt *node) +_outCreateStmt(StringInfo str, const CreateStmt *node) +{ + WRITE_NODE_TYPE("CREATESTMT"); + + _outCreateStmtInfo(str, (const CreateStmt *) node); +} + +static void +_outCreateForeignTableStmt(StringInfo str, const CreateForeignTableStmt *node) { WRITE_NODE_TYPE("CREATEFOREIGNTABLESTMT"); - _outCreateStmt(str, (CreateStmt *) &node->base); + _outCreateStmtInfo(str, (const CreateStmt *) node); WRITE_STRING_FIELD(servername); WRITE_NODE_FIELD(options); } static void -_outIndexStmt(StringInfo str, IndexStmt *node) +_outIndexStmt(StringInfo str, const IndexStmt *node) { WRITE_NODE_TYPE("INDEXSTMT"); @@ -1972,7 +2010,9 @@ _outIndexStmt(StringInfo str, IndexStmt *node) WRITE_NODE_FIELD(options); WRITE_NODE_FIELD(whereClause); WRITE_NODE_FIELD(excludeOpNames); + WRITE_STRING_FIELD(idxcomment); WRITE_OID_FIELD(indexOid); + WRITE_OID_FIELD(oldNode); WRITE_BOOL_FIELD(unique); WRITE_BOOL_FIELD(primary); WRITE_BOOL_FIELD(isconstraint); @@ -1982,7 +2022,7 @@ _outIndexStmt(StringInfo str, IndexStmt *node) } static void -_outNotifyStmt(StringInfo str, NotifyStmt *node) +_outNotifyStmt(StringInfo str, const NotifyStmt *node) { WRITE_NODE_TYPE("NOTIFY"); @@ -1991,7 +2031,7 @@ _outNotifyStmt(StringInfo str, NotifyStmt *node) } static void -_outDeclareCursorStmt(StringInfo str, DeclareCursorStmt *node) +_outDeclareCursorStmt(StringInfo str, const DeclareCursorStmt *node) { WRITE_NODE_TYPE("DECLARECURSOR"); @@ -2001,7 +2041,7 @@ _outDeclareCursorStmt(StringInfo str, DeclareCursorStmt *node) } static void -_outSelectStmt(StringInfo str, SelectStmt *node) +_outSelectStmt(StringInfo str, const SelectStmt *node) { WRITE_NODE_TYPE("SELECT"); @@ -2013,12 +2053,12 @@ _outSelectStmt(StringInfo str, SelectStmt *node) WRITE_NODE_FIELD(groupClause); WRITE_NODE_FIELD(havingClause); WRITE_NODE_FIELD(windowClause); - WRITE_NODE_FIELD(withClause); WRITE_NODE_FIELD(valuesLists); WRITE_NODE_FIELD(sortClause); WRITE_NODE_FIELD(limitOffset); WRITE_NODE_FIELD(limitCount); WRITE_NODE_FIELD(lockingClause); + WRITE_NODE_FIELD(withClause); WRITE_ENUM_FIELD(op, SetOperation); WRITE_BOOL_FIELD(all); WRITE_NODE_FIELD(larg); @@ -2026,7 +2066,7 @@ _outSelectStmt(StringInfo str, SelectStmt *node) } static void -_outFuncCall(StringInfo str, FuncCall *node) +_outFuncCall(StringInfo str, const FuncCall *node) { WRITE_NODE_TYPE("FUNCCALL"); @@ -2041,7 +2081,7 @@ _outFuncCall(StringInfo str, FuncCall *node) } static void -_outDefElem(StringInfo str, DefElem *node) +_outDefElem(StringInfo str, const DefElem *node) { WRITE_NODE_TYPE("DEFELEM"); @@ -2052,16 +2092,16 @@ _outDefElem(StringInfo str, DefElem *node) } static void -_outInhRelation(StringInfo str, InhRelation *node) +_outTableLikeClause(StringInfo str, const TableLikeClause *node) { - WRITE_NODE_TYPE("INHRELATION"); + WRITE_NODE_TYPE("TABLELIKECLAUSE"); WRITE_NODE_FIELD(relation); WRITE_UINT_FIELD(options); } static void -_outLockingClause(StringInfo str, LockingClause *node) +_outLockingClause(StringInfo str, const LockingClause *node) { WRITE_NODE_TYPE("LOCKINGCLAUSE"); @@ -2071,7 +2111,7 @@ _outLockingClause(StringInfo str, LockingClause *node) } static void -_outXmlSerialize(StringInfo str, XmlSerialize *node) +_outXmlSerialize(StringInfo str, const XmlSerialize *node) { WRITE_NODE_TYPE("XMLSERIALIZE"); @@ -2082,7 +2122,7 @@ _outXmlSerialize(StringInfo str, XmlSerialize *node) } static void -_outColumnDef(StringInfo str, ColumnDef *node) +_outColumnDef(StringInfo str, const ColumnDef *node) { WRITE_NODE_TYPE("COLUMNDEF"); @@ -2092,16 +2132,17 @@ _outColumnDef(StringInfo str, ColumnDef *node) WRITE_BOOL_FIELD(is_local); WRITE_BOOL_FIELD(is_not_null); WRITE_BOOL_FIELD(is_from_type); - WRITE_INT_FIELD(storage); + WRITE_CHAR_FIELD(storage); WRITE_NODE_FIELD(raw_default); WRITE_NODE_FIELD(cooked_default); WRITE_NODE_FIELD(collClause); WRITE_OID_FIELD(collOid); WRITE_NODE_FIELD(constraints); + WRITE_NODE_FIELD(fdwoptions); } static void -_outTypeName(StringInfo str, TypeName *node) +_outTypeName(StringInfo str, const TypeName *node) { WRITE_NODE_TYPE("TYPENAME"); @@ -2116,7 +2157,7 @@ _outTypeName(StringInfo str, TypeName *node) } static void -_outTypeCast(StringInfo str, TypeCast *node) +_outTypeCast(StringInfo str, const TypeCast *node) { WRITE_NODE_TYPE("TYPECAST"); @@ -2126,7 +2167,7 @@ _outTypeCast(StringInfo str, TypeCast *node) } static void -_outCollateClause(StringInfo str, CollateClause *node) +_outCollateClause(StringInfo str, const CollateClause *node) { WRITE_NODE_TYPE("COLLATECLAUSE"); @@ -2136,7 +2177,7 @@ _outCollateClause(StringInfo str, CollateClause *node) } static void -_outIndexElem(StringInfo str, IndexElem *node) +_outIndexElem(StringInfo str, const IndexElem *node) { WRITE_NODE_TYPE("INDEXELEM"); @@ -2150,12 +2191,13 @@ _outIndexElem(StringInfo str, IndexElem *node) } static void -_outQuery(StringInfo str, Query *node) +_outQuery(StringInfo str, const Query *node) { WRITE_NODE_TYPE("QUERY"); WRITE_ENUM_FIELD(commandType, CmdType); WRITE_ENUM_FIELD(querySource, QuerySource); + /* we intentionally do not print the queryId field */ WRITE_BOOL_FIELD(canSetTag); /* @@ -2184,7 +2226,6 @@ _outQuery(StringInfo str, Query *node) appendStringInfo(str, " :utilityStmt <>"); WRITE_INT_FIELD(resultRelation); - WRITE_NODE_FIELD(intoClause); WRITE_BOOL_FIELD(hasAggs); WRITE_BOOL_FIELD(hasWindowFuncs); WRITE_BOOL_FIELD(hasSubLinks); @@ -2210,7 +2251,7 @@ _outQuery(StringInfo str, Query *node) } static void -_outSortGroupClause(StringInfo str, SortGroupClause *node) +_outSortGroupClause(StringInfo str, const SortGroupClause *node) { WRITE_NODE_TYPE("SORTGROUPCLAUSE"); @@ -2222,7 +2263,7 @@ _outSortGroupClause(StringInfo str, SortGroupClause *node) } static void -_outWindowClause(StringInfo str, WindowClause *node) +_outWindowClause(StringInfo str, const WindowClause *node) { WRITE_NODE_TYPE("WINDOWCLAUSE"); @@ -2238,7 +2279,7 @@ _outWindowClause(StringInfo str, WindowClause *node) } static void -_outRowMarkClause(StringInfo str, RowMarkClause *node) +_outRowMarkClause(StringInfo str, const RowMarkClause *node) { WRITE_NODE_TYPE("ROWMARKCLAUSE"); @@ -2249,7 +2290,7 @@ _outRowMarkClause(StringInfo str, RowMarkClause *node) } static void -_outWithClause(StringInfo str, WithClause *node) +_outWithClause(StringInfo str, const WithClause *node) { WRITE_NODE_TYPE("WITHCLAUSE"); @@ -2259,7 +2300,7 @@ _outWithClause(StringInfo str, WithClause *node) } static void -_outCommonTableExpr(StringInfo str, CommonTableExpr *node) +_outCommonTableExpr(StringInfo str, const CommonTableExpr *node) { WRITE_NODE_TYPE("COMMONTABLEEXPR"); @@ -2276,7 +2317,7 @@ _outCommonTableExpr(StringInfo str, CommonTableExpr *node) } static void -_outSetOperationStmt(StringInfo str, SetOperationStmt *node) +_outSetOperationStmt(StringInfo str, const SetOperationStmt *node) { WRITE_NODE_TYPE("SETOPERATIONSTMT"); @@ -2291,7 +2332,7 @@ _outSetOperationStmt(StringInfo str, SetOperationStmt *node) } static void -_outRangeTblEntry(StringInfo str, RangeTblEntry *node) +_outRangeTblEntry(StringInfo str, const RangeTblEntry *node) { WRITE_NODE_TYPE("RTE"); @@ -2308,6 +2349,7 @@ _outRangeTblEntry(StringInfo str, RangeTblEntry *node) break; case RTE_SUBQUERY: WRITE_NODE_FIELD(subquery); + WRITE_BOOL_FIELD(security_barrier); break; case RTE_JOIN: WRITE_ENUM_FIELD(jointype, JoinType); @@ -2321,6 +2363,7 @@ _outRangeTblEntry(StringInfo str, RangeTblEntry *node) break; case RTE_VALUES: WRITE_NODE_FIELD(values_lists); + WRITE_NODE_FIELD(values_collations); break; case RTE_CTE: WRITE_STRING_FIELD(ctename); @@ -2335,6 +2378,7 @@ _outRangeTblEntry(StringInfo str, RangeTblEntry *node) break; } + WRITE_BOOL_FIELD(lateral); WRITE_BOOL_FIELD(inh); WRITE_BOOL_FIELD(inFromCl); WRITE_UINT_FIELD(requiredPerms); @@ -2344,7 +2388,7 @@ _outRangeTblEntry(StringInfo str, RangeTblEntry *node) } static void -_outAExpr(StringInfo str, A_Expr *node) +_outAExpr(StringInfo str, const A_Expr *node) { WRITE_NODE_TYPE("AEXPR"); @@ -2400,7 +2444,7 @@ _outAExpr(StringInfo str, A_Expr *node) } static void -_outValue(StringInfo str, Value *value) +_outValue(StringInfo str, const Value *value) { switch (value->type) { @@ -2435,7 +2479,7 @@ _outValue(StringInfo str, Value *value) } static void -_outColumnRef(StringInfo str, ColumnRef *node) +_outColumnRef(StringInfo str, const ColumnRef *node) { WRITE_NODE_TYPE("COLUMNREF"); @@ -2444,7 +2488,7 @@ _outColumnRef(StringInfo str, ColumnRef *node) } static void -_outParamRef(StringInfo str, ParamRef *node) +_outParamRef(StringInfo str, const ParamRef *node) { WRITE_NODE_TYPE("PARAMREF"); @@ -2453,7 +2497,7 @@ _outParamRef(StringInfo str, ParamRef *node) } static void -_outAConst(StringInfo str, A_Const *node) +_outAConst(StringInfo str, const A_Const *node) { WRITE_NODE_TYPE("A_CONST"); @@ -2463,13 +2507,13 @@ _outAConst(StringInfo str, A_Const *node) } static void -_outA_Star(StringInfo str, A_Star *node) +_outA_Star(StringInfo str, const A_Star *node) { WRITE_NODE_TYPE("A_STAR"); } static void -_outA_Indices(StringInfo str, A_Indices *node) +_outA_Indices(StringInfo str, const A_Indices *node) { WRITE_NODE_TYPE("A_INDICES"); @@ -2478,7 +2522,7 @@ _outA_Indices(StringInfo str, A_Indices *node) } static void -_outA_Indirection(StringInfo str, A_Indirection *node) +_outA_Indirection(StringInfo str, const A_Indirection *node) { WRITE_NODE_TYPE("A_INDIRECTION"); @@ -2487,7 +2531,7 @@ _outA_Indirection(StringInfo str, A_Indirection *node) } static void -_outA_ArrayExpr(StringInfo str, A_ArrayExpr *node) +_outA_ArrayExpr(StringInfo str, const A_ArrayExpr *node) { WRITE_NODE_TYPE("A_ARRAYEXPR"); @@ -2496,7 +2540,7 @@ _outA_ArrayExpr(StringInfo str, A_ArrayExpr *node) } static void -_outResTarget(StringInfo str, ResTarget *node) +_outResTarget(StringInfo str, const ResTarget *node) { WRITE_NODE_TYPE("RESTARGET"); @@ -2507,7 +2551,7 @@ _outResTarget(StringInfo str, ResTarget *node) } static void -_outSortBy(StringInfo str, SortBy *node) +_outSortBy(StringInfo str, const SortBy *node) { WRITE_NODE_TYPE("SORTBY"); @@ -2519,7 +2563,7 @@ _outSortBy(StringInfo str, SortBy *node) } static void -_outWindowDef(StringInfo str, WindowDef *node) +_outWindowDef(StringInfo str, const WindowDef *node) { WRITE_NODE_TYPE("WINDOWDEF"); @@ -2534,26 +2578,28 @@ _outWindowDef(StringInfo str, WindowDef *node) } static void -_outRangeSubselect(StringInfo str, RangeSubselect *node) +_outRangeSubselect(StringInfo str, const RangeSubselect *node) { WRITE_NODE_TYPE("RANGESUBSELECT"); + WRITE_BOOL_FIELD(lateral); WRITE_NODE_FIELD(subquery); WRITE_NODE_FIELD(alias); } static void -_outRangeFunction(StringInfo str, RangeFunction *node) +_outRangeFunction(StringInfo str, const RangeFunction *node) { WRITE_NODE_TYPE("RANGEFUNCTION"); + WRITE_BOOL_FIELD(lateral); WRITE_NODE_FIELD(funccallnode); WRITE_NODE_FIELD(alias); WRITE_NODE_FIELD(coldeflist); } static void -_outConstraint(StringInfo str, Constraint *node) +_outConstraint(StringInfo str, const Constraint *node) { WRITE_NODE_TYPE("CONSTRAINT"); @@ -2581,6 +2627,7 @@ _outConstraint(StringInfo str, Constraint *node) case CONSTR_CHECK: appendStringInfo(str, "CHECK"); + WRITE_BOOL_FIELD(is_no_inherit); WRITE_NODE_FIELD(raw_expr); WRITE_STRING_FIELD(cooked_expr); break; @@ -2621,7 +2668,9 @@ _outConstraint(StringInfo str, Constraint *node) WRITE_CHAR_FIELD(fk_matchtype); WRITE_CHAR_FIELD(fk_upd_action); WRITE_CHAR_FIELD(fk_del_action); + WRITE_NODE_FIELD(old_conpfeqop); WRITE_BOOL_FIELD(skip_validation); + WRITE_BOOL_FIELD(initially_valid); break; case CONSTR_ATTR_DEFERRABLE: @@ -2653,7 +2702,7 @@ _outConstraint(StringInfo str, Constraint *node) * converts a Node into ascii string and append it to 'str' */ static void -_outNode(StringInfo str, void *obj) +_outNode(StringInfo str, const void *obj) { if (obj == NULL) appendStringInfo(str, "<>"); @@ -2708,6 +2757,9 @@ _outNode(StringInfo str, void *obj) case T_IndexScan: _outIndexScan(str, obj); break; + case T_IndexOnlyScan: + _outIndexOnlyScan(str, obj); + break; case T_BitmapIndexScan: _outBitmapIndexScan(str, obj); break; @@ -2735,9 +2787,6 @@ _outNode(StringInfo str, void *obj) case T_ForeignScan: _outForeignScan(str, obj); break; - case T_FdwPlan: - _outFdwPlan(str, obj); - break; case T_Join: _outJoin(str, obj); break; @@ -2991,18 +3040,21 @@ _outNode(StringInfo str, void *obj) case T_PathKey: _outPathKey(str, obj); break; + case T_ParamPathInfo: + _outParamPathInfo(str, obj); + break; case T_RestrictInfo: _outRestrictInfo(str, obj); break; - case T_InnerIndexscanInfo: - _outInnerIndexscanInfo(str, obj); - break; case T_PlaceHolderVar: _outPlaceHolderVar(str, obj); break; case T_SpecialJoinInfo: _outSpecialJoinInfo(str, obj); break; + case T_LateralJoinInfo: + _outLateralJoinInfo(str, obj); + break; case T_AppendRelInfo: _outAppendRelInfo(str, obj); break; @@ -3121,8 +3173,8 @@ _outNode(StringInfo str, void *obj) case T_DefElem: _outDefElem(str, obj); break; - case T_InhRelation: - _outInhRelation(str, obj); + case T_TableLikeClause: + _outTableLikeClause(str, obj); break; case T_LockingClause: _outLockingClause(str, obj); @@ -3150,7 +3202,7 @@ _outNode(StringInfo str, void *obj) * returns the ascii representation of the Node as a palloc'd string */ char * -nodeToString(void *obj) +nodeToString(const void *obj) { StringInfoData str;