40 #include "gnc-sql-backend.hpp" 41 #include "gnc-sql-column-table-entry.hpp" 43 G_GNUC_UNUSED
static QofLogModule log_module =
G_LOG_DOMAIN;
45 #define ADDRESS_MAX_NAME_LEN 1024 46 #define ADDRESS_MAX_ADDRESS_LINE_LEN 1024 47 #define ADDRESS_MAX_PHONE_LEN 128 48 #define ADDRESS_MAX_FAX_LEN 128 49 #define ADDRESS_MAX_EMAIL_LEN 256 51 static EntryVec col_table
53 std::make_shared<GncSqlColumnTableEntryImpl<CT_STRING>>(
54 "name", CT_STRING, ADDRESS_MAX_NAME_LEN, COL_NNUL,
"name"),
55 gnc_sql_make_table_entry<CT_STRING>(
56 "addr1", ADDRESS_MAX_ADDRESS_LINE_LEN, COL_NNUL,
"addr1"),
57 gnc_sql_make_table_entry<CT_STRING>(
58 "addr2", ADDRESS_MAX_ADDRESS_LINE_LEN, COL_NNUL,
"addr2"),
59 gnc_sql_make_table_entry<CT_STRING>(
60 "addr3", ADDRESS_MAX_ADDRESS_LINE_LEN, COL_NNUL,
"addr3"),
61 gnc_sql_make_table_entry<CT_STRING>(
62 "addr4", ADDRESS_MAX_ADDRESS_LINE_LEN, COL_NNUL,
"addr4"),
63 gnc_sql_make_table_entry<CT_STRING>(
64 "phone", ADDRESS_MAX_PHONE_LEN, COL_NNUL,
"phone"),
65 gnc_sql_make_table_entry<CT_STRING>(
66 "fax", ADDRESS_MAX_FAX_LEN, COL_NNUL,
"fax" ),
67 gnc_sql_make_table_entry<CT_STRING>(
68 "email", ADDRESS_MAX_EMAIL_LEN, COL_NNUL,
"email"),
71 typedef void (*AddressSetterFunc) (gpointer,
GncAddress*);
72 typedef GncAddress* (*AddressGetterFunc) (
const gpointer);
78 gpointer pObject)
const noexcept
80 g_return_if_fail (sql_be != NULL);
81 g_return_if_fail (pObject != NULL);
83 auto addr = gncAddressCreate (sql_be->book(), QOF_INSTANCE(pObject));
85 for (
auto const& subtable_row : col_table)
87 auto buf = std::string{m_col_name} +
"_" + subtable_row->m_col_name;
88 auto val = row.get_string_at_col (buf.c_str());
89 auto sub_setter = subtable_row->get_setter(GNC_ID_ADDRESS);
91 set_parameter (addr, val->c_str(), sub_setter,
92 subtable_row->m_gobj_param_name);
95 set_parameter (pObject, addr,
96 reinterpret_cast<AddressSetterFunc>(get_setter(obj_name)),
103 for (
auto const& subtable_row : col_table)
105 auto buf = std::string{m_col_name} +
"_" + subtable_row->m_col_name;
107 true,
false, m_flags & COL_PKEY, m_flags & COL_NNUL);
108 vec.emplace_back(std::move(info));
117 const gpointer pObject,
118 PairVec& vec)
const noexcept
120 auto addr(get_row_value_from_object<char*>(obj_name, pObject));
121 if (addr ==
nullptr)
return;
123 for (
auto const& subtable_row : col_table)
125 auto s = subtable_row->get_row_value_from_object<
char*>(GNC_ID_ADDRESS,
129 auto buf = std::string{m_col_name} +
"_" + subtable_row->m_col_name;
130 vec.emplace_back(make_pair(buf, quote_string(s)));
information required to create a column in a table.
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
const gchar * QofIdTypeConst
QofIdTypeConst declaration.
void add_to_query(QofIdTypeConst obj_name, void *pObject, PairVec &vec) const noexcept override
Add a pair of the table column heading and object's value's string representation to a PairVec; used ...
void load(const GncSqlBackend *sql_be, GncSqlRow &row, QofIdTypeConst obj_name, void *pObject) const noexcept override
Load a value into an object from the database row.
Row of SQL Query results.
All type declarations for the whole Gnucash engine.
void add_to_table(ColVec &vec) const noexcept override
Add a GncSqlColumnInfo structure for the column type to a ColVec.
Main SQL backend structure.