From: Michael Meskes Date: Mon, 11 Mar 2019 15:00:13 +0000 (+0100) Subject: Fix ecpglib regression that made it impossible to close a cursor that was X-Git-Tag: REL_12_BETA1~574 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=98bdaab0d918169a36d64a06667a809c673ec065;p=postgresql Fix ecpglib regression that made it impossible to close a cursor that was opened in a prepared statement. Patch by: "Kuroda, Hayato" --- diff --git a/src/interfaces/ecpg/ecpglib/cursor.c b/src/interfaces/ecpg/ecpglib/cursor.c index ae67bfe8e0..133d62321b 100644 --- a/src/interfaces/ecpg/ecpglib/cursor.c +++ b/src/interfaces/ecpg/ecpglib/cursor.c @@ -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; }