gnucash master: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Wed Aug 16 17:17:19 EDT 2017


Updated	 via  https://github.com/Gnucash/gnucash/commit/cc39a04f (commit)
	 via  https://github.com/Gnucash/gnucash/commit/e9ac71c0 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/43df1ccc (commit)
	from  https://github.com/Gnucash/gnucash/commit/1883d8ec (commit)



commit cc39a04f6f448c1f8309edbd221ad5d2bc0dfadf
Author: John Ralls <jralls at ceridwen.us>
Date:   Wed Aug 16 23:16:42 2017 +0200

    Fix mac looking in wrong directory for libgncmod-backend-dbi.dylib.

diff --git a/libgnucash/engine/gnc-engine.c b/libgnucash/engine/gnc-engine.c
index 0cb344d..34d1348 100644
--- a/libgnucash/engine/gnc-engine.c
+++ b/libgnucash/engine/gnc-engine.c
@@ -74,9 +74,9 @@ gnc_engine_init_part2()
     } libs[] =
     {
 #if defined( HAVE_DBI_DBI_H )
-        { "dbi", "gncmod-backend-dbi", TRUE },
+        { "gnucash", "gncmod-backend-dbi", TRUE },
 #endif
-        { "xml", "gncmod-backend-xml", TRUE },
+        { "gnucash", "gncmod-backend-xml", TRUE },
         { NULL, FALSE }
     }, *lib;
 

commit e9ac71c0f969628bd624d7db7ff641df907af9e4
Author: John Ralls <jralls at ceridwen.us>
Date:   Wed Aug 16 11:49:53 2017 +0200

    Fix time-string format in backend for GncDateTime(std::string).
    
    Also provide a simple test of that ctor.

diff --git a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
index 3f7a546..b11a31a 100644
--- a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
+++ b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
@@ -393,7 +393,13 @@ GncSqlColumnTableEntryImpl<CT_TIMESPEC>::load (const GncSqlBackend* sql_be,
     {
         try
         {
+            constexpr size_t datelen = 14;
             auto val = row.get_string_at_col(m_col_name);
+            if (val.length() == datelen)
+                val = std::string(val.substr(0, 4) + "-" + val.substr(4, 2) +
+                                  "-" + val.substr(6, 2) + " " +
+                                  val.substr(8, 2) + ":" + val.substr(10, 2) +
+                                  ":" + val.substr(12, 2));
             GncDateTime time(val);
             ts.tv_sec = static_cast<time64>(time);
         }
diff --git a/libgnucash/engine/test/gtest-gnc-datetime.cpp b/libgnucash/engine/test/gtest-gnc-datetime.cpp
index b334230..936e8be 100644
--- a/libgnucash/engine/test/gtest-gnc-datetime.cpp
+++ b/libgnucash/engine/test/gtest-gnc-datetime.cpp
@@ -259,6 +259,19 @@ TEST(gnc_datetime_constructors, test_time64_constructor)
     EXPECT_EQ(static_cast<time64>(atime), time);
 }
 
+TEST(gnc_datetime_constructors, test_string_constructor)
+{
+    std::string timestr("2015-12-05 00:01:00");
+    GncDateTime time(timestr);
+    auto tm = time.utc_tm();
+    EXPECT_EQ(tm.tm_year, 115);
+    EXPECT_EQ(tm.tm_mon, 11);
+    EXPECT_EQ(tm.tm_mday, 5);
+    EXPECT_EQ(tm.tm_hour, 0);
+    EXPECT_EQ(tm.tm_min, 1);
+    EXPECT_EQ(tm.tm_sec, 0);
+}
+
 TEST(gnc_datetime_constructors, test_struct_tm_constructor)
 {
 #ifdef HAVE_STRUCT_TM_GMTOFF

commit 43df1ccc3abf62eb6b209f1f8f37b44720c9d950
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Aug 14 13:47:05 2017 +0300

    Fix the most serious backend memory leaks.

diff --git a/libgnucash/backend/sql/gnc-bill-term-sql.cpp b/libgnucash/backend/sql/gnc-bill-term-sql.cpp
index 40bd993..433e781 100644
--- a/libgnucash/backend/sql/gnc-bill-term-sql.cpp
+++ b/libgnucash/backend/sql/gnc-bill-term-sql.cpp
@@ -244,6 +244,7 @@ GncSqlBillTermBackend::load_all (GncSqlBackend* sql_be)
         if (pBillTerm != nullptr)
             instances.push_back(QOF_INSTANCE(pBillTerm));
     }
+    delete result;
 
     if (!instances.empty())
         gnc_sql_slots_load_for_instancevec (sql_be, instances);
diff --git a/libgnucash/backend/sql/gnc-slots-sql.cpp b/libgnucash/backend/sql/gnc-slots-sql.cpp
index c563e95..bd9c341 100644
--- a/libgnucash/backend/sql/gnc-slots-sql.cpp
+++ b/libgnucash/backend/sql/gnc-slots-sql.cpp
@@ -361,9 +361,9 @@ set_string_val (gpointer pObject,  gpointer pValue)
 
     if (pInfo->value_type != KvpValue::Type::STRING || pValue == NULL)
         return;
-    auto string = g_strdup (static_cast<const char*> (pValue));
-    auto value = new KvpValue {string};
+    auto value = new KvpValue {static_cast<const char*> (pValue)};
     set_slot_from_value (pInfo, value);
+    delete value;
 }
 
 static  gpointer
@@ -796,6 +796,7 @@ slots_load_info (slot_info_t* pInfo)
         auto result = pInfo->be->execute_select_statement (stmt);
         for (auto row : *result)
             load_slot (pInfo, row);
+        delete result;
     }
 }
 
@@ -934,6 +935,7 @@ void gnc_sql_slots_load_for_sql_subquery (GncSqlBackend* sql_be,
     auto result = sql_be->execute_select_statement(stmt);
     for (auto row : *result)
         load_slot_for_book_object (sql_be, row, lookup_fn);
+    delete result;
 }
 
 /* ================================================================= */
diff --git a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
index 0fd6fd0..3f7a546 100644
--- a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
+++ b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
@@ -549,6 +549,7 @@ GncSqlColumnTableEntryImpl<CT_NUMERIC>::load (const GncSqlBackend* sql_be,
         buf = g_strdup_printf ("%s_denom", m_col_name);
         auto denom = row.get_int_at_col (buf);
         n = gnc_numeric_create (num, denom);
+        g_free (buf);
     }
     catch (std::invalid_argument)
     {
@@ -569,6 +570,7 @@ GncSqlColumnTableEntryImpl<CT_NUMERIC>::add_to_table(ColVec& vec) const noexcept
                                      subtable_row->m_col_name);
         GncSqlColumnInfo info(buf, BCT_INT64, 0, false, false,
                               m_flags & COL_PKEY, m_flags & COL_NNUL);
+        g_free (buf);
         vec.emplace_back(std::move(info));
     }
 }



Summary of changes:
 libgnucash/backend/sql/gnc-bill-term-sql.cpp          |  1 +
 libgnucash/backend/sql/gnc-slots-sql.cpp              |  6 ++++--
 libgnucash/backend/sql/gnc-sql-column-table-entry.cpp |  8 ++++++++
 libgnucash/engine/gnc-engine.c                        |  4 ++--
 libgnucash/engine/test/gtest-gnc-datetime.cpp         | 13 +++++++++++++
 5 files changed, 28 insertions(+), 4 deletions(-)



More information about the gnucash-changes mailing list