geolite 0.0.8

open source geocode solution
const SQL_PAGE_SIZE: &str = "PRAGMA page_size";
const SQL_PAGE_COUNT: &str = "PRAGMA page_count";
const SQL_OPTIMIZE: &str = "
  ANALYZE;
  PRAGMA optimize;
  PRAGMA wal_checkpoint(TRUNCATE);
  VACUUM;
";

pub fn run(conn: &rusqlite::Connection) -> (u64, u64) {
  let page_size: u64 = conn
    .query_row(SQL_PAGE_SIZE, [], |r| r.get(0))
    .unwrap_or(4096);
  let pages_before: u64 = conn
    .query_row(SQL_PAGE_COUNT, [], |r| r.get(0))
    .unwrap_or(0);
  conn
    .execute_batch(SQL_OPTIMIZE)
    .expect("failed to optimize sqlite file");
  let pages_after: u64 = conn
    .query_row(SQL_PAGE_COUNT, [], |r| r.get(0))
    .unwrap_or(0);
  (page_size * pages_before, page_size * pages_after)
}