📄 readfuncs.c
字号:
READ_DONE();}/* * _readConvertRowtypeExpr */static ConvertRowtypeExpr *_readConvertRowtypeExpr(void){ READ_LOCALS(ConvertRowtypeExpr); READ_NODE_FIELD(arg); READ_OID_FIELD(resulttype); READ_ENUM_FIELD(convertformat, CoercionForm); READ_DONE();}/* * _readCaseExpr */static CaseExpr *_readCaseExpr(void){ READ_LOCALS(CaseExpr); READ_OID_FIELD(casetype); READ_NODE_FIELD(arg); READ_NODE_FIELD(args); READ_NODE_FIELD(defresult); READ_DONE();}/* * _readCaseWhen */static CaseWhen *_readCaseWhen(void){ READ_LOCALS(CaseWhen); READ_NODE_FIELD(expr); READ_NODE_FIELD(result); READ_DONE();}/* * _readCaseTestExpr */static CaseTestExpr *_readCaseTestExpr(void){ READ_LOCALS(CaseTestExpr); READ_OID_FIELD(typeId); READ_INT_FIELD(typeMod); READ_DONE();}/* * _readArrayExpr */static ArrayExpr *_readArrayExpr(void){ READ_LOCALS(ArrayExpr); READ_OID_FIELD(array_typeid); READ_OID_FIELD(element_typeid); READ_NODE_FIELD(elements); READ_BOOL_FIELD(multidims); READ_DONE();}/* * _readRowExpr */static RowExpr *_readRowExpr(void){ READ_LOCALS(RowExpr); READ_NODE_FIELD(args); READ_OID_FIELD(row_typeid); READ_ENUM_FIELD(row_format, CoercionForm); READ_DONE();}/* * _readCoalesceExpr */static CoalesceExpr *_readCoalesceExpr(void){ READ_LOCALS(CoalesceExpr); READ_OID_FIELD(coalescetype); READ_NODE_FIELD(args); READ_DONE();}/* * _readMinMaxExpr */static MinMaxExpr *_readMinMaxExpr(void){ READ_LOCALS(MinMaxExpr); READ_OID_FIELD(minmaxtype); READ_ENUM_FIELD(op, MinMaxOp); READ_NODE_FIELD(args); READ_DONE();}/* * _readNullIfExpr */static NullIfExpr *_readNullIfExpr(void){ READ_LOCALS(NullIfExpr); READ_OID_FIELD(opno); READ_OID_FIELD(opfuncid); /* * The opfuncid is stored in the textual format primarily for debugging * and documentation reasons. We want to always read it as zero to force * it to be re-looked-up in the pg_operator entry. This ensures that * stored rules don't have hidden dependencies on operators' functions. * (We don't currently support an ALTER OPERATOR command, but might * someday.) */ local_node->opfuncid = InvalidOid; READ_OID_FIELD(opresulttype); READ_BOOL_FIELD(opretset); READ_NODE_FIELD(args); READ_DONE();}/* * _readNullTest */static NullTest *_readNullTest(void){ READ_LOCALS(NullTest); READ_NODE_FIELD(arg); READ_ENUM_FIELD(nulltesttype, NullTestType); READ_DONE();}/* * _readBooleanTest */static BooleanTest *_readBooleanTest(void){ READ_LOCALS(BooleanTest); READ_NODE_FIELD(arg); READ_ENUM_FIELD(booltesttype, BoolTestType); READ_DONE();}/* * _readCoerceToDomain */static CoerceToDomain *_readCoerceToDomain(void){ READ_LOCALS(CoerceToDomain); READ_NODE_FIELD(arg); READ_OID_FIELD(resulttype); READ_INT_FIELD(resulttypmod); READ_ENUM_FIELD(coercionformat, CoercionForm); READ_DONE();}/* * _readCoerceToDomainValue */static CoerceToDomainValue *_readCoerceToDomainValue(void){ READ_LOCALS(CoerceToDomainValue); READ_OID_FIELD(typeId); READ_INT_FIELD(typeMod); READ_DONE();}/* * _readSetToDefault */static SetToDefault *_readSetToDefault(void){ READ_LOCALS(SetToDefault); READ_OID_FIELD(typeId); READ_INT_FIELD(typeMod); READ_DONE();}/* * _readTargetEntry */static TargetEntry *_readTargetEntry(void){ READ_LOCALS(TargetEntry); READ_NODE_FIELD(expr); READ_INT_FIELD(resno); READ_STRING_FIELD(resname); READ_UINT_FIELD(ressortgroupref); READ_OID_FIELD(resorigtbl); READ_INT_FIELD(resorigcol); READ_BOOL_FIELD(resjunk); READ_DONE();}/* * _readRangeTblRef */static RangeTblRef *_readRangeTblRef(void){ READ_LOCALS(RangeTblRef); READ_INT_FIELD(rtindex); READ_DONE();}/* * _readJoinExpr */static JoinExpr *_readJoinExpr(void){ READ_LOCALS(JoinExpr); READ_ENUM_FIELD(jointype, JoinType); READ_BOOL_FIELD(isNatural); READ_NODE_FIELD(larg); READ_NODE_FIELD(rarg); READ_NODE_FIELD(using); READ_NODE_FIELD(quals); READ_NODE_FIELD(alias); READ_INT_FIELD(rtindex); READ_DONE();}/* * _readFromExpr */static FromExpr *_readFromExpr(void){ READ_LOCALS(FromExpr); READ_NODE_FIELD(fromlist); READ_NODE_FIELD(quals); READ_DONE();}/* * Stuff from parsenodes.h. */static ColumnDef *_readColumnDef(void){ READ_LOCALS(ColumnDef); READ_STRING_FIELD(colname); READ_NODE_FIELD(typename); READ_INT_FIELD(inhcount); READ_BOOL_FIELD(is_local); READ_BOOL_FIELD(is_not_null); READ_NODE_FIELD(raw_default); READ_STRING_FIELD(cooked_default); READ_NODE_FIELD(constraints); READ_NODE_FIELD(support); READ_DONE();}static TypeName *_readTypeName(void){ READ_LOCALS(TypeName); READ_NODE_FIELD(names); READ_OID_FIELD(typeid); READ_BOOL_FIELD(timezone); READ_BOOL_FIELD(setof); READ_BOOL_FIELD(pct_type); READ_INT_FIELD(typmod); READ_NODE_FIELD(arrayBounds); READ_DONE();}/* * _readRangeTblEntry */static RangeTblEntry *_readRangeTblEntry(void){ READ_LOCALS(RangeTblEntry); /* put alias + eref first to make dump more legible */ READ_NODE_FIELD(alias); READ_NODE_FIELD(eref); READ_ENUM_FIELD(rtekind, RTEKind); switch (local_node->rtekind) { case RTE_RELATION: case RTE_SPECIAL: READ_OID_FIELD(relid); break; case RTE_SUBQUERY: READ_NODE_FIELD(subquery); break; case RTE_FUNCTION: READ_NODE_FIELD(funcexpr); READ_NODE_FIELD(coldeflist); break; case RTE_JOIN: READ_ENUM_FIELD(jointype, JoinType); READ_NODE_FIELD(joinaliasvars); break; default: elog(ERROR, "unrecognized RTE kind: %d", (int) local_node->rtekind); break; } READ_BOOL_FIELD(inh); READ_BOOL_FIELD(inFromCl); READ_UINT_FIELD(requiredPerms); READ_OID_FIELD(checkAsUser); READ_DONE();}/* * parseNodeString * * Given a character string representing a node tree, parseNodeString creates * the internal node structure. * * The string to be read must already have been loaded into pg_strtok(). */Node *parseNodeString(void){ void *return_value; READ_TEMP_LOCALS(); token = pg_strtok(&length);#define MATCH(tokname, namelen) \ (length == namelen && strncmp(token, tokname, namelen) == 0) if (MATCH("QUERY", 5)) return_value = _readQuery(); else if (MATCH("SORTCLAUSE", 10)) return_value = _readSortClause(); else if (MATCH("GROUPCLAUSE", 11)) return_value = _readGroupClause(); else if (MATCH("SETOPERATIONSTMT", 16)) return_value = _readSetOperationStmt(); else if (MATCH("ALIAS", 5)) return_value = _readAlias(); else if (MATCH("RANGEVAR", 8)) return_value = _readRangeVar(); else if (MATCH("VAR", 3)) return_value = _readVar(); else if (MATCH("CONST", 5)) return_value = _readConst(); else if (MATCH("PARAM", 5)) return_value = _readParam(); else if (MATCH("AGGREF", 6)) return_value = _readAggref(); else if (MATCH("ARRAYREF", 8)) return_value = _readArrayRef(); else if (MATCH("FUNCEXPR", 8)) return_value = _readFuncExpr(); else if (MATCH("OPEXPR", 6)) return_value = _readOpExpr(); else if (MATCH("DISTINCTEXPR", 12)) return_value = _readDistinctExpr(); else if (MATCH("SCALARARRAYOPEXPR", 17)) return_value = _readScalarArrayOpExpr(); else if (MATCH("BOOLEXPR", 8)) return_value = _readBoolExpr(); else if (MATCH("SUBLINK", 7)) return_value = _readSubLink(); else if (MATCH("FIELDSELECT", 11)) return_value = _readFieldSelect(); else if (MATCH("FIELDSTORE", 10)) return_value = _readFieldStore(); else if (MATCH("RELABELTYPE", 11)) return_value = _readRelabelType(); else if (MATCH("CONVERTROWTYPEEXPR", 18)) return_value = _readConvertRowtypeExpr(); else if (MATCH("CASE", 4)) return_value = _readCaseExpr(); else if (MATCH("WHEN", 4)) return_value = _readCaseWhen(); else if (MATCH("CASETESTEXPR", 12)) return_value = _readCaseTestExpr(); else if (MATCH("ARRAY", 5)) return_value = _readArrayExpr(); else if (MATCH("ROW", 3)) return_value = _readRowExpr(); else if (MATCH("COALESCE", 8)) return_value = _readCoalesceExpr(); else if (MATCH("MINMAX", 6)) return_value = _readMinMaxExpr(); else if (MATCH("NULLIFEXPR", 10)) return_value = _readNullIfExpr(); else if (MATCH("NULLTEST", 8)) return_value = _readNullTest(); else if (MATCH("BOOLEANTEST", 11)) return_value = _readBooleanTest(); else if (MATCH("COERCETODOMAIN", 14)) return_value = _readCoerceToDomain(); else if (MATCH("COERCETODOMAINVALUE", 19)) return_value = _readCoerceToDomainValue(); else if (MATCH("SETTODEFAULT", 12)) return_value = _readSetToDefault(); else if (MATCH("TARGETENTRY", 11)) return_value = _readTargetEntry(); else if (MATCH("RANGETBLREF", 11)) return_value = _readRangeTblRef(); else if (MATCH("JOINEXPR", 8)) return_value = _readJoinExpr(); else if (MATCH("FROMEXPR", 8)) return_value = _readFromExpr(); else if (MATCH("COLUMNDEF", 9)) return_value = _readColumnDef(); else if (MATCH("TYPENAME", 8)) return_value = _readTypeName(); else if (MATCH("RTE", 3)) return_value = _readRangeTblEntry(); else if (MATCH("NOTIFY", 6)) return_value = _readNotifyStmt(); else if (MATCH("DECLARECURSOR", 13)) return_value = _readDeclareCursorStmt(); else { elog(ERROR, "badly formatted node string \"%.32s\"...", token); return_value = NULL; /* keep compiler quiet */ } return (Node *) return_value;}/* * readDatum * * Given a string representation of a constant, recreate the appropriate * Datum. The string representation embeds length info, but not byValue, * so we must be told that. */static DatumreadDatum(bool typbyval){ Size length, i; int tokenLength; char *token; Datum res; char *s; /* * read the actual length of the value */ token = pg_strtok(&tokenLength); length = atoui(token); token = pg_strtok(&tokenLength); /* read the '[' */ if (token == NULL || token[0] != '[') elog(ERROR, "expected \"[\" to start datum, but got \"%s\"; length = %lu", token ? (const char *) token : "[NULL]", (unsigned long) length); if (typbyval) { if (length > (Size) sizeof(Datum)) elog(ERROR, "byval datum but length = %lu", (unsigned long) length); res = (Datum) 0; s = (char *) (&res); for (i = 0; i < (Size) sizeof(Datum); i++) { token = pg_strtok(&tokenLength); s[i] = (char) atoi(token); } } else if (length <= 0) res = (Datum) NULL; else { s = (char *) palloc(length); for (i = 0; i < length; i++) { token = pg_strtok(&tokenLength); s[i] = (char) atoi(token); } res = PointerGetDatum(s); } token = pg_strtok(&tokenLength); /* read the ']' */ if (token == NULL || token[0] != ']') elog(ERROR, "expected \"]\" to end datum, but got \"%s\"; length = %lu", token ? (const char *) token : "[NULL]", (unsigned long) length); return res;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -