96 nincols = noutcols = 0;
98 for (
i = 0;
i < n;
i++)
104 if (att->attisdropped)
107 atttypid = att->atttypid;
108 atttypmod = att->atttypmod;
112 if (att->attisdropped)
117 if (atttypid != att->atttypid ||
118 (atttypmod != att->atttypmod && atttypmod >= 0))
120 (
errcode(ERRCODE_DATATYPE_MISMATCH),
122 errdetail(
"Returned type %s does not match expected type %s in column %d.",
148 (
errcode(ERRCODE_DATATYPE_MISMATCH),
150 errdetail(
"Number of returned columns (%d) does not match "
151 "expected column count (%d).",
152 nincols, noutcols)));
183 outnatts = outdesc->
natts;
184 innatts = indesc->
natts;
187 for (
i = 0;
i < outnatts;
i++)
195 if (outatt->attisdropped)
198 atttypid = outatt->atttypid;
199 atttypmod = outatt->atttypmod;
212 for (
j = 0;
j < innatts;
j++)
217 if (nextindesc >= innatts)
221 if (inatt->attisdropped)
226 if (atttypid != inatt->atttypid || atttypmod != inatt->atttypmod)
228 (
errcode(ERRCODE_DATATYPE_MISMATCH),
229 errmsg(
"could not convert row type"),
230 errdetail(
"Attribute \"%s\" of type %s does not match corresponding attribute of type %s.",
234 attrMap->
attnums[
i] = inatt->attnum;
240 (
errcode(ERRCODE_DATATYPE_MISMATCH),
241 errmsg(
"could not convert row type"),
242 errdetail(
"Attribute \"%s\" of type %s does not exist in type %s.",
303 if (inatt->atthasmissing)
315 inatt->attisdropped &&
316 inatt->attlen == outatt->attlen &&
317 inatt->attalign == outatt->attalign)
AttrMap * build_attrmap_by_name_if_req(TupleDesc indesc, TupleDesc outdesc)
void free_attrmap(AttrMap *map)
AttrMap * make_attrmap(int maplen)
AttrMap * build_attrmap_by_name(TupleDesc indesc, TupleDesc outdesc)
AttrMap * build_attrmap_by_position(TupleDesc indesc, TupleDesc outdesc, const char *msg)
static bool check_attrmap_match(TupleDesc indesc, TupleDesc outdesc, AttrMap *attrMap)
static void PGresult * res
int errmsg_internal(const char *fmt,...)
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void pfree(void *pointer)
void * palloc0(Size size)
FormData_pg_attribute * Form_pg_attribute
#define TupleDescAttr(tupdesc, i)