diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-01-16 21:12:08 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-01-16 21:12:08 (GMT) |
commit | 52ac5b1b340335f56ceb599dba63164a26f10b10 (patch) | |
tree | 275104896dffa65e7887284857fa8fed831e9ea8 /src/analysis/db/collection.c | |
parent | 2ddb5c26af896b10517a89abf0c9498c598b7697 (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.c | 46 |
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++; |