| 1200 | } |
| 1201 | |
| 1202 | int |
| 1203 | SPI_fnumber(TupleDesc tupdesc, const char *fname) |
| 1204 | { |
| 1205 | int res; |
| 1206 | const FormData_pg_attribute *sysatt; |
| 1207 | |
| 1208 | for (res = 0; res < tupdesc->natts; res++) |
| 1209 | { |
| 1210 | Form_pg_attribute attr = TupleDescAttr(tupdesc, res); |
| 1211 | |
| 1212 | if (namestrcmp(&attr->attname, fname) == 0 && |
| 1213 | !attr->attisdropped) |
| 1214 | return res + 1; |
| 1215 | } |
| 1216 | |
| 1217 | sysatt = SystemAttributeByName(fname); |
| 1218 | if (sysatt != NULL) |
| 1219 | return sysatt->attnum; |
| 1220 | |
| 1221 | /* SPI_ERROR_NOATTRIBUTE is different from all sys column numbers */ |
| 1222 | return SPI_ERROR_NOATTRIBUTE; |
| 1223 | } |
| 1224 | |
| 1225 | char * |
| 1226 | SPI_fname(TupleDesc tupdesc, int fnumber) |