PostgreSQL Source Code  git master
parse_expr.h File Reference
Include dependency graph for parse_expr.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

NodetransformExpr (ParseState *pstate, Node *expr, ParseExprKind exprKind)
 
const char * ParseExprKindName (ParseExprKind exprKind)
 

Variables

bool Transform_null_equals
 

Function Documentation

◆ ParseExprKindName()

const char* ParseExprKindName ( ParseExprKind  exprKind)

Definition at line 2967 of file parse_expr.c.

References EXPR_KIND_ALTER_COL_TRANSFORM, EXPR_KIND_CALL_ARGUMENT, EXPR_KIND_CHECK_CONSTRAINT, EXPR_KIND_COLUMN_DEFAULT, EXPR_KIND_COPY_WHERE, EXPR_KIND_CYCLE_MARK, EXPR_KIND_DISTINCT_ON, EXPR_KIND_DOMAIN_CHECK, EXPR_KIND_EXECUTE_PARAMETER, EXPR_KIND_FILTER, EXPR_KIND_FROM_FUNCTION, EXPR_KIND_FROM_SUBSELECT, EXPR_KIND_FUNCTION_DEFAULT, EXPR_KIND_GENERATED_COLUMN, EXPR_KIND_GROUP_BY, EXPR_KIND_HAVING, EXPR_KIND_INDEX_EXPRESSION, EXPR_KIND_INDEX_PREDICATE, EXPR_KIND_INSERT_TARGET, EXPR_KIND_JOIN_ON, EXPR_KIND_JOIN_USING, EXPR_KIND_LIMIT, EXPR_KIND_NONE, EXPR_KIND_OFFSET, EXPR_KIND_ORDER_BY, EXPR_KIND_OTHER, EXPR_KIND_PARTITION_BOUND, EXPR_KIND_PARTITION_EXPRESSION, EXPR_KIND_POLICY, EXPR_KIND_RETURNING, EXPR_KIND_SELECT_TARGET, EXPR_KIND_TRIGGER_WHEN, EXPR_KIND_UPDATE_SOURCE, EXPR_KIND_UPDATE_TARGET, EXPR_KIND_VALUES, EXPR_KIND_VALUES_SINGLE, EXPR_KIND_WHERE, EXPR_KIND_WINDOW_FRAME_GROUPS, EXPR_KIND_WINDOW_FRAME_RANGE, EXPR_KIND_WINDOW_FRAME_ROWS, EXPR_KIND_WINDOW_ORDER, and EXPR_KIND_WINDOW_PARTITION.

Referenced by check_agglevels_and_constraints(), check_srf_call_placement(), checkTargetlistEntrySQL92(), findTargetlistEntrySQL92(), and transformWindowFuncCall().

2968 {
2969  switch (exprKind)
2970  {
2971  case EXPR_KIND_NONE:
2972  return "invalid expression context";
2973  case EXPR_KIND_OTHER:
2974  return "extension expression";
2975  case EXPR_KIND_JOIN_ON:
2976  return "JOIN/ON";
2977  case EXPR_KIND_JOIN_USING:
2978  return "JOIN/USING";
2980  return "sub-SELECT in FROM";
2982  return "function in FROM";
2983  case EXPR_KIND_WHERE:
2984  return "WHERE";
2985  case EXPR_KIND_POLICY:
2986  return "POLICY";
2987  case EXPR_KIND_HAVING:
2988  return "HAVING";
2989  case EXPR_KIND_FILTER:
2990  return "FILTER";
2992  return "window PARTITION BY";
2994  return "window ORDER BY";
2996  return "window RANGE";
2998  return "window ROWS";
3000  return "window GROUPS";
3002  return "SELECT";
3004  return "INSERT";
3007  return "UPDATE";
3008  case EXPR_KIND_GROUP_BY:
3009  return "GROUP BY";
3010  case EXPR_KIND_ORDER_BY:
3011  return "ORDER BY";
3012  case EXPR_KIND_DISTINCT_ON:
3013  return "DISTINCT ON";
3014  case EXPR_KIND_LIMIT:
3015  return "LIMIT";
3016  case EXPR_KIND_OFFSET:
3017  return "OFFSET";
3018  case EXPR_KIND_RETURNING:
3019  return "RETURNING";
3020  case EXPR_KIND_VALUES:
3022  return "VALUES";
3025  return "CHECK";
3028  return "DEFAULT";
3030  return "index expression";
3032  return "index predicate";
3034  return "USING";
3036  return "EXECUTE";
3038  return "WHEN";
3040  return "partition bound";
3042  return "PARTITION BY";
3044  return "CALL";
3045  case EXPR_KIND_COPY_WHERE:
3046  return "WHERE";
3048  return "GENERATED AS";
3049  case EXPR_KIND_CYCLE_MARK:
3050  return "CYCLE";
3051 
3052  /*
3053  * There is intentionally no default: case here, so that the
3054  * compiler will warn if we add a new ParseExprKind without
3055  * extending this switch. If we do see an unrecognized value at
3056  * runtime, we'll fall through to the "unrecognized" return.
3057  */
3058  }
3059  return "unrecognized expression kind";
3060 }

◆ transformExpr()

Node* transformExpr ( ParseState pstate,
Node expr,
ParseExprKind  exprKind 
)

Definition at line 94 of file parse_expr.c.

References Assert, EXPR_KIND_NONE, ParseState::p_expr_kind, and transformExprRecurse().

Referenced by analyzeCTE(), array_subscript_transform(), cookConstraint(), cookDefault(), DoCopy(), domainAddConstraint(), EvaluateParams(), ExpandIndirectionStar(), findTargetlistEntrySQL99(), hstore_subscript_transform(), interpret_function_parameter_list(), jsonb_subscript_transform(), resolve_unique_index_expr(), transformAlterTableStmt(), transformCallStmt(), transformExpressionList(), transformFrameOffset(), transformFuncCall(), transformGroupingFunc(), transformIndexStmt(), transformJoinUsingClause(), transformLimitClause(), transformOnConflictArbiter(), transformPartitionBoundValue(), transformPartitionSpec(), transformPLAssignStmt(), transformRangeFunction(), transformRangeTableFunc(), transformRangeTableSample(), transformTargetEntry(), and transformWhereClause().

95 {
96  Node *result;
97  ParseExprKind sv_expr_kind;
98 
99  /* Save and restore identity of expression type we're parsing */
100  Assert(exprKind != EXPR_KIND_NONE);
101  sv_expr_kind = pstate->p_expr_kind;
102  pstate->p_expr_kind = exprKind;
103 
104  result = transformExprRecurse(pstate, expr);
105 
106  pstate->p_expr_kind = sv_expr_kind;
107 
108  return result;
109 }
static Node * transformExprRecurse(ParseState *pstate, Node *expr)
Definition: parse_expr.c:112
Definition: nodes.h:533
ParseExprKind
Definition: parse_node.h:38
ParseExprKind p_expr_kind
Definition: parse_node.h:195
#define Assert(condition)
Definition: c.h:804

Variable Documentation

◆ Transform_null_equals

bool Transform_null_equals

Definition at line 42 of file parse_expr.c.

Referenced by transformAExprOp().