Многое из вышеперечисленного основано на этом
ел бы предсказать (действительно, обратный инжиниринг) rowid любой строки, которая должна быть вставлена в таблицу sqlite (чтобы восстановить поток вставок sqlite, используя rowid некоторых таблиц в качестве внешнего ключа в других таблицах). Вставка может произойти после произвольной последовательности вставок и удалений. Как rowid определяется sqlite при вставке?
Это когда-либо увеличивающийся счетчик?
int64_t next_rowid() {
static int64_t r = 0;
return ++r;
}
Может быть, самый маленький ряд не используется?
// 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);
}
Какая-то другая схема?
Неопределенные?