mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Convert upgrade_table to member, remove some convenience functions.
To wit, gnc_sql_execute_select_sql, gnc_sql_execute_nonselect_sql, gnc_sql_create_temp_table, and gnc_sql_create_select_statement.
This commit is contained in:
parent
54acef27c2
commit
c2082bea99
@ -224,19 +224,17 @@ GncSqlAccountBackend::load_all (GncSqlBackend* be)
|
||||
|
||||
pBook = be->book();
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
if (stmt == nullptr)
|
||||
{
|
||||
LEAVE ("stmt == NULL");
|
||||
return;
|
||||
}
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
for (auto row : *result)
|
||||
load_single_account (be, row, &l_accounts_needing_parents);
|
||||
|
||||
auto sql = g_strdup_printf ("SELECT DISTINCT guid FROM %s", TABLE_NAME);
|
||||
gnc_sql_slots_load_for_sql_subquery (be, sql, (BookLookupFn)xaccAccountLookup);
|
||||
g_free (sql);
|
||||
sql.str("");
|
||||
sql << "SELECT DISTINCT guid FROM " << TABLE_NAME;
|
||||
gnc_sql_slots_load_for_sql_subquery (be, sql.str().c_str(),
|
||||
(BookLookupFn)xaccAccountLookup);
|
||||
|
||||
/* While there are items on the list of accounts needing parents,
|
||||
try to see if the parent has now been loaded. Theory says that if
|
||||
|
@ -673,6 +673,50 @@ GncSqlBackend::set_table_version (const std::string& table_name,
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
GncSqlBackend::upgrade_table (const std::string& table_name,
|
||||
const EntryVec& col_table) noexcept
|
||||
{
|
||||
DEBUG ("Upgrading %s table\n", table_name.c_str());
|
||||
|
||||
auto temp_table_name = table_name + "_new";
|
||||
create_table (temp_table_name, col_table);
|
||||
std::stringstream sql;
|
||||
sql << "INSERT INTO " << temp_table_name << " SELECT * FROM " << table_name;
|
||||
auto stmt = create_statement_from_sql(sql.str());
|
||||
execute_nonselect_statement(stmt);
|
||||
|
||||
sql.str("");
|
||||
sql << "DROP TABLE " << table_name;
|
||||
stmt = create_statement_from_sql(sql.str());
|
||||
execute_nonselect_statement(stmt);
|
||||
|
||||
sql.str("");
|
||||
sql << "ALTER TABLE " << temp_table_name << " RENAME TO " << table_name;
|
||||
stmt = create_statement_from_sql(sql.str());
|
||||
execute_nonselect_statement(stmt);
|
||||
}
|
||||
|
||||
/* This is required because we're passing be->timespace_format to
|
||||
* g_strdup_printf.
|
||||
*/
|
||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||
std::string
|
||||
GncSqlBackend::time64_to_string (time64 t) const noexcept
|
||||
{
|
||||
auto tm = gnc_gmtime (&t);
|
||||
|
||||
auto year = tm->tm_year + 1900;
|
||||
|
||||
auto datebuf = g_strdup_printf (m_timespec_format,
|
||||
year, tm->tm_mon + 1, tm->tm_mday,
|
||||
tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||
gnc_tm_free (tm);
|
||||
std::string date{datebuf};
|
||||
g_free(datebuf);
|
||||
return date;
|
||||
}
|
||||
#pragma GCC diagnostic warning "-Wformat-nonliteral"
|
||||
|
||||
void
|
||||
gnc_sql_sync_all (GncSqlBackend* be, QofBook* book)
|
||||
@ -1657,30 +1701,6 @@ 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)
|
||||
|
||||
/* This is required because we're passing be->timespace_format to
|
||||
* g_strdup_printf.
|
||||
*/
|
||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||
gchar*
|
||||
gnc_sql_convert_timespec_to_string (const GncSqlBackend* be, Timespec ts)
|
||||
{
|
||||
time64 time;
|
||||
struct tm* tm;
|
||||
gint year;
|
||||
gchar* datebuf;
|
||||
|
||||
time = timespecToTime64 (ts);
|
||||
tm = gnc_gmtime (&time);
|
||||
|
||||
year = tm->tm_year + 1900;
|
||||
|
||||
datebuf = g_strdup_printf (be->timespec_format(),
|
||||
year, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||
gnc_tm_free (tm);
|
||||
return datebuf;
|
||||
}
|
||||
#pragma GCC diagnostic warning "-Wformat-nonliteral"
|
||||
|
||||
template<> void
|
||||
GncSqlColumnTableEntryImpl<CT_TIMESPEC>::load (const GncSqlBackend* be,
|
||||
GncSqlRow& row,
|
||||
@ -1764,9 +1784,8 @@ GncSqlColumnTableEntryImpl<CT_TIMESPEC>::add_to_query(const GncSqlBackend* be,
|
||||
|
||||
if (ts.tv_sec != 0 || ts.tv_nsec != 0)
|
||||
{
|
||||
char* datebuf = gnc_sql_convert_timespec_to_string (be, ts);
|
||||
vec.emplace_back (std::make_pair (std::string{m_col_name},
|
||||
std::string{datebuf}));
|
||||
auto datebuf = be->time64_to_string (ts.tv_sec);
|
||||
vec.emplace_back (std::make_pair (std::string{m_col_name}, datebuf));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -2005,18 +2024,6 @@ gnc_sql_load_object (const GncSqlBackend* be, GncSqlRow& row,
|
||||
}
|
||||
|
||||
/* ================================================================= */
|
||||
GncSqlStatementPtr
|
||||
gnc_sql_create_select_statement (GncSqlBackend* be, const gchar* table_name)
|
||||
{
|
||||
g_return_val_if_fail (be != NULL, NULL);
|
||||
g_return_val_if_fail (table_name != NULL, NULL);
|
||||
|
||||
auto sql = g_strdup_printf ("SELECT * FROM %s", table_name);
|
||||
auto stmt = be->create_statement_from_sql(sql);
|
||||
g_free (sql);
|
||||
return stmt;
|
||||
}
|
||||
|
||||
static GncSqlStatementPtr
|
||||
create_single_col_select_statement (GncSqlBackend* be,
|
||||
const gchar* table_name,
|
||||
@ -2031,35 +2038,6 @@ create_single_col_select_statement (GncSqlBackend* be,
|
||||
|
||||
/* ================================================================= */
|
||||
|
||||
|
||||
GncSqlResultPtr
|
||||
gnc_sql_execute_select_sql (GncSqlBackend* be, const gchar* sql)
|
||||
{
|
||||
g_return_val_if_fail (be != NULL, NULL);
|
||||
g_return_val_if_fail (sql != NULL, NULL);
|
||||
|
||||
auto stmt = be->create_statement_from_sql(sql);
|
||||
if (stmt == nullptr)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
return be->execute_select_statement (stmt);
|
||||
}
|
||||
|
||||
gint
|
||||
gnc_sql_execute_nonselect_sql (GncSqlBackend* be, const gchar* sql)
|
||||
{
|
||||
g_return_val_if_fail (be != NULL, 0);
|
||||
g_return_val_if_fail (sql != NULL, 0);
|
||||
|
||||
auto stmt = be->create_statement_from_sql(sql);
|
||||
if (stmt == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return be->execute_nonselect_statement (stmt);
|
||||
}
|
||||
|
||||
uint_t
|
||||
gnc_sql_append_guids_to_sql (std::stringstream& sql, const InstanceVec& instances)
|
||||
{
|
||||
@ -2316,48 +2294,6 @@ GncSqlObjectBackend::create_tables (GncSqlBackend* be)
|
||||
"Table creation aborted.", m_table_name.c_str(), m_version, version);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gnc_sql_create_temp_table (const GncSqlBackend* be, const gchar* table_name,
|
||||
const EntryVec& col_table)
|
||||
{
|
||||
g_return_val_if_fail (be != NULL, FALSE);
|
||||
g_return_val_if_fail (table_name != NULL, FALSE);
|
||||
|
||||
return be->create_table (table_name, col_table);
|
||||
}
|
||||
|
||||
/* Create a temporary table, copy the data from the old table, delete the
|
||||
old table, then rename the new one. */
|
||||
void
|
||||
gnc_sql_upgrade_table (GncSqlBackend* be, const gchar* table_name,
|
||||
const EntryVec& col_table)
|
||||
{
|
||||
gchar* sql;
|
||||
gchar* temp_table_name;
|
||||
|
||||
g_return_if_fail (be != NULL);
|
||||
g_return_if_fail (table_name != NULL);
|
||||
|
||||
DEBUG ("Upgrading %s table\n", table_name);
|
||||
|
||||
temp_table_name = g_strdup_printf ("%s_new", table_name);
|
||||
(void)gnc_sql_create_temp_table (be, temp_table_name, col_table);
|
||||
sql = g_strdup_printf ("INSERT INTO %s SELECT * FROM %s",
|
||||
temp_table_name, table_name);
|
||||
(void)gnc_sql_execute_nonselect_sql (be, sql);
|
||||
g_free (sql);
|
||||
|
||||
sql = g_strdup_printf ("DROP TABLE %s", table_name);
|
||||
(void)gnc_sql_execute_nonselect_sql (be, sql);
|
||||
g_free (sql);
|
||||
|
||||
sql = g_strdup_printf ("ALTER TABLE %s RENAME TO %s", temp_table_name,
|
||||
table_name);
|
||||
(void)gnc_sql_execute_nonselect_sql (be, sql);
|
||||
g_free (sql);
|
||||
g_free (temp_table_name);
|
||||
}
|
||||
|
||||
/* ================================================================= */
|
||||
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
/**
|
||||
* @defgroup SQLBE SQL Backend Core
|
||||
@{
|
||||
@{
|
||||
*/
|
||||
|
||||
/** @addtogroup Columns Columns
|
||||
@ -112,13 +112,13 @@ public:
|
||||
GncSqlResultPtr execute_select_statement(const GncSqlStatementPtr& stmt) const noexcept;
|
||||
int execute_nonselect_statement(const GncSqlStatementPtr& stmt) const noexcept;
|
||||
std::string quote_string(const std::string&) const noexcept;
|
||||
/**
|
||||
* Creates a table in the database
|
||||
*
|
||||
* @param table_name Table name
|
||||
* @param col_table DB table description
|
||||
* @return TRUE if successful, FALSE if unsuccessful
|
||||
*/
|
||||
/**
|
||||
* Creates a table in the database
|
||||
*
|
||||
* @param table_name Table name
|
||||
* @param col_table DB table description
|
||||
* @return TRUE if successful, FALSE if unsuccessful
|
||||
*/
|
||||
bool create_table(const std::string& table_name, const EntryVec& col_table) const noexcept;
|
||||
/**
|
||||
* Creates a table in the database and sets its version
|
||||
@ -150,8 +150,35 @@ public:
|
||||
*/
|
||||
bool add_columns_to_table(const std::string& table_name,
|
||||
const EntryVec& col_table) const noexcept;
|
||||
/**
|
||||
* Upgrades a table to a new structure.
|
||||
*
|
||||
* The upgrade is done by creating a new table with the new structure,
|
||||
* SELECTing the old data into the new table, deleting the old table, then
|
||||
* renaming the new table. Therefore, this will only work if the new table
|
||||
* structure is similar enough to the old table that the SELECT will work.
|
||||
*
|
||||
* @param table_name SQL table name
|
||||
* @param col_table Column table
|
||||
*/
|
||||
void upgrade_table (const std::string& table_name,
|
||||
const EntryVec& col_table) noexcept;
|
||||
/**
|
||||
* Returns the version number for a DB table.
|
||||
*
|
||||
* @param table_name Table name
|
||||
* @return Version number, or 0 if the table does not exist
|
||||
*/
|
||||
uint_t get_table_version(const std::string& table_name) const noexcept;
|
||||
bool set_table_version (const std::string& table_name, uint_t version) noexcept;
|
||||
/**
|
||||
* Converts a time64 value to a string value for the database.
|
||||
*
|
||||
* @param t time64 to be converted.
|
||||
* @return String representation of the Timespec
|
||||
*/
|
||||
std::string time64_to_string (time64 t) const noexcept;
|
||||
|
||||
QofBook* book() const noexcept { return m_book; }
|
||||
|
||||
bool pristine() const noexcept { return m_is_pristine_db; }
|
||||
@ -390,8 +417,8 @@ class GncSqlObjectBackend
|
||||
public:
|
||||
GncSqlObjectBackend (int version, const std::string& type,
|
||||
const std::string& table, const EntryVec& vec) :
|
||||
m_table_name{table}, m_version{version}, m_type_name{type},
|
||||
m_col_table{vec} {}
|
||||
m_table_name{table}, m_version{version}, m_type_name{type},
|
||||
m_col_table{vec} {}
|
||||
/**
|
||||
* Load all objects of m_type in the database into memory.
|
||||
* @param be The GncSqlBackend containing the database connection.
|
||||
@ -592,21 +619,21 @@ public:
|
||||
QofIdTypeConst obj_name,
|
||||
gpointer pObject, T get_ref)
|
||||
const noexcept
|
||||
{
|
||||
g_return_if_fail (pObject != NULL);
|
||||
|
||||
try
|
||||
{
|
||||
GncGUID guid;
|
||||
auto val = row.get_string_at_col (m_col_name);
|
||||
(void)string_to_guid (val.c_str(), &guid);
|
||||
auto target = get_ref(&guid);
|
||||
if (target != nullptr)
|
||||
set_parameter (pObject, target, get_setter(obj_name),
|
||||
m_gobj_param_name);
|
||||
g_return_if_fail (pObject != NULL);
|
||||
|
||||
try
|
||||
{
|
||||
GncGUID guid;
|
||||
auto val = row.get_string_at_col (m_col_name);
|
||||
(void)string_to_guid (val.c_str(), &guid);
|
||||
auto target = get_ref(&guid);
|
||||
if (target != nullptr)
|
||||
set_parameter (pObject, target, get_setter(obj_name),
|
||||
m_gobj_param_name);
|
||||
}
|
||||
catch (std::invalid_argument) {}
|
||||
}
|
||||
catch (std::invalid_argument) {}
|
||||
}
|
||||
|
||||
protected:
|
||||
template <typename T> T
|
||||
@ -676,7 +703,7 @@ public:
|
||||
gpointer pObject) const noexcept override;
|
||||
void add_to_table(const GncSqlBackend* be, ColVec& vec) const noexcept override;
|
||||
void add_to_query(const GncSqlBackend* be, QofIdTypeConst obj_name,
|
||||
gpointer pObject, PairVec& vec) const noexcept override;
|
||||
gpointer pObject, PairVec& vec) const noexcept override;
|
||||
};
|
||||
|
||||
template <GncSqlObjectType Type>
|
||||
@ -845,25 +872,6 @@ gboolean gnc_sql_do_db_operation (GncSqlBackend* be,
|
||||
gpointer pObject,
|
||||
const EntryVec& table);
|
||||
|
||||
/**
|
||||
* Executes an SQL SELECT statement from an SQL char string and returns the
|
||||
* result rows. If an error occurs, an entry is added to the log, an error
|
||||
* status is returned to qof and NULL is returned.
|
||||
*
|
||||
* @param be SQL backend struct
|
||||
* @param sql SQL SELECT string
|
||||
* @return Results, or NULL if an error has occured
|
||||
*/
|
||||
GncSqlResultPtr gnc_sql_execute_select_sql (GncSqlBackend* be, const gchar* sql);
|
||||
|
||||
/**
|
||||
* Executes an SQL non-SELECT statement from an SQL char string.
|
||||
*
|
||||
* @param be SQL backend struct
|
||||
* @param sql SQL non-SELECT string
|
||||
* @returns Number of rows affected, or -1 if an error has occured
|
||||
*/
|
||||
gint gnc_sql_execute_nonselect_sql (GncSqlBackend* be, const gchar* sql);
|
||||
|
||||
/**
|
||||
* Loads a Gnucash object from the database.
|
||||
@ -893,20 +901,6 @@ gboolean gnc_sql_object_is_it_in_db (GncSqlBackend* be,
|
||||
QofIdTypeConst obj_name,
|
||||
const gpointer pObject,
|
||||
const EntryVec& table );
|
||||
|
||||
/**
|
||||
* Creates a temporary table in the database. A temporary table does not
|
||||
* have a version number added to the versions table.
|
||||
*
|
||||
* @param be SQL backend struct
|
||||
* @param table_name Table name
|
||||
* @param col_table DB table description
|
||||
* @return TRUE if successful, FALSE if unsuccessful
|
||||
*/
|
||||
gboolean gnc_sql_create_temp_table (const GncSqlBackend* be,
|
||||
const gchar* table_name,
|
||||
const EntryVec& col_table);
|
||||
|
||||
/**
|
||||
* Loads the object guid from a database row. The table must have a column
|
||||
* named "guid" with type CT_GUID.
|
||||
@ -919,16 +913,6 @@ gboolean gnc_sql_create_temp_table (const GncSqlBackend* be,
|
||||
const GncGUID* gnc_sql_load_guid (const GncSqlBackend* be, GncSqlRow& row);
|
||||
|
||||
|
||||
/**
|
||||
* Creates a basic SELECT statement for a table.
|
||||
*
|
||||
* @param be SQL backend struct
|
||||
* @param table_name Table name
|
||||
* @return Statement
|
||||
*/
|
||||
GncSqlStatementPtr gnc_sql_create_select_statement (GncSqlBackend* be,
|
||||
const gchar* table_name);
|
||||
|
||||
/**
|
||||
* Appends the ascii strings for a list of GUIDs to the end of an SQL string.
|
||||
*
|
||||
@ -940,30 +924,6 @@ GncSqlStatementPtr gnc_sql_create_select_statement (GncSqlBackend* be,
|
||||
uint_t gnc_sql_append_guids_to_sql (std::stringstream& sql,
|
||||
const InstanceVec& instances);
|
||||
|
||||
/**
|
||||
* Converts a Timespec value to a string value for the database.
|
||||
*
|
||||
* @param be SQL backend
|
||||
* @param ts Timespec to be converted
|
||||
* @return String representation of the Timespec
|
||||
*/
|
||||
gchar* gnc_sql_convert_timespec_to_string (const GncSqlBackend* be,
|
||||
Timespec ts);
|
||||
|
||||
/**
|
||||
* Upgrades a table to a new structure. The upgrade is done by creating a new
|
||||
* table with the new structure, SELECTing the old data into the new table,
|
||||
* deleting the old table, then renaming the new table. Therefore, this will
|
||||
* only work if the new table structure is similar enough to the old table that
|
||||
* the SELECT will work.
|
||||
*
|
||||
* @param be SQL backend
|
||||
* @param table_name SQL table name
|
||||
* @param col_table Column table
|
||||
*/
|
||||
void gnc_sql_upgrade_table (GncSqlBackend* be, const gchar* table_name,
|
||||
const EntryVec& col_table);
|
||||
|
||||
void _retrieve_guid_ (gpointer pObject, gpointer pValue);
|
||||
|
||||
gpointer gnc_sql_compile_query (QofBackend* pBEnd, QofQuery* pQuery);
|
||||
@ -1058,5 +1018,5 @@ GncSqlColumnTableEntry::add_value_to_vec(const GncSqlBackend* be,
|
||||
#endif /* GNC_BACKEND_SQL_H */
|
||||
|
||||
/**
|
||||
@} end of the SQL Backend Core doxygen group
|
||||
@} end of the SQL Backend Core doxygen group
|
||||
*/
|
||||
|
@ -238,7 +238,9 @@ GncSqlBillTermBackend::load_all (GncSqlBackend* be)
|
||||
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
InstanceVec instances;
|
||||
GList* l_billterms_needing_parents = NULL;
|
||||
@ -315,7 +317,7 @@ GncSqlBillTermBackend::create_tables (GncSqlBackend* be)
|
||||
else if (version == 1)
|
||||
{
|
||||
/* Upgrade 64 bit int handling */
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
be->set_table_version (TABLE_NAME, TABLE_VERSION);
|
||||
|
||||
PINFO ("Billterms table upgraded from version 1 to version %d\n",
|
||||
|
@ -171,7 +171,9 @@ GncSqlBookBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, BOOK_TABLE);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << BOOK_TABLE;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
if (stmt != nullptr)
|
||||
{
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
|
@ -236,19 +236,19 @@ static gboolean
|
||||
delete_budget_amounts (GncSqlBackend* be, GncBudget* budget)
|
||||
{
|
||||
gchar guid_buf[GUID_ENCODING_LENGTH + 1];
|
||||
gchar* sql;
|
||||
|
||||
g_return_val_if_fail (be != NULL, FALSE);
|
||||
g_return_val_if_fail (budget != NULL, FALSE);
|
||||
|
||||
(void)guid_to_string_buff (qof_instance_get_guid (QOF_INSTANCE (budget)),
|
||||
guid_buf);
|
||||
sql = g_strdup_printf ("DELETE FROM %s WHERE budget_guid='%s'", AMOUNTS_TABLE,
|
||||
guid_buf);
|
||||
(void)gnc_sql_execute_nonselect_sql (be, sql);
|
||||
g_free (sql);
|
||||
std::stringstream sql;
|
||||
sql << "DELETE FROM " << AMOUNTS_TABLE << " WHERE budget_guid='"<<
|
||||
guid_buf << "'";
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
be->execute_nonselect_statement(stmt);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -335,10 +335,9 @@ GncSqlBudgetBackend::load_all (GncSqlBackend* be)
|
||||
InstanceVec instances;
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, BUDGET_TABLE);
|
||||
if (stmt == nullptr)
|
||||
return;
|
||||
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << BUDGET_TABLE;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
for (auto row : *result)
|
||||
{
|
||||
|
@ -146,8 +146,9 @@ GncSqlCommodityBackend::load_all (GncSqlBackend* be)
|
||||
gnc_commodity_table* pTable;
|
||||
|
||||
pTable = gnc_commodity_table_get_table (be->book());
|
||||
auto stmt = gnc_sql_create_select_statement (be, COMMODITIES_TABLE);
|
||||
if (stmt == nullptr) return;
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << COMMODITIES_TABLE;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
|
||||
for (auto row : *result)
|
||||
|
@ -126,7 +126,9 @@ GncSqlCustomerBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
InstanceVec instances;
|
||||
|
||||
@ -157,7 +159,7 @@ GncSqlCustomerBackend::create_tables (GncSqlBackend* be)
|
||||
else if (version == 1)
|
||||
{
|
||||
/* Upgrade 64 bit int handling */
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
be->set_table_version (TABLE_NAME, TABLE_VERSION);
|
||||
|
||||
PINFO ("Customers table upgraded from version 1 to version %d\n",
|
||||
|
@ -112,7 +112,9 @@ GncSqlEmployeeBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
|
||||
InstanceVec instances;
|
||||
@ -144,7 +146,7 @@ GncSqlEmployeeBackend::create_tables (GncSqlBackend* be)
|
||||
else if (version == 1)
|
||||
{
|
||||
/* Upgrade 64 bit int handling */
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
be->set_table_version (TABLE_NAME, TABLE_VERSION);
|
||||
|
||||
PINFO ("Employees table upgraded from version 1 to version %d\n",
|
||||
|
@ -194,7 +194,9 @@ GncSqlEntryBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
InstanceVec instances;
|
||||
|
||||
@ -228,7 +230,7 @@ GncSqlEntryBackend::create_tables (GncSqlBackend* be)
|
||||
1->2: 64 bit int handling
|
||||
2->3: "entered" -> "date_entered", and it can be NULL
|
||||
*/
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
be->set_table_version (TABLE_NAME, TABLE_VERSION);
|
||||
|
||||
PINFO ("Entries table upgraded from version %d to version %d\n", version,
|
||||
|
@ -133,7 +133,9 @@ GncSqlInvoiceBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
InstanceVec instances;
|
||||
|
||||
@ -167,7 +169,7 @@ GncSqlInvoiceBackend::create_tables (GncSqlBackend* be)
|
||||
1->2: 64 bit int handling
|
||||
2->3: invoice open date can be NULL
|
||||
*/
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
be->set_table_version (TABLE_NAME, TABLE_VERSION);
|
||||
|
||||
PINFO ("Invoices table upgraded from version %d to version %d\n", version,
|
||||
|
@ -105,7 +105,9 @@ GncSqlJobBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
InstanceVec instances;
|
||||
|
||||
|
@ -127,7 +127,9 @@ GncSqlLotsBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
if (stmt != nullptr)
|
||||
{
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
@ -165,7 +167,7 @@ GncSqlLotsBackend::create_tables (GncSqlBackend* be)
|
||||
Create a temporary table, copy the data from the old table, delete the
|
||||
old table, then rename the new one. */
|
||||
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
be->set_table_version (TABLE_NAME, TABLE_VERSION);
|
||||
|
||||
PINFO ("Lots table upgraded from version 1 to version %d\n", TABLE_VERSION);
|
||||
|
@ -105,7 +105,9 @@ GncSqlOrderBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
InstanceVec instances;
|
||||
|
||||
|
@ -108,7 +108,9 @@ GncSqlPriceBackend::load_all (GncSqlBackend* be)
|
||||
|
||||
pBook = be->book();
|
||||
pPriceDB = gnc_pricedb_get_db (pBook);
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
if (stmt != nullptr)
|
||||
{
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
@ -153,7 +155,7 @@ GncSqlPriceBackend::create_tables (GncSqlBackend* be)
|
||||
else if (version == 1)
|
||||
{
|
||||
/* Upgrade 64 bit int handling */
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
be->set_table_version (TABLE_NAME, TABLE_VERSION);
|
||||
|
||||
PINFO ("Prices table upgraded from version 1 to version %d\n", TABLE_VERSION);
|
||||
|
@ -388,17 +388,17 @@ upgrade_recurrence_table_1_2 (GncSqlBackend* be)
|
||||
/* Step 2: insert a default value in the newly created column */
|
||||
{
|
||||
gchar* weekend_adj_str = recurrenceWeekendAdjustToString (WEEKEND_ADJ_NONE);
|
||||
gchar* update_query = g_strdup_printf ("UPDATE %s SET %s = '%s';",
|
||||
TABLE_NAME,
|
||||
weekend_adjust_col_table[0]->name(),
|
||||
weekend_adj_str);
|
||||
(void)gnc_sql_execute_nonselect_sql (be, update_query);
|
||||
std::stringstream sql;
|
||||
sql << "UPDATE " << TABLE_NAME << " SET " <<
|
||||
weekend_adjust_col_table[0]->name() << "='" <<
|
||||
weekend_adj_str << "'";
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
be->execute_nonselect_statement(stmt);
|
||||
g_free (weekend_adj_str);
|
||||
g_free (update_query);
|
||||
}
|
||||
|
||||
/* Step 3: rewrite the table, requiring the weekend_adj column to be non-null */
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
|
||||
}
|
||||
|
||||
|
@ -123,7 +123,9 @@ GncSqlSchedXactionBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, SCHEDXACTION_TABLE);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << SCHEDXACTION_TABLE;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
if (stmt == NULL) return;
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
SchedXactions* sxes;
|
||||
|
@ -1017,7 +1017,7 @@ GncSqlSlotsBackend::create_tables (GncSqlBackend* be)
|
||||
*/
|
||||
if (version == 1)
|
||||
{
|
||||
gnc_sql_upgrade_table (be, TABLE_NAME, col_table);
|
||||
be->upgrade_table(TABLE_NAME, col_table);
|
||||
ok = be->create_index ("slots_guid_index", TABLE_NAME,
|
||||
obj_guid_col_table);
|
||||
if (!ok)
|
||||
|
@ -294,7 +294,9 @@ GncSqlTaxTableBackend::load_all (GncSqlBackend* be)
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
/* First time, create the query */
|
||||
auto stmt = gnc_sql_create_select_statement (be, TT_TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TT_TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
GList* tt_needing_parents = NULL;
|
||||
|
||||
@ -341,7 +343,7 @@ GncSqlTaxTableBackend::create_tables (GncSqlBackend* be)
|
||||
else if (version == 1)
|
||||
{
|
||||
/* Upgrade 64 bit int handling */
|
||||
gnc_sql_upgrade_table (be, TT_TABLE_NAME, tt_col_table);
|
||||
be->upgrade_table(TT_TABLE_NAME, tt_col_table);
|
||||
be->set_table_version (TT_TABLE_NAME, TT_TABLE_VERSION);
|
||||
PINFO ("Taxtables table upgraded from version 1 to version %d\n",
|
||||
TT_TABLE_VERSION);
|
||||
@ -356,7 +358,7 @@ GncSqlTaxTableBackend::create_tables (GncSqlBackend* be)
|
||||
else if (version == 1)
|
||||
{
|
||||
/* Upgrade 64 bit int handling */
|
||||
gnc_sql_upgrade_table (be, TTENTRIES_TABLE_NAME, ttentries_col_table);
|
||||
be->upgrade_table(TTENTRIES_TABLE_NAME, ttentries_col_table);
|
||||
be->set_table_version (TTENTRIES_TABLE_NAME, TTENTRIES_TABLE_VERSION);
|
||||
PINFO ("Taxtable entries table upgraded from version 1 to version %d\n",
|
||||
TTENTRIES_TABLE_VERSION);
|
||||
|
@ -492,7 +492,7 @@ GncSqlTransBackend::create_tables (GncSqlBackend* be)
|
||||
1->2: 64 bit int handling
|
||||
2->3: allow dates to be NULL
|
||||
*/
|
||||
gnc_sql_upgrade_table (be, m_table_name.c_str(), tx_col_table);
|
||||
be->upgrade_table(m_table_name.c_str(), tx_col_table);
|
||||
be->set_table_version (m_table_name.c_str(), m_version);
|
||||
PINFO ("Transactions table upgraded from version %d to version %d\n",
|
||||
version, m_version);
|
||||
@ -522,7 +522,7 @@ GncSqlSplitBackend::create_tables (GncSqlBackend* be)
|
||||
/* Upgrade:
|
||||
1->2: 64 bit int handling
|
||||
3->4: Split reconcile date can be NULL */
|
||||
gnc_sql_upgrade_table (be, m_table_name.c_str(), split_col_table);
|
||||
be->upgrade_table(m_table_name.c_str(), split_col_table);
|
||||
if (!be->create_index("splits_tx_guid_index",
|
||||
m_table_name.c_str(),
|
||||
tx_guid_col_table))
|
||||
@ -969,9 +969,8 @@ convert_query_term_to_sql (const GncSqlBackend* be, const gchar* fieldName,
|
||||
else if (g_strcmp0 (pPredData->type_name, QOF_TYPE_DATE) == 0)
|
||||
{
|
||||
query_date_t date_data = (query_date_t)pPredData;
|
||||
gchar* datebuf;
|
||||
|
||||
datebuf = gnc_sql_convert_timespec_to_string (be, date_data->date);
|
||||
auto datebuf = be->time64_to_string (date_data->date.tv_sec);
|
||||
g_string_append_printf (sql, "'%s'", datebuf);
|
||||
|
||||
}
|
||||
|
@ -115,7 +115,9 @@ GncSqlVendorBackend::load_all (GncSqlBackend* be)
|
||||
{
|
||||
g_return_if_fail (be != NULL);
|
||||
|
||||
auto stmt = gnc_sql_create_select_statement (be, TABLE_NAME);
|
||||
std::stringstream sql;
|
||||
sql << "SELECT * FROM " << TABLE_NAME;
|
||||
auto stmt = be->create_statement_from_sql(sql.str());
|
||||
auto result = be->execute_select_statement(stmt);
|
||||
InstanceVec instances;
|
||||
|
||||
|
@ -591,31 +591,29 @@ gnc_sql_add_objectref_guid_col_info_to_list (const GncSqlBackend* be,// 1
|
||||
test_gnc_sql_add_objectref_guid_col_info_to_list (Fixture *fixture, gconstpointer pData)
|
||||
{
|
||||
}*/
|
||||
/* gnc_sql_convert_timespec_to_string
|
||||
gchar*
|
||||
gnc_sql_convert_timespec_to_string (const GncSqlBackend* be, Timespec ts)// C: 1 */
|
||||
/* GncDbiBackend::time64_to_string
|
||||
std::string
|
||||
GncDbiBackend::time64_to_string (time64 t)// C: 1 */
|
||||
|
||||
#define numtests 6
|
||||
static void
|
||||
test_gnc_sql_convert_timespec_to_string ()
|
||||
test_time64_to_string ()
|
||||
{
|
||||
GncSqlBackend be {nullptr, nullptr, "%4d-%02d-%02d %02d:%02d:%02d"};
|
||||
const char* date[numtests] = {"1995-03-11 19:17:26",
|
||||
const char* dates[numtests] = {"1995-03-11 19:17:26",
|
||||
"2001-04-20 11:44:07",
|
||||
"1964-02-29 09:15:23",
|
||||
"1959-04-02 00:00:00",
|
||||
"2043-11-22 05:32:45",
|
||||
"2153-12-18 01:15:30"
|
||||
};
|
||||
int i;
|
||||
for (i = 0; i < numtests; i++)
|
||||
|
||||
for (auto date : dates)
|
||||
{
|
||||
|
||||
Timespec ts = gnc_iso8601_to_timespec_gmt (date[i]);
|
||||
gchar* datestr = gnc_sql_convert_timespec_to_string (&be, ts);
|
||||
g_assert_cmpstr (date[i], == , datestr);
|
||||
|
||||
g_free (datestr);
|
||||
Timespec ts = gnc_iso8601_to_timespec_gmt (date);
|
||||
auto datestr = be.time64_to_string (ts.tv_sec);
|
||||
g_assert_cmpstr (date, == , datestr.c_str());
|
||||
}
|
||||
|
||||
}
|
||||
@ -937,8 +935,8 @@ test_suite_gnc_backend_sql (void)
|
||||
// GNC_TEST_ADD (suitename, "add value guid to vec", Fixture, nullptr, test_add_value_guid_to_vec, teardown);
|
||||
// GNC_TEST_ADD (suitename, "gnc sql add gvalue objectref guid to slist", Fixture, nullptr, test_gnc_sql_add_objectref_guid_to_vec, teardown);
|
||||
// GNC_TEST_ADD (suitename, "gnc sql add objectref guid col info to list", Fixture, nullptr, test_gnc_sql_add_objectref_guid_col_info_to_list, teardown);
|
||||
GNC_TEST_ADD_FUNC (suitename, "gnc sql convert timespec to string",
|
||||
test_gnc_sql_convert_timespec_to_string);
|
||||
GNC_TEST_ADD_FUNC (suitename, "GncDbiBackend time64 to string",
|
||||
test_time64_to_string);
|
||||
// GNC_TEST_ADD (suitename, "load timespec", Fixture, nullptr, test_load_timespec, teardown);
|
||||
// GNC_TEST_ADD (suitename, "add timespec col info to list", Fixture, nullptr, test_add_timespec_col_info_to_list, teardown);
|
||||
// GNC_TEST_ADD (suitename, "add value timespec to vec", Fixture, nullptr, test_add_value_timespec_to_vec, teardown);
|
||||
@ -970,7 +968,6 @@ test_suite_gnc_backend_sql (void)
|
||||
// GNC_TEST_ADD (suitename, "build update statement", Fixture, nullptr, test_build_update_statement, teardown);
|
||||
// GNC_TEST_ADD (suitename, "build delete statement", Fixture, nullptr, test_build_delete_statement, teardown);
|
||||
// GNC_TEST_ADD (suitename, "do create table", Fixture, nullptr, test_do_create_table, teardown);
|
||||
// GNC_TEST_ADD (suitename, "gnc sql create temp table", Fixture, nullptr, test_gnc_sql_create_temp_table, teardown);
|
||||
// GNC_TEST_ADD (suitename, "gnc sql create index", Fixture, nullptr, test_gnc_sql_create_index, teardown);
|
||||
// GNC_TEST_ADD (suitename, "gnc sql upgrade table", Fixture, nullptr, test_gnc_sql_upgrade_table, teardown);
|
||||
// GNC_TEST_ADD (suitename, "gnc sql add columns to table", Fixture, nullptr, test_gnc_sql_add_columns_to_table, teardown);
|
||||
|
Loading…
Reference in New Issue
Block a user