r17453 - gnucash/trunk/src/backend/sql - Don't rely on g_value_transform(). Added cases for G_TYPE_INT, G_TYPE_INT64

Phil Longstaff plongstaff at cvs.gnucash.org
Sun Aug 3 14:10:28 EDT 2008


Author: plongstaff
Date: 2008-08-03 14:10:27 -0400 (Sun, 03 Aug 2008)
New Revision: 17453
Trac: http://svn.gnucash.org/trac/changeset/17453

Modified:
   gnucash/trunk/src/backend/sql/gnc-backend-sql.c
Log:
Don't rely on g_value_transform().  Added cases for G_TYPE_INT, G_TYPE_INT64
and G_TYPE_DOUBLE.  If new GValue types are used in the future and
g_value_transform() *is* called, a warning message will be logged with the
type name.



Modified: gnucash/trunk/src/backend/sql/gnc-backend-sql.c
===================================================================
--- gnucash/trunk/src/backend/sql/gnc-backend-sql.c	2008-08-03 00:18:23 UTC (rev 17452)
+++ gnucash/trunk/src/backend/sql/gnc-backend-sql.c	2008-08-03 18:10:27 UTC (rev 17453)
@@ -2126,6 +2126,8 @@
 gnc_sql_get_sql_value( const GncSqlConnection* conn, const GValue* value )
 {
 	if( value != NULL && G_IS_VALUE( value ) ) {
+		GType type = G_VALUE_TYPE(value);
+
 		if( G_VALUE_HOLDS_STRING(value) ) {
 			if( g_value_get_string( value ) != NULL ) {
 				gchar* before_str;
@@ -2137,7 +2139,16 @@
 			} else {
 				return g_strdup( "NULL" );
 			}
-		} else if( g_value_type_transformable( G_VALUE_TYPE(value), G_TYPE_STRING ) ) {
+		} else if( type == G_TYPE_INT64 ) {
+			return g_strdup_printf( "%lld", g_value_get_int64( value ) );
+
+		} else if( type == G_TYPE_INT ) {
+			return g_strdup_printf( "%d", g_value_get_int( value ) );
+
+		} else if( type == G_TYPE_DOUBLE ) {
+			return g_strdup_printf( "%g", g_value_get_double( value ) );
+
+		} else if( g_value_type_transformable( type, G_TYPE_STRING ) ) {
 			GValue* string;
 			gchar* str;
 			
@@ -2146,9 +2157,10 @@
 			str = g_value_dup_string( string );
 			g_value_unset( string );
 			g_free( string );
+			PWARN( "using g_value_transform(), gtype = '%s'\n", g_type_name( type ) );
 			return str;
 		} else {
-			PWARN( "not transformable, gtype = '%s'\n", g_type_name( G_VALUE_TYPE(value) ) );
+			PWARN( "not transformable, gtype = '%s'\n", g_type_name( type ) );
 			return "$$$";
 		}
 	} else {



More information about the gnucash-changes mailing list