diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2019-05-08 09:28:58 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2019-05-08 09:28:58 (GMT) |
commit | 86ba53836168bcc591f532f2419fa290de601572 (patch) | |
tree | 91c96614d6f7e3fd75800a52c0166c91c7f8ef31 /src/analysis/db/misc | |
parent | 28e53c2498903090182ebeb128347fcd92896cd9 (diff) |
Updated the core functions dealing with SQLite databases.
Diffstat (limited to 'src/analysis/db/misc')
-rw-r--r-- | src/analysis/db/misc/rlestr.c | 101 | ||||
-rw-r--r-- | src/analysis/db/misc/rlestr.h | 9 | ||||
-rw-r--r-- | src/analysis/db/misc/timestamp.c | 69 | ||||
-rw-r--r-- | src/analysis/db/misc/timestamp.h | 9 |
4 files changed, 67 insertions, 121 deletions
diff --git a/src/analysis/db/misc/rlestr.c b/src/analysis/db/misc/rlestr.c index 196b934..f26c146 100644 --- a/src/analysis/db/misc/rlestr.c +++ b/src/analysis/db/misc/rlestr.c @@ -326,31 +326,42 @@ bool pack_rle_string(const rle_string *str, packed_buffer *pbuf) /****************************************************************************** * * -* Paramètres : str = chaîne de caractères aux informations inutiles. * +* Paramètres : str = chaîne de caractères à compléter. * * name = désignation personnalisée du champ dans la BD. * -* values = couples de champs et de valeurs à lier. [OUT] * -* count = nombre de ces couples. [OUT] * +* values = tableau d'éléments à consulter. * +* count = nombre de descriptions renseignées. * * * -* Description : Constitue les champs destinés à une insertion / modification.* +* Description : Charge les valeurs utiles pour une chaîne de caractères. * * * -* Retour : Bilan de l'opération : succès ou non. * +* Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ -bool prepare_db_statement_for_rle_string(const rle_string *str, const char *name, bound_value **values, size_t *count) +bool load_rle_string(rle_string *str, const char *name, const bound_value *values, size_t count) { - bound_value *value; /* Valeur à éditer / définir */ + const bound_value *value; /* Valeur à intégrer */ - *values = (bound_value *)realloc(*values, ++(*count) * sizeof(bound_value)); - value = &(*values)[*count - 1]; + value = find_bound_value(values, count, name); + if (value == NULL) return false; - value->cname = name; - value->built_name = false; - value->type = (get_rle_string(str) != NULL ? SQLITE_TEXT : SQLITE_NULL); - value->cstring = get_rle_string(str); - value->delete = SQLITE_STATIC; + switch (value->type) + { + case SQLITE_TEXT: + unset_rle_string(str); + dup_into_rle_string(str, value->cstring); + break; + + case SQLITE_NULL: + unset_rle_string(str); + break; + + default: + return false; + break; + + } return true; @@ -361,71 +372,39 @@ bool prepare_db_statement_for_rle_string(const rle_string *str, const char *name * * * Paramètres : str = chaîne de caractères aux informations inutiles. * * name = désignation personnalisée du champ dans la BD. * -* values = tableau d'éléments à compléter. [OUT] * -* count = nombre de descriptions renseignées. [OUT] * +* values = couples de champs et de valeurs à lier. [OUT] * +* count = nombre de ces couples. [OUT] * * * -* Description : Décrit les colonnes utiles à une chaîne de caractères. * +* Description : Constitue les champs destinés à une insertion / modification.* * * -* Retour : Bilan de l'opération. * +* Retour : Bilan de l'opération : succès ou non. * * * * Remarques : - * * * ******************************************************************************/ -bool setup_load_of_rle_string(const rle_string *str, const char *name, bound_value **values, size_t *count) +bool store_rle_string(const rle_string *str, const char *name, bound_value **values, size_t *count) { bound_value *value; /* Valeur à éditer / définir */ - *values = (bound_value *)realloc(*values, ++(*count) * sizeof(bound_value)); + *values = realloc(*values, ++(*count) * sizeof(bound_value)); + value = &(*values)[*count - 1]; value->cname = name; value->built_name = false; - value->type = SQLITE_NATIVE; - return true; + value->has_value = (str != NULL); + if (value->has_value) + value->type = (get_rle_string(str) != NULL ? SQLITE_TEXT : SQLITE_NULL); + else + value->type = SQLITE_NATIVE; -} - - -/****************************************************************************** -* * -* Paramètres : str = chaîne de caractères à compléter. * -* name = désignation personnalisée du champ dans la BD. * -* values = tableau d'éléments à consulter. * -* count = nombre de descriptions renseignées. * -* * -* Description : Charge les valeurs utiles pour une chaîne de caractères. * -* * -* Retour : Bilan de l'opération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool load_rle_string(rle_string *str, const char *name, const bound_value *values, size_t count) -{ - const bound_value *value; /* Valeur à intégrer */ - - value = find_bound_value(values, count, name); - if (value == NULL) return false; - - switch (value->type) + if (value->has_value) { - case SQLITE_TEXT: - unset_rle_string(str); - dup_into_rle_string(str, value->cstring); - break; - - case SQLITE_NULL: - unset_rle_string(str); - break; - - default: - return false; - break; - + value->cstring = get_rle_string(str); + value->delete = SQLITE_STATIC; } return true; diff --git a/src/analysis/db/misc/rlestr.h b/src/analysis/db/misc/rlestr.h index 7b317b6..eb71582 100644 --- a/src/analysis/db/misc/rlestr.h +++ b/src/analysis/db/misc/rlestr.h @@ -94,15 +94,12 @@ bool pack_rle_string(const rle_string *, packed_buffer *); #define SQLITE_RLESTR_CREATE(n) \ n " TEXT" -/* Constitue les champs destinés à une insertion / modification. */ -bool prepare_db_statement_for_rle_string(const rle_string *, const char *, bound_value **, size_t *); - -/* Décrit les colonnes utiles à une chaîne de caractères. */ -bool setup_load_of_rle_string(const rle_string *, const char *, bound_value **, size_t *); - /* Charge les valeurs utiles pour une chaîne de caractères. */ bool load_rle_string(rle_string *, const char *, const bound_value *, size_t); +/* Constitue les champs destinés à une insertion / modification. */ +bool store_rle_string(const rle_string *, const char *, bound_value **, size_t *); + #endif /* _ANALYSIS_DB_MISC_RLESTR_H */ diff --git a/src/analysis/db/misc/timestamp.c b/src/analysis/db/misc/timestamp.c index 5302c60..1d2fcd9 100644 --- a/src/analysis/db/misc/timestamp.c +++ b/src/analysis/db/misc/timestamp.c @@ -166,30 +166,28 @@ bool pack_timestamp(const timestamp_t *timestamp, packed_buffer *pbuf) /****************************************************************************** * * -* Paramètres : timestamp = horodatage aux informations inutiles. * +* Paramètres : timestamp = horodatage à compléter. * * name = désignation personnalisée du champ dans la BD. * -* values = couples de champs et de valeurs à lier. [OUT] * -* count = nombre de ces couples. [OUT] * +* values = tableau d'éléments à consulter. * +* count = nombre de descriptions renseignées. * * * -* Description : Constitue les champs destinés à une insertion / modification.* +* Description : Charge les valeurs utiles pour un horodatage. * * * -* Retour : Bilan de l'opération : succès ou non. * +* Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ -bool prepare_db_statement_for_timestamp(const timestamp_t *timestamp, const char *name, bound_value **values, size_t *count) +bool load_timestamp(timestamp_t *timestamp, const char *name, const bound_value *values, size_t count) { - bound_value *value; /* Valeur à éditer / définir */ + const bound_value *value; /* Valeur à intégrer */ - *values = (bound_value *)realloc(*values, ++(*count) * sizeof(bound_value)); - value = &(*values)[*count - 1]; + value = find_bound_value(values, count, name); + if (value == NULL) return false; + if (value->type != SQLITE_INT64) return false; - value->cname = name; - value->built_name = false; - value->type = SQLITE_INT64; - value->integer64 = *timestamp; + *timestamp = value->integer64; return true; @@ -200,58 +198,33 @@ bool prepare_db_statement_for_timestamp(const timestamp_t *timestamp, const char * * * Paramètres : timestamp = horodatage aux informations inutiles. * * name = désignation personnalisée du champ dans la BD. * -* values = tableau d'éléments à compléter. [OUT] * -* count = nombre de descriptions renseignées. [OUT] * +* values = couples de champs et de valeurs à lier. [OUT] * +* count = nombre de ces couples. [OUT] * * * -* Description : Décrit les colonnes utiles à un horodatage. * +* Description : Constitue les champs destinés à une insertion / modification.* * * -* Retour : Bilan de l'opération. * +* Retour : Bilan de l'opération : succès ou non. * * * * Remarques : - * * * ******************************************************************************/ -bool setup_load_of_timestamp(const timestamp_t *timestamp, const char *name, bound_value **values, size_t *count) +bool store_timestamp(const timestamp_t *timestamp, const char *name, bound_value **values, size_t *count) { bound_value *value; /* Valeur à éditer / définir */ - *values = (bound_value *)realloc(*values, ++(*count) * sizeof(bound_value)); + *values = realloc(*values, ++(*count) * sizeof(bound_value)); + value = &(*values)[*count - 1]; value->cname = name; value->built_name = false; value->type = SQLITE_INT64; - return true; - - -} - - -/****************************************************************************** -* * -* Paramètres : timestamp = horodatage à compléter. * -* name = désignation personnalisée du champ dans la BD. * -* values = tableau d'éléments à consulter. * -* count = nombre de descriptions renseignées. * -* * -* Description : Charge les valeurs utiles pour un horodatage. * -* * -* Retour : Bilan de l'opération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool load_timestamp(timestamp_t *timestamp, const char *name, const bound_value *values, size_t count) -{ - const bound_value *value; /* Valeur à intégrer */ - - value = find_bound_value(values, count, name); - if (value == NULL) return false; - if (value->type != SQLITE_INT64) return false; + value->has_value = (timestamp != NULL); - *timestamp = value->integer64; + if (value->has_value) + value->integer64 = *timestamp; return true; diff --git a/src/analysis/db/misc/timestamp.h b/src/analysis/db/misc/timestamp.h index 076a4e0..eba0fa7 100644 --- a/src/analysis/db/misc/timestamp.h +++ b/src/analysis/db/misc/timestamp.h @@ -67,15 +67,12 @@ bool pack_timestamp(const timestamp_t *, packed_buffer *); #define SQLITE_TIMESTAMP_CREATE(n) \ n " INTEGER" -/* Constitue les champs destinés à une insertion / modification. */ -bool prepare_db_statement_for_timestamp(const timestamp_t *, const char *, bound_value **, size_t *); - -/* Décrit les colonnes utiles à un horodatage. */ -bool setup_load_of_timestamp(const timestamp_t *, const char *, bound_value **, size_t *); - /* Charge les valeurs utiles pour un horodatage. */ bool load_timestamp(timestamp_t *, const char *, const bound_value *, size_t); +/* Constitue les champs destinés à une insertion / modification. */ +bool store_timestamp(const timestamp_t *, const char *, bound_value **, size_t *); + #endif /* _ANALYSIS_DB_MISC_TIMESTAMP_H */ |