From 0d548da223cdb57d50b06ff88546551e27f8c9e3 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Mon, 9 May 2016 11:39:26 -0700 Subject: [PATCH] Create a new set_parameter template function to reduce repetition. --- src/backend/sql/gnc-account-sql.cpp | 18 +-- src/backend/sql/gnc-address-sql.cpp | 39 ++---- src/backend/sql/gnc-backend-sql.cpp | 166 ++++-------------------- src/backend/sql/gnc-backend-sql.h | 64 +++++++++ src/backend/sql/gnc-bill-term-sql.cpp | 17 +-- src/backend/sql/gnc-budget-sql.cpp | 18 +-- src/backend/sql/gnc-commodity-sql.cpp | 18 +-- src/backend/sql/gnc-invoice-sql.cpp | 17 +-- src/backend/sql/gnc-lots-sql.cpp | 18 +-- src/backend/sql/gnc-order-sql.cpp | 17 +-- src/backend/sql/gnc-owner-sql.cpp | 12 +- src/backend/sql/gnc-slots-sql.cpp | 12 +- src/backend/sql/gnc-tax-table-sql.cpp | 18 +-- src/backend/sql/gnc-transaction-sql.cpp | 16 +-- 14 files changed, 123 insertions(+), 327 deletions(-) diff --git a/src/backend/sql/gnc-account-sql.cpp b/src/backend/sql/gnc-account-sql.cpp index e12cb11ff6..56a371cd30 100644 --- a/src/backend/sql/gnc-account-sql.cpp +++ b/src/backend/sql/gnc-account-sql.cpp @@ -403,24 +403,10 @@ load_account_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); (void)string_to_guid (val.c_str(), &guid); account = xaccAccountLookup (&guid, be->book); - if (account != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, account, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - g_return_if_fail (setter != NULL); - (*setter) (pObject, (const gpointer)account); - } - } + if (account != nullptr) + set_parameter (pObject, account, setter, table_row.gobj_param_name); else - { PWARN ("Account ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-address-sql.cpp b/src/backend/sql/gnc-address-sql.cpp index f83964d362..713ea0431f 100644 --- a/src/backend/sql/gnc-address-sql.cpp +++ b/src/backend/sql/gnc-address-sql.cpp @@ -70,7 +70,6 @@ load_address (const GncSqlBackend* be, GncSqlRow& row, QofSetterFunc setter, gpointer pObject, const GncSqlColumnTableEntry& table_row) { - AddressSetterFunc a_setter = (AddressSetterFunc)setter; const gchar* s; @@ -87,40 +86,22 @@ load_address (const GncSqlBackend* be, GncSqlRow& row, { auto val = row.get_string_at_col (buf); g_free (buf); - if (subtable_row.gobj_param_name != NULL) - { - g_object_set (addr, subtable_row.gobj_param_name, - val.c_str(), NULL); - } - else - { - if (subtable_row.qof_param_name != NULL) - { - setter = qof_class_get_parameter_setter (GNC_ID_ADDRESS, - subtable_row.qof_param_name); - } - else - { - setter = subtable_row.setter; - } - (*setter) (addr, (const gpointer)val.c_str()); - } + auto sub_setter = subtable_row.setter; + auto pname = subtable_row.qof_param_name; + if (pname != nullptr) + sub_setter = qof_class_get_parameter_setter (GNC_ID_ADDRESS, + pname); + set_parameter (addr, val.c_str(), sub_setter, + subtable_row.gobj_param_name); } catch (std::invalid_argument) { return; } } - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, addr, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - (*a_setter) (pObject, addr); - } + set_parameter (pObject, addr, + reinterpret_cast(setter), + table_row.gobj_param_name); } static void diff --git a/src/backend/sql/gnc-backend-sql.cpp b/src/backend/sql/gnc-backend-sql.cpp index 605e3723f4..673034aaa5 100644 --- a/src/backend/sql/gnc-backend-sql.cpp +++ b/src/backend/sql/gnc-backend-sql.cpp @@ -1181,24 +1181,6 @@ gnc_sql_get_getter (QofIdTypeConst obj_name, return getter; } -template -void set_object_parameter(gpointer pObject, T item, QofSetterFunc setter, - const char* param) -{ - if (param != NULL) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, param, item, NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - } - else - { - g_return_if_fail (setter != NULL); - (*setter) (pObject, (const gpointer)(item)); - } -} /* ----------------------------------------------------------------- */ static void @@ -1212,20 +1194,7 @@ load_string (const GncSqlBackend* be, GncSqlRow& row, try { auto s = row.get_string_at_col (table_row.col_name); - if (table_row.gobj_param_name != NULL) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, s.c_str(), NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - - } - else - { - g_return_if_fail (setter != NULL); - (*setter) (pObject, (const gpointer)s.c_str()); - } + set_parameter(pObject, s.c_str(), setter, table_row.gobj_param_name); } catch (std::invalid_argument) {} } @@ -1283,20 +1252,9 @@ load_int (const GncSqlBackend* be, GncSqlRow& row, g_return_if_fail (table_row.gobj_param_name != NULL || setter != NULL); auto val = row.get_int_at_col(table_row.col_name); - if (table_row.gobj_param_name != NULL) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, val, NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - } - else - { - g_return_if_fail (setter != NULL); - auto _setter = (IntSetterFunc)setter; - (*_setter) (pObject, val); - } + set_parameter(pObject, val, + reinterpret_cast(setter), + table_row.gobj_param_name); } static void @@ -1331,20 +1289,9 @@ load_boolean (const GncSqlBackend* be, GncSqlRow& row, g_return_if_fail (table_row.gobj_param_name != NULL || setter != NULL); auto val = row.get_int_at_col (table_row.col_name); - if (table_row.gobj_param_name != nullptr) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, val, nullptr); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - } - else - { - g_return_if_fail (setter != NULL); - auto b_setter = (BooleanSetterFunc)setter; - (*b_setter) (pObject, (val != 0) ? TRUE : FALSE); - } + set_parameter(pObject, val, + reinterpret_cast(setter), + table_row.gobj_param_name); } static void @@ -1379,19 +1326,9 @@ load_int64 (const GncSqlBackend* be, GncSqlRow& row, setter != nullptr); auto val = row.get_int_at_col (table_row.col_name); - if (table_row.gobj_param_name != nullptr) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, val, nullptr); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - } - else - { - auto i64_setter = reinterpret_cast(setter); - (*i64_setter) (pObject, val); - } + set_parameter(pObject, val, + reinterpret_cast(setter), + table_row.gobj_param_name); } static void @@ -1445,19 +1382,7 @@ load_double (const GncSqlBackend* be, GncSqlRow& row, } } } - - if (table_row.gobj_param_name != NULL) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, val, NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - } - else - { - (*setter) (pObject, (gpointer)&val); - } + set_parameter(pObject, val, setter, table_row.gobj_param_name); } static void @@ -1503,22 +1428,7 @@ load_guid (const GncSqlBackend* be, GncSqlRow& row, return; } (void)string_to_guid (str.c_str(), &guid); - if (table_row.gobj_param_name != NULL) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, &guid, NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - } - else - { - g_return_if_fail (setter != NULL); - /* FIXME: The setter had damn well better dereference and copy its - * arg! - */ - (*setter) (pObject, (const gpointer)(&guid)); - } + set_parameter(pObject, &guid, setter, table_row.gobj_param_name); } static void @@ -1589,7 +1499,7 @@ gnc_sql_add_objectref_guid_col_info_to_list( const GncSqlBackend* be, /* ----------------------------------------------------------------- */ typedef Timespec (*TimespecAccessFunc) (const gpointer); -typedef void (*TimespecSetterFunc) (const gpointer, Timespec); +typedef void (*TimespecSetterFunc) (const gpointer, Timespec*); #define TIMESPEC_STR_FORMAT "%04d%02d%02d%02d%02d%02d" #define TIMESPEC_COL_SIZE (4+2+2+2+2+2) @@ -1625,7 +1535,6 @@ load_timespec (const GncSqlBackend* be, GncSqlRow& row, { Timespec ts = {0, 0}; - TimespecSetterFunc ts_setter; gboolean isOK = FALSE; @@ -1633,7 +1542,6 @@ load_timespec (const GncSqlBackend* be, GncSqlRow& row, g_return_if_fail (table_row.gobj_param_name != nullptr || setter != nullptr); - ts_setter = (TimespecSetterFunc)setter; try { auto val = row.get_time64_at_col(table_row.col_name); @@ -1657,19 +1565,10 @@ load_timespec (const GncSqlBackend* be, GncSqlRow& row, return; } } - if (table_row.gobj_param_name != NULL) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, &ts, NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_decrease_editlevel (QOF_INSTANCE (pObject)); - } - else - { - (*ts_setter) (pObject, ts); - } -} + set_parameter(pObject, &ts, + reinterpret_cast(setter), + table_row.gobj_param_name); + } static void add_timespec_col_info_to_list(const GncSqlBackend* be, @@ -1773,18 +1672,7 @@ load_date (const GncSqlBackend* be, GncSqlRow& row, return; } } - if (table_row.gobj_param_name != NULL) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, &date, NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - } - else - { - (*setter) (pObject, &date); - } + set_parameter(pObject, &date, setter, table_row.gobj_param_name); } static void @@ -1827,7 +1715,7 @@ static GncSqlColumnTypeHandler date_handler }; /* ----------------------------------------------------------------- */ typedef gnc_numeric (*NumericGetterFunc) (const gpointer); -typedef void (*NumericSetterFunc) (gpointer, gnc_numeric); +typedef void (*NumericSetterFunc) (gpointer, gnc_numeric*); static const EntryVec numeric_col_table = { @@ -1859,19 +1747,9 @@ load_numeric (const GncSqlBackend* be, GncSqlRow& row, { return; } - if (table_row.gobj_param_name != nullptr) - { - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - g_object_set (pObject, table_row.gobj_param_name, &n, NULL); - if (QOF_IS_INSTANCE (pObject)) - qof_instance_increase_editlevel (QOF_INSTANCE (pObject)); - } - else - { - NumericSetterFunc n_setter = (NumericSetterFunc)setter; - (*n_setter) (pObject, n); - } + set_parameter(pObject, &n, + reinterpret_cast(setter), + table_row.gobj_param_name); } static void diff --git a/src/backend/sql/gnc-backend-sql.h b/src/backend/sql/gnc-backend-sql.h index 7f5255b610..1b258748e8 100644 --- a/src/backend/sql/gnc-backend-sql.h +++ b/src/backend/sql/gnc-backend-sql.h @@ -491,6 +491,70 @@ typedef void (*GNC_SQL_ADD_VALUE_TO_VEC_FN) (const GncSqlBackend* be, const GncSqlColumnTableEntry& table_row, PairVec& vec); +/** + * Set an object property with a setter function. + * @param pObject void* to the object being set. + * @param item the value to be set in the property. + * @param setter The function to set the property. + * The void* is an obvious wart occasioned by the fact that we're using GLists + * to hold objects. As the rewrite progresses we'll replace that with another + * template paramter. + */ +template +void set_parameter(T object, P item, F& setter) +{ + (*setter)(object, item); +} + +template +void set_parameter(T object, P item, QofSetterFunc setter, std::true_type) +{ + (*setter)(object, (void*)item); +} + +template +void set_parameter(T object, P item, QofSetterFunc setter, std::false_type) +{ + (*setter)(object, (void*)(&item)); +} + +template +void set_parameter(T object, P item, QofSetterFunc setter) +{ + set_parameter(object, item, setter, std::is_pointer

()); +} + +/** + * Set an object property with g_object_set. + * @param pObject void* to the object being set. + * @param item the value to set in the property. + * @param property the property name. + * The void* is an obvious wart. So is g_object_set, partly because it's GObject + * but mostly because it works off of string comparisons. + */ +template +void set_parameter(T object, P item, const char* property) +{ + qof_instance_increase_editlevel(object); + g_object_set(object, property, item, nullptr); + qof_instance_decrease_editlevel(object); +}; + +/** + * Set an object property with either a g_object_set or a setter. + * + * See previous templates for the parameter meanings. This is clunky but fits in + * the current architecture for refactoring. + */ +template +void set_parameter(T object, P item, F setter, const char* property) +{ + if (property) + set_parameter(object, item, property); + else + set_parameter(object, item, setter); +} + /** * @struct GncSqlColumnTypeHandler * diff --git a/src/backend/sql/gnc-bill-term-sql.cpp b/src/backend/sql/gnc-bill-term-sql.cpp index 8370f41509..1b5cac62dd 100644 --- a/src/backend/sql/gnc-bill-term-sql.cpp +++ b/src/backend/sql/gnc-bill-term-sql.cpp @@ -353,23 +353,10 @@ load_billterm_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); string_to_guid (val.c_str(), &guid); term = gncBillTermLookup (be->book, &guid); - if (term != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, term, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - (*setter) (pObject, (const gpointer)term); - } - } + if (term != nullptr) + set_parameter (pObject, term, setter, table_row.gobj_param_name); else - { PWARN ("Billterm ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-budget-sql.cpp b/src/backend/sql/gnc-budget-sql.cpp index 18c7c869bd..1042154f2b 100644 --- a/src/backend/sql/gnc-budget-sql.cpp +++ b/src/backend/sql/gnc-budget-sql.cpp @@ -477,24 +477,10 @@ load_budget_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); (void)string_to_guid (val.c_str(), &guid); budget = gnc_budget_lookup (&guid, be->book); - if (budget != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, budget, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - g_return_if_fail (setter != NULL); - (*setter) (pObject, (const gpointer)budget); - } - } + if (budget != nullptr) + set_parameter(pObject, budget, setter, table_row.gobj_param_name); else - { PWARN ("Budget ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-commodity-sql.cpp b/src/backend/sql/gnc-commodity-sql.cpp index 8c3ccb6c99..7b040b1c9d 100644 --- a/src/backend/sql/gnc-commodity-sql.cpp +++ b/src/backend/sql/gnc-commodity-sql.cpp @@ -279,23 +279,11 @@ load_commodity_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); (void)string_to_guid (val.c_str(), &guid); commodity = gnc_commodity_find_commodity_by_guid (&guid, be->book); - if (commodity != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, commodity, NULL); - qof_instance_decrease_editlevel (pObject); - } - else if (setter != NULL) - { - (*setter) (pObject, (const gpointer)commodity); - } - } + if (commodity != nullptr) + set_parameter (pObject, commodity, setter, + table_row.gobj_param_name); else - { PWARN ("Commodity ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-invoice-sql.cpp b/src/backend/sql/gnc-invoice-sql.cpp index 2f80683053..b6651b2a6b 100644 --- a/src/backend/sql/gnc-invoice-sql.cpp +++ b/src/backend/sql/gnc-invoice-sql.cpp @@ -290,23 +290,10 @@ load_invoice_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); string_to_guid (val.c_str(), &guid); invoice = gncInvoiceLookup (be->book, &guid); - if (invoice != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, invoice, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - (*setter) (pObject, (const gpointer)invoice); - } - } + if (invoice != nullptr) + set_parameter (pObject, invoice, setter, table_row.gobj_param_name); else - { PWARN ("Invoice ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-lots-sql.cpp b/src/backend/sql/gnc-lots-sql.cpp index 644c28e6d5..4b06c5160e 100644 --- a/src/backend/sql/gnc-lots-sql.cpp +++ b/src/backend/sql/gnc-lots-sql.cpp @@ -219,24 +219,10 @@ load_lot_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); (void)string_to_guid (val.c_str(), &guid); lot = gnc_lot_lookup (&guid, be->book); - if (lot != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, lot, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - g_return_if_fail (setter != NULL); - (*setter) (pObject, (const gpointer)lot); - } - } + if (lot != nullptr) + set_parameter (pObject, lot, setter, table_row.gobj_param_name); else - { PWARN ("Lot ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-order-sql.cpp b/src/backend/sql/gnc-order-sql.cpp index ad4685e85c..49a9307177 100644 --- a/src/backend/sql/gnc-order-sql.cpp +++ b/src/backend/sql/gnc-order-sql.cpp @@ -204,23 +204,10 @@ load_order_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); string_to_guid (val.c_str(), &guid); order = gncOrderLookup (be->book, &guid); - if (order != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, order, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - (*setter) (pObject, (const gpointer)order); - } - } + if (order != nullptr) + set_parameter (pObject, order, setter, table_row.gobj_param_name); else - { PWARN ("Order ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-owner-sql.cpp b/src/backend/sql/gnc-owner-sql.cpp index b1764fd5c7..acdb4f0d3f 100644 --- a/src/backend/sql/gnc-owner-sql.cpp +++ b/src/backend/sql/gnc-owner-sql.cpp @@ -151,17 +151,7 @@ load_owner (const GncSqlBackend* be, GncSqlRow& row, default: PWARN ("Invalid owner type: %d\n", type); } - - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, &owner, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - (*setter) (pObject, &owner); - } + set_parameter (pObject, &owner, setter, table_row.gobj_param_name); } static void diff --git a/src/backend/sql/gnc-slots-sql.cpp b/src/backend/sql/gnc-slots-sql.cpp index 2f3581b06a..0fb5e5451e 100644 --- a/src/backend/sql/gnc-slots-sql.cpp +++ b/src/backend/sql/gnc-slots-sql.cpp @@ -83,11 +83,11 @@ static void set_string_val (gpointer pObject, gpointer pValue); static gpointer get_double_val (gpointer pObject); static void set_double_val (gpointer pObject, gpointer pValue); static Timespec get_timespec_val (gpointer pObject); -static void set_timespec_val (gpointer pObject, Timespec ts); +static void set_timespec_val (gpointer pObject, Timespec *ts); static gpointer get_guid_val (gpointer pObject); static void set_guid_val (gpointer pObject, gpointer pValue); static gnc_numeric get_numeric_val (gpointer pObject); -static void set_numeric_val (gpointer pObject, gnc_numeric value); +static void set_numeric_val (gpointer pObject, gnc_numeric *value); static GDate* get_gdate_val (gpointer pObject); static void set_gdate_val (gpointer pObject, GDate* value); static slot_info_t* slot_info_copy (slot_info_t* pInfo, GncGUID* guid); @@ -436,7 +436,7 @@ get_timespec_val (gpointer pObject) } static void -set_timespec_val (gpointer pObject, Timespec ts) +set_timespec_val (gpointer pObject, Timespec *ts) { slot_info_t* pInfo = (slot_info_t*)pObject; KvpValue* value = NULL; @@ -444,7 +444,7 @@ set_timespec_val (gpointer pObject, Timespec ts) g_return_if_fail (pObject != NULL); if (pInfo->value_type != KvpValue::Type::TIMESPEC) return; - value = new KvpValue {ts}; + value = new KvpValue {*ts}; set_slot_from_value (pInfo, value); } @@ -553,7 +553,7 @@ get_numeric_val (gpointer pObject) } static void -set_numeric_val (gpointer pObject, gnc_numeric value) +set_numeric_val (gpointer pObject, gnc_numeric *value) { slot_info_t* pInfo = (slot_info_t*)pObject; KvpValue* pValue = NULL; @@ -561,7 +561,7 @@ set_numeric_val (gpointer pObject, gnc_numeric value) g_return_if_fail (pObject != NULL); if (pInfo->value_type != KvpValue::Type::NUMERIC) return; - set_slot_from_value (pInfo, new KvpValue {value}); + set_slot_from_value (pInfo, new KvpValue {*value}); } static GDate* diff --git a/src/backend/sql/gnc-tax-table-sql.cpp b/src/backend/sql/gnc-tax-table-sql.cpp index 3b3dd38b4f..39225cd544 100644 --- a/src/backend/sql/gnc-tax-table-sql.cpp +++ b/src/backend/sql/gnc-tax-table-sql.cpp @@ -497,23 +497,11 @@ load_taxtable_guid (const GncSqlBackend* be, GncSqlRow& row, auto val = row.get_string_at_col (table_row.col_name); string_to_guid (val.c_str(), &guid); taxtable = gncTaxTableLookup (be->book, &guid); - if (taxtable != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, taxtable, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - (*setter) (pObject, (const gpointer)taxtable); - } - } + if (taxtable != nullptr) + set_parameter (pObject, taxtable, setter, + table_row.gobj_param_name); else - { PWARN ("Taxtable ref '%s' not found", val.c_str()); - } } catch (std::invalid_argument) {} } diff --git a/src/backend/sql/gnc-transaction-sql.cpp b/src/backend/sql/gnc-transaction-sql.cpp index e0fb09cad5..a4d44d1fe4 100644 --- a/src/backend/sql/gnc-transaction-sql.cpp +++ b/src/backend/sql/gnc-transaction-sql.cpp @@ -1440,20 +1440,8 @@ load_tx_guid (const GncSqlBackend* be, GncSqlRow& row, tx = xaccTransLookup (&guid, be->book); } - if (tx != NULL) - { - if (table_row.gobj_param_name != NULL) - { - qof_instance_increase_editlevel (pObject); - g_object_set (pObject, table_row.gobj_param_name, tx, NULL); - qof_instance_decrease_editlevel (pObject); - } - else - { - g_return_if_fail (setter != NULL); - (*setter) (pObject, (const gpointer)tx); - } - } + if (tx != nullptr) + set_parameter (pObject, tx, setter, table_row.gobj_param_name); } catch (std::invalid_argument) {} }