diff --git a/src/backend/sql/gnc-account-sql.c b/src/backend/sql/gnc-account-sql.c index c64890ef5d..8eed6c201c 100644 --- a/src/backend/sql/gnc-account-sql.c +++ b/src/backend/sql/gnc-account-sql.c @@ -358,7 +358,6 @@ load_account_guid( const GncSqlBackend* be, GncSqlRow* row, { const GValue* val; GUID guid; - const GUID* pGuid; Account* account = NULL; g_return_if_fail( be != NULL ); @@ -367,22 +366,19 @@ load_account_guid( const GncSqlBackend* be, GncSqlRow* row, g_return_if_fail( table_row != NULL ); val = gnc_sql_row_get_value_at_col_name( row, table_row->col_name ); - if( val == NULL ) { - pGuid = NULL; - } else { + if( val != NULL && G_VALUE_HOLDS_STRING( val ) && g_value_get_string( val ) != NULL ) { (void)string_to_guid( g_value_get_string( val ), &guid ); - pGuid = &guid; - } - if( pGuid != NULL ) { - account = xaccAccountLookup( pGuid, be->primary_book ); - } - if( account != NULL ) { - if( table_row->gobj_param_name != NULL ) { - g_object_set( pObject, table_row->gobj_param_name, account, NULL ); - } else { - g_return_if_fail( setter != NULL ); - (*setter)( pObject, (const gpointer)account ); - } + account = xaccAccountLookup( &guid, be->primary_book ); + if( account != NULL ) { + if( table_row->gobj_param_name != NULL ) { + g_object_set( pObject, table_row->gobj_param_name, account, NULL ); + } else { + g_return_if_fail( setter != NULL ); + (*setter)( pObject, (const gpointer)account ); + } + } else { + PWARN( "Account ref '%s' not found", g_value_get_string( val ) ); + } } } diff --git a/src/backend/sql/gnc-budget-sql.c b/src/backend/sql/gnc-budget-sql.c index 0f4a060723..2783492e5f 100644 --- a/src/backend/sql/gnc-budget-sql.c +++ b/src/backend/sql/gnc-budget-sql.c @@ -446,7 +446,6 @@ load_budget_guid( const GncSqlBackend* be, GncSqlRow* row, { const GValue* val; GUID guid; - const GUID* pGuid; GncBudget* budget = NULL; g_return_if_fail( be != NULL ); @@ -455,22 +454,19 @@ load_budget_guid( const GncSqlBackend* be, GncSqlRow* row, g_return_if_fail( table_row != NULL ); val = gnc_sql_row_get_value_at_col_name( row, table_row->col_name ); - if( val == NULL ) { - pGuid = NULL; - } else { + if( val != NULL && G_VALUE_HOLDS_STRING( val ) && g_value_get_string( val ) != NULL ) { (void)string_to_guid( g_value_get_string( val ), &guid ); - pGuid = &guid; - } - if( pGuid != NULL ) { - budget = gnc_budget_lookup( pGuid, be->primary_book ); - } - if( budget != NULL ) { - if( table_row->gobj_param_name != NULL ) { - g_object_set( pObject, table_row->gobj_param_name, budget, NULL ); - } else { - g_return_if_fail( setter != NULL ); - (*setter)( pObject, (const gpointer)budget ); - } + budget = gnc_budget_lookup( &guid, be->primary_book ); + if( budget != NULL ) { + if( table_row->gobj_param_name != NULL ) { + g_object_set( pObject, table_row->gobj_param_name, budget, NULL ); + } else { + g_return_if_fail( setter != NULL ); + (*setter)( pObject, (const gpointer)budget ); + } + } else { + PWARN( "Budget ref '%s' not found", g_value_get_string( val ) ); + } } } diff --git a/src/backend/sql/gnc-commodity-sql.c b/src/backend/sql/gnc-commodity-sql.c index e42ec03367..3bb7cbcdae 100644 --- a/src/backend/sql/gnc-commodity-sql.c +++ b/src/backend/sql/gnc-commodity-sql.c @@ -256,16 +256,19 @@ load_commodity_guid( const GncSqlBackend* be, GncSqlRow* row, g_return_if_fail( table_row != NULL ); val = gnc_sql_row_get_value_at_col_name( row, table_row->col_name ); - g_assert( val != NULL ); - (void)string_to_guid( g_value_get_string( val ), &guid ); - commodity = gnc_commodity_find_commodity_by_guid( &guid, be->primary_book ); - if( commodity != NULL ) { - if( table_row->gobj_param_name != NULL ) { - g_object_set( pObject, table_row->gobj_param_name, commodity, NULL ); - } else if( setter != NULL ) { - (*setter)( pObject, (const gpointer)commodity ); + if( val != NULL && G_VALUE_HOLDS_STRING( val ) && g_value_get_string( val ) != NULL ) { + (void)string_to_guid( g_value_get_string( val ), &guid ); + commodity = gnc_commodity_find_commodity_by_guid( &guid, be->primary_book ); + if( commodity != NULL ) { + if( table_row->gobj_param_name != NULL ) { + g_object_set( pObject, table_row->gobj_param_name, commodity, NULL ); + } else if( setter != NULL ) { + (*setter)( pObject, (const gpointer)commodity ); + } + } else { + PWARN( "Commodity ref '%s' not found", g_value_get_string( val ) ); } - } + } } static GncSqlColumnTypeHandler commodity_guid_handler diff --git a/src/backend/sql/gnc-lots-sql.c b/src/backend/sql/gnc-lots-sql.c index 5df4fbf2a0..02b552be38 100644 --- a/src/backend/sql/gnc-lots-sql.c +++ b/src/backend/sql/gnc-lots-sql.c @@ -233,17 +233,20 @@ load_lot_guid( const GncSqlBackend* be, GncSqlRow* row, g_return_if_fail( table_row != NULL ); val = gnc_sql_row_get_value_at_col_name( row, table_row->col_name ); - - g_return_if_fail( val != NULL ); - - (void)string_to_guid( g_value_get_string( val ), &guid ); - lot = gnc_lot_lookup( &guid, be->primary_book ); - if( table_row->gobj_param_name != NULL ) { - g_object_set( pObject, table_row->gobj_param_name, lot, NULL ); - } else { - g_return_if_fail( setter != NULL ); - (*setter)( pObject, (const gpointer)lot ); - } + if( val != NULL && G_VALUE_HOLDS_STRING( val ) && g_value_get_string( val ) != NULL ) { + (void)string_to_guid( g_value_get_string( val ), &guid ); + lot = gnc_lot_lookup( &guid, be->primary_book ); + if( lot != NULL ) { + if( table_row->gobj_param_name != NULL ) { + g_object_set( pObject, table_row->gobj_param_name, lot, NULL ); + } else { + g_return_if_fail( setter != NULL ); + (*setter)( pObject, (const gpointer)lot ); + } + } else { + PWARN( "Lot ref '%s' not found", g_value_get_string( val ) ); + } + } } static GncSqlColumnTypeHandler lot_guid_handler diff --git a/src/backend/sql/gnc-transaction-sql.c b/src/backend/sql/gnc-transaction-sql.c index 2c45bdd791..96ceaa7f9e 100644 --- a/src/backend/sql/gnc-transaction-sql.c +++ b/src/backend/sql/gnc-transaction-sql.c @@ -1266,11 +1266,27 @@ load_tx_guid( const GncSqlBackend* be, GncSqlRow* row, g_assert( val != NULL ); (void)string_to_guid( g_value_get_string( val ), &guid ); tx = xaccTransLookup( &guid, be->primary_book ); - if( table_row->gobj_param_name != NULL ) { - g_object_set( pObject, table_row->gobj_param_name, tx, NULL ); - } else { - g_return_if_fail( setter != NULL ); - (*setter)( pObject, (const gpointer)tx ); + + // If the transaction is not found, try loading it + if( tx == NULL ) { + gchar* buf; + GncSqlStatement* stmt; + + buf = g_strdup_printf( "SELECT * FROM %s WHERE guid='%s'", + TRANSACTION_TABLE, g_value_get_string( val ) ); + stmt = gnc_sql_create_statement_from_sql( (GncSqlBackend*)be, buf ); + g_free( buf ); + query_transactions( (GncSqlBackend*)be, stmt ); + tx = xaccTransLookup( &guid, be->primary_book ); + } + + if( tx != NULL ) { + if( table_row->gobj_param_name != NULL ) { + g_object_set( pObject, table_row->gobj_param_name, tx, NULL ); + } else { + g_return_if_fail( setter != NULL ); + (*setter)( pObject, (const gpointer)tx ); + } } }