diff options
author | Charlie Brej <cbrej@cs.man.ac.uk> | 2010-08-07 23:41:39 +0100 |
---|---|---|
committer | Charlie Brej <cbrej@cs.man.ac.uk> | 2010-08-07 23:41:39 +0100 |
commit | dec206347a1b8fbf45cb47de61befe700b5cef91 (patch) | |
tree | e7b20ed01207319766e8969659d5c7aaa756e73a | |
parent | 8d3a8327e8547b522ad944126279bae96a8366d5 (diff) |
Add optional caching on fork backends
-rw-r--r-- | src/libtidbit/tidbit-database-fork.c | 10 | ||||
-rw-r--r-- | src/libtidbit/tidbit-database-fork.h | 1 | ||||
-rw-r--r-- | src/libtidbit/tidbit.h | 2 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/libtidbit/tidbit-database-fork.c b/src/libtidbit/tidbit-database-fork.c index 4c68184..b56366b 100644 --- a/src/libtidbit/tidbit-database-fork.c +++ b/src/libtidbit/tidbit-database-fork.c @@ -38,14 +38,14 @@ static TidbitDatabaseFunctions backend_functions = { }; -PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b) +PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b, int caching) { PtrTidbitDatabaseFork backend = g_new(TidbitDatabaseFork, 1); backend->sub_a = sub_a; tidbit_database_ref (backend->sub_a); backend->sub_b = sub_b; tidbit_database_ref (backend->sub_b); - + backend->caching = caching; PtrTidbitDatabase database = tidbit_database_new(backend, &backend_functions); return database; } @@ -69,8 +69,12 @@ static PtrTidbitRecord tidbit_database_fork_fetch (PtrTidbitDatabase database, P { PtrTidbitDatabaseFork backend = GET_FORK_BACKEND(database); PtrTidbitRecord record = tidbit_database_fetch_record (backend->sub_a, guid); - if (!record) + if (!record) { record = tidbit_database_fetch_record (backend->sub_b, guid); + if (record && backend->caching){ + tidbit_database_insert_record (database, record); + } + } return record; } diff --git a/src/libtidbit/tidbit-database-fork.h b/src/libtidbit/tidbit-database-fork.h index 55ed9c3..474602f 100644 --- a/src/libtidbit/tidbit-database-fork.h +++ b/src/libtidbit/tidbit-database-fork.h @@ -23,6 +23,7 @@ typedef struct TidbitDatabaseFork{ PtrTidbitDatabase sub_a; PtrTidbitDatabase sub_b; + int caching; }TidbitDatabaseFork, *PtrTidbitDatabaseFork; diff --git a/src/libtidbit/tidbit.h b/src/libtidbit/tidbit.h index d58810c..5f2f2f0 100644 --- a/src/libtidbit/tidbit.h +++ b/src/libtidbit/tidbit.h @@ -62,7 +62,7 @@ PtrTidbitGuidSet tidbit_database_query (PtrTidbitDatabase database, PtrTidbitQue PtrTidbitDatabase tidbit_database_dbus_new (void); PtrTidbitDatabase tidbit_database_mem_new (void); PtrTidbitDatabase tidbit_database_http_new (void); -PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b); +PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b, int caching); PtrTidbitQuery tidbit_query_new (char* table_name); void tidbit_query_ref (PtrTidbitQuery query); |