mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
Until now __attribute__() was defined to be empty for all compilers but gcc. That's problematic because it prevents using it in other compilers; which is necessary e.g. for atomics portability. It's also just generally dubious to do so in a header as widely included as c.h. Instead add pg_attribute_format_arg, pg_attribute_printf, pg_attribute_noreturn macros which are implemented in the compilers that understand them. Also add pg_attribute_noreturn and pg_attribute_packed, but don't provide fallbacks, since they can affect functionality. This means that external code that, possibly unwittingly, relied on __attribute__ defined to be empty on !gcc compilers may now run into warnings or errors on those compilers. But there shouldn't be many occurances of that and it's hard to work around... Discussion: 54B58BA3.8040302@ohmu.fi Author: Oskari Saarenmaa, with some minor changes by me.
103 lines
3.7 KiB
C
103 lines
3.7 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* parse_relation.h
|
|
* prototypes for parse_relation.c.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/parser/parse_relation.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PARSE_RELATION_H
|
|
#define PARSE_RELATION_H
|
|
|
|
#include "parser/parse_node.h"
|
|
|
|
extern RangeTblEntry *refnameRangeTblEntry(ParseState *pstate,
|
|
const char *schemaname,
|
|
const char *refname,
|
|
int location,
|
|
int *sublevels_up);
|
|
extern CommonTableExpr *scanNameSpaceForCTE(ParseState *pstate,
|
|
const char *refname,
|
|
Index *ctelevelsup);
|
|
extern void checkNameSpaceConflicts(ParseState *pstate, List *namespace1,
|
|
List *namespace2);
|
|
extern int RTERangeTablePosn(ParseState *pstate,
|
|
RangeTblEntry *rte,
|
|
int *sublevels_up);
|
|
extern RangeTblEntry *GetRTEByRangeTablePosn(ParseState *pstate,
|
|
int varno,
|
|
int sublevels_up);
|
|
extern CommonTableExpr *GetCTEForRTE(ParseState *pstate, RangeTblEntry *rte,
|
|
int rtelevelsup);
|
|
extern Node *scanRTEForColumn(ParseState *pstate, RangeTblEntry *rte,
|
|
char *colname, int location);
|
|
extern Node *colNameToVar(ParseState *pstate, char *colname, bool localonly,
|
|
int location);
|
|
extern void markVarForSelectPriv(ParseState *pstate, Var *var,
|
|
RangeTblEntry *rte);
|
|
extern Relation parserOpenTable(ParseState *pstate, const RangeVar *relation,
|
|
int lockmode);
|
|
extern RangeTblEntry *addRangeTableEntry(ParseState *pstate,
|
|
RangeVar *relation,
|
|
Alias *alias,
|
|
bool inh,
|
|
bool inFromCl);
|
|
extern RangeTblEntry *addRangeTableEntryForRelation(ParseState *pstate,
|
|
Relation rel,
|
|
Alias *alias,
|
|
bool inh,
|
|
bool inFromCl);
|
|
extern RangeTblEntry *addRangeTableEntryForSubquery(ParseState *pstate,
|
|
Query *subquery,
|
|
Alias *alias,
|
|
bool lateral,
|
|
bool inFromCl);
|
|
extern RangeTblEntry *addRangeTableEntryForFunction(ParseState *pstate,
|
|
List *funcnames,
|
|
List *funcexprs,
|
|
List *coldeflists,
|
|
RangeFunction *rangefunc,
|
|
bool lateral,
|
|
bool inFromCl);
|
|
extern RangeTblEntry *addRangeTableEntryForValues(ParseState *pstate,
|
|
List *exprs,
|
|
List *collations,
|
|
Alias *alias,
|
|
bool lateral,
|
|
bool inFromCl);
|
|
extern RangeTblEntry *addRangeTableEntryForJoin(ParseState *pstate,
|
|
List *colnames,
|
|
JoinType jointype,
|
|
List *aliasvars,
|
|
Alias *alias,
|
|
bool inFromCl);
|
|
extern RangeTblEntry *addRangeTableEntryForCTE(ParseState *pstate,
|
|
CommonTableExpr *cte,
|
|
Index levelsup,
|
|
RangeVar *rv,
|
|
bool inFromCl);
|
|
extern bool isLockedRefname(ParseState *pstate, const char *refname);
|
|
extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte,
|
|
bool addToJoinList,
|
|
bool addToRelNameSpace, bool addToVarNameSpace);
|
|
extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn;
|
|
extern void errorMissingColumn(ParseState *pstate,
|
|
char *relname, char *colname, int location) pg_attribute_noreturn;
|
|
extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up,
|
|
int location, bool include_dropped,
|
|
List **colnames, List **colvars);
|
|
extern List *expandRelAttrs(ParseState *pstate, RangeTblEntry *rte,
|
|
int rtindex, int sublevels_up, int location);
|
|
extern int attnameAttNum(Relation rd, const char *attname, bool sysColOK);
|
|
extern Name attnumAttName(Relation rd, int attid);
|
|
extern Oid attnumTypeId(Relation rd, int attid);
|
|
extern Oid attnumCollationId(Relation rd, int attid);
|
|
extern bool isQueryUsingTempRelation(Query *query);
|
|
|
|
#endif /* PARSE_RELATION_H */
|