Como o rowid é determinado na inserção do sqlite?
Eu gostaria de prever (realmente fazer engenharia reversa) o rowid de qualquer linha a ser inserida em uma tabela sqlite (para reconstruir um fluxo de inserções sqlite usando o rowid de algumas tabelas como chave estrangeira em outras tabelas). A inserção pode ocorrer após uma sequência arbitrária de inserções e exclusões. Como o rowid é determinado pelo sqlite na inserção?
É um contador sempre crescente?
int64_t next_rowid() {
static int64_t r = 0;
return ++r;
}
Talvez a menor linha não esteja em uso?
// Algorithm description, not (likely) working code
static sorted_set<int64_t> deleted;
static int64_t top = 0;
int64_t next_rowid() {
if(deleted.size()==0) deleted.push(++top);
return deleted.pop_front();
}
void delete_rowid(int64_t r) {
deleted.push(r);
}
Algum outro esquema?
Não especificado?