]> granicus.if.org Git - postgresql/commitdiff
Fix ecpglib regression that made it impossible to close a cursor that was
authorMichael Meskes <meskes@postgresql.org>
Mon, 11 Mar 2019 15:00:13 +0000 (16:00 +0100)
committerMichael Meskes <meskes@postgresql.org>
Mon, 11 Mar 2019 15:00:13 +0000 (16:00 +0100)
opened in a prepared statement.

Patch by: "Kuroda, Hayato" <kuroda.hayato@jp.fujitsu.com>

src/interfaces/ecpg/ecpglib/cursor.c

index ae67bfe8e08689645d566a8937f7029fd5bbc476..133d62321bfa7bc6678021dda078e63e304c99e6 100644 (file)
@@ -150,20 +150,23 @@ ECPGclose(const char *cursor_name,
 
        con = ecpg_get_connection(real_connection_name);
 
-       /* check the existence of the cursor in the connection */
-       if (find_cursor(cursor_name, con) == false)
-       {
-               ecpg_raise(lineno, ECPG_INVALID_CURSOR, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, NULL);
-               return false;
-       }
-
+       /* send the query to backend */
        va_start(args, query);
 
        status = ecpg_do(lineno, compat, force_indicator, real_connection_name, questionmarks, st, query, args);
 
        va_end(args);
 
-       remove_cursor(cursor_name, con);
+       /* if it fails, raise an error */
+       if (!status)
+       {
+               ecpg_raise(lineno, ECPG_INVALID_CURSOR, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, NULL);
+               return false;
+       }
+
+       /* check the existence of the cursor in the connection */
+       if (find_cursor(cursor_name, con) == true)
+               remove_cursor(cursor_name, con);
 
        return status;
 }