📄 portal.c
字号:
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 + -