OSDN Git Service

Give a more precise error message if a variable is re-used as cursor name in ecpg.
authorMichael Meskes <meskes@postgresql.org>
Wed, 31 Mar 2010 08:45:18 +0000 (08:45 +0000)
committerMichael Meskes <meskes@postgresql.org>
Wed, 31 Mar 2010 08:45:18 +0000 (08:45 +0000)
src/interfaces/ecpg/preproc/ecpg.addons
src/interfaces/ecpg/preproc/ecpg.trailer

index 818ef54..a6760d4 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.addons,v 1.18 2010/03/23 22:12:06 petere Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.addons,v 1.19 2010/03/31 08:45:18 meskes Exp $ */
 ECPG: stmtClosePortalStmt block
        {
                if (INFORMIX_MODE)
@@ -306,7 +306,12 @@ ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectSt
                for (ptr = cur; ptr != NULL; ptr = ptr->next)
                {
                        if (strcmp($2, ptr->name) == 0)
-                               mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2);
+                       {
+                               if ($2[0] == ':')
+                                        mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", $2+1);
+                                else
+                                       mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2);
+                       }
                }
 
                this = (struct cursor *) mm_alloc(sizeof(struct cursor));
index 436c4fd..d5e16af 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.trailer,v 1.23 2010/03/21 11:56:45 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.trailer,v 1.24 2010/03/31 08:45:18 meskes Exp $ */
 
 statements: /*EMPTY*/
                 | statements statement
@@ -296,8 +296,13 @@ ECPGCursorStmt:  DECLARE cursor_name cursor_options CURSOR opt_hold FOR prepared
                        for (ptr = cur; ptr != NULL; ptr = ptr->next)
                        {
                                if (strcmp($2, ptr->name) == 0)
+                               {
                                        /* re-definition is a bug */
-                                       mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2);
+                                       if ($2[0] == ':')
+                                               mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", $2+1);
+                                       else
+                                               mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2);
+                               }
                        }
 
                        this = (struct cursor *) mm_alloc(sizeof(struct cursor));