r17185 - gnucash/branches/gda-dev2/src/backend/gda - Add support for backend save_may_clobber_data() function so that if the

Phil Longstaff plongstaff at cvs.gnucash.org
Sun Jun 1 11:54:39 EDT 2008


Author: plongstaff
Date: 2008-06-01 11:54:39 -0400 (Sun, 01 Jun 2008)
New Revision: 17185
Trac: http://svn.gnucash.org/trac/changeset/17185

Modified:
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
Log:
Add support for backend save_may_clobber_data() function so that if the
user tries to save to a db which already has tables, a prompt will
appear for whether to overwrite it or not.



Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2008-06-01 14:59:27 UTC (rev 17184)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2008-06-01 15:54:39 UTC (rev 17185)
@@ -311,18 +311,6 @@
         PERR( "gda_dict_update_dbms_meta_data() error: %s\n", error->message );
     }
 
-	// Set up table version information
-	_init_version_info( be );
-
-    // Call all object backends to create any required tables
-    qof_object_foreach_backend( GNC_GDA_BACKEND, create_tables_cb, be );
-
-    // Update the dictionary because new tables may exist
-    gda_dict_update_dbms_meta_data( be->pDict, 0, NULL, &error );
-    if( error != NULL ) {
-        PERR( "gda_dict_update_dbms_meta_data() error: %s\n", error->message );
-    }
-
     LEAVE (" ");
 }
 
@@ -394,6 +382,7 @@
     GncGdaDataType_t* pData;
 	int i;
 	Account* root;
+	GError* error = NULL;
 
 	g_return_if_fail( be_start != NULL );
 	g_return_if_fail( book != NULL );
@@ -403,6 +392,18 @@
     g_assert( be->primary_book == NULL );
     be->primary_book = book;
 
+	// Set up table version information
+	_init_version_info( be );
+
+    // Call all object backends to create any required tables
+    qof_object_foreach_backend( GNC_GDA_BACKEND, create_tables_cb, be );
+
+    // Update the dictionary because new tables may exist
+    gda_dict_update_dbms_meta_data( be->pDict, 0, NULL, &error );
+    if( error != NULL ) {
+        PERR( "gda_dict_update_dbms_meta_data() error: %s\n", error->message );
+    }
+
     /* Load any initial stuff */
     be->loading = TRUE;
     
@@ -586,6 +587,27 @@
 	}
 }
 
+static gboolean
+gnc_gda_save_may_clobber_data( QofBackend* qbe )
+{
+    GncGdaBackend* be = (GncGdaBackend*)qbe;
+    GdaDataModel* tables;
+    GError* error = NULL;
+	gint numTables;
+
+	/* Data may be clobbered iff the number of tables != 0 */
+    tables = gda_connection_get_schema( be->pConnection,
+                                        GDA_CONNECTION_SCHEMA_TABLES,
+                                        NULL,
+                                        &error );
+    if( error != NULL ) {
+        PERR( "SQL error: %s\n", error->message );
+    }
+    numTables = gda_data_model_get_n_rows( tables );
+
+	return (numTables != 0);
+}
+
 static void
 gnc_gda_sync_all( QofBackend* fbe, QofBook *book )
 {
@@ -1147,7 +1169,7 @@
     be->destroy_backend = gnc_gda_destroy_backend;
 
     be->load = gnc_gda_load;
-    be->save_may_clobber_data = NULL;
+    be->save_may_clobber_data = gnc_gda_save_may_clobber_data;
 
     /* The gda backend treats accounting periods transactionally. */
     be->begin = gnc_gda_begin_edit;



More information about the gnucash-changes mailing list