57 #define MAX_FUZZY_DISTANCE 3 68 const char *colname,
int location,
69 int fuzzy_rte_penalty,
74 int rtindex,
int sublevels_up,
75 int location,
bool include_dropped,
78 int count,
int offset,
79 int rtindex,
int sublevels_up,
80 int location,
bool include_dropped,
109 const char *schemaname,
119 if (schemaname != NULL)
139 while (pstate != NULL)
200 (
errcode(ERRCODE_AMBIGUOUS_ALIAS),
201 errmsg(
"table reference \"%s\" is ambiguous",
239 rte->
relid == relid &&
244 (
errcode(ERRCODE_AMBIGUOUS_ALIAS),
245 errmsg(
"table reference %u is ambiguous",
277 if (strcmp(cte->
ctename, refname) == 0)
279 *ctelevelsup = levelsup;
303 if (strcmp(cte->
ctename, refname) == 0)
338 const char *refname = relation->
relname;
342 Index ctelevelsup = 0;
385 strcmp(rte->
ctename, refname) == 0)
389 strcmp(rte->
enrname, refname) == 0)
419 foreach(l1, namespace1)
429 foreach(l2, namespace2)
443 (
errcode(ERRCODE_DUPLICATE_ALIAS),
444 errmsg(
"table name \"%s\" specified more than once",
472 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
473 errmsg(
"invalid reference to FROM-clause entry for table \"%s\"",
477 errhint(
"There is an entry for table \"%s\", but it cannot be referenced from this part of the query.",
479 errdetail(
"The combining JOIN type must be INNER or LEFT for a LATERAL reference."),
495 while (sublevels_up-- > 0)
507 elog(
ERROR,
"nsitem not found (internal error)");
520 while (sublevels_up-- > 0)
543 while (levelsup-- > 0)
568 const char *actual,
const char *match,
int attnum)
574 if (fuzzy_rte_penalty > fuzzystate->
distance)
581 if (actual[0] ==
'\0')
585 matchlen = strlen(match);
597 if (columndistance > matchlen / 2)
604 columndistance += fuzzy_rte_penalty;
610 if (columndistance < fuzzystate->distance)
613 fuzzystate->
distance = columndistance;
619 else if (columndistance == fuzzystate->
distance)
631 fuzzystate->
rfirst = NULL;
636 fuzzystate->
distance = columndistance - 1;
668 int sublevels_up,
const char *colname,
int location)
689 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
690 errmsg(
"system column \"%s\" reference in check constraint is invalid",
698 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
699 errmsg(
"cannot use system column \"%s\" in column generation expression",
712 (
errcode(ERRCODE_UNDEFINED_COLUMN),
713 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
737 sysatt->attcollation,
768 const char *colname,
int location,
769 int fuzzy_rte_penalty,
794 if (strcmp(attcolname, colname) == 0)
798 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
799 errmsg(
"column reference \"%s\" is ambiguous",
806 if (fuzzystate != NULL)
808 rte, attcolname, colname, attnum);
824 rte->
relkind != RELKIND_COMPOSITE_TYPE)
853 int sublevels_up = 0;
856 while (pstate != NULL)
880 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
881 errmsg(
"column reference \"%s\" is ambiguous",
889 if (result != NULL || localonly)
931 fuzzystate->
rfirst = NULL;
936 while (pstate != NULL)
943 int fuzzy_rte_penalty = 0;
974 fuzzy_rte_penalty, fuzzystate)
975 && fuzzy_rte_penalty == 0)
1032 elog(
ERROR,
"could not find JoinExpr for whole-row reference");
1048 elog(
ERROR,
"unrecognized node type: %d",
1063 elog(
ERROR,
"unrecognized node type: %d",
1113 int maxattrs = tupdesc->
natts;
1137 for (varattno = 0; varattno < maxattrs; varattno++)
1142 if (attr->attisdropped)
1154 aliaslc =
lnext(aliaslist, aliaslc);
1169 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
1170 errmsg(
"table \"%s\" has %d columns available but %d columns specified",
1171 eref->
aliasname, maxattrs - numdropped, numaliases)));
1189 Alias *alias,
int nfuncs)
1209 if (nfuncs == 1 && alias)
1231 int maxattrs = tupdesc->
natts;
1241 for (varattno = 0; varattno < maxattrs; varattno++)
1246 if (attr->attisdropped)
1249 nscolumns[varattno].
p_varno = rtindex;
1250 nscolumns[varattno].
p_varattno = varattno + 1;
1251 nscolumns[varattno].
p_vartype = attr->atttypid;
1252 nscolumns[varattno].
p_vartypmod = attr->atttypmod;
1253 nscolumns[varattno].
p_varcollid = attr->attcollation;
1260 nsitem->
p_rte = rte;
1309 nscolumns[varattno].
p_varno = rtindex;
1310 nscolumns[varattno].
p_varattno = varattno + 1;
1321 nsitem->
p_rte = rte;
1357 errmsg(
"relation \"%s.%s\" does not exist",
1370 errmsg(
"relation \"%s\" does not exist",
1372 errdetail(
"There is a WITH item named \"%s\", but it cannot be referenced from this part of the query.",
1374 errhint(
"Use WITH RECURSIVE, or re-order the WITH items to remove forward references.")));
1378 errmsg(
"relation \"%s\" does not exist",
1593 coltypes = coltypmods = colcollations =
NIL;
1603 if (varattno > numaliases)
1617 if (varattno < numaliases)
1619 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
1620 errmsg(
"table \"%s\" has %d columns available but %d columns specified",
1621 refname, varattno, numaliases)));
1653 coltypes, coltypmods, colcollations);
1714 forthree(lc1, funcexprs, lc2, funcnames, lc3, coldeflists)
1717 char *funcname = (
char *)
lfirst(lc2);
1744 if (coldeflist !=
NIL)
1746 switch (functypclass)
1759 if (
exprType(funcexpr) == RECORDOID)
1761 (
errcode(ERRCODE_SYNTAX_ERROR),
1762 errmsg(
"a column definition list is redundant for a function with OUT parameters"),
1767 (
errcode(ERRCODE_SYNTAX_ERROR),
1768 errmsg(
"a column definition list is redundant for a function returning a named composite type"),
1774 (
errcode(ERRCODE_SYNTAX_ERROR),
1775 errmsg(
"a column definition list is only allowed for functions returning \"record\""),
1785 (
errcode(ERRCODE_SYNTAX_ERROR),
1786 errmsg(
"a column definition list is required for functions returning \"record\""),
1821 foreach(col, coldeflist)
1832 (
errcode(ERRCODE_INVALID_TABLE_DEFINITION),
1833 errmsg(
"column \"%s\" cannot be declared SETOF",
1837 &attrtype, &attrtypmod);
1874 (
errcode(ERRCODE_DATATYPE_MISMATCH),
1875 errmsg(
"function \"%s\" in FROM has unsupported return type %s",
1884 functupdescs[funcno] = tupdesc;
1885 totalatts += tupdesc->
natts;
1901 for (i = 0; i < nfuncs; i++)
1903 for (j = 1; j <= functupdescs[
i]->
natts; j++)
1919 Assert(natts == totalatts);
1924 tupdesc = functupdescs[0];
2045 List *colcollations,
2072 while (numaliases < numcolumns)
2077 snprintf(attrname,
sizeof(attrname),
"column%d", numaliases);
2081 if (numcolumns < numaliases)
2083 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
2084 errmsg(
"VALUES lists \"%s\" have %d columns available but %d columns specified",
2085 refname, numcolumns, numaliases)));
2154 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
2155 errmsg(
"joins can have at most %d columns",
2206 nsitem->
p_rte = rte;
2264 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2265 errmsg(
"WITH query \"%s\" does not have a RETURNING clause",
2286 if (varattno > numaliases)
2289 if (varattno < numaliases)
2291 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
2292 errmsg(
"table \"%s\" has %d columns available but %d columns specified",
2293 refname, varattno, numaliases)));
2389 for (attno = 1; attno <= tupdesc->
natts; ++attno)
2393 if (att->attisdropped)
2404 elog(
ERROR,
"atttypid is invalid for non-dropped column in \"%s\"",
2481 if (strcmp(refname, thisrel->
relname) == 0)
2498 bool addToRelNameSpace,
bool addToVarNameSpace)
2507 if (addToRelNameSpace || addToVarNameSpace)
2537 int location,
bool include_dropped,
2552 rtindex, sublevels_up, location,
2553 include_dropped, colnames, colvars);
2593 varnode =
makeVar(rtindex, varattno,
2600 *colvars =
lappend(*colvars, varnode);
2630 rtindex, sublevels_up, location,
2631 include_dropped, colnames, colvars);
2637 *colnames =
lappend(*colnames,
2645 varnode =
makeVar(rtindex, atts_done + 1,
2652 *colvars =
lappend(*colvars, varnode);
2693 *colvars =
lappend(*colvars, varnode);
2700 elog(
ERROR,
"function in FROM has unsupported return type");
2709 *colnames =
lappend(*colnames,
2721 *colvars =
lappend(*colvars, varnode);
2751 if (include_dropped)
2754 *colnames =
lappend(*colnames,
2775 *colnames =
lappend(*colnames,
2798 varnode =
makeVar(rtindex, varattno,
2805 *colvars =
lappend(*colvars, varnode);
2839 *colnames =
lappend(*colnames,
2842 else if (include_dropped)
2843 *colnames =
lappend(*colnames,
2855 varnode =
makeVar(rtindex, varattno,
2856 coltype, coltypmod, colcoll,
2860 *colvars =
lappend(*colvars, varnode);
2862 else if (include_dropped)
2889 int location,
bool include_dropped,
2897 rtindex, sublevels_up,
2898 location, include_dropped,
2914 int rtindex,
int sublevels_up,
2915 int location,
bool include_dropped,
2924 Assert(count <= tupdesc->natts);
2925 for (varattno = 0; varattno < count; varattno++)
2929 if (attr->attisdropped)
2931 if (include_dropped)
2962 label =
NameStr(attr->attname);
2971 varnode =
makeVar(rtindex, varattno + offset + 1,
2972 attr->atttypid, attr->atttypmod,
2977 *colvars =
lappend(*colvars, varnode);
2995 int sublevels_up,
int location,
3008 const char *colname =
strVal(colnameval);
3026 result =
lappend(result, var);
3028 *colnames =
lappend(*colnames, colnameval);
3050 int sublevels_up,
int location)
3068 forboth(name, names, var, vars)
3078 te_list =
lappend(te_list, te);
3084 Assert(name == NULL && var == NULL);
3129 elog(
ERROR,
"invalid attnum %d for rangetable entry %s",
3157 elog(
ERROR,
"cache lookup failed for attribute %d of relation %u",
3158 attnum, rte->
relid);
3160 result = att_tup->attisdropped;
3180 elog(
ERROR,
"invalid varattno %d", attnum);
3197 elog(
ERROR,
"invalid varattno %d", attnum);
3200 result = (aliasvar == NULL);
3220 if (attnum > atts_done &&
3221 attnum <= atts_done + rtfunc->funccolcount)
3233 Assert(attnum - atts_done <= tupdesc->natts);
3235 attnum - atts_done - 1);
3236 return att_tup->attisdropped;
3250 (
errcode(ERRCODE_UNDEFINED_COLUMN),
3251 errmsg(
"column %d of relation \"%s\" does not exist",
3260 (
errcode(ERRCODE_UNDEFINED_COLUMN),
3261 errmsg(
"column %d of relation \"%s\" does not exist",
3291 if (tle->
resno == resno)
3311 if (rc->
rti == rtindex)
3335 if (
namestrcmp(&(att->attname), attname) == 0 && !att->attisdropped)
3364 return sysatt->attnum;
3384 return &sysatt->attname;
3387 elog(
ERROR,
"invalid attribute number %d", attid);
3406 return sysatt->atttypid;
3409 elog(
ERROR,
"invalid attribute number %d", attid);
3427 elog(
ERROR,
"invalid attribute number %d", attid);
3441 const char *badAlias = NULL;
3460 if (rte && rte->
alias &&
3469 if (nsitem && nsitem->
p_rte == rte)
3476 errmsg(
"invalid reference to FROM-clause entry for table \"%s\"",
3479 errhint(
"Perhaps you meant to reference the table alias \"%s\".",
3481 errhint(
"There is an entry for table \"%s\", but it cannot be referenced from this part of the query.",
3487 errmsg(
"missing FROM-clause entry for table \"%s\"",
3500 const char *
relname,
const char *colname,
int location)
3503 char *closestfirst = NULL;
3534 (
errcode(ERRCODE_UNDEFINED_COLUMN),
3536 errmsg(
"column %s.%s does not exist", relname, colname) :
3537 errmsg(
"column \"%s\" does not exist", colname),
3538 state->
rfirst ? closestfirst ?
3539 errhint(
"Perhaps you meant to reference the column \"%s.%s\".",
3541 errhint(
"There is a column named \"%s\" in table \"%s\", but it cannot be referenced from this part of the query.",
3548 char *closestsecond;
3554 (
errcode(ERRCODE_UNDEFINED_COLUMN),
3556 errmsg(
"column %s.%s does not exist", relname, colname) :
3557 errmsg(
"column \"%s\" does not exist", colname),
3558 errhint(
"Perhaps you meant to reference the column \"%s.%s\" or the column \"%s.%s\".",
3587 foreach(rtable, query->
rtable)
3594 char relpersistence = rel->
rd_rel->relpersistence;
3597 if (relpersistence == RELPERSISTENCE_TEMP)
Value * makeString(char *str)
bool query_tree_walker(Query *query, bool(*walker)(), void *context, int flags)
static bool isQueryUsingTempRelation_walker(Node *node, void *context)
ParseNamespaceItem * addRangeTableEntryForCTE(ParseState *pstate, CommonTableExpr *cte, Index levelsup, RangeVar *rv, bool inFromCl)
#define IsA(nodeptr, _type_)
void table_close(Relation relation, LOCKMODE lockmode)
int errhint(const char *fmt,...)
ParseNamespaceItem * addRangeTableEntryForTableFunc(ParseState *pstate, TableFunc *tf, Alias *alias, bool lateral, bool inFromCl)
static int scanRTEForColumn(ParseState *pstate, RangeTblEntry *rte, const char *colname, int location, int fuzzy_rte_penalty, FuzzyAttrMatchState *fuzzystate)
#define forboth(cell1, list1, cell2, list2)
#define ERRCODE_UNDEFINED_TABLE
bool isQueryUsingTempRelation(Query *query)
RowMarkClause * get_parse_rowmark(Query *qry, Index rtindex)
ParseNamespaceItem * addRangeTableEntryForValues(ParseState *pstate, List *exprs, List *coltypes, List *coltypmods, List *colcollations, Alias *alias, bool lateral, bool inFromCl)
int exprLocation(const Node *expr)
static ListCell * lnext(const List *l, const ListCell *c)
static ListCell * list_nth_cell(const List *list, int n)
TupleDesc CreateTemplateTupleDesc(int natts)
void markVarForSelectPriv(ParseState *pstate, Var *var, RangeTblEntry *rte)
Relation table_openrv_extended(const RangeVar *relation, LOCKMODE lockmode, bool missing_ok)
#define RelationGetNumberOfAttributes(relation)
static FuzzyAttrMatchState * searchRangeTableForCol(ParseState *pstate, const char *alias, const char *colname, int location)
int32 exprTypmod(const Node *expr)
static char * chooseScalarFunctionAlias(Node *funcexpr, char *funcname, Alias *alias, int nfuncs)
static bool isFutureCTE(ParseState *pstate, const char *refname)
#define RangeVarGetRelid(relation, lockmode, missing_ok)
#define TupleDescAttr(tupdesc, i)
#define forthree(cell1, list1, cell2, list2, cell3, list3)
char * pstrdup(const char *in)
static void updateFuzzyAttrMatchState(int fuzzy_rte_penalty, FuzzyAttrMatchState *fuzzystate, RangeTblEntry *rte, const char *actual, const char *match, int attnum)
ParseState * parentParseState
List * list_truncate(List *list, int new_size)
CommonTableExpr * GetCTEForRTE(ParseState *pstate, RangeTblEntry *rte, int rtelevelsup)
Relation parserOpenTable(ParseState *pstate, const RangeVar *relation, int lockmode)
void addNSItemToQuery(ParseState *pstate, ParseNamespaceItem *nsitem, bool addToJoinList, bool addToRelNameSpace, bool addToVarNameSpace)
Node * scanNSItemForColumn(ParseState *pstate, ParseNamespaceItem *nsitem, int sublevels_up, const char *colname, int location)
List * list_concat(List *list1, const List *list2)
int errcode(int sqlerrcode)
void errorMissingColumn(ParseState *pstate, const char *relname, const char *colname, int location)
int namestrcmp(Name name, const char *str)
#define FirstLowInvalidHeapAttributeNumber
static int specialAttNum(const char *attname)
ParseNamespaceItem * p_target_nsitem
List * list_copy_tail(const List *oldlist, int nskip)
TypeFuncClass get_expr_result_type(Node *expr, Oid *resultTypeId, TupleDesc *resultTupleDesc)
List * lappend_oid(List *list, Oid datum)
#define OidIsValid(objectId)
Const * makeNullConst(Oid consttype, int32 consttypmod, Oid constcollid)
bool p_locked_from_parent
ParseNamespaceItem * addRangeTableEntryForRelation(ParseState *pstate, Relation rel, int lockmode, Alias *alias, bool inh, bool inFromCl)
static Oid list_nth_oid(const List *list, int n)
EphemeralNamedRelationMetadata get_visible_ENR(ParseState *pstate, const char *refname)
const FormData_pg_attribute * SystemAttributeDefinition(AttrNumber attno)
Alias * makeAlias(const char *aliasname, List *colnames)
ParseNamespaceItem * addRangeTableEntryForENR(ParseState *pstate, RangeVar *rv, bool inFromCl)
Bitmapset * extraUpdatedCols
void cancel_parser_errposition_callback(ParseCallbackState *pcbstate)
static RangeTblEntry * searchRangeTableForRel(ParseState *pstate, RangeVar *relation)
#define ObjectIdGetDatum(X)
static void check_lateral_ref_ok(ParseState *pstate, ParseNamespaceItem *nsitem, int location)
TupleDesc get_expr_result_tupdesc(Node *expr, bool noError)
static void * list_nth(const List *list, int n)
static ParseNamespaceItem * buildNSItemFromTupleDesc(RangeTblEntry *rte, Index rtindex, TupleDesc tupdesc)
void TupleDescCopyEntry(TupleDesc dst, AttrNumber dstAttno, TupleDesc src, AttrNumber srcAttno)
Relation relation_open(Oid relationId, LOCKMODE lockmode)
void TupleDescInitEntryCollation(TupleDesc desc, AttrNumber attributeNumber, Oid collationid)
Oid get_relname_relid(const char *relname, Oid relnamespace)
const FormData_pg_attribute * SystemAttributeByName(const char *attname)
#define list_nth_node(type, list, n)
bool scanNameSpaceForENR(ParseState *pstate, const char *refname)
#define MAX_FUZZY_DISTANCE
int errdetail(const char *fmt,...)
Oid attnumTypeId(Relation rd, int attid)
void errorMissingRTE(ParseState *pstate, RangeVar *relation)
#define RelationGetRelationName(relation)
static ListCell * list_head(const List *l)
FormData_pg_attribute * Form_pg_attribute
#define TableOidAttributeNumber
void checkNameSpaceConflicts(ParseState *pstate, List *namespace1, List *namespace2)
const NameData * attnumAttName(Relation rd, int attid)
void TupleDescInitEntry(TupleDesc desc, AttrNumber attributeNumber, const char *attributeName, Oid oidtypeid, int32 typmod, int attdim)
#define rt_fetch(rangetable_index, rangetable)
TargetEntry * makeTargetEntry(Expr *expr, AttrNumber resno, char *resname, bool resjunk)
Var * makeVar(Index varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
void setup_parser_errposition_callback(ParseCallbackState *pcbstate, ParseState *pstate, int location)
static void expandRelation(Oid relid, Alias *eref, int rtindex, int sublevels_up, int location, bool include_dropped, List **colnames, List **colvars)
List * lappend_int(List *list, int datum)
List * lappend(List *list, void *datum)
static void markRTEForSelectPriv(ParseState *pstate, RangeTblEntry *rte, int rtindex, AttrNumber col)
void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up, int location, bool include_dropped, List **colnames, List **colvars)
Oid GetColumnDefCollation(ParseState *pstate, ColumnDef *coldef, Oid typeOid)
ParseNamespaceItem * addRangeTableEntryForFunction(ParseState *pstate, List *funcnames, List *funcexprs, List *coldeflists, RangeFunction *rangefunc, bool lateral, bool inFromCl)
#define AttributeNumberIsValid(attributeNumber)
void * palloc0(Size size)
static ParseNamespaceItem * scanNameSpaceForRelid(ParseState *pstate, Oid relid, int location)
void ReleaseSysCache(HeapTuple tuple)
Oid attnumCollationId(Relation rd, int attid)
static ParseNamespaceItem * buildNSItemFromLists(RangeTblEntry *rte, Index rtindex, List *coltypes, List *coltypmods, List *colcollations)
bool get_rte_attribute_is_dropped(RangeTblEntry *rte, AttrNumber attnum)
RangeTblEntry * GetRTEByRangeTablePosn(ParseState *pstate, int varno, int sublevels_up)
ParseExprKind p_expr_kind
void typenameTypeIdAndMod(ParseState *pstate, const TypeName *typeName, Oid *typeid_p, int32 *typmod_p)
#define ereport(elevel,...)
ParseNamespaceItem * refnameNamespaceItem(ParseState *pstate, const char *schemaname, const char *refname, int location, int *sublevels_up)
char * get_rte_attribute_name(RangeTblEntry *rte, AttrNumber attnum)
CommonTableExpr * scanNameSpaceForCTE(ParseState *pstate, const char *refname, Index *ctelevelsup)
#define HeapTupleIsValid(tuple)
int attnameAttNum(Relation rd, const char *attname, bool sysColOK)
void relation_close(Relation relation, LOCKMODE lockmode)
#define Assert(condition)
List * expandNSItemVars(ParseNamespaceItem *nsitem, int sublevels_up, int location, List **colnames)
Oid exprType(const Node *expr)
bool expression_tree_walker(Node *node, bool(*walker)(), void *context)
static int list_length(const List *l)
int parser_errposition(ParseState *pstate, int location)
Oid exprCollation(const Node *expr)
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
#define SearchSysCacheExists2(cacheId, key1, key2)
Bitmapset * bms_add_member(Bitmapset *a, int x)
bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode, bool orstronger)
TupleDesc ENRMetadataGetTupDesc(EphemeralNamedRelationMetadata enrmd)
#define InvalidAttrNumber
static void expandTupleDesc(TupleDesc tupdesc, Alias *eref, int count, int offset, int rtindex, int sublevels_up, int location, bool include_dropped, List **colnames, List **colvars)
ParseNamespaceItem * addRangeTableEntry(ParseState *pstate, RangeVar *relation, Alias *alias, bool inh, bool inFromCl)
#define CHKATYPE_ANYRECORD
int varstr_levenshtein_less_equal(const char *source, int slen, const char *target, int tlen, int ins_c, int del_c, int sub_c, int max_d, bool trusted)
ParseNamespaceItem * GetNSItemByRangeTablePosn(ParseState *pstate, int varno, int sublevels_up)
ParseNamespaceColumn * p_nscolumns
int errmsg(const char *fmt,...)
TargetEntry * get_tle_by_resno(List *tlist, AttrNumber resno)
ParseNamespaceItem * addRangeTableEntryForSubquery(ParseState *pstate, Query *subquery, Alias *alias, bool lateral, bool inFromCl)
static void buildRelationAliases(TupleDesc tupdesc, Alias *alias, Alias *eref)
bool name_matches_visible_ENR(ParseState *pstate, const char *refname)
List * expandNSItemAttrs(ParseState *pstate, ParseNamespaceItem *nsitem, int sublevels_up, int location)
ParseNamespaceItem * addRangeTableEntryForJoin(ParseState *pstate, List *colnames, ParseNamespaceColumn *nscolumns, JoinType jointype, int nummergedcols, List *aliasvars, List *leftcols, List *rightcols, Alias *alias, bool inFromCl)
static ParseNamespaceItem * scanNameSpaceForRefname(ParseState *pstate, const char *refname, int location)
char * get_attname(Oid relid, AttrNumber attnum, bool missing_ok)
bool isLockedRefname(ParseState *pstate, const char *refname)
Relation table_open(Oid relationId, LOCKMODE lockmode)
void CheckAttributeNamesTypes(TupleDesc tupdesc, char relkind, int flags)
#define RelationGetRelid(relation)
Oid LookupNamespaceNoError(const char *nspname)
Node * colNameToVar(ParseState *pstate, const char *colname, bool localonly, int location)
char * get_func_result_name(Oid functionId)
#define QTW_IGNORE_JOINALIASES