summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/interfaces/ecpg/ChangeLog5
-rw-r--r--src/interfaces/ecpg/lib/Makefile.in4
-rw-r--r--src/interfaces/ecpg/lib/ecpglib.c125
-rw-r--r--src/interfaces/ecpg/test/test2.pgc2
-rw-r--r--src/interfaces/ecpg/test/test3.pgc2
5 files changed, 67 insertions, 71 deletions
diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 53c81753ed..8a7253dae5 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -638,3 +638,8 @@ Fri Sep 17 07:43:55 CEST 1999
- Fixed bug in parsing operators.
- Set ecpg version to 2.6.4
+Fri Sep 17 18:16:34 CEST 1999
+
+ - Made sure sqlca is initialized everytime.
+ - Set library version to 3.0.3
+
diff --git a/src/interfaces/ecpg/lib/Makefile.in b/src/interfaces/ecpg/lib/Makefile.in
index 005ed0d8a1..8436a63b6f 100644
--- a/src/interfaces/ecpg/lib/Makefile.in
+++ b/src/interfaces/ecpg/lib/Makefile.in
@@ -6,13 +6,13 @@
# Copyright (c) 1994, Regents of the University of California
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.46 1999/09/15 08:29:14 meskes Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile.in,v 1.47 1999/09/17 18:28:10 meskes Exp $
#
#-------------------------------------------------------------------------
NAME= ecpg
SO_MAJOR_VERSION= 3
-SO_MINOR_VERSION= 0.2
+SO_MINOR_VERSION= 0.3
SRCDIR= @top_srcdir@
include $(SRCDIR)/Makefile.global
diff --git a/src/interfaces/ecpg/lib/ecpglib.c b/src/interfaces/ecpg/lib/ecpglib.c
index ea2ec7a650..de093895e0 100644
--- a/src/interfaces/ecpg/lib/ecpglib.c
+++ b/src/interfaces/ecpg/lib/ecpglib.c
@@ -140,12 +140,25 @@ get_connection(const char *connection_name)
return NULL;
}
+static bool
+ecpg_init(const struct connection *con, const char * connection_name, const int lineno)
+{
+ memcpy((char *) &sqlca, (char *) &sqlca_init, sizeof(sqlca));
+ if (con == NULL)
+ {
+ register_error(ECPG_NO_CONN, "No such connection %s in line %d.", connection_name ? connection_name : "NULL", lineno);
+ return (false);
+ }
+
+ return (true);
+}
+
static void
-ECPGfinish(struct connection * act)
+ecpg_finish(struct connection * act)
{
if (act != NULL)
{
- ECPGlog("ECPGfinish: finishing %s.\n", act->name);
+ ECPGlog("ecpg_finish: finishing %s.\n", act->name);
PQfinish(act->connection);
/* remove act from the list */
if (act == all_connections)
@@ -166,7 +179,7 @@ ECPGfinish(struct connection * act)
free(act);
}
else
- ECPGlog("ECPGfinish: called an extra time.\n");
+ ECPGlog("ecpg_finish: called an extra time.\n");
}
static char *
@@ -383,8 +396,6 @@ ECPGexecute(struct statement * stmt)
PGnotify *notify;
struct variable *var;
- memcpy((char *) &sqlca, (char *) &sqlca_init, sizeof(sqlca));
-
copiedquery = ecpg_strdup(stmt->command, stmt->lineno);
/*
@@ -1029,11 +1040,8 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
struct connection *con = get_connection(connection_name);
bool status;
- if (con == NULL)
- {
- register_error(ECPG_NO_CONN, "No such connection %s in line %d.", connection_name ? connection_name : "NULL", lineno);
- return (false);
- }
+ if (!ecpg_init(con, connection_name, lineno))
+ return(false);
va_start(args, query);
if (create_statement(lineno, con, &stmt, query, args) == false)
@@ -1058,11 +1066,8 @@ ECPGstatus(int lineno, const char *connection_name)
{
struct connection *con = get_connection(connection_name);
- if (con == NULL)
- {
- register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name ? connection_name : "NULL", lineno);
- return (false);
- }
+ if (!ecpg_init(con, connection_name, lineno))
+ return(false);
/* are we connected? */
if (con->connection == NULL)
@@ -1081,11 +1086,8 @@ ECPGtrans(int lineno, const char *connection_name, const char *transaction)
PGresult *res;
struct connection *con = get_connection(connection_name);
- if (con == NULL)
- {
- register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name ? connection_name : "NULL", lineno);
- return (false);
- }
+ if (!ecpg_init(con, connection_name, lineno))
+ return(false);
ECPGlog("ECPGtrans line %d action = %s connection = %s\n", lineno, transaction, con->name);
@@ -1124,41 +1126,36 @@ ECPGsetcommit(int lineno, const char *mode, const char *connection_name)
struct connection *con = get_connection(connection_name);
PGresult *results;
- if (con)
+ if (!ecpg_init(con, connection_name, lineno))
+ return(false);
+
+ if (con->autocommit == true && strncmp(mode, "OFF", strlen("OFF")) == 0)
{
- if (con->autocommit == true && strncmp(mode, "OFF", strlen("OFF")) == 0)
+ if (con->committed)
{
- if (con->committed)
+ if ((results = PQexec(con->connection, "begin transaction")) == NULL)
{
- if ((results = PQexec(con->connection, "begin transaction")) == NULL)
- {
- register_error(ECPG_TRANS, "Error in transaction processing line %d.", lineno);
- return false;
- }
- PQclear(results);
- con->committed = false;
+ register_error(ECPG_TRANS, "Error in transaction processing line %d.", lineno);
+ return false;
}
- con->autocommit = false;
+ PQclear(results);
+ con->committed = false;
}
- else if (con->autocommit == false && strncmp(mode, "ON", strlen("ON")) == 0)
+ con->autocommit = false;
+ }
+ else if (con->autocommit == false && strncmp(mode, "ON", strlen("ON")) == 0)
+ {
+ if (!con->committed)
{
- if (!con->committed)
+ if ((results = PQexec(con->connection, "commit")) == NULL)
{
- if ((results = PQexec(con->connection, "commit")) == NULL)
- {
- register_error(ECPG_TRANS, "Error in transaction processing line %d.", lineno);
- return false;
- }
- PQclear(results);
- con->committed = true;
+ register_error(ECPG_TRANS, "Error in transaction processing line %d.", lineno);
+ return false;
}
- con->autocommit = true;
+ PQclear(results);
+ con->committed = true;
}
- }
- else
- {
- register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name ? connection_name : "NULL", lineno);
- return false;
+ con->autocommit = true;
}
return true;
@@ -1169,24 +1166,22 @@ ECPGsetconn(int lineno, const char *connection_name)
{
struct connection *con = get_connection(connection_name);
- if (con)
- {
- actual_connection = con;
- return true;
- }
- else
- {
- register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name ? connection_name : "NULL", lineno);
- return false;
- }
+ if (!ecpg_init(con, connection_name, lineno))
+ return(false);
+
+ actual_connection = con;
+ return true;
}
bool
ECPGconnect(int lineno, const char *dbname, const char *user, const char *passwd, const char *connection_name, int autocommit)
{
- struct connection *this = (struct connection *) ecpg_alloc(sizeof(struct connection), lineno);
+ struct connection *this;
- if (!this)
+
+ memcpy((char *) &sqlca, (char *) &sqlca_init, sizeof(sqlca));
+
+ if ((this = (struct connection *) ecpg_alloc(sizeof(struct connection), lineno)) == NULL)
return false;
if (dbname == NULL && connection_name == NULL)
@@ -1213,7 +1208,7 @@ ECPGconnect(int lineno, const char *dbname, const char *user, const char *passwd
if (PQstatus(this->connection) == CONNECTION_BAD)
{
- ECPGfinish(this);
+ ecpg_finish(this);
ECPGlog("connect: could not open database %s %s%s in line %d\n", dbname ? dbname : "<DEFAULT>", user ? "for user " : "", user ? user : "", lineno);
register_error(ECPG_CONNECT, "connect: could not open database %s.", dbname ? dbname : "<DEFAULT>");
return false;
@@ -1237,21 +1232,17 @@ ECPGdisconnect(int lineno, const char *connection_name)
struct connection *f = con;
con = con->next;
- ECPGfinish(f);
+ ecpg_finish(f);
}
}
else
{
con = get_connection(connection_name);
- if (con == NULL)
- {
- ECPGlog("disconnect: not connected to connection %s\n", connection_name ? connection_name : "NULL");
- register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name ? connection_name : "NULL", lineno);
- return false;
- }
+ if (!ecpg_init(con, connection_name, lineno))
+ return(false);
else
- ECPGfinish(con);
+ ecpg_finish(con);
}
return true;
diff --git a/src/interfaces/ecpg/test/test2.pgc b/src/interfaces/ecpg/test/test2.pgc
index 360dee3b34..3dc3603d54 100644
--- a/src/interfaces/ecpg/test/test2.pgc
+++ b/src/interfaces/ecpg/test/test2.pgc
@@ -117,8 +117,8 @@ exec sql end declare section;
exec sql commit;
strcpy(msg, "disconnect");
-
exec sql disconnect;
+
if (dbgs != NULL)
fclose(dbgs);
diff --git a/src/interfaces/ecpg/test/test3.pgc b/src/interfaces/ecpg/test/test3.pgc
index 13786518f0..12e3e07dd2 100644
--- a/src/interfaces/ecpg/test/test3.pgc
+++ b/src/interfaces/ecpg/test/test3.pgc
@@ -109,8 +109,8 @@ exec sql end declare section;
exec sql commit;
strcpy(msg, "disconnect");
-
exec sql disconnect;
+
if (dbgs != NULL)
fclose(dbgs);