diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/analysis/db/collection.c | 27 | ||||
| -rw-r--r-- | src/analysis/db/misc/rlestr.c | 2 | ||||
| -rw-r--r-- | src/arch/vmpa.c | 6 | 
3 files changed, 23 insertions, 12 deletions
diff --git a/src/analysis/db/collection.c b/src/analysis/db/collection.c index 91f9872..5e5adb7 100644 --- a/src/analysis/db/collection.c +++ b/src/analysis/db/collection.c @@ -997,8 +997,14 @@ static bool g_db_collection_store_item(const GDbCollection *collec, const GDbIte                  index++;                  break; +            case SQLITE_NULL: +                ret = sqlite3_bind_null(stmt, index); +                index++; +                break; +              default: -                ret = SQLITE_OK; +                assert(false); +                ret = SQLITE_ERROR;                  break;          } @@ -1090,7 +1096,10 @@ static bool g_db_collection_store_updated_item(const GDbCollection *collec, cons          sql = stradd(sql, values[i].name); -        sql = stradd(sql, " = "); +        if (values[i].type == SQLITE_NULL) +            sql = stradd(sql, " IS "); +        else +            sql = stradd(sql, " = ");          if (values[i].type == SQLITE_RAW)              sql = stradd(sql, values[i].cstring); @@ -1101,12 +1110,10 @@ static bool g_db_collection_store_updated_item(const GDbCollection *collec, cons      sql = stradd(sql, ";"); -    fprintf(stderr, "UPDATE SQL '%s'\n", sql); -  	ret = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);  	if (ret != SQLITE_OK)      { -		fprintf(stderr, "Can't prepare INSERT statment '%s' (ret=%d): %s\n", sql, ret, sqlite3_errmsg(db)); +		fprintf(stderr, "Can't prepare UPDATE statment '%s' (ret=%d): %s\n", sql, ret, sqlite3_errmsg(db));          goto gdcsi_exit;  	} @@ -1117,7 +1124,7 @@ static bool g_db_collection_store_updated_item(const GDbCollection *collec, cons      timestamp = find_bound_value(values, count, "timestamp");      assert(timestamp->type == SQLITE_INT64); -    ret = sqlite3_bind_int64(stmt, index, values[i].integer64); +    ret = sqlite3_bind_int64(stmt, index, timestamp->integer64);      index++;      if (ret != SQLITE_OK) @@ -1144,8 +1151,14 @@ static bool g_db_collection_store_updated_item(const GDbCollection *collec, cons                  index++;                  break; +            case SQLITE_NULL: +                ret = sqlite3_bind_null(stmt, index); +                index++; +                break; +              default: -                ret = SQLITE_OK; +                assert(false); +                ret = SQLITE_ERROR;                  break;          } diff --git a/src/analysis/db/misc/rlestr.c b/src/analysis/db/misc/rlestr.c index 9986967..cbf9291 100644 --- a/src/analysis/db/misc/rlestr.c +++ b/src/analysis/db/misc/rlestr.c @@ -268,7 +268,7 @@ bool prepare_db_statement_for_rle_string(const rle_string *str, const char *name      value = &(*values)[*count - 1];      value->name = name; -    value->type = SQLITE_TEXT; +    value->type = (get_rle_string(str) != NULL ? SQLITE_TEXT : SQLITE_NULL);      value->cstring = get_rle_string(str);      value->delete = SQLITE_STATIC; diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c index 9f2245c..5030562 100644 --- a/src/arch/vmpa.c +++ b/src/arch/vmpa.c @@ -639,8 +639,7 @@ bool prepare_vmpa_db_statement(const vmpa2t *addr, bound_value **values, size_t      }      else      { -        value->type = SQLITE_RAW; -        value->cstring = "NULL"; +        value->type = SQLITE_NULL;      }      *values = (bound_value *)realloc(*values, ++(*count) * sizeof(bound_value)); @@ -655,8 +654,7 @@ bool prepare_vmpa_db_statement(const vmpa2t *addr, bound_value **values, size_t      }      else      { -        value->type = SQLITE_RAW; -        value->cstring = "NULL"; +        value->type = SQLITE_NULL;      }      return true;  | 
