mirror of
https://github.com/postgres/postgres.git
synced 2025-05-20 00:03:14 -04:00
of the SELECT part of the statement is just like a plain SELECT. All INSERT-specific processing happens after the SELECT parsing is done. This eliminates many problems, e.g. INSERT ... SELECT ... GROUP BY using the wrong column labels. Ensure that DEFAULT clauses are coerced to the target column type, whether or not stored clause produces the right type. Substantial cleanup of parser's array support.
46 lines
1.2 KiB
C
46 lines
1.2 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* parse_node.h
|
|
*
|
|
*
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: parse_node.h,v 1.15 1999/07/19 00:26:17 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PARSE_NODE_H
|
|
#define PARSE_NODE_H
|
|
|
|
#include "nodes/parsenodes.h"
|
|
#include "utils/rel.h"
|
|
|
|
/* state information used during parse analysis */
|
|
typedef struct ParseState
|
|
{
|
|
int p_last_resno;
|
|
List *p_rtable;
|
|
struct ParseState *parentParseState;
|
|
bool p_hasAggs;
|
|
bool p_hasSubLinks;
|
|
bool p_is_insert;
|
|
bool p_is_update;
|
|
bool p_is_rule;
|
|
bool p_in_where_clause;
|
|
Relation p_target_relation;
|
|
RangeTblEntry *p_target_rangetblentry;
|
|
} ParseState;
|
|
|
|
extern ParseState *make_parsestate(ParseState *parentParseState);
|
|
extern Expr *make_op(char *opname, Node *ltree, Node *rtree);
|
|
extern Var *make_var(ParseState *pstate, Oid relid, char *refname,
|
|
char *attrname);
|
|
extern ArrayRef *transformArraySubscripts(ParseState *pstate,
|
|
Node *arrayBase,
|
|
List *indirection,
|
|
bool forceSlice,
|
|
Node *assignFrom);
|
|
extern Const *make_const(Value *value);
|
|
|
|
#endif /* PARSE_NODE_H */
|