r16945 - gnucash/branches/gda-dev2/src - Create index in slots table on the guid column. For sqlite, it will be

Phil Longstaff plongstaff at cvs.gnucash.org
Sun Feb 17 21:08:52 EST 2008


Author: plongstaff
Date: 2008-02-17 21:08:51 -0500 (Sun, 17 Feb 2008)
New Revision: 16945
Trac: http://svn.gnucash.org/trac/changeset/16945

Modified:
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h
   gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-owner-gda.c
Log:
Create index in slots table on the guid column.  For sqlite, it will be
created if it doesn't already exist, but for mysql and postgresql, there
will be an error message if it does already exist.  This will be fixed
later.



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-02-17 21:32:29 UTC (rev 16944)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-02-18 02:08:51 UTC (rev 16945)
@@ -235,18 +235,18 @@
 
 static void
 create_string_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+	                GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server,
                                                         cnn, G_TYPE_STRING );
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     dbms_type, table_row->size, table_row->flags );
 }
 
@@ -337,18 +337,18 @@
 
 static void
 create_int_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+            GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server,
                                                         cnn, G_TYPE_INT );
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     dbms_type, table_row->size, table_row->flags );
 }
 
@@ -439,18 +439,18 @@
 
 static void
 create_boolean_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+            		GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server,
                                                         cnn, G_TYPE_INT );
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     dbms_type, table_row->size, table_row->flags );
 }
 
@@ -540,18 +540,18 @@
 
 static void
 create_int64_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+            		GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server,
                                                         cnn, G_TYPE_INT64 );
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     dbms_type, table_row->size, table_row->flags );
 }
 
@@ -642,18 +642,18 @@
 
 static void
 create_double_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+            		GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server,
                                                         cnn, G_TYPE_INT64 );
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     dbms_type, table_row->size, table_row->flags );
 }
 
@@ -754,14 +754,14 @@
 
 static void
 create_guid_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+	            GdaServerOperation* op, const col_cvt_t* table_row )
 {
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     "char", GUID_ENCODING_LENGTH, table_row->flags );
 }
 
@@ -837,14 +837,14 @@
 
 void
 gnc_gda_create_objectref_guid_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+            					GdaServerOperation* op, const col_cvt_t* table_row )
 {
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     "char", GUID_ENCODING_LENGTH, table_row->flags );
 }
 
@@ -958,18 +958,18 @@
 
 static void
 create_timespec_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+		            GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server,
                                                         cnn, G_TYPE_DATE );
-    gnc_gda_add_table_column( server, cnn, array_data, table_row->col_name,
+    gnc_gda_add_table_column( op, table_row->col_name,
                     dbms_type, table_row->size, table_row->flags );
 }
 
@@ -1253,24 +1253,24 @@
 
 static void
 create_numeric_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+            	GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
     gchar* buf;
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server, cnn,
                                                             G_TYPE_INT64 );
     buf = g_strdup_printf( "%s_num", table_row->col_name );
-    gnc_gda_add_table_column( server, cnn, array_data, buf, dbms_type,
+    gnc_gda_add_table_column( op, buf, dbms_type,
                         table_row->size, table_row->flags );
     g_free( buf );
     buf = g_strdup_printf( "%s_denom", table_row->col_name );
-    gnc_gda_add_table_column( server, cnn, array_data, buf, dbms_type,
+    gnc_gda_add_table_column( op, buf, dbms_type,
                         table_row->size, table_row->flags );
     g_free( buf );
 }
@@ -1758,72 +1758,77 @@
 
 /* ================================================================= */
 void
-gnc_gda_add_table_column( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const gchar* arg, const gchar* dbms_type,
+gnc_gda_add_table_column( GdaServerOperation* op, const gchar* arg, const gchar* dbms_type,
             gint size, gint flags )
 {
-    xmlNodePtr array_row, array_value;
     gchar* buf;
+	GdaServerOperationNode* node;
+	GdaDataModel* model;
+	gint col_num;
+	GError* error = NULL;
+	gboolean ok;
 
-	g_return_if_fail( server != NULL );
-	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( arg != NULL );
 	g_return_if_fail( dbms_type != NULL );
 
-    array_row = xmlNewChild( array_data, NULL, "gda_array_row", NULL );
-    array_value = xmlNewChild( array_row, NULL, "gda_array_value", arg );
-    xmlSetProp( array_value, "colid", "COLUMN_NAME" );
-    array_value = xmlNewChild( array_row, NULL, "gda_array_value", dbms_type );
-    xmlSetProp( array_value, "colid", "COLUMN_TYPE" );
+	node = gda_server_operation_get_node_info( op, "/FIELDS_A" );
+	model = node->model;
+	col_num = gda_data_model_get_n_rows( model );
+
+	ok = gda_server_operation_set_value_at( op, arg, &error, "/FIELDS_A/@COLUMN_NAME/%d", col_num );
+	if( !ok ) return;
+	ok = gda_server_operation_set_value_at( op, dbms_type, &error, "/FIELDS_A/@COLUMN_TYPE/%d", col_num );
+	if( !ok ) return;
     if( size != 0 ) {
         buf = g_strdup_printf( "%d", size );
-        array_value = xmlNewChild( array_row, NULL, "gda_array_value", buf );
-        xmlSetProp( array_value, "colid", "COLUMN_SIZE" );
+		ok = gda_server_operation_set_value_at( op, buf, &error, "/FIELDS_A/@COLUMN_SIZE/%d", col_num );
         g_free( buf );
+		if( !ok ) return;
     }
     if( (flags & COL_PKEY) != 0 ) {
-        array_value = xmlNewChild( array_row, NULL, "gda_array_value", "TRUE" );
-        xmlSetProp( array_value, "colid", "COLUMN_PKEY" );
+		ok = gda_server_operation_set_value_at( op, "TRUE", &error, "/FIELDS_A/@COLUMN_PKEY/%d", col_num );
+		if( !ok ) return;
     }
     if( (flags & COL_NNUL) != 0 ) {
-        array_value = xmlNewChild( array_row, NULL, "gda_array_value", "TRUE" );
-        xmlSetProp( array_value, "colid", "COLUMN_NNUL" );
+		ok = gda_server_operation_set_value_at( op, "TRUE", &error, "/FIELDS_A/@COLUMN_NNUL/%d", col_num );
+		if( !ok ) return;
     }
     if( (flags & COL_AUTOINC) != 0 ) {
-        array_value = xmlNewChild( array_row, NULL, "gda_array_value", "TRUE" );
-        xmlSetProp( array_value, "colid", "COLUMN_AUTOINC" );
+		ok = gda_server_operation_set_value_at( op, "TRUE", &error, "/FIELDS_A/@COLUMN_AUTOINC/%d", col_num );
+		if( !ok ) return;
     }
     if( (flags & COL_UNIQUE) != 0 ) {
-        array_value = xmlNewChild( array_row, NULL, "gda_array_value", "TRUE" );
-        xmlSetProp( array_value, "colid", "COLUMN_UNIQUE" );
+		ok = gda_server_operation_set_value_at( op, "TRUE", &error, "/FIELDS_A/@COLUMN_UNIQUE/%d", col_num );
+		if( !ok ) return;
     }
 }
 
 gboolean
-gnc_gda_create_table( GdaConnection* cnn, const gchar* table_name,
+gnc_gda_create_table( const GncGdaBackend* be, const gchar* table_name,
                     const col_cvt_t* col_table, GError** error )
 {
     GdaServerOperation *op;
     GdaServerProvider *server;
+	GdaConnection* cnn;
     
-	g_return_val_if_fail( cnn != NULL, FALSE );
-    g_return_val_if_fail( GDA_IS_CONNECTION(cnn), FALSE );
-    g_return_val_if_fail( gda_connection_is_opened(cnn), FALSE );
+	g_return_val_if_fail( be != NULL, FALSE );
 	g_return_val_if_fail( table_name != NULL, FALSE );
 	g_return_val_if_fail( col_table != NULL, FALSE );
 	g_return_val_if_fail( error != NULL, FALSE );
     
+	cnn = be->pConnection;
+	g_return_val_if_fail( cnn != NULL, FALSE );
+    g_return_val_if_fail( GDA_IS_CONNECTION(cnn), FALSE );
+    g_return_val_if_fail( gda_connection_is_opened(cnn), FALSE );
+
     server = gda_connection_get_provider_obj( cnn );
     
     op = gda_server_provider_create_operation( server, cnn, 
                            GDA_SERVER_OPERATION_CREATE_TABLE, NULL, error );
     if( GDA_IS_SERVER_OPERATION(op) ) {
         gint col;
-        GType type;
-        xmlDocPtr parameters;
-        xmlNodePtr root;
-        xmlNodePtr table, op_data, array_data;
+		gboolean ok;
         
         if( table_name == NULL ) {
             g_message( "Table name is NULL!" );      
@@ -1833,49 +1838,26 @@
             return FALSE;    
         }
         
-    
-        /* Initation of the xmlDoc */
-        parameters = xmlNewDoc( "1.0" );
-        
-        root = xmlNewDocNode( parameters, NULL, "serv_op_data", NULL );
-        xmlDocSetRootElement( parameters, root );
-        table = xmlNewChild( root, NULL, "op_data", table_name );
-        xmlSetProp( table, "path", "/TABLE_DEF_P/TABLE_NAME" );
+		ok = gda_server_operation_set_value_at( op, table_name, error, "/TABLE_DEF_P/TABLE_NAME" );
+		if( !ok ) return FALSE;
 
-        op_data = xmlNewChild( root, NULL, "op_data", NULL );
-        xmlSetProp( op_data, "path", "/FIELDS_A" );
-        array_data = xmlNewChild( op_data, NULL, "gda_array_data", NULL );
-
-        type = 0;
-        
         for( col = 0; col_table[col].col_name != NULL; col++ ) {
             col_type_handler_t* pHandler;
 
             pHandler = get_handler( col_table[col].col_type );
-            pHandler->create_col_fn( server, cnn, array_data, &col_table[col] );
+            pHandler->create_col_fn( server, cnn, op, &col_table[col] );
         }
         
-        if( !gda_server_operation_load_data_from_xml(op, root, error ) ) {
+        if( !gda_server_provider_perform_operation( server, cnn, op, error ) ) {
             /* error */
-            g_set_error( error, GDA_GENERAL_ERROR, GDA_GENERAL_OPERATION_ERROR, 
-                     "The XML operation doesn't exist or could't be loaded" );
+            g_set_error( error,
+                    GDA_GENERAL_ERROR, GDA_GENERAL_OPERATION_ERROR, 
+                    "The Server couldn't perform the CREATE TABLE operation!" );
             g_object_unref( op );
-            xmlFreeDoc( parameters );
             return FALSE;
-        } else {
-            if( !gda_server_provider_perform_operation( server, cnn, op, error ) ) {
-                /* error */
-                g_set_error( error,
-                    GDA_GENERAL_ERROR, GDA_GENERAL_OPERATION_ERROR, 
-                    "The Server couldn't perform the CREATE TABLE operation!" );
-                g_object_unref( op );
-                xmlFreeDoc( parameters );
-                return FALSE;
-            }
         }
 
         g_object_unref( op );
-        xmlFreeDoc( parameters );
     } else {
         g_set_error( error, GDA_GENERAL_ERROR, GDA_GENERAL_OBJECT_NAME_ERROR, 
                 "The Server doesn't support the CREATE TABLE operation!" );
@@ -1884,6 +1866,90 @@
     return TRUE;
 }
 
+gboolean
+gnc_gda_create_index( const GncGdaBackend* be, const gchar* index_name,
+					const gchar* table_name,
+                    const col_cvt_t* col_table, GError** error )
+{
+    GdaServerOperation *op;
+    GdaServerProvider *server;
+	GdaConnection* cnn;
+    
+    g_return_val_if_fail( be != NULL, FALSE );
+	g_return_val_if_fail( index_name != NULL, FALSE );
+	g_return_val_if_fail( table_name != NULL, FALSE );
+	g_return_val_if_fail( col_table != NULL, FALSE );
+	g_return_val_if_fail( error != NULL, FALSE );
+    
+	cnn = be->pConnection;
+	g_return_val_if_fail( cnn != NULL, FALSE );
+    g_return_val_if_fail( GDA_IS_CONNECTION(cnn), FALSE );
+    g_return_val_if_fail( gda_connection_is_opened(cnn), FALSE );
+
+    server = gda_connection_get_provider_obj( cnn );
+	g_return_val_if_fail( server != NULL, FALSE );
+    
+    op = gda_server_provider_create_operation( server, cnn, 
+                           GDA_SERVER_OPERATION_CREATE_INDEX, NULL, error );
+    if( GDA_IS_SERVER_OPERATION(op) ) {
+        gint col;
+		gboolean ok;
+        
+		if( index_name == NULL ) {
+            g_message( "Index name is NULL!" );      
+            g_set_error( error,
+                    GDA_GENERAL_ERROR, GDA_GENERAL_OBJECT_NAME_ERROR, 
+                    "Couldn't create index with a NULL string" );
+            return FALSE;    
+		}
+        if( table_name == NULL ) {
+            g_message( "Table name is NULL!" );      
+            g_set_error( error,
+                    GDA_GENERAL_ERROR, GDA_GENERAL_OBJECT_NAME_ERROR, 
+                    "Couldn't create index with a NULL string" );
+            return FALSE;    
+        }
+        
+    
+		ok = gda_server_operation_set_value_at( op, index_name, error, "/INDEX_DEF_P/INDEX_NAME" );
+		if( !ok ) return FALSE;
+		ok = gda_server_operation_set_value_at( op, "", error, "/INDEX_DEF_P/INDEX_TYPE" );
+		if( !ok ) return FALSE;
+		ok = gda_server_operation_set_value_at( op, "TRUE", error, "/INDEX_DEF_P/INDEX_IFNOTEXISTS" );
+		if( !ok ) return FALSE;
+		ok = gda_server_operation_set_value_at( op, table_name, error, "/INDEX_DEF_P/INDEX_ON_TABLE" );
+		if( !ok ) return FALSE;
+
+        for( col = 0; col_table[col].col_name != NULL; col++ ) {
+			guint item;
+
+			if( col != 0 ) {
+				item = gda_server_operation_add_item_to_sequence( op, "/INDEX_FIELDS_S" );
+				g_assert( item == col );
+			}
+			ok = gda_server_operation_set_value_at( op, col_table->col_name, error,
+													"/INDEX_FIELDS_S/%d/INDEX_FIELD", col );
+			if( !ok ) break;
+        }
+        
+        if( !gda_server_provider_perform_operation( server, cnn, op, error ) ) {
+            /* error */
+            g_set_error( error,
+                    	GDA_GENERAL_ERROR, GDA_GENERAL_OPERATION_ERROR, 
+                    	"The Server couldn't perform the CREATE INDEX operation!" );
+            g_object_unref( op );
+            return FALSE;
+        }
+
+        g_object_unref( op );
+    } else {
+        g_set_error( error, GDA_GENERAL_ERROR, GDA_GENERAL_OBJECT_NAME_ERROR, 
+                "The Server doesn't support the CREATE INDEX operation!" );
+        return FALSE;
+    }
+    return TRUE;
+}
+
 void gnc_gda_create_table_if_needed( const GncGdaBackend* be,
 			                        const gchar* table_name,
 									const col_cvt_t* col_table )
@@ -1899,7 +1965,7 @@
     db = gda_dict_get_database( be->pDict );
     table = gda_dict_database_get_table_by_name( db, table_name );
     if( !GDA_IS_DICT_TABLE(table) ) {
-        gnc_gda_create_table( be->pConnection, table_name, col_table, &error );
+        gnc_gda_create_table( be, table_name, col_table, &error );
         if( error != NULL ) {
             PERR( "Error creating table: %s\n", error->message );
         }
@@ -1953,44 +2019,27 @@
     op = gda_server_provider_create_operation( server, cnn, opType, NULL,
                                             error );
     if( GDA_IS_SERVER_OPERATION(op) ) {
-        xmlDocPtr parameters;
-        xmlNodePtr root;
-        xmlNodePtr db;
-    
-        /* Initation of the xmlDoc */
-        parameters = xmlNewDoc( "1.0" );
-        
-        root = xmlNewDocNode( parameters, NULL, "serv_op_data", NULL );
-        xmlDocSetRootElement( parameters, root );
-        db = xmlNewChild( root, NULL, "op_data", db_name );
+		gboolean ok;
+		GError* error = NULL;
+
         buf = g_strdup_printf( "/%s/DB_NAME", op_info->op_path_name );
-        xmlSetProp( db, "path", buf );
+		ok = gda_server_operation_set_value_at( op, db_name, &error, buf );
         g_free( buf );
+		if( !ok ) return FALSE;
 
-        if( !gda_server_operation_load_data_from_xml(op, root, error ) ) {
+        if( !gda_server_provider_perform_operation( server, cnn, op, error ) ) {
             /* error */
-            g_set_error( error, GDA_GENERAL_ERROR, GDA_GENERAL_OPERATION_ERROR, 
-                     "The XML operation doesn't exist or could't be loaded" );
-            g_object_unref( op );
-            xmlFreeDoc( parameters );
-            return FALSE;
-        } else {
-            if( !gda_server_provider_perform_operation( server, cnn, op, error ) ) {
-                /* error */
-                buf = g_strdup_printf( "The server couldn't perform the %s operation",
+            buf = g_strdup_printf( "The server couldn't perform the %s operation",
                                         op_info->op_name );
-                g_set_error( error,
+            g_set_error( error,
                     GDA_GENERAL_ERROR, GDA_GENERAL_OPERATION_ERROR, 
                     buf );
-                g_free( buf );
-                g_object_unref( op );
-                xmlFreeDoc( parameters );
-                return FALSE;
-            }
+            g_free( buf );
+            g_object_unref( op );
+            return FALSE;
         }
 
         g_object_unref( op );
-        xmlFreeDoc( parameters );
     } else {
         buf = g_strdup_printf( "The server doesn't support the %s operation",
                                 op_info->op_name );

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h	2008-02-17 21:32:29 UTC (rev 16944)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h	2008-02-18 02:08:51 UTC (rev 16945)
@@ -121,7 +121,7 @@
                                 QofSetterFunc setter, gpointer pObject,
                                 const col_cvt_t* table );
 typedef void (*GNC_GDA_CREATE_COL_FN)( GdaServerProvider* server,
-				                        GdaConnection* cnn, xmlNodePtr array_data,
+				                        GdaConnection* cnn, GdaServerOperation* op,
                         				const col_cvt_t* table_row );
 typedef void (*GNC_GDA_GET_GVALUE_QUERY_FN)( const GncGdaBackend* be,
                 QofIdTypeConst obj_name, const gpointer pObject,
@@ -138,8 +138,7 @@
 } col_type_handler_t;
 
 QofAccessFunc gnc_gda_get_getter( QofIdTypeConst obj_name, const col_cvt_t* table_row );
-void gnc_gda_add_table_column( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const gchar* arg, const gchar* dbms_type,
+void gnc_gda_add_table_column( GdaServerOperation* op, const gchar* arg, const gchar* dbms_type,
             gint size, gint flags );
 
 gboolean gnc_gda_do_db_operation( GncGdaBackend* pBackend,
@@ -175,9 +174,12 @@
 									const gchar* table_name,
 									QofIdTypeConst obj_name, const gpointer pObject,
 									const col_cvt_t* table );
-gboolean gnc_gda_create_table( GdaConnection* pConnection,
+gboolean gnc_gda_create_table( const GncGdaBackend* be,
 						const gchar* table_name, const col_cvt_t* col_table,
 						GError** error );
+gboolean gnc_gda_create_index( const GncGdaBackend* be, const gchar* index_name,
+						const gchar* table_name, const col_cvt_t* col_table,
+						GError** error );
 void gnc_gda_create_table_if_needed( const GncGdaBackend* be,
 						const gchar* table_name, const col_cvt_t* col_table );
 const GUID* gnc_gda_load_guid( const GncGdaBackend* be, GdaDataModel* pModel, int row );
@@ -195,7 +197,7 @@
 GdaQueryCondition* gnc_gda_get_gvalue_objectref_guid_cond( const GncGdaBackend* be, QofIdTypeConst obj_name,
                 const gpointer pObject, const col_cvt_t* table_row, GdaQuery* query );
 void gnc_gda_create_objectref_guid_col( GdaServerProvider* server, GdaConnection* cnn,
-	            xmlNodePtr array_data, const col_cvt_t* table_row );
+	            GdaServerOperation* op, const col_cvt_t* table_row );
 void gnc_gda_append_guid_list_to_sql( GString* str, GList* list );
 
 void _retrieve_guid_( gpointer pObject, gpointer pValue );

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c	2008-02-17 21:32:29 UTC (rev 16944)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c	2008-02-18 02:08:51 UTC (rev 16945)
@@ -569,9 +569,16 @@
 static void
 create_slots_tables( GncGdaBackend* be )
 {
+	GError* error = NULL;
+	gboolean ok;
+
 	g_return_if_fail( be != NULL );
 
     gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
+	ok = gnc_gda_create_index( be, "slots_guid_index", TABLE_NAME, obj_guid_col_table, &error );
+	if( !ok ) {
+		g_critical( "GDA: unable to create index: %s\n", error->message );
+	}
 }
 
 /* ================================================================= */

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-gda.c	2008-02-17 21:32:29 UTC (rev 16944)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-gda.c	2008-02-18 02:08:51 UTC (rev 16945)
@@ -222,7 +222,7 @@
 
 static void
 create_address_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+        	    GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
     gchar* buf;
@@ -230,14 +230,14 @@
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server, cnn,
                                                             G_TYPE_STRING );
 	for( subtable_row = col_table; subtable_row->col_name != NULL; subtable_row++ ) {
     	buf = g_strdup_printf( "%s_%s", table_row->col_name, subtable_row->col_name );
-    	gnc_gda_add_table_column( server, cnn, array_data, buf, dbms_type, subtable_row->size, subtable_row->flags );
+    	gnc_gda_add_table_column( op, buf, dbms_type, subtable_row->size, subtable_row->flags );
     	g_free( buf );
     }
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-owner-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-owner-gda.c	2008-02-17 21:32:29 UTC (rev 16944)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-owner-gda.c	2008-02-18 02:08:51 UTC (rev 16945)
@@ -294,7 +294,7 @@
 
 static void
 create_owner_col( GdaServerProvider* server, GdaConnection* cnn,
-            xmlNodePtr array_data, const col_cvt_t* table_row )
+    	        GdaServerOperation* op, const col_cvt_t* table_row )
 {
     const gchar* dbms_type;
     gchar* buf;
@@ -302,17 +302,17 @@
 
 	g_return_if_fail( server != NULL );
 	g_return_if_fail( cnn != NULL );
-	g_return_if_fail( array_data != NULL );
+	g_return_if_fail( op != NULL );
 	g_return_if_fail( table_row != NULL );
 
     dbms_type = gda_server_provider_get_default_dbms_type( server, cnn, G_TYPE_INT );
     buf = g_strdup_printf( "%s_type", table_row->col_name );
-   	gnc_gda_add_table_column( server, cnn, array_data, buf, dbms_type, table_row->size, table_row->flags );
+   	gnc_gda_add_table_column( op, buf, dbms_type, table_row->size, table_row->flags );
    	g_free( buf );
     dbms_type = gda_server_provider_get_default_dbms_type( server, cnn,
                                                             G_TYPE_STRING );
     buf = g_strdup_printf( "%s_guid", table_row->col_name );
-   	gnc_gda_add_table_column( server, cnn, array_data, buf, dbms_type, GUID_ENCODING_LENGTH, table_row->flags );
+   	gnc_gda_add_table_column( op, buf, dbms_type, GUID_ENCODING_LENGTH, table_row->flags );
    	g_free( buf );
 }
 



More information about the gnucash-changes mailing list