r17183 - gnucash/branches/gda-dev2/src/backend/gda - Work around libgda bug where after all tables in the db are deleted and

Phil Longstaff plongstaff at cvs.gnucash.org
Sat May 31 19:53:51 EDT 2008


Author: plongstaff
Date: 2008-05-31 19:53:51 -0400 (Sat, 31 May 2008)
New Revision: 17183
Trac: http://svn.gnucash.org/trac/changeset/17183

Modified:
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c
Log:
Work around libgda bug where after all tables in the db are deleted and
the meta-data is updated, libgda still thinks there is 1 table.  The gda
backend already has an is_pristine_db flag which is used when saving to a
new database to prevent checking if a record already exists before deciding
on an INSERT or UPDATE.  This check is now taken into account when
deciding whether to create a table or if it already exists.



Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2008-05-30 16:23:03 UTC (rev 17182)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2008-05-31 23:53:51 UTC (rev 17183)
@@ -628,6 +628,7 @@
     }
 
     /* Create new tables */
+	be->is_pristine_db = TRUE;
     qof_object_foreach_backend( GNC_GDA_BACKEND, create_tables_cb, be );
 
     // Update the dictionary because new tables may exist
@@ -638,7 +639,6 @@
 
     /* Save all contents */
 	be->primary_book = book;
-	be->is_pristine_db = TRUE;
 	be->obj_total = 0;
     be->obj_total += 1 + gnc_account_n_descendants( gnc_book_get_root_account( book ) );
 	be->obj_total += gnc_book_count_transactions( book );

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-05-30 16:23:03 UTC (rev 17182)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-05-31 23:53:51 UTC (rev 17183)
@@ -1972,6 +1972,15 @@
 	g_return_val_if_fail( be != NULL, FALSE );
 	g_return_val_if_fail( table_name != NULL, FALSE );
 
+	/* If the db is pristine because it's being saved, the table does not
+	 * exist.  This gets around a GDA-3 bug where deleting all tables and
+	 * updating the meta-data leaves the meta-data still thinking 1 table
+	 * exists.
+	 */
+	if( be->is_pristine_db ) {
+		return FALSE;
+	}
+
     db = gda_dict_get_database( be->pDict );
 	g_return_val_if_fail( db != NULL, FALSE );
 



More information about the gnucash-changes mailing list