summaryrefslogtreecommitdiff
path: root/src/analysis/db/collection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r--src/analysis/db/collection.c77
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;