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

📄 portal.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
📖 第 1 页 / 共 2 页
字号:
		return gbp->types[field_number].typid;	return -1;}/* -------------------------------- *		PQfsizeGroup - Return the size of a field given *					   the group index and field index * -------------------------------- */intPQfsizeGroup(PortalBuffer *portal, int group_index, int field_number){	GroupBuffer *gbp;	if (!valid_pointer("PQfsizeGroup: invalid portal pointer", portal) ||		!in_range("PQfsizeGroup: tuple index",				  group_index, 0, portal->no_groups))		return -1;	if ((gbp = pbuf_findGroup(portal, group_index)) &&		in_range("PQfsizeGroup: field number", field_number, 0, gbp->no_fields))		return gbp->types[field_number].typlen;	return -1;}/* -------------------------------- *		PQgroup - Return the tuple group that a particular tuple is in * -------------------------------- */GroupBuffer *PQgroup(PortalBuffer *portal, int tuple_index){	GroupBuffer *gbp;	int			tuple_count = 0;	if (!valid_pointer("PQgroup: invalid portal pointer", portal) ||		!in_range("PQgroup: tuple index",				  tuple_index, 0, portal->no_tuples))		return (GroupBuffer *) NULL;	for (gbp = portal->groups;		 gbp && tuple_index >= (tuple_count += gbp->no_tuples);		 gbp = gbp->next)		;	if (!in_range("PQgroup: tuple not found: tuple index",				  tuple_index, 0, tuple_count))		return (GroupBuffer *) NULL;	return gbp;}/* -------------------------------- *		PQgetgroup - Return the index of the group that a *					 particular tuple is in * -------------------------------- */intPQgetgroup(PortalBuffer *portal, int tuple_index){	GroupBuffer *gbp;	int			tuple_count = 0,				group_count = 0;	if (!valid_pointer("PQgetgroup: invalid portal pointer", portal) ||		!in_range("PQgetgroup: tuple index",				  tuple_index, 0, portal->no_tuples))		return -1;	for (gbp = portal->groups;		 gbp && tuple_index >= (tuple_count += gbp->no_tuples);		 gbp = gbp->next)		++group_count;	if (!gbp || !in_range("PQgetgroup: tuple not found: tuple index",						  tuple_index, 0, tuple_count))		return -1;	return group_count;}/* -------------------------------- *		PQnfields - Return the number of fields in a tuple * -------------------------------- */intPQnfields(PortalBuffer *portal, int tuple_index){	GroupBuffer *gbp;	if (!valid_pointer("PQnfields: invalid portal pointer", portal) ||		!in_range("PQnfields: tuple index",				  tuple_index, 0, portal->no_tuples))		return -1;	gbp = PQgroup(portal, tuple_index);	if (gbp)		return gbp->no_fields;	return -1;}/* -------------------------------- *		PQfnumber - Return the field index of a given *					field name within a tuple. * -------------------------------- */intPQfnumber(PortalBuffer *portal, int tuple_index, char *field_name){	GroupBuffer *gbp;	if (!valid_pointer("PQfnumber: invalid portal pointer", portal) ||	!valid_pointer("PQfnumber: invalid field name pointer", field_name) ||		!in_range("PQfnumber: tuple index",				  tuple_index, 0, portal->no_tuples))		return -1;	gbp = PQgroup(portal, tuple_index);	if (gbp)		return pbuf_findFnumber(gbp, field_name);	return -1;}/* -------------------------------- *		PQfname - Return the name of a field * -------------------------------- */char *PQfname(PortalBuffer *portal, int tuple_index, int field_number){	GroupBuffer *gbp;	if (!valid_pointer("PQfname: invalid portal pointer", portal) ||		!in_range("PQfname: tuple index",				  tuple_index, 0, portal->no_tuples))		return (char *) NULL;	if ((gbp = PQgroup(portal, tuple_index)) &&		in_range("PQfname: field number",				 field_number, 0, gbp->no_fields))		return pbuf_findFname(gbp, field_number);	return (char *) NULL;}/* -------------------------------- *		PQftype - Return the type of a field * -------------------------------- */intPQftype(PortalBuffer *portal, int tuple_index, int field_number){	GroupBuffer *gbp;	if (!valid_pointer("PQftype: invalid portal pointer", portal) ||		!in_range("PQfname: tuple index",				  tuple_index, 0, portal->no_tuples))		return -1;	if ((gbp = PQgroup(portal, tuple_index)) &&	  in_range("PQftype: field number", field_number, 0, gbp->no_fields))		return gbp->types[field_number].typid;	return -1;}/* -------------------------------- *		PQfsize - Return the size of a field * -------------------------------- */intPQfsize(PortalBuffer *portal, int tuple_index, int field_number){	GroupBuffer *gbp;	if (!valid_pointer("PQfsize: invalid portal pointer", portal) ||		!in_range("PQfsize: tuple index",				  tuple_index, 0, portal->no_tuples))		return -1;	if ((gbp = PQgroup(portal, tuple_index)) &&	  in_range("PQfsize: field number", field_number, 0, gbp->no_fields))		return gbp->types[field_number].typlen;	return -1;}/* -------------------------------- *		PQsametype - Return 1 if the two tuples have the same type *						(in the same group) * -------------------------------- */intPQsametype(PortalBuffer *portal, int tuple_index1, int tuple_index2){	GroupBuffer *gbp1,			   *gbp2;	if (!valid_pointer("PQsametype: invalid portal pointer", portal) ||		!in_range("PQsametype: tuple index 1",				  tuple_index1, 0, portal->no_tuples) ||		!in_range("PQsametype: tuple index 2",				  tuple_index2, 0, portal->no_tuples))		return -1;	gbp1 = PQgroup(portal, tuple_index1);	gbp2 = PQgroup(portal, tuple_index2);	if (gbp1 && gbp2)		return gbp1 == gbp2;	return -1;}static TupleBlock *PQGetTupleBlock(PortalBuffer *portal,				int tuple_index,				int *tuple_offset){	GroupBuffer *gbp;	TupleBlock *tbp;	int			tuple_count = 0;	if (!valid_pointer("PQGetTupleBlock: invalid portal pointer", portal) ||		!valid_pointer("PQGetTupleBlock: invalid offset pointer",					   tuple_offset) ||		!in_range("PQGetTupleBlock: tuple index",				  tuple_index, 0, portal->no_tuples))		return (TupleBlock *) NULL;	for (gbp = portal->groups;		 gbp && tuple_index >= (tuple_count += gbp->no_tuples);		 gbp = gbp->next)		;	if (!gbp ||		!in_range("PQGetTupleBlock: tuple not found: tuple index",				  tuple_index, 0, tuple_count))		return (TupleBlock *) NULL;	tuple_count -= gbp->no_tuples;	for (tbp = gbp->tuples;		 tbp && tuple_index >= (tuple_count += TupleBlockSize);		 tbp = tbp->next)		;	if (!tbp ||		!in_range("PQGetTupleBlock: tuple not found: tuple index",				  tuple_index, 0, tuple_count))		return (TupleBlock *) NULL;	tuple_count -= TupleBlockSize;	*tuple_offset = tuple_index - tuple_count;	return tbp;}/* -------------------------------- *		PQgetvalue - Return an attribute (field) value * -------------------------------- */char *PQgetvalue(PortalBuffer *portal,		   int tuple_index,		   int field_number){	TupleBlock *tbp;	int			tuple_offset;	tbp = PQGetTupleBlock(portal, tuple_index, &tuple_offset);	if (tbp)		return tbp->values[tuple_offset][field_number];	return (char *) NULL;}/* -------------------------------- *		PQgetAttr - Return an attribute (field) value *		this differs from PQgetvalue in that the value returned is *		a copy.  The CALLER is responsible for free'ing the data returned. * -------------------------------- */char *PQgetAttr(PortalBuffer *portal,		  int tuple_index,		  int field_number){	TupleBlock *tbp;	int			tuple_offset;	int			len;	char	   *result = NULL;	tbp = PQGetTupleBlock(portal, tuple_index, &tuple_offset);	if (tbp)	{		len = tbp->lengths[tuple_offset][field_number];		result = palloc(len + 1);		memcpy(result,			   tbp->values[tuple_offset][field_number],			   len);		result[len] = '\0';	}	return result;}/* -------------------------------- *		PQgetlength - Return an attribute (field) length * -------------------------------- */intPQgetlength(PortalBuffer *portal,			int tuple_index,			int field_number){	TupleBlock *tbp;	int			tuple_offset;	tbp = PQGetTupleBlock(portal, tuple_index, &tuple_offset);	if (tbp)		return tbp->lengths[tuple_offset][field_number];	return -1;}/* ---------------- *		PQclear			- free storage claimed by named portal * ---------------- */voidPQclear(char *pname){	if (!valid_pointer("PQclear: invalid portal name pointer", pname))		return;	pbuf_close(pname);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -