summaryrefslogtreecommitdiff
path: root/src/analysis/db/collection.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-01-16 21:12:08 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-01-16 21:12:08 (GMT)
commit52ac5b1b340335f56ceb599dba63164a26f10b10 (patch)
tree275104896dffa65e7887284857fa8fed831e9ea8 /src/analysis/db/collection.c
parent2ddb5c26af896b10517a89abf0c9498c598b7697 (diff)
Changed the display of a segment containing the value of an immediate.
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r--src/analysis/db/collection.c46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/analysis/db/collection.c b/src/analysis/db/collection.c
index 117a2d5..d5518dd 100644
--- a/src/analysis/db/collection.c
+++ b/src/analysis/db/collection.c
@@ -559,12 +559,8 @@ bool g_db_collection_has_item(GDbCollection *collec, GDbItem *item)
* Il n'y a pas d'assert() possible pour le vérifier...
*/
- printf(" --- has\n");
-
found = g_list_find_custom(collec->items, item, (GCompareFunc)g_db_item_compare_with_timestamp);
- printf(" --- has: %p\n", found);
-
result = (found != NULL);
return result;
@@ -950,6 +946,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 */
+ int native_type; /* Type de valeur dans la base */
GDbItem *new; /* Nouvel élément à insérer */
if (!g_db_collection_setup_load(collec, &values, &count))
@@ -990,12 +987,39 @@ bool g_db_collection_load_all_items(GDbCollection *collec, sqlite3 *db)
for (i = 0; i < count; i++)
{
- values[i].type = sqlite3_column_type(stmt, i);
+ native_type = sqlite3_column_type(stmt, i);
+
+ /**
+ * 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.
+ *
+ * C'est par exemple le cas dans les bascules d'affichage.
+ *
+ * D'autres éléments, comme les localisations en mémoire, peuvent
+ * avoir un champ éventuellement nul, donc la définition à partir des
+ * indications de la base de données reste importante.
+ */
+
+ if (native_type == SQLITE_INTEGER)
+ native_type = SQLITE_INT64;
+
+ if (values[i].type == SQLITE_NATIVE)
+ values[i].type = native_type;
+
+ else
+ assert(values[i].type == native_type || values[i].type == SQLITE_INTEGER);
+
switch (values[i].type)
{
case SQLITE_INTEGER:
- values[i].type = SQLITE_INT64;
+ values[i].integer = (int)sqlite3_column_int64(stmt, i);
+ break;
+
+ case SQLITE_INT64:
values[i].integer64 = sqlite3_column_int64(stmt, i);
break;
@@ -1118,6 +1142,11 @@ static bool g_db_collection_store_item(const GDbCollection *collec, const GDbIte
{
switch (values[i].type)
{
+ case SQLITE_INTEGER:
+ ret = sqlite3_bind_int(stmt, index, values[i].integer);
+ index++;
+ break;
+
case SQLITE_INT64:
ret = sqlite3_bind_int64(stmt, index, values[i].integer64);
index++;
@@ -1272,6 +1301,11 @@ static bool g_db_collection_store_updated_item(const GDbCollection *collec, cons
switch (values[i].type)
{
+ case SQLITE_INTEGER:
+ ret = sqlite3_bind_int(stmt, index, values[i].integer);
+ index++;
+ break;
+
case SQLITE_INT64:
ret = sqlite3_bind_int64(stmt, index, values[i].integer64);
index++;