gnucash maint: Bug 789928 - FTBFS with libdbi 0.9.0-5 on Debian
John Ralls
jralls at code.gnucash.org
Tue Nov 7 21:10:50 EST 2017
Updated via https://github.com/Gnucash/gnucash/commit/45bab936 (commit)
from https://github.com/Gnucash/gnucash/commit/c19f851c (commit)
commit 45bab93613e6a93b206b74ffc18f63708b07293b
Author: John Ralls <jralls at ceridwen.us>
Date: Tue Nov 7 18:06:04 2017 -0800
Bug 789928 - FTBFS with libdbi 0.9.0-5 on Debian
Commit 88b8477 on libdbi calls the error handler if one attempts to run
off the end of a result set. Since we often loop on
dbi_result_next_row() returning 0 this breaks our logic in several
places. This change simply returns from the error handler on a
DB_ERROR_BADIDX allowing the logic to work as before.
diff --git a/src/backend/dbi/gnc-backend-dbi.c b/src/backend/dbi/gnc-backend-dbi.c
index 912a9fa..bfb50a0 100644
--- a/src/backend/dbi/gnc-backend-dbi.c
+++ b/src/backend/dbi/gnc-backend-dbi.c
@@ -396,8 +396,13 @@ sqlite3_error_fn( dbi_conn conn, /*@ unused @*/ void* user_data )
const gchar* msg;
GncDbiBackend *be = (GncDbiBackend*)user_data;
GncDbiSqlConnection *dbi_conn = (GncDbiSqlConnection*)(be->sql_be.conn);
-
- (void)dbi_conn_error( conn, &msg );
+ int err_num = dbi_conn_error( conn, &msg );
+ /* BADIDX is raised if we attempt to seek outside of a result. We
+ * handle that possibility after checking the return value of the
+ * seek. Having this raise a critical error breaks looping by
+ * testing for the return value of the seek.
+ */
+ if (err_num == DBI_ERROR_BADIDX) return;
PERR( "DBI error: %s\n", msg );
gnc_dbi_set_error( dbi_conn, ERR_BACKEND_MISC, 0, FALSE );
}
@@ -611,14 +616,18 @@ mysql_error_fn( dbi_conn conn, void* user_data )
GncDbiBackend *be = (GncDbiBackend*)user_data;
GncDbiSqlConnection *dbi_conn = (GncDbiSqlConnection*)be->sql_be.conn;
const gchar* msg;
- gint err_num;
#ifdef G_OS_WIN32
const guint backoff_msecs = 1;
#else
const guint backoff_usecs = 1000;
#endif
-
- err_num = dbi_conn_error( conn, &msg );
+ int err_num = dbi_conn_error( conn, &msg );
+ /* BADIDX is raised if we attempt to seek outside of a result. We
+ * handle that possibility after checking the return value of the
+ * seek. Having this raise a critical error breaks looping by
+ * testing for the return value of the seek.
+ */
+ if (err_num == DBI_ERROR_BADIDX) return;
/* Note: the sql connection may not have been initialized yet
* so let's be careful with using it
@@ -1331,8 +1340,14 @@ pgsql_error_fn( dbi_conn conn, void* user_data )
#else
const guint backoff_usecs = 1000;
#endif
+ int err_num = dbi_conn_error( conn, &msg );
+ /* BADIDX is raised if we attempt to seek outside of a result. We
+ * handle that possibility after checking the return value of the
+ * seek. Having this raise a critical error breaks looping by
+ * testing for the return value of the seek.
+ */
+ if (err_num == DBI_ERROR_BADIDX) return;
- (void)dbi_conn_error( conn, &msg );
if ( g_str_has_prefix( msg, "FATAL: database" ) &&
g_str_has_suffix( msg, "does not exist\n" ) )
{
Summary of changes:
src/backend/dbi/gnc-backend-dbi.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
More information about the gnucash-changes
mailing list