diff options
Diffstat (limited to 'src/analysis/db/item.c')
| -rw-r--r-- | src/analysis/db/item.c | 93 | 
1 files changed, 93 insertions, 0 deletions
| diff --git a/src/analysis/db/item.c b/src/analysis/db/item.c index e2fd7f3..7fa1a52 100644 --- a/src/analysis/db/item.c +++ b/src/analysis/db/item.c @@ -24,8 +24,13 @@  #include "item.h" +#include <malloc.h> +#include <sqlite3.h> + +  #include "item-int.h"  #include "../../common/io.h" +#include "../../core/params.h" @@ -52,6 +57,13 @@ static bool g_db_item_send_to_fd(const GDbItem *, int, int); +/* --------------------- MANIPULATIONS AVEC UNE BASE DE DONNEES --------------------- */ + + +/* Constitue les champs destinés à une insertion / modification. */ +static bool _g_db_item_prepare_db_statement(const GDbItem *, bool, bound_value **, size_t *); + +  /* Indique le type défini pour une base d'élément de collection générique. */  G_DEFINE_TYPE(GDbItem, g_db_item, G_TYPE_OBJECT); @@ -83,6 +95,8 @@ static void g_db_item_class_init(GDbItemClass *klass)      klass->recv = (recv_db_item_fc)g_db_item_recv_from_fd;      klass->send = (send_db_item_fc)g_db_item_send_to_fd; +    klass->prepare_stmt = (prepare_db_statement)_g_db_item_prepare_db_statement; +  } @@ -354,3 +368,82 @@ bool g_db_item_is_volatile(const GDbItem *item)      return item->is_volatile;  } + + + +/* ---------------------------------------------------------------------------------- */ +/*                       MANIPULATIONS AVEC UNE BASE DE DONNEES                       */ +/* ---------------------------------------------------------------------------------- */ + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : item   = base d'éléments sur laquelle s'appuyer.             * +*                create = indique si la préparation vise une création ou non. * +*                values = couples de champs et de valeurs à lier. [OUT]       * +*                count  = nombre de ces couples. [OUT]                        * +*                                                                             * +*  Description : Constitue les champs destinés à une insertion / modification.* +*                                                                             * +*  Retour      : Bilan de l'opération : succès ou non.                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static bool _g_db_item_prepare_db_statement(const GDbItem *item, bool create, bound_value **values, size_t *count) +{ +    char *author;                           /* Identification à diffuser   */ +    bound_value *value;                     /* Valeur à éditer / définir   */ + +    if (!g_generic_config_get_value(get_main_configuration(), MPK_AUTHOR_NAME, &author)) +        return false; + +    *values = (bound_value *)realloc(*values, ++(*count) * sizeof(bound_value)); +    value = &(*values)[*count - 1]; + +    value->name = "user"; +    value->type = SQLITE_TEXT; +    value->string = author; +    value->delete = free; + +    if (!create) +    { +        *values = (bound_value *)realloc(*values, ++(*count) * sizeof(bound_value)); +        value = &(*values)[*count - 1]; + +        value->name = "modified"; +        value->type = SQLITE_RAW; +        value->string = "CURRENT_TIMESTAMP"; +        value->delete = SQLITE_STATIC; + +    } + +    return true; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : item   = base d'éléments sur laquelle s'appuyer.             * +*                create = indique si la préparation vise une création ou non. * +*                values = couples de champs et de valeurs à lier. [OUT]       * +*                count  = nombre de ces couples. [OUT]                        * +*                                                                             * +*  Description : Constitue les champs destinés à une insertion / modification.* +*                                                                             * +*  Retour      : Bilan de l'opération : succès ou non.                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool g_db_item_prepare_db_statement(const GDbItem *item, bool create, bound_value **values, size_t *count) +{ +    *values = NULL; +    *count = 0; + +    return G_DB_ITEM_GET_CLASS(item)->prepare_stmt(item, create, values, count); + +} | 
