Sale a tutti. Questo è il codice della mia funzione. Non riesco a capire come mai la query di UPDATE non venga eseguita realmente, anche se tutte le funzioni ritornano i messaggi corretti, come se l'operazione fosse andata a buon fine. Sembra che manchi qualcosa come COMMIT.
codice:
int set_distance(struct sockaddr_in peeraddr, int distance) {
sqlite3 *db;
sqlite3_stmt *update_stmt;
int rc;
rc = sqlite3_open(DBname, &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
static char *sql = "UPDATE peers SET distance = ? WHERE ip = '?' AND port = ?";
if(sqlite3_prepare(db,sql,-1,&update_stmt,NULL) != SQLITE_OK){
fprintf(stderr,"Errore durante la preparazione dello statement UPDATE. Error: %s\n", sqlite3_errmsg(db));
return 0;
}
//inserisco i vari campi
sqlite3_bind_int(update_stmt, 1, distance);
sqlite3_bind_text(update_stmt, 2, inet_ntoa(peeraddr.sin_addr), -1, SQLITE_TRANSIENT);
sqlite3_bind_int(update_stmt, 3, ntohs(peeraddr.sin_port));
int success = sqlite3_step(update_stmt);
if(success != SQLITE_DONE){
fprintf(stderr, "Errore durante l'update di 'peers'. Error: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
success = sqlite3_finalize(update_stmt);
printf("Peer updating succesful!\n");
sqlite3_close(db);
//TODO check if peer already exists
return 0;
}