Пример #1
0
void Handle::registerCommittedHook(const CommittedHook &onCommitted, void *info)
{
    m_committedHookInfo.onCommitted = onCommitted;
    m_committedHookInfo.info = info;
    m_committedHookInfo.handle = this;
    if (m_committedHookInfo.onCommitted) {
        sqlite3_wal_hook(
            (sqlite3 *) m_handle,
            [](void *p, sqlite3 *, const char *, int pages) -> int {
                CommittedHookInfo *committedHookInfo = (CommittedHookInfo *) p;
                committedHookInfo->onCommitted(committedHookInfo->handle, pages,
                                               committedHookInfo->info);
                return SQLITE_OK;
            },
            &m_committedHookInfo);
    } else {
        sqlite3_wal_hook((sqlite3 *) m_handle, nullptr, nullptr);
    }
}
Пример #2
0
ikptr
ik_sqlite3_wal_hook (ikptr s_conn, ikptr s_callback, ikptr s_custom_data, ikpcb * pcb)
{
#ifdef HAVE_SQLITE3_WAL_HOOK
  typedef int cb_t (void *,sqlite3*,const char*,int);
  sqlite3 *	conn		= IK_SQLITE_CONNECTION(s_conn);
  cb_t *	callback	= IK_VOIDP_FROM_POINTER_OR_FALSE(s_custom_data);
  void *	custom_data	= IK_VOIDP_FROM_POINTER_OR_FALSE(s_custom_data);
  void *	rv;
  rv = sqlite3_wal_hook(conn, callback, custom_data);
  return (rv)? ika_pointer_alloc(pcb, (ik_ulong)rv) : IK_FALSE;
#else
  feature_failure(__func__);
#endif
}
Пример #3
0
static void checkpoint_starvation_main(int nMs, CheckpointStarvationCtx *p){
  Error err = {0};
  Sqlite db = {0};
  Threadset threads = {0};
  int nInsert = 0;
  int i;

  opendb(&err, &db, "test.db", 1);
  sql_script(&err, &db, 
      "PRAGMA page_size = 1024;"
      "PRAGMA journal_mode = WAL;"
      "CREATE TABLE t1(x);"
  );

  setstoptime(&err, nMs);

  for(i=0; i<4; i++){
    launch_thread(&err, &threads, checkpoint_starvation_reader, 0);
    usleep(CHECKPOINT_STARVATION_READMS*1000/4);
  }

  sqlite3_wal_hook(db.db, checkpoint_starvation_walhook, (void *)p);
  while( !timetostop(&err) ){
    sql_script(&err, &db, "INSERT INTO t1 VALUES(randomblob(1200))");
    nInsert++;
  }

  printf(" Checkpoint mode  : %s\n",
      p->eMode==SQLITE_CHECKPOINT_PASSIVE ? "PASSIVE" : "RESTART"
  );
  printf(" Peak WAL         : %d frames\n", p->nMaxFrame);
  printf(" Transaction count: %d transactions\n", nInsert);

  join_all_threads(&err, &threads);
  closedb(&err, &db);
  print_and_free_err(&err);
}
Пример #4
0
bool SqliteDatabase::setupCheckpointing (JobQueue* q)
{
    mWalQ = q;
    sqlite3_wal_hook (mConnection, SqliteWALHook, this);
    return true;
}