mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
Check for non-existant connection in prepare statement handling.
Do not close files that weren't opened.
This commit is contained in:
parent
cc22720644
commit
f496eb31b2
@ -1,4 +1,4 @@
|
|||||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.26 2008/02/07 11:09:13 meskes Exp $ */
|
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.26.2.1 2008/05/12 16:30:17 meskes Exp $ */
|
||||||
|
|
||||||
#define POSTGRES_ECPG_INTERNAL
|
#define POSTGRES_ECPG_INTERNAL
|
||||||
#include "postgres_fe.h"
|
#include "postgres_fe.h"
|
||||||
@ -120,10 +120,11 @@ ECPGprepare(int lineno, const char *connection_name, const int questionmarks, co
|
|||||||
struct sqlca_t *sqlca = ECPGget_sqlca();
|
struct sqlca_t *sqlca = ECPGget_sqlca();
|
||||||
PGresult *query;
|
PGresult *query;
|
||||||
|
|
||||||
ecpg_init_sqlca(sqlca);
|
|
||||||
|
|
||||||
con = ecpg_get_connection(connection_name);
|
con = ecpg_get_connection(connection_name);
|
||||||
|
|
||||||
|
if (!ecpg_init(con, connection_name, lineno))
|
||||||
|
return false;
|
||||||
|
|
||||||
/* check if we already have prepared this statement */
|
/* check if we already have prepared this statement */
|
||||||
this = find_prepared_statement(name, con, &prev);
|
this = find_prepared_statement(name, con, &prev);
|
||||||
if (this && !deallocate_one(lineno, ECPG_COMPAT_PGSQL, con, prev, this))
|
if (this && !deallocate_one(lineno, ECPG_COMPAT_PGSQL, con, prev, this))
|
||||||
@ -256,6 +257,9 @@ ECPGdeallocate(int lineno, int c, const char *connection_name, const char *name)
|
|||||||
|
|
||||||
con = ecpg_get_connection(connection_name);
|
con = ecpg_get_connection(connection_name);
|
||||||
|
|
||||||
|
if (!ecpg_init(con, connection_name, lineno))
|
||||||
|
return false;
|
||||||
|
|
||||||
this = find_prepared_statement(name, con, &prev);
|
this = find_prepared_statement(name, con, &prev);
|
||||||
if (this)
|
if (this)
|
||||||
return deallocate_one(lineno, c, con, prev, this);
|
return deallocate_one(lineno, c, con, prev, this);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.359.2.2 2008/03/01 03:26:44 tgl Exp $ */
|
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.359.2.3 2008/05/12 16:30:17 meskes Exp $ */
|
||||||
|
|
||||||
/* Copyright comment */
|
/* Copyright comment */
|
||||||
%{
|
%{
|
||||||
@ -87,8 +87,10 @@ mmerror(int error_code, enum errortype type, char * error, ...)
|
|||||||
ret_value = error_code;
|
ret_value = error_code;
|
||||||
break;
|
break;
|
||||||
case ET_FATAL:
|
case ET_FATAL:
|
||||||
fclose(yyin);
|
if (yyin)
|
||||||
fclose(yyout);
|
fclose(yyin);
|
||||||
|
if (yyout)
|
||||||
|
fclose(yyout);
|
||||||
if (unlink(output_filename) != 0 && *output_filename != '-')
|
if (unlink(output_filename) != 0 && *output_filename != '-')
|
||||||
fprintf(stderr, "Could not remove output file %s!\n", output_filename);
|
fprintf(stderr, "Could not remove output file %s!\n", output_filename);
|
||||||
exit(error_code);
|
exit(error_code);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user