diff options
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/gram.y | 16 | ||||
-rw-r--r-- | src/backend/parser/parse_expr.c | 54 |
2 files changed, 0 insertions, 70 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 2cb377d0342..efc9c997541 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -13238,14 +13238,6 @@ a_expr: c_expr { $$ = $1; } { $$ = (Node *) makeSimpleA_Expr(AEXPR_NOT_DISTINCT, "=", $1, $6, @2); } - | a_expr IS OF '(' type_list ')' %prec IS - { - $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "=", $1, (Node *) $5, @2); - } - | a_expr IS NOT OF '(' type_list ')' %prec IS - { - $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "<>", $1, (Node *) $6, @2); - } | a_expr BETWEEN opt_asymmetric b_expr AND a_expr %prec BETWEEN { $$ = (Node *) makeSimpleA_Expr(AEXPR_BETWEEN, @@ -13464,14 +13456,6 @@ b_expr: c_expr { $$ = (Node *) makeSimpleA_Expr(AEXPR_NOT_DISTINCT, "=", $1, $6, @2); } - | b_expr IS OF '(' type_list ')' %prec IS - { - $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "=", $1, (Node *) $5, @2); - } - | b_expr IS NOT OF '(' type_list ')' %prec IS - { - $$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "<>", $1, (Node *) $6, @2); - } | b_expr IS DOCUMENT_P %prec IS { $$ = makeXmlExpr(IS_DOCUMENT, NULL, NIL, diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index f5165863d77..36002f059d1 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -94,7 +94,6 @@ static Node *transformAExprOpAny(ParseState *pstate, A_Expr *a); static Node *transformAExprOpAll(ParseState *pstate, A_Expr *a); static Node *transformAExprDistinct(ParseState *pstate, A_Expr *a); static Node *transformAExprNullIf(ParseState *pstate, A_Expr *a); -static Node *transformAExprOf(ParseState *pstate, A_Expr *a); static Node *transformAExprIn(ParseState *pstate, A_Expr *a); static Node *transformAExprBetween(ParseState *pstate, A_Expr *a); static Node *transformBoolExpr(ParseState *pstate, BoolExpr *a); @@ -228,9 +227,6 @@ transformExprRecurse(ParseState *pstate, Node *expr) case AEXPR_NULLIF: result = transformAExprNullIf(pstate, a); break; - case AEXPR_OF: - result = transformAExprOf(pstate, a); - break; case AEXPR_IN: result = transformAExprIn(pstate, a); break; @@ -1168,51 +1164,6 @@ transformAExprNullIf(ParseState *pstate, A_Expr *a) return (Node *) result; } -/* - * Checking an expression for match to a list of type names. Will result - * in a boolean constant node. - */ -static Node * -transformAExprOf(ParseState *pstate, A_Expr *a) -{ - Node *lexpr = a->lexpr; - Const *result; - ListCell *telem; - Oid ltype, - rtype; - bool matched = false; - - if (operator_precedence_warning) - emit_precedence_warnings(pstate, PREC_GROUP_POSTFIX_IS, "IS", - lexpr, NULL, - a->location); - - lexpr = transformExprRecurse(pstate, lexpr); - - ltype = exprType(lexpr); - foreach(telem, (List *) a->rexpr) - { - rtype = typenameTypeId(pstate, lfirst(telem)); - matched = (rtype == ltype); - if (matched) - break; - } - - /* - * We have two forms: equals or not equals. Flip the sense of the result - * for not equals. - */ - if (strcmp(strVal(linitial(a->name)), "<>") == 0) - matched = (!matched); - - result = (Const *) makeBoolConst(matched, false); - - /* Make the result have the original input's parse location */ - result->location = exprLocation((Node *) a); - - return (Node *) result; -} - static Node * transformAExprIn(ParseState *pstate, A_Expr *a) { @@ -3257,11 +3208,6 @@ operator_precedence_group(Node *node, const char **nodename) *nodename = "IS"; group = PREC_GROUP_INFIX_IS; } - else if (aexpr->kind == AEXPR_OF) - { - *nodename = "IS"; - group = PREC_GROUP_POSTFIX_IS; - } else if (aexpr->kind == AEXPR_IN) { *nodename = "IN"; |