Hi, I came across following error while working on ecpg client program.
$ install/bin/ecpg ecpg_connection_ptr.pgc ecpg_connection_ptr.pgc:26: ERROR: AT option not allowed in WHENEVER statement I have attached simple ecpg program 'ecpg_connection_ptr_issue.pgc' that reproduces the above issue. After doing some investigation I could see that, in preproc.y, in rule of 'ClosePortalStmt', function output_statement() is called, which in turn frees the connection pointer. Here is the relevant trailing snippet from the output_statement() function. whenever_action(whenever_mode | 2); free(stmt); if (connection != NULL) free(connection); } Now, when the ecpg parses following statement using rule 'ECPGWhenever': EXEC SQL WHENEVER SQLERROR CONTINUE; it checks if the connection is set, if it is then throws an error as below: if (connection) mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in WHENEVER statement"); Now, ideally the connection would have been null here, but, as the 'ClosePortalStmt' rule freed the connection but did not set it to NULL, it still sees that there is a connection(which is actually having garbage in it) and throws an error. I see similarly there are other places, which are freeing this global connection but not setting to NULL, and all those should be fixed. I have attached a patch ecpg_connection_ptr_issue_fix.patch to fix these places. Regards, Jeevan Ladhe
ecpg_connection_ptr_issue_fix.patch
Description: Binary data
ecpg_connection_ptr_issue.pgc
Description: Binary data