Можно ли выполнить итерацию по набору результатов и, если условие выполнено, удалить текущую строку?
т.е. что-то вроде
int rc;
sqlite3_stmt* statement;
sqlite3_exec(db, "BEGIN", 0, 0, 0);
sqlite3_prepare_v2(_db, "SELECT id,status,filename,del FROM mytable", -1, &statement, NULL);
rc = sqlite3_step(statement);
while (rc == SQLITE_ROW){
int id = sqlite3_column_int(statement, 1);
int status = sqlite3_column_int(statement, 2);
const unsigned char* filename = sqlite3_column_int(statement, 3);
int del = sqlite3_column_int(statement, 4);
if (status == 0 || del > 0){
int rc = unlink(filename);
if (rc == 0)
// Now delete the current row
else
// unlink failed, find out why, try again or ... ?
}
rc = sqlite3_step(statement);
}
sqlite3_finalize(statement);
sqlite3_exec(db, "COMMIT", 0, 0, 0);
Я мог бы просто вызвать один SQL-оператор, чтобы удалить все строки, которые соответствуют критериям, но я не хочу этого делать, если по какой-то причине не удастся отсоединиться.
Можно ли вызвать операцию для удаления текущей строки?
EDIT:
Так что есть специальный столбец под названием rowid. Должен ли я просто добавить это как столбец в
предыдущий оператор и создайте другой оператор типа "удалить из таблицы, где rowid =?" и передать текущий rowid?
Это должно работать правильно? Это лучший способ сделать это?