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