⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readfuncs.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -