Hi,
Commit bd7c95f0c1a38becffceb3ea7234d57167f6d4bf add DECLARE
STATEMENT support to ECPG. This introduced the new rule
for EXEC SQL CLOSE cur and with that it gets transformed into
ECPGclose().
Now prior to the above commit, someone can declare the
cursor in the SQL statement and "CLOSE cur_name" can be
also, execute as a normal statement.
Example:
EXEC SQL PREPARE cur_query FROM "DECLARE cur1 CURSOR WITH HOLD FOR SELECT count(*) FROM pg_class";
EXEC SQL PREPARE fetch_stmt FROM "FETCH next FROM cur1";
EXEC SQL EXECUTE cur_query;
EXEC SQL EXECUTE fetch_stmt INTO :c;
EXEC SQL CLOSE cur1;
With commit bd7c95f0c1, "EXEC SQL CLOSE cur1" will fail
and throw an error "sqlcode -245 The cursor is invalid".
I think the problem here is ECPGclose(), tries to find the
cursor into "connection->cursor_stmts" and if it doesn't
find it there, just throws an error. Maybe require fix
into ECPGclose() - rather than throwing an error continue
executing statement "CLOSE cur_name" with ecpg_do().
Attaching the ECPG program for reference.
Thanks,