]> granicus.if.org Git - postgresql/commitdiff
Deliver better error message when a relation name is used in an expression.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 27 Dec 2002 20:06:28 +0000 (20:06 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 27 Dec 2002 20:06:28 +0000 (20:06 +0000)
Per report from Ian Barwick.

src/backend/parser/parse_expr.c

index 3873fd37f0de436dd1669b0a7602f9c862724480..ebb418ee904644e83bea5d2f5b72d7657907d9c9 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.129 2002/09/18 21:35:22 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.129.2.1 2002/12/27 20:06:28 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -912,6 +912,7 @@ exprType(Node *expr)
                                        if (!qtree || !IsA(qtree, Query))
                                                elog(ERROR, "exprType: Cannot get type for untransformed sublink");
                                        tent = (TargetEntry *) lfirst(qtree->targetList);
+                                       Assert(IsA(tent, TargetEntry));
                                        type = tent->resdom->restype;
                                }
                                else
@@ -936,6 +937,16 @@ exprType(Node *expr)
                case T_ConstraintTest:
                        type = exprType(((ConstraintTest *) expr)->arg);
                        break;
+               case T_RangeVar:
+                       /*
+                        * If someone uses a bare relation name in an expression,
+                        * we will likely first notice a problem here (see comments in
+                        * transformColumnRef()).  Issue an appropriate error message.
+                        */
+                       elog(ERROR, "Relation reference \"%s\" cannot be used in an expression",
+                                ((RangeVar *) expr)->relname);
+                       type = InvalidOid;      /* keep compiler quiet */
+                       break;
                default:
                        elog(ERROR, "exprType: Do not know how to get type for %d node",
                                 nodeTag(expr));