📄 outfuncs.c
字号:
node->right_type);}/* * RestrictInfo is a subclass of Node. */static void_outRestrictInfo(StringInfo str, RestrictInfo *node){ appendStringInfo(str, " RESTRICTINFO :clause "); _outNode(str, node->clause); appendStringInfo(str, " :selectivity %f :notclause %s :indexids ", node->selectivity, node->notclause ? "true" : "false"); _outNode(str, node->indexids); appendStringInfo(str, " :mergejoinorder "); _outNode(str, node->mergejoinorder); appendStringInfo(str, " :hashjoinoperator %u ", node->hashjoinoperator);}/* * JoinMethod is a subclass of Node. */static void_outJoinMethod(StringInfo str, JoinMethod *node){ appendStringInfo(str, " JOINMETHOD :jmkeys "); _outNode(str, node->jmkeys); appendStringInfo(str, " :clauses "); _outNode(str, node->clauses);}/* * HashInfo is a subclass of JoinMethod. */static void_outHashInfo(StringInfo str, HashInfo *node){ appendStringInfo(str, " HASHINFO :hashop %u :jmkeys ", node->hashop); _outNode(str, node->jmethod.jmkeys); appendStringInfo(str, " :clauses "); _outNode(str, node->jmethod.clauses);}/* * JoinInfo is a subclass of Node. */static void_outJoinInfo(StringInfo str, JoinInfo *node){ appendStringInfo(str, " JINFO :unjoined_relids "); _outIntList(str, node->unjoined_relids); appendStringInfo(str, " :jinfo_restrictinfo "); _outNode(str, node->jinfo_restrictinfo); appendStringInfo(str, " :mergejoinable %s :hashjoinable %s ", node->mergejoinable ? "true" : "false", node->hashjoinable ? "true" : "false");}/* * Print the value of a Datum given its type. */static void_outDatum(StringInfo str, Datum value, Oid type){ char *s; Size length, typeLength; bool byValue; int i; /* * find some information about the type and the "real" length of the * datum. */ byValue = get_typbyval(type); typeLength = get_typlen(type); length = datumGetSize(value, type, byValue, typeLength); if (byValue) { s = (char *) (&value); appendStringInfo(str, " %d [ ", length); for (i = 0; i < sizeof(Datum); i++) appendStringInfo(str, " %d ", (int) (s[i])); appendStringInfo(str, "] "); } else { /* !byValue */ s = (char *) DatumGetPointer(value); if (!PointerIsValid(s)) appendStringInfo(str, " 0 [ ] "); else { /* * length is unsigned - very bad to do < comparison to -1 * without casting it to int first!! -mer 8 Jan 1991 */ if (((int) length) <= -1) length = VARSIZE(s); appendStringInfo(str, " %d [ ", length); for (i = 0; i < length; i++) appendStringInfo(str, " %d ", (int) (s[i])); appendStringInfo(str, "] "); } }}static void_outIter(StringInfo str, Iter *node){ appendStringInfo(str, " ITER :iterexpr "); _outNode(str, node->iterexpr);}static void_outStream(StringInfo str, Stream *node){ appendStringInfo(str, " STREAM :pathptr @ 0x%x :cinfo @ 0x%x :clausetype %d :upstream @ 0x%x ", (int) node->pathptr, (int) node->cinfo, (int) node->clausetype, (int) node->upstream); appendStringInfo(str, " :downstream @ 0x%x :groupup %d :groupcost %f :groupsel %f ", (int) node->downstream, node->groupup, node->groupcost, node->groupsel);}static void_outAExpr(StringInfo str, A_Expr *node){ appendStringInfo(str, "EXPR "); switch (node->oper) { case AND: appendStringInfo(str, "AND"); break; case OR: appendStringInfo(str, "OR"); break; case NOT: appendStringInfo(str, "NOT"); break; case ISNULL: appendStringInfo(str, "ISNULL"); break; case NOTNULL: appendStringInfo(str, "NOTNULL"); break; default: appendStringInfo(str, stringStringInfo(node->opname)); break; } _outNode(str, node->lexpr); _outNode(str, node->rexpr); return;}static void_outValue(StringInfo str, Value *value){ switch (value->type) { case T_String: appendStringInfo(str, " \"%s\" ", stringStringInfo(value->val.str)); break; case T_Integer: appendStringInfo(str, " %ld ", value->val.ival); break; case T_Float: appendStringInfo(str, " %f ", value->val.dval); break; default: break; } return;}static void_outIdent(StringInfo str, Ident *node){ appendStringInfo(str, " IDENT \"%s\" ", stringStringInfo(node->name)); return;}static void_outAttr(StringInfo str, Attr *node){ List *l; appendStringInfo(str, " ATTR \"%s\" ", stringStringInfo(node->relname)); appendStringInfo(str, "("); foreach(l, node->attrs) { _outNode(str, lfirst(l)); if (lnext(l)) appendStringInfo(str, ","); } appendStringInfo(str, ")"); return;}static void_outAConst(StringInfo str, A_Const *node){ appendStringInfo(str, "CONST "); _outValue(str, &(node->val)); return;}static void_outConstraint(StringInfo str, Constraint *node){ appendStringInfo(str, " %s :type", stringStringInfo(node->name)); switch (node->contype) { case CONSTR_PRIMARY: appendStringInfo(str, " PRIMARY KEY "); _outNode(str, node->keys); break; case CONSTR_CHECK: appendStringInfo(str, " CHECK %s", stringStringInfo(node->def)); break; case CONSTR_DEFAULT: appendStringInfo(str, " DEFAULT %s", stringStringInfo(node->def)); break; case CONSTR_NOTNULL: appendStringInfo(str, " NOT NULL "); break; case CONSTR_UNIQUE: appendStringInfo(str, " UNIQUE "); _outNode(str, node->keys); break; default: appendStringInfo(str, "<unrecognized constraint>"); break; } return;}static void_outCaseExpr(StringInfo str, CaseExpr *node){ appendStringInfo(str, "CASE "); _outNode(str, node->args); appendStringInfo(str, " :default "); _outNode(str, node->defresult); return;}static void_outCaseWhen(StringInfo str, CaseWhen *node){ appendStringInfo(str, " WHEN "); _outNode(str, node->expr); appendStringInfo(str, " :then "); _outNode(str, node->result); return;}/* * _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 (nodeTag(obj) == T_List) { List *l; appendStringInfo(str, "("); foreach(l, (List *) obj) { _outNode(str, lfirst(l)); if (lnext(l)) appendStringInfo(str, " "); } appendStringInfo(str, ")"); } else { appendStringInfo(str, "{"); switch (nodeTag(obj)) { case T_CreateStmt: _outCreateStmt(str, obj); break; case T_IndexStmt: _outIndexStmt(str, obj); break; case T_ColumnDef: _outColumnDef(str, obj); break; case T_TypeName: _outTypeName(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_Plan: _outPlan(str, obj); break; case T_Result: _outResult(str, obj); break; case T_Append: _outAppend(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_Scan: _outScan(str, obj); break; case T_SeqScan: _outSeqScan(str, obj); break; case T_IndexScan: _outIndexScan(str, obj); break; case T_Noname: _outNoname(str, obj); break; case T_Sort: _outSort(str, obj); break; case T_Agg: _outAgg(str, obj); break; case T_Group: _outGroup(str, obj); break; case T_Unique: _outUnique(str, obj); break; case T_Hash: _outHash(str, obj); break; case T_SubPlan: _outSubPlan(str, obj); break; case T_Resdom: _outResdom(str, obj); break; case T_Fjoin: _outFjoin(str, obj); break; case T_Expr: _outExpr(str, obj); break; case T_Var: _outVar(str, obj); break; case T_Const: _outConst(str, obj); break; case T_Aggref: _outAggref(str, obj); break; case T_SubLink: _outSubLink(str, obj); break; case T_Array: _outArray(str, obj); break; case T_ArrayRef: _outArrayRef(str, obj); break; case T_Func: _outFunc(str, obj); break; case T_Oper: _outOper(str, obj); break; case T_Param: _outParam(str, obj); break; case T_EState: _outEState(str, obj); break; case T_RelOptInfo: _outRelOptInfo(str, obj); break; case T_TargetEntry: _outTargetEntry(str, obj); break; case T_RangeTblEntry: _outRangeTblEntry(str, obj); break; case T_RowMark: _outRowMark(str, obj); break; case T_PathOrder: _outPathOrder(str, obj); break; case T_Path: _outPath(str, obj); break; case T_IndexPath: _outIndexPath(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_OrderKey: _outOrderKey(str, obj); break; case T_JoinKey: _outJoinKey(str, obj); break; case T_MergeOrder: _outMergeOrder(str, obj); break; case T_RestrictInfo: _outRestrictInfo(str, obj); break; case T_JoinMethod: _outJoinMethod(str, obj); break; case T_HashInfo: _outHashInfo(str, obj); break; case T_JoinInfo: _outJoinInfo(str, obj); break; case T_Iter: _outIter(str, obj); break; case T_Stream: _outStream(str, obj); break; case T_Integer: case T_String: case T_Float: _outValue(str, obj); break; case T_A_Expr: _outAExpr(str, obj); break; case T_Ident: _outIdent(str, obj); break; case T_A_Const: _outAConst(str, obj); break; case T_Constraint: _outConstraint(str, obj); break; case T_CaseExpr: _outCaseExpr(str, obj); break; case T_CaseWhen: _outCaseWhen(str, obj); break; case T_VariableSetStmt: break; case T_SelectStmt: _outSelectStmt(str, obj); break; case T_FuncCall: _outFuncCall(str, obj); break; case T_Attr: _outAttr(str, obj); break; default: elog(NOTICE, "_outNode: don't know how to print type %d ", nodeTag(obj)); break; } appendStringInfo(str, "}"); } return;}/* * 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 + -