diff options
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r-- | src/analysis/db/collection.c | 77 |
1 files changed, 72 insertions, 5 deletions
diff --git a/src/analysis/db/collection.c b/src/analysis/db/collection.c index 84acc58..27f4ddb 100644 --- a/src/analysis/db/collection.c +++ b/src/analysis/db/collection.c @@ -31,6 +31,7 @@ #include "collection-int.h" +#include "misc/rlestr.h" #include "../../common/extstr.h" #include "../../common/io.h" #include "../../glibext/chrysamarshal.h" @@ -59,6 +60,9 @@ static void g_db_collection_finalize(GDbCollection *); /* Décrit les colonnes utiles à un chargement de données. */ +static bool _g_db_collection_setup_load(GDbCollection *, bound_value **, size_t *); + +/* Décrit les colonnes utiles à un chargement de données. */ static bool g_db_collection_setup_load(GDbCollection *, bound_value **, size_t *); /* Enregistre un élément de collection dans une base de données. */ @@ -93,6 +97,8 @@ static void g_db_collection_class_init(GDbCollectionClass *klass) object->dispose = (GObjectFinalizeFunc/* ! */)g_db_collection_dispose; object->finalize = (GObjectFinalizeFunc)g_db_collection_finalize; + klass->setup_load = (collec_setup_load_fc)_g_db_collection_setup_load; + g_signal_new("content-changed", G_TYPE_DB_COLLECTION, G_SIGNAL_RUN_LAST, @@ -578,6 +584,65 @@ bool _g_db_collection_modify_item(GDbCollection *collec, GDbItem *item, bool loc /****************************************************************************** * * +* Paramètres : collec = ensemble d'éléments spectateur des opérations. * +* db = accès à la base de données. * +* * +* Description : Crée la table d'élément dans une base de données. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_db_collection_create_db_table(const GDbCollection *collec, sqlite3 *db) +{ + fprintf(stderr, "CREATE '%s'\n", collec->name); + + return G_DB_COLLECTION_GET_CLASS(collec)->create_table(collec, db); + +} + + +/****************************************************************************** +* * +* Paramètres : collec = ensemble d'éléments à consulter. * +* values = tableau d'éléments à compléter. [OUT] * +* count = nombre de descriptions renseignées. [OUT] * +* * +* Description : Décrit les colonnes utiles à un chargement de données. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool _g_db_collection_setup_load(GDbCollection *collec, bound_value **values, size_t *count) +{ + *count += 2; + *values = (bound_value *)realloc(*values, *count * sizeof(bound_value)); + + (*values)[*count - 2].name = "created"; + + (*values)[*count - 1].name = "modified"; + + if (!setup_load_of_rle_string(NULL, "author", values, count)) + return false; + + if (!setup_load_of_rle_string(NULL, "tool", values, count)) + return false; + + if (!setup_load_of_rle_string(NULL, "label", values, count)) + return false; + + return true; + +} + + +/****************************************************************************** +* * * Paramètres : collec = ensemble d'éléments à consulter. * * values = tableau d'éléments à compléter. [OUT] * * count = nombre de descriptions renseignées. [OUT] * @@ -622,6 +687,7 @@ bool g_db_collection_load_all_items(GDbCollection *collec, sqlite3 *db) size_t i; /* Boucle de parcours */ sqlite3_stmt *stmt; /* Déclaration mise en place */ int ret; /* Bilan d'un appel à SQLite */ + GDbItem *new; /* Nouvel élément à insérer */ if (!g_db_collection_setup_load(collec, &values, &count)) return false; @@ -644,7 +710,7 @@ bool g_db_collection_load_all_items(GDbCollection *collec, sqlite3 *db) sql = stradd(sql, collec->name); sql = stradd(sql, ";"); - ret = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); + ret = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); if (ret != SQLITE_OK) { fprintf(stderr, "Can't prepare SELECT statment '%s' (ret=%d): %s\n", sql, ret, sqlite3_errmsg(db)); @@ -695,7 +761,10 @@ bool g_db_collection_load_all_items(GDbCollection *collec, sqlite3 *db) /* Chargement d'un nouvel élément */ - result = G_DB_COLLECTION_GET_CLASS(collec)->load_item(collec, values, count); + new = g_object_new(G_DB_COLLECTION(collec)->type, NULL); + + result = g_db_item_load(new, values, count); + result &= g_db_collection_add_item(G_DB_COLLECTION(collec), new); } @@ -707,8 +776,6 @@ bool g_db_collection_load_all_items(GDbCollection *collec, sqlite3 *db) free(sql); - printf("LOAD ? %d\n", result); - return result; } @@ -739,7 +806,7 @@ static bool g_db_collection_store_item(const GDbCollection *collec, const GDbIte int ret; /* Bilan d'un appel à SQLite */ int index; /* Indice de valeur attachée */ - if (!g_db_item_prepare_db_statement(item, true, &values, &count)) + if (!g_db_item_prepare_db_statement(item, &values, &count)) return false; result = false; |