35 #include "Recurrence.h"
41 #if defined( S_SPLINT_S )
42 #include "splint-defs.h"
47 #define TABLE_NAME "recurrences"
48 #define TABLE_VERSION 2
50 #define BUDGET_MAX_RECURRENCE_PERIOD_TYPE_LEN 2048
51 #define BUDGET_MAX_RECURRENCE_WEEKEND_ADJUST_LEN 2048
62 static gpointer get_obj_guid( gpointer pObject );
63 static void set_obj_guid(
void );
64 static gint get_recurrence_mult( gpointer pObject );
65 static void set_recurrence_mult( gpointer pObject, gint value );
66 static gpointer get_recurrence_period_type( gpointer pObject );
67 static void set_recurrence_period_type( gpointer pObject, gpointer pValue );
68 static gpointer get_recurrence_weekend_adjust( gpointer pObject );
69 static void set_recurrence_weekend_adjust( gpointer pObject, gpointer pValue );
70 static gpointer get_recurrence_period_start( gpointer pObject );
71 static void set_recurrence_period_start( gpointer pObject, gpointer pValue );
78 "obj_guid", CT_GUID, 0,
COL_NNUL, NULL, NULL,
82 "recurrence_mult", CT_INT, 0,
COL_NNUL, NULL, NULL,
86 "recurrence_period_type", CT_STRING, BUDGET_MAX_RECURRENCE_PERIOD_TYPE_LEN,
COL_NNUL, NULL, NULL,
87 (
QofAccessFunc)get_recurrence_period_type, set_recurrence_period_type
90 "recurrence_period_start", CT_GDATE, 0,
COL_NNUL, NULL, NULL,
91 (
QofAccessFunc)get_recurrence_period_start, set_recurrence_period_start
94 "recurrence_weekend_adjust", CT_STRING, BUDGET_MAX_RECURRENCE_WEEKEND_ADJUST_LEN,
COL_NNUL, NULL, NULL,
95 (
QofAccessFunc)get_recurrence_weekend_adjust, set_recurrence_weekend_adjust
107 "obj_guid", CT_GUID, 0, 0, NULL, NULL,
119 "recurrence_weekend_adjust", CT_STRING, BUDGET_MAX_RECURRENCE_WEEKEND_ADJUST_LEN, 0,
128 get_obj_guid( gpointer pObject )
132 g_return_val_if_fail( pObject != NULL, NULL );
134 return (gpointer)pInfo->guid;
144 get_recurrence_mult( gpointer pObject )
148 g_return_val_if_fail( pObject != NULL, 0 );
149 g_return_val_if_fail( pInfo->pRecurrence != NULL, 0 );
151 return (gint)pInfo->pRecurrence->mult;
155 set_recurrence_mult( gpointer pObject, gint value )
159 g_return_if_fail( pObject != NULL );
160 g_return_if_fail( pInfo->pRecurrence != NULL );
162 pInfo->pRecurrence->mult = (guint16)value;
166 get_recurrence_period_type( gpointer pObject )
170 g_return_val_if_fail( pObject != NULL, NULL );
171 g_return_val_if_fail( pInfo->pRecurrence != NULL, NULL );
173 return (gpointer)recurrencePeriodTypeToString(
174 recurrenceGetPeriodType( pInfo->pRecurrence ) );
178 set_recurrence_period_type( gpointer pObject, gpointer pValue )
182 g_return_if_fail( pObject != NULL );
183 g_return_if_fail( pInfo->pRecurrence != NULL );
184 g_return_if_fail( pValue != NULL );
186 pInfo->pRecurrence->ptype = recurrencePeriodTypeFromString( (gchar*)pValue );
190 get_recurrence_weekend_adjust( gpointer pObject )
194 g_return_val_if_fail( pObject != NULL, NULL );
195 g_return_val_if_fail( pInfo->pRecurrence != NULL, NULL );
197 return (gpointer)recurrenceWeekendAdjustToString(
198 recurrenceGetWeekendAdjust( pInfo->pRecurrence ) );
202 set_recurrence_weekend_adjust( gpointer pObject, gpointer pValue )
206 g_return_if_fail( pObject != NULL );
207 g_return_if_fail( pInfo->pRecurrence != NULL );
208 g_return_if_fail( pValue != NULL );
210 pInfo->pRecurrence->wadj = recurrenceWeekendAdjustFromString( (gchar*)pValue );
214 get_recurrence_period_start( gpointer pObject )
219 g_return_val_if_fail( pObject != NULL, NULL );
220 g_return_val_if_fail( pInfo->pRecurrence != NULL, NULL );
222 date = recurrenceGetDate( pInfo->pRecurrence );
223 return (gpointer)&date;
227 set_recurrence_period_start( gpointer pObject, gpointer pValue )
230 GDate* date = (GDate*)pValue;
232 g_return_if_fail( pObject != NULL );
233 g_return_if_fail( pInfo->pRecurrence != NULL );
234 g_return_if_fail( pValue != NULL );
236 pInfo->pRecurrence->start = *date;
246 g_return_val_if_fail( be != NULL, FALSE );
247 g_return_val_if_fail( guid != NULL, FALSE );
248 g_return_val_if_fail( r != NULL, FALSE );
250 (void)gnc_sql_recurrence_delete( be, guid );
252 recurrence_info.be = be;
253 recurrence_info.guid = guid;
256 TABLE_NAME, &recurrence_info, col_table );
265 g_return_if_fail( be != NULL );
266 g_return_if_fail( guid != NULL );
268 (void)gnc_sql_recurrence_delete( be, guid );
270 recurrence_info.be = be;
271 recurrence_info.guid = guid;
272 for ( l = schedule; l != NULL; l = g_list_next( l ) )
274 recurrence_info.pRecurrence = (
Recurrence*)l->data;
276 TABLE_NAME, &recurrence_info, col_table );
285 g_return_val_if_fail( be != NULL, FALSE );
286 g_return_val_if_fail( guid != NULL, FALSE );
288 recurrence_info.be = be;
289 recurrence_info.guid = guid;
291 TABLE_NAME, &recurrence_info, guid_col_table );
299 g_return_if_fail( be != NULL );
300 g_return_if_fail( row != NULL );
301 g_return_if_fail( r != NULL );
303 recurrence_info.be = be;
304 recurrence_info.pRecurrence = r;
317 g_return_val_if_fail( be != NULL, NULL );
318 g_return_val_if_fail( guid != NULL, NULL );
321 buf = g_strdup_printf(
"SELECT * FROM %s WHERE obj_guid='%s'", TABLE_NAME, guid_buf );
322 stmt = gnc_sql_connection_create_statement_from_sql( be->
conn, buf );
325 gnc_sql_statement_dispose( stmt );
335 g_return_val_if_fail( be != NULL, NULL );
336 g_return_val_if_fail( guid != NULL, NULL );
338 result = gnc_sql_set_recurrences_from_db( be, guid );
339 if ( result != NULL )
341 guint numRows = gnc_sql_result_get_num_rows( result );
347 g_warning(
"More than 1 recurrence found: first one used" );
350 g_assert( r != NULL );
351 load_recurrence( be, gnc_sql_result_get_first_row( result ), r );
355 g_warning(
"No recurrences found" );
357 gnc_sql_result_dispose( result );
369 g_return_val_if_fail( be != NULL, NULL );
370 g_return_val_if_fail( guid != NULL, NULL );
372 result = gnc_sql_set_recurrences_from_db( be, guid );
373 if ( result != NULL )
375 GncSqlRow* row = gnc_sql_result_get_first_row( result );
377 while ( row != NULL )
380 g_assert( pRecurrence != NULL );
381 load_recurrence( be, row, pRecurrence );
382 list = g_list_append( list, pRecurrence );
383 row = gnc_sql_result_get_next_row( result );
385 gnc_sql_result_dispose( result );
399 PERR(
"Unable to add recurrence_weekend_adjust column\n" );
405 gchar *weekend_adj_str = recurrenceWeekendAdjustToString(WEEKEND_ADJ_NONE);
406 gchar *update_query = g_strdup_printf (
"UPDATE %s SET %s = '%s';",
408 weekend_adjust_col_table[0].col_name,
411 g_free (weekend_adj_str);
412 g_free (update_query);
426 g_return_if_fail( be != NULL );
433 else if ( version < TABLE_VERSION )
440 upgrade_recurrence_table_1_2 (be);
443 PINFO(
"Recurrence table upgraded from version %d to version %d\n", version, TABLE_VERSION);
449 gnc_sql_init_recurrence_handler(
void )
453 GNC_SQL_BACKEND_VERSION,
457 create_recurrence_tables,
gboolean qof_object_register_backend(QofIdTypeConst type_name, const char *backend_name, gpointer be_data)
gint gnc_sql_get_table_version(const GncSqlBackend *be, const gchar *table_name)
void gnc_sql_upgrade_table(GncSqlBackend *be, const gchar *table_name, const GncSqlColumnTableEntry *col_table)
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
#define PINFO(format, args...)
gint gnc_sql_execute_nonselect_sql(GncSqlBackend *be, const gchar *sql)
gboolean gnc_sql_create_table(GncSqlBackend *be, const gchar *table_name, gint table_version, const GncSqlColumnTableEntry *col_table)
load and save data to SQL
gboolean gnc_sql_add_columns_to_table(GncSqlBackend *be, const gchar *table_name, const GncSqlColumnTableEntry *new_col_table)
gchar * guid_to_string_buff(const GncGUID *guid, gchar *buff)
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
#define PERR(format, args...)
load and save accounts data to SQL
gboolean gnc_sql_set_table_version(GncSqlBackend *be, const gchar *table_name, gint version)
#define GUID_ENCODING_LENGTH
GncSqlResult * gnc_sql_execute_select_statement(GncSqlBackend *be, GncSqlStatement *stmt)
All type declarations for the whole Gnucash engine.
void gnc_sql_load_object(const GncSqlBackend *be, GncSqlRow *row, QofIdTypeConst obj_name, gpointer pObject, const GncSqlColumnTableEntry *table)
void(* QofSetterFunc)(gpointer, gpointer)
gboolean gnc_sql_do_db_operation(GncSqlBackend *be, E_DB_OPERATION op, const gchar *table_name, QofIdTypeConst obj_name, gpointer pObject, const GncSqlColumnTableEntry *table)
const gchar * QofLogModule