¿Cómo se determina rowid en la inserción de sqlite?

Me gustaría predecir (ingeniería inversa realmente) el rowid de cualquier fila a insertar en una tabla sqlite (para reconstruir una secuencia de inserciones sqlite usando el rowid de algunas tablas como clave foránea en otras tablas). La inserción puede ocurrir después de una secuencia arbitraria de inserciones y eliminaciones. ¿Cómo se determina el rowid por sqlite en la inserción?

¿Es un contador cada vez mayor?

int64_t next_rowid() {
  static int64_t r = 0;
  return ++r;
}

¿Quizás la fila más pequeña no está en 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);
}

¿Algún otro esquema?

Sin especificar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta