| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- Index: DBD-Pg-1.31/dbdimp.c
- --- DBD-Pg-1.31/dbdimp.c.orig 2003-10-27 20:57:02.000000000 +0100
- +++ DBD-Pg-1.31/dbdimp.c 2003-11-21 21:10:50.000000000 +0100
- @@ -36,6 +36,34 @@
- #include "large_object.c"
- #include "prescan_stmt.c"
-
- +static int
- +_dbd_begin(dbh, imp_dbh)
- + SV *dbh;
- + imp_dbh_t *imp_dbh;
- +{
- + PGresult *result = NULL;
- + ExecStatusType status;
- +
- + if (DBIc_has(imp_dbh, DBIcf_AutoCommit))
- + return 1;
- +
- + if (imp_dbh->pg_need_begin == 0)
- + return 1;
- +
- + imp_dbh->pg_need_begin = 0;
- +
- + /* start new transaction. AutoCommit must be FALSE (see above) */
- + result = PQexec(imp_dbh->conn, "begin");
- + status = result ? PQresultStatus(result) : -1;
- + PQclear(result);
- + if (status != PGRES_COMMAND_OK) {
- + pg_error(dbh, status, "begin failed\n");
- + return 0;
- + }
- +
- + return 1;
- +}
- +
- void
- dbd_init (dbistate)
- dbistate_t *dbistate;
- @@ -219,6 +247,7 @@
- #ifdef is_utf8_string
- imp_dbh->pg_enable_utf8 = 0; /* initialize pg_enable_utf8 */
- #endif
- + imp_dbh->pg_need_begin = 1; /* initialize begin state */
-
- DBIc_IMPSET_on(imp_dbh); /* imp_dbh set up now */
- DBIc_ACTIVE_on(imp_dbh); /* call disconnect before freeing */
- @@ -310,7 +339,7 @@
-
- if (NULL != imp_dbh->conn) {
- PGresult* result = 0;
- - ExecStatusType commitstatus, beginstatus;
- + ExecStatusType commitstatus;
-
- /* execute commit */
- result = PQexec(imp_dbh->conn, "commit");
- @@ -323,15 +352,8 @@
- pg_error(dbh, commitstatus, PQerrorMessage(imp_dbh->conn));
- }
-
- - /* start new transaction. AutoCommit must be FALSE, ref. 20 lines up */
- - result = PQexec(imp_dbh->conn, "begin");
- - beginstatus = result ? PQresultStatus(result) : -1;
- - PQclear(result);
- - if (beginstatus != PGRES_COMMAND_OK) {
- - /* Maybe add some loud barf here? Raising some very high error? */
- - pg_error(dbh, beginstatus, "begin failed\n");
- - return 0;
- - }
- + /* mark need for a begin at the start of the next command */
- + imp_dbh->pg_need_begin = 1;
-
- /* if the initial COMMIT failed, return 0 now */
- if (commitstatus != PGRES_COMMAND_OK) {
- @@ -361,6 +383,10 @@
- if (NULL != imp_dbh->conn) {
- PGresult* result = 0;
- ExecStatusType status;
- +
- + /* no rollback is needed if we are not already in a transaction */
- + if (imp_dbh->pg_need_begin)
- + return 1;
-
- /* execute rollback */
- result = PQexec(imp_dbh->conn, "rollback");
- @@ -375,14 +401,8 @@
- return 0;
- }
-
- - /* start new transaction. AutoCommit must be FALSE, ref. 20 lines up */
- - result = PQexec(imp_dbh->conn, "begin");
- - status = result ? PQresultStatus(result) : -1;
- - PQclear(result);
- - if (status != PGRES_COMMAND_OK) {
- - pg_error(dbh, status, "begin failed\n");
- - return 0;
- - }
- + /* mark need for a begin at the start of the next command */
- + imp_dbh->pg_need_begin = 1;
-
- return 1;
- }
- @@ -409,7 +429,8 @@
-
- if (NULL != imp_dbh->conn) {
- /* rollback if AutoCommit = off */
- - if (DBIc_has(imp_dbh, DBIcf_AutoCommit) == FALSE) {
- + if ((imp_dbh->pg_need_begin == 0)
- + && (DBIc_has(imp_dbh, DBIcf_AutoCommit) == FALSE)) {
- PGresult* result = 0;
- ExecStatusType status;
- result = PQexec(imp_dbh->conn, "rollback");
- @@ -485,16 +506,7 @@
- if (dbis->debug >= 2) { PerlIO_printf(DBILOGFP, "dbd_db_STORE: switch AutoCommit to on: commit\n"); }
- } else if ((oldval != FALSE && newval == FALSE) || (oldval == FALSE && newval == FALSE && imp_dbh->init_commit)) {
- if (NULL != imp_dbh->conn) {
- - /* start new transaction */
- - PGresult* result = 0;
- - ExecStatusType status;
- - result = PQexec(imp_dbh->conn, "begin");
- - status = result ? PQresultStatus(result) : -1;
- - PQclear(result);
- - if (status != PGRES_COMMAND_OK) {
- - pg_error(dbh, status, "begin failed\n");
- - return 0;
- - }
- + imp_dbh->pg_need_begin = 1;
- }
- if (dbis->debug >= 2) { PerlIO_printf(DBILOGFP, "dbd_db_STORE: switch AutoCommit to off: begin\n"); }
- }
- @@ -899,6 +911,9 @@
- pg_error(sth, -1, "statement not prepared\n");
- return -2;
- }
- +
- + if (_dbd_begin(sth, imp_dbh) == 0)
- + return -2;
-
- max_len = strlen(imp_sth->statement)+1;
- /* do we have input parameters ? */
- Index: DBD-Pg-1.31/dbdimp.h
- --- DBD-Pg-1.31/dbdimp.h.orig 2003-03-31 19:52:39.000000000 +0200
- +++ DBD-Pg-1.31/dbdimp.h 2003-11-21 20:53:09.000000000 +0100
- @@ -28,6 +28,7 @@
- #ifdef is_utf8_string
- int pg_enable_utf8; /* should we attempt to make utf8 strings? */
- #endif
- + int pg_need_begin; /* does a begin need to be sent */
- struct {
- int major;
- int minor;
- Index: DBD-Pg-1.31/Makefile.PL
- --- DBD-Pg-1.31/Makefile.PL.orig 2003-11-21 20:51:13.000000000 +0100
- +++ DBD-Pg-1.31/Makefile.PL 2003-11-21 20:51:13.000000000 +0100
- @@ -39,7 +39,7 @@
- $POSTGRES_INCLUDE = $pg->inc_dir;
- $POSTGRES_LIB = $pg->lib_dir;
- } elsif ((!$ENV{POSTGRES_INCLUDE} or !$ENV{POSTGRES_LIB}) and $ENV{POSTGRES_HOME}) {
- - $POSTGRES_INCLUDE = "$ENV{POSTGRES_HOME}/include";
- + $POSTGRES_INCLUDE = "$ENV{POSTGRES_HOME}/include/postgresql";
- $POSTGRES_LIB = "$ENV{POSTGRES_HOME}/lib";
- } else {
- $POSTGRES_INCLUDE = "$ENV{POSTGRES_INCLUDE}";
- Index: DBD-Pg-1.31/t/lib/App/Info/RDBMS/PostgreSQL.pm
- --- DBD-Pg-1.31/t/lib/App/Info/RDBMS/PostgreSQL.pm.orig 2003-08-15 02:08:05.000000000 +0200
- +++ DBD-Pg-1.31/t/lib/App/Info/RDBMS/PostgreSQL.pm 2003-11-29 14:19:42.000000000 +0100
- @@ -251,6 +251,9 @@
- @{$self}{qw(version major minor patch)} =
- ($version, $x, $y, $z);
- ## Beta/devel/release candidate versions are treated as patch level "0"
- + } elsif ($version =~ /^(\d+)\.(\d+)$/) {
- + @{$self}{qw(version major minor patch)} =
- + ($version, $1, $2, 0);
- } elsif ($version =~ /(\d+)\.(\d+)\w+\d+/) {
- @{$self}{qw(version major minor patch)} =
- ($version, $1, $2, 0);
|