📄 outfuncs.c
字号:
WRITE_NODE_FIELD(utilityStmt); break; default: appendStringInfo(str, " :utilityStmt ?"); break; } } else appendStringInfo(str, " :utilityStmt <>"); WRITE_INT_FIELD(resultRelation); WRITE_NODE_FIELD(into); WRITE_BOOL_FIELD(hasAggs); WRITE_BOOL_FIELD(hasSubLinks); WRITE_NODE_FIELD(rtable); WRITE_NODE_FIELD(jointree); WRITE_INTLIST_FIELD(rowMarks); WRITE_NODE_FIELD(targetList); WRITE_NODE_FIELD(groupClause); WRITE_NODE_FIELD(havingQual); WRITE_NODE_FIELD(distinctClause); WRITE_NODE_FIELD(sortClause); WRITE_NODE_FIELD(limitOffset); WRITE_NODE_FIELD(limitCount); WRITE_NODE_FIELD(setOperations); WRITE_INTLIST_FIELD(resultRelations); /* planner-internal fields are not written out */}static void_outSortClause(StringInfo str, SortClause *node){ WRITE_NODE_TYPE("SORTCLAUSE"); WRITE_UINT_FIELD(tleSortGroupRef); WRITE_OID_FIELD(sortop);}static void_outGroupClause(StringInfo str, GroupClause *node){ WRITE_NODE_TYPE("GROUPCLAUSE"); WRITE_UINT_FIELD(tleSortGroupRef); WRITE_OID_FIELD(sortop);}static void_outSetOperationStmt(StringInfo str, SetOperationStmt *node){ WRITE_NODE_TYPE("SETOPERATIONSTMT"); WRITE_ENUM_FIELD(op, SetOperation); WRITE_BOOL_FIELD(all); WRITE_NODE_FIELD(larg); WRITE_NODE_FIELD(rarg); WRITE_OIDLIST_FIELD(colTypes);}static void_outRangeTblEntry(StringInfo str, RangeTblEntry *node){ WRITE_NODE_TYPE("RTE"); /* put alias + eref first to make dump more legible */ WRITE_NODE_FIELD(alias); WRITE_NODE_FIELD(eref); WRITE_ENUM_FIELD(rtekind, RTEKind); switch (node->rtekind) { case RTE_RELATION: case RTE_SPECIAL: WRITE_OID_FIELD(relid); break; case RTE_SUBQUERY: WRITE_NODE_FIELD(subquery); break; case RTE_FUNCTION: WRITE_NODE_FIELD(funcexpr); WRITE_NODE_FIELD(coldeflist); break; case RTE_JOIN: WRITE_ENUM_FIELD(jointype, JoinType); WRITE_NODE_FIELD(joinaliasvars); break; default: elog(ERROR, "unrecognized RTE kind: %d", (int) node->rtekind); break; } WRITE_BOOL_FIELD(inh); WRITE_BOOL_FIELD(inFromCl); WRITE_BOOL_FIELD(checkForRead); WRITE_BOOL_FIELD(checkForWrite); WRITE_OID_FIELD(checkAsUser);}static void_outAExpr(StringInfo str, A_Expr *node){ WRITE_NODE_TYPE("AEXPR"); switch (node->kind) { case AEXPR_OP: appendStringInfo(str, " "); WRITE_NODE_FIELD(name); break; case AEXPR_AND: appendStringInfo(str, " AND"); break; case AEXPR_OR: appendStringInfo(str, " OR"); break; case AEXPR_NOT: appendStringInfo(str, " NOT"); break; case AEXPR_OP_ANY: appendStringInfo(str, " "); WRITE_NODE_FIELD(name); appendStringInfo(str, " ANY "); break; case AEXPR_OP_ALL: appendStringInfo(str, " "); WRITE_NODE_FIELD(name); appendStringInfo(str, " ALL "); break; case AEXPR_DISTINCT: appendStringInfo(str, " DISTINCT "); WRITE_NODE_FIELD(name); break; case AEXPR_NULLIF: appendStringInfo(str, " NULLIF "); WRITE_NODE_FIELD(name); break; case AEXPR_OF: appendStringInfo(str, " OF "); WRITE_NODE_FIELD(name); break; default: appendStringInfo(str, " ??"); break; } WRITE_NODE_FIELD(lexpr); WRITE_NODE_FIELD(rexpr);}static void_outValue(StringInfo str, Value *value){ switch (value->type) { case T_Integer: appendStringInfo(str, "%ld", value->val.ival); break; case T_Float: /* * We assume the value is a valid numeric literal and so does * not need quoting. */ appendStringInfo(str, "%s", value->val.str); break; case T_String: appendStringInfoChar(str, '"'); _outToken(str, value->val.str); appendStringInfoChar(str, '"'); break; case T_BitString: /* internal representation already has leading 'b' */ appendStringInfo(str, "%s", value->val.str); break; default: elog(ERROR, "unrecognized node type: %d", (int) value->type); break; }}static void_outColumnRef(StringInfo str, ColumnRef *node){ WRITE_NODE_TYPE("COLUMNREF"); WRITE_NODE_FIELD(fields); WRITE_NODE_FIELD(indirection);}static void_outParamRef(StringInfo str, ParamRef *node){ WRITE_NODE_TYPE("PARAMREF"); WRITE_INT_FIELD(number); WRITE_NODE_FIELD(fields); WRITE_NODE_FIELD(indirection);}static void_outAConst(StringInfo str, A_Const *node){ WRITE_NODE_TYPE("CONST "); _outValue(str, &(node->val)); WRITE_NODE_FIELD(typename);}static void_outExprFieldSelect(StringInfo str, ExprFieldSelect *node){ WRITE_NODE_TYPE("EXPRFIELDSELECT"); WRITE_NODE_FIELD(arg); WRITE_NODE_FIELD(fields); WRITE_NODE_FIELD(indirection);}static void_outConstraint(StringInfo str, Constraint *node){ WRITE_NODE_TYPE("CONSTRAINT"); WRITE_STRING_FIELD(name); appendStringInfo(str, " :contype "); switch (node->contype) { case CONSTR_PRIMARY: appendStringInfo(str, "PRIMARY_KEY"); WRITE_NODE_FIELD(keys); break; case CONSTR_CHECK: appendStringInfo(str, "CHECK"); WRITE_NODE_FIELD(raw_expr); WRITE_STRING_FIELD(cooked_expr); break; case CONSTR_DEFAULT: appendStringInfo(str, "DEFAULT"); WRITE_NODE_FIELD(raw_expr); WRITE_STRING_FIELD(cooked_expr); break; case CONSTR_NOTNULL: appendStringInfo(str, "NOT_NULL"); break; case CONSTR_UNIQUE: appendStringInfo(str, "UNIQUE"); WRITE_NODE_FIELD(keys); break; default: appendStringInfo(str, "<unrecognized_constraint>"); break; }}static void_outFkConstraint(StringInfo str, FkConstraint *node){ WRITE_NODE_TYPE("FKCONSTRAINT"); WRITE_STRING_FIELD(constr_name); WRITE_NODE_FIELD(pktable); WRITE_NODE_FIELD(fk_attrs); WRITE_NODE_FIELD(pk_attrs); WRITE_CHAR_FIELD(fk_matchtype); WRITE_CHAR_FIELD(fk_upd_action); WRITE_CHAR_FIELD(fk_del_action); WRITE_BOOL_FIELD(deferrable); WRITE_BOOL_FIELD(initdeferred); WRITE_BOOL_FIELD(skip_validation);}/* * _outNode - * converts a Node into ascii string and append it to 'str' */static void_outNode(StringInfo str, void *obj){ if (obj == NULL) { appendStringInfo(str, "<>"); return; } if (IsA(obj, List)) { List *l; appendStringInfoChar(str, '('); foreach(l, (List *) obj) { _outNode(str, lfirst(l)); if (lnext(l)) appendStringInfoChar(str, ' '); } appendStringInfoChar(str, ')'); } else if (IsA(obj, Integer) || IsA(obj, Float) || IsA(obj, String) || IsA(obj, BitString)) { /* nodeRead does not want to see { } around these! */ _outValue(str, obj); } else { appendStringInfoChar(str, '{'); switch (nodeTag(obj)) { case T_Plan: _outPlan(str, obj); break; case T_Result: _outResult(str, obj); break; case T_Append: _outAppend(str, obj); break; case T_Scan: _outScan(str, obj); break; case T_SeqScan: _outSeqScan(str, obj); break; case T_IndexScan: _outIndexScan(str, obj); break; case T_TidScan: _outTidScan(str, obj); break; case T_SubqueryScan: _outSubqueryScan(str, obj); break; case T_FunctionScan: _outFunctionScan(str, obj); break; case T_Join: _outJoin(str, obj); break; case T_NestLoop: _outNestLoop(str, obj); break; case T_MergeJoin: _outMergeJoin(str, obj); break; case T_HashJoin: _outHashJoin(str, obj); break; case T_Agg: _outAgg(str, obj); break; case T_Group: _outGroup(str, obj); break; case T_Material: _outMaterial(str, obj); break; case T_Sort: _outSort(str, obj); break; case T_Unique: _outUnique(str, obj); break; case T_SetOp: _outSetOp(str, obj); break; case T_Limit: _outLimit(str, obj); break; case T_Hash: _outHash(str, obj); break; case T_Resdom: _outResdom(str, obj); break; case T_Alias: _outAlias(str, obj); break; case T_RangeVar: _outRangeVar(str, obj); break; case T_Var: _outVar(str, obj); break; case T_Const: _outConst(str, obj); break; case T_Param: _outParam(str, obj); break; case T_Aggref: _outAggref(str, obj); break; case T_ArrayRef: _outArrayRef(str, obj); break; case T_FuncExpr: _outFuncExpr(str, obj); break; case T_OpExpr: _outOpExpr(str, obj); break; case T_DistinctExpr: _outDistinctExpr(str, obj); break; case T_ScalarArrayOpExpr: _outScalarArrayOpExpr(str, obj); break; case T_BoolExpr: _outBoolExpr(str, obj); break; case T_SubLink: _outSubLink(str, obj); break; case T_SubPlan: _outSubPlan(str, obj); break; case T_FieldSelect: _outFieldSelect(str, obj); break; case T_RelabelType: _outRelabelType(str, obj); break; case T_CaseExpr: _outCaseExpr(str, obj); break; case T_CaseWhen: _outCaseWhen(str, obj); break; case T_ArrayExpr: _outArrayExpr(str, obj); break; case T_CoalesceExpr: _outCoalesceExpr(str, obj); break; case T_NullIfExpr: _outNullIfExpr(str, obj); break; case T_NullTest: _outNullTest(str, obj); break; case T_BooleanTest: _outBooleanTest(str, obj); break; case T_CoerceToDomain: _outCoerceToDomain(str, obj); break; case T_CoerceToDomainValue: _outCoerceToDomainValue(str, obj); break; case T_SetToDefault: _outSetToDefault(str, obj); break; case T_TargetEntry: _outTargetEntry(str, obj); break; case T_RangeTblRef: _outRangeTblRef(str, obj); break; case T_JoinExpr: _outJoinExpr(str, obj); break; case T_FromExpr: _outFromExpr(str, obj); break; case T_Path: _outPath(str, obj); break; case T_IndexPath: _outIndexPath(str, obj); break; case T_TidPath: _outTidPath(str, obj); break; case T_AppendPath: _outAppendPath(str, obj); break; case T_ResultPath: _outResultPath(str, obj); break; case T_MaterialPath: _outMaterialPath(str, obj); break; case T_UniquePath: _outUniquePath(str, obj); break; case T_NestPath: _outNestPath(str, obj); break; case T_MergePath: _outMergePath(str, obj); break; case T_HashPath: _outHashPath(str, obj); break; case T_PathKeyItem: _outPathKeyItem(str, obj); break; case T_RestrictInfo: _outRestrictInfo(str, obj); break; case T_JoinInfo: _outJoinInfo(str, obj); break; case T_InClauseInfo: _outInClauseInfo(str, obj); break; case T_CreateStmt: _outCreateStmt(str, obj); break; case T_IndexStmt: _outIndexStmt(str, obj); break; case T_NotifyStmt: _outNotifyStmt(str, obj); break; case T_DeclareCursorStmt: _outDeclareCursorStmt(str, obj); break; case T_SelectStmt: _outSelectStmt(str, obj); break; case T_ColumnDef: _outColumnDef(str, obj); break; case T_TypeName: _outTypeName(str, obj); break; case T_TypeCast: _outTypeCast(str, obj); break; case T_IndexElem: _outIndexElem(str, obj); break; case T_Query: _outQuery(str, obj); break; case T_SortClause: _outSortClause(str, obj); break; case T_GroupClause: _outGroupClause(str, obj); break; case T_SetOperationStmt: _outSetOperationStmt(str, obj); break; case T_RangeTblEntry: _outRangeTblEntry(str, obj); break; case T_A_Expr: _outAExpr(str, obj); break; case T_ColumnRef: _outColumnRef(str, obj); break; case T_ParamRef: _outParamRef(str, obj); break; case T_A_Const: _outAConst(str, obj); break; case T_ExprFieldSelect: _outExprFieldSelect(str, obj); break; case T_Constraint: _outConstraint(str, obj); break; case T_FkConstraint: _outFkConstraint(str, obj); break; case T_FuncCall: _outFuncCall(str, obj); break; default: /* * This should be an ERROR, but it's too useful to be able * to dump structures that _outNode only understands part * of. */ elog(WARNING, "could not dump unrecognized node type: %d", (int) nodeTag(obj)); break; } appendStringInfoChar(str, '}'); }}/* * nodeToString - * returns the ascii representation of the Node as a palloc'd string */char *nodeToString(void *obj){ StringInfoData str; /* see stringinfo.h for an explanation of this maneuver */ initStringInfo(&str); _outNode(&str, obj); return str.data;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -