summaryrefslogtreecommitdiff
path: root/src/analysis/db/collection.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-01-23 17:48:50 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-01-23 17:48:50 (GMT)
commitadb98feb93f09d8de343c504a0c8c72815d62dab (patch)
treec345bf863252c2384b946b8ebfa315cda88b8ba9 /src/analysis/db/collection.c
parent18be9204f2f6b054f254d1fa045039952ddfad41 (diff)
Created storable items for user comments.
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r--src/analysis/db/collection.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/src/analysis/db/collection.c b/src/analysis/db/collection.c
index d5518dd..aa7591e 100644
--- a/src/analysis/db/collection.c
+++ b/src/analysis/db/collection.c
@@ -992,15 +992,21 @@ bool g_db_collection_load_all_items(GDbCollection *collec, sqlite3 *db)
/**
* On réalise une petite conversion selon le champ.
*
- * Le filtre SQLITE_NATIVE est destiné à conserver un champ sur 32 bits
- * quand il s'agit du format utilisé, même si toutes les valeurs sont
- * enregistrées en 64 bits.
+ * Le filtre SQLITE_NATIVE est destiné à conserver le type choisi par
+ * SQLite. Typiquement, une chaîne peut être à SQLITE_NULL ou SQLITE_TEXT
+ * selon la valeur conservée dans la base.
*
- * C'est par exemple le cas dans les bascules d'affichage.
- *
- * D'autres éléments, comme les localisations en mémoire, peuvent
+ * D'autres éléments, comme les localisations en mémoire, peuvent aussi
* avoir un champ éventuellement nul, donc la définition à partir des
* indications de la base de données reste importante.
+ *
+ * En ce qui concerne les valeurs numériques, SQLite ne fait pas de
+ * distinction : tout passe par la fonction sqlite3VdbeIntValue(),
+ * qui effectue des transtypages au besoin pour tout ce qui n'est
+ * pas numérique.
+ *
+ * Pour les types internes SQLITE_INTEGER et SQLITE_BOOLEAN,
+ * il est donc nécessaire d'ajuster en interne.
*/
if (native_type == SQLITE_INTEGER)
@@ -1010,13 +1016,18 @@ bool g_db_collection_load_all_items(GDbCollection *collec, sqlite3 *db)
values[i].type = native_type;
else
- assert(values[i].type == native_type || values[i].type == SQLITE_INTEGER);
-
+ assert(values[i].type == native_type
+ || values[i].type == SQLITE_INTEGER
+ || values[i].type == SQLITE_BOOLEAN);
switch (values[i].type)
{
+ case SQLITE_BOOLEAN:
+ values[i].boolean = (bool)sqlite3_column_int(stmt, i);
+ break;
+
case SQLITE_INTEGER:
- values[i].integer = (int)sqlite3_column_int64(stmt, i);
+ values[i].integer = sqlite3_column_int(stmt, i);
break;
case SQLITE_INT64:
@@ -1142,6 +1153,11 @@ static bool g_db_collection_store_item(const GDbCollection *collec, const GDbIte
{
switch (values[i].type)
{
+ case SQLITE_BOOLEAN:
+ ret = sqlite3_bind_int(stmt, index, values[i].boolean);
+ index++;
+ break;
+
case SQLITE_INTEGER:
ret = sqlite3_bind_int(stmt, index, values[i].integer);
index++;
@@ -1301,6 +1317,11 @@ static bool g_db_collection_store_updated_item(const GDbCollection *collec, cons
switch (values[i].type)
{
+ case SQLITE_BOOLEAN:
+ ret = sqlite3_bind_int(stmt, index, values[i].boolean);
+ index++;
+ break;
+
case SQLITE_INTEGER:
ret = sqlite3_bind_int(stmt, index, values[i].integer);
index++;