|
|
@@ -1,11 +1,11 @@
|
|
|
---- DBD-Pg-1.22/dbdimp.c.orig Thu Mar 27 04:14:19 2003
|
|
|
-+++ DBD-Pg-1.22/dbdimp.c Sat May 17 13:26:56 2003
|
|
|
-@@ -97,6 +97,36 @@
|
|
|
- free(err);
|
|
|
- }
|
|
|
+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"
|
|
|
|
|
|
-+
|
|
|
-+int
|
|
|
++static int
|
|
|
+_dbd_begin(dbh, imp_dbh)
|
|
|
+ SV *dbh;
|
|
|
+ imp_dbh_t *imp_dbh;
|
|
|
@@ -21,7 +21,7 @@
|
|
|
+
|
|
|
+ imp_dbh->pg_need_begin = 0;
|
|
|
+
|
|
|
-+ /* start new transaction. AutoCommit must be FALSE, ref. ~8 lines up */
|
|
|
++ /* start new transaction. AutoCommit must be FALSE (see above) */
|
|
|
+ result = PQexec(imp_dbh->conn, "begin");
|
|
|
+ status = result ? PQresultStatus(result) : -1;
|
|
|
+ PQclear(result);
|
|
|
@@ -33,135 +33,125 @@
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
-+
|
|
|
- static int
|
|
|
- pgtype_bind_ok (dbtype)
|
|
|
- int dbtype;
|
|
|
-@@ -193,6 +223,7 @@
|
|
|
- imp_dbh->init_commit = 1; /* initialize AutoCommit */
|
|
|
- imp_dbh->pg_auto_escape = 1; /* initialize pg_auto_escape */
|
|
|
- imp_dbh->pg_bool_tf = 0; /* initialize pg_bool_tf */
|
|
|
+ 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 */
|
|
|
-@@ -284,7 +315,7 @@
|
|
|
-
|
|
|
- if (NULL != imp_dbh->conn) {
|
|
|
- PGresult* result = 0;
|
|
|
-- ExecStatusType commitstatus, beginstatus;
|
|
|
-+ ExecStatusType commitstatus;
|
|
|
-
|
|
|
- /* execute commit */
|
|
|
- result = PQexec(imp_dbh->conn, "commit");
|
|
|
-@@ -297,15 +328,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;
|
|
|
-- }
|
|
|
+
|
|
|
+ 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) {
|
|
|
-@@ -335,6 +359,10 @@
|
|
|
- PGresult* result = 0;
|
|
|
- ExecStatusType status;
|
|
|
-
|
|
|
+
|
|
|
+ /* 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");
|
|
|
- status = result ? PQresultStatus(result) : -1;
|
|
|
-@@ -346,14 +374,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;
|
|
|
-- }
|
|
|
+
|
|
|
+ /* 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;
|
|
|
- }
|
|
|
-@@ -377,7 +399,8 @@
|
|
|
-
|
|
|
- if (NULL != imp_dbh->conn) {
|
|
|
- /* rollback if AutoCommit = off */
|
|
|
-- if (DBIc_has(imp_dbh, DBIcf_AutoCommit) == FALSE) {
|
|
|
+
|
|
|
+ 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");
|
|
|
-@@ -453,16 +476,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;
|
|
|
-- }
|
|
|
++ && (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"); }
|
|
|
- }
|
|
|
-@@ -1182,6 +1196,9 @@
|
|
|
- SV **svp;
|
|
|
-
|
|
|
- if (dbis->debug >= 1) { PerlIO_printf(DBILOGFP, "dbd_st_execute\n"); }
|
|
|
+ }
|
|
|
+ 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 0;
|
|
|
-
|
|
|
- /*
|
|
|
- here we get the statement from the statement handle where
|
|
|
---- DBD-Pg-1.22/dbdimp.h.orig Tue Mar 25 23:17:00 2003
|
|
|
-+++ DBD-Pg-1.22/dbdimp.h Sat May 17 13:29:12 2003
|
|
|
++ 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 SvUTF8_off
|
|
|
+ #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 */
|
|
|
- };
|
|
|
-
|
|
|
- /* Define sth implementor data structure */
|
|
|
---- DBD-ODBC-1.06/Makefile.PL.dist 2003-06-23 15:42:09.000000000 +0200
|
|
|
-+++ DBD-ODBC-1.06/Makefile.PL 2003-06-23 15:42:23.000000000 +0200
|
|
|
-@@ -424,7 +424,7 @@
|
|
|
- changes_pm = ' . File::Spec->catfile($self->{INST_LIB}, 'DBD/ODBC', 'Changes.pm') . '
|
|
|
-
|
|
|
- config :: $(changes_pm)
|
|
|
-- @$(NOOP)
|
|
|
-+ @$(NOOP)
|
|
|
-
|
|
|
- $(changes_pm): Changes
|
|
|
- $(NOECHO) $(MKPATH) $(inst_libdbdodbc)
|
|
|
---- DBD-Pg-1.22/Makefile.PL.dist 2003-07-01 08:31:41.000000000 +0200
|
|
|
-+++ DBD-Pg-1.22/Makefile.PL 2003-07-01 08:31:57.000000000 +0200
|
|
|
-@@ -36,7 +36,7 @@
|
|
|
+ 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}) {
|