diff --git a/Android.bp b/Android.bp
index ed10b09..a1da725 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,17 +1,17 @@
 // This file is generated by cargo2android.py --device --run --dependencies --test.
 
 // We renamed the shared_libs dependence from libsqlite3 to libsqlite.
+// srcs has been moved out of _defaults to work around b/163420435
 
 rust_library {
     name: "liblibsqlite3_sys",
     host_supported: true,
     crate_name: "libsqlite3_sys",
-    srcs: ["src/lib.rs"],
+    srcs: [
+        "src/lib.rs",
+        ":libsqlite3_bindgen",
+    ],
     edition: "2018",
-    // Note that the following features are default for this package,
-    // unrelated to the generation of bindings for external/sqlite.
-    // We might need to consider the non-default features for Android.
-    // If you add/change features, please check any impact to bindgen flags.
     features: [
         "default",
         "min_sqlite_version_3_6_8",
@@ -21,28 +21,11 @@
     shared_libs: [
         "libsqlite",
     ],
-    arch: {
-        // depend on external/sqlite/rust bindgen modules
-        // and include the output file from those modules
-        x86: {
-           srcs: [":sqlite3_bindgen_x86"],
-        },
-        x86_64: {
-           srcs: [":sqlite3_bindgen_x86_64"],
-        },
-        arm: {
-           srcs: [":sqlite3_bindgen_arm"],
-        },
-        arm64: {
-           srcs: [":sqlite3_bindgen_arm64"],
-        },
-    },
 }
 
 rust_defaults {
     name: "libsqlite3-sys_defaults",
     crate_name: "libsqlite3_sys",
-    srcs: ["src/lib.rs"],
     test_suites: ["general-tests"],
     auto_gen_config: true,
     edition: "2018",
@@ -55,146 +38,67 @@
     shared_libs: [
         "libsqlite",
     ],
-    arch: {
-        // depend on external/sqlite/rust bindgen modules
-        // and include the output file from those modules
-        x86: {
-           srcs: [":sqlite3_bindgen_x86"],
-        },
-        x86_64: {
-           srcs: [":sqlite3_bindgen_x86_64"],
-        },
-        arm: {
-           srcs: [":sqlite3_bindgen_arm"],
-        },
-        arm64: {
-           srcs: [":sqlite3_bindgen_arm64"],
-        },
-    },
 }
 
 rust_test_host {
     name: "libsqlite3-sys_host_test_src_lib",
+    srcs: [
+        "src/lib.rs",
+        ":libsqlite3_bindgen",
+    ],
     defaults: ["libsqlite3-sys_defaults"],
 }
 
 rust_test {
     name: "libsqlite3-sys_device_test_src_lib",
+    srcs: [
+        "src/lib.rs",
+        ":libsqlite3_bindgen",
+    ],
     defaults: ["libsqlite3-sys_defaults"],
 }
 
 // dependent_library ["feature_list"]
 //   pkg-config-0.3.18
 
-// Extra modules to generate bindings for external/sqlite.
-// Generated file is called bindgen.rs and saved into android/<arch>/bindings.rs.
-
-common_bindgen_flags = " -o $(out) $(in) -- -MD -MF $(depfile)"
-
-// Here is the place to add bindgen flags for sqlite3.
-// The following ignore options are copied from build.rs.
-sqlite3_bindgen_flags =
-      " --blacklist-function sqlite3_vmprintf"
-    + " --blacklist-function sqlite3_vsnprintf"
-    + " --blacklist-function sqlite3_str_vappendf"
-    + " --blacklist-type va_list"
-    + " --blacklist-type __builtin_va_list"
-    + " --blacklist-type __gnuc_va_list"
-    + " --blacklist-type __va_list_tag"
-    + " --blacklist-item __GNUC_VA_LIST"
-
-// The cflags defined in cc_defaults of external/sqlite/dist/Android.bp
-// should be passed to clang for bindgen.
-// The list of strings used in cflags cannot be easily
-// shared with the command string used in genrule yet,
-// since there is no string join function in .bp.
-sqlite3_bindgen_clang_flags = " -I external/sqlite/dist"
-    + " -DNDEBUG=1"
-    + " -DHAVE_USLEEP=1"
-    + " -DSQLITE_HAVE_ISNAN"
-    + " -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576"
-    + " -DSQLITE_THREADSAFE=2"
-    + " -DSQLITE_TEMP_STORE=3"
-    + " -DSQLITE_POWERSAFE_OVERWRITE=1"
-    + " -DSQLITE_DEFAULT_FILE_FORMAT=4"
-    + " -DSQLITE_DEFAULT_AUTOVACUUM=1"
-    + " -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1"
-    + " -DSQLITE_ENABLE_FTS3"
-    + " -DSQLITE_ENABLE_FTS3_BACKWARDS"
-    + " -DSQLITE_ENABLE_FTS4"
-    + " -DSQLITE_OMIT_BUILTIN_TEST"
-    + " -DSQLITE_OMIT_COMPILEOPTION_DIAGS"
-    + " -DSQLITE_OMIT_LOAD_EXTENSION"
-    + " -DSQLITE_DEFAULT_FILE_PERMISSIONS=0600"
-    + " -DSQLITE_SECURE_DELETE"
-    + " -DSQLITE_ENABLE_BATCH_ATOMIC_WRITE"
-    + " -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD"
-    + " -DHAVE_POSIX_FALLOCATE=1"
+// Keep this array in sync with the cflags used in external/sqlite
+// After b/163598610 is resolved, use defaults instead.
+sqlite3_bindgen_clang_flags = [
+    " -DNDEBUG=1",
+    " -DHAVE_USLEEP=1",
+    " -DSQLITE_HAVE_ISNAN",
+    " -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576",
+    " -DSQLITE_THREADSAFE=2",
+    " -DSQLITE_TEMP_STORE=3",
+    " -DSQLITE_POWERSAFE_OVERWRITE=1",
+    " -DSQLITE_DEFAULT_FILE_FORMAT=4",
+    " -DSQLITE_DEFAULT_AUTOVACUUM=1",
+    " -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1",
+    " -DSQLITE_ENABLE_FTS3",
+    " -DSQLITE_ENABLE_FTS3_BACKWARDS",
+    " -DSQLITE_ENABLE_FTS4",
+    " -DSQLITE_OMIT_BUILTIN_TEST",
+    " -DSQLITE_OMIT_COMPILEOPTION_DIAGS",
+    " -DSQLITE_OMIT_LOAD_EXTENSION",
+    " -DSQLITE_DEFAULT_FILE_PERMISSIONS=0600",
+    " -DSQLITE_SECURE_DELETE",
+    " -DSQLITE_ENABLE_BATCH_ATOMIC_WRITE",
+    " -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD",
+    " -DHAVE_POSIX_FALLOCATE=1",
     // extra -D flags for android targets
-    + " -DUSE_PREAD64"
-    + " -Dfdatasync=fdatasync"
-    + " -DHAVE_MALLOC_H=1"
-    + " -DHAVE_MALLOC_USABLE_SIZE"
-    + " -Wno-unused-parameter"
+    " -DUSE_PREAD64",
+    " -Dfdatasync=fdatasync",
+    " -DHAVE_MALLOC_H=1",
+    " -DHAVE_MALLOC_USABLE_SIZE",
+    " -Wno-unused-parameter",
+]
 
-genrule_defaults {
-    name: "sqlite3_bindgen_defaults",
-    tools: ["bindgen.sh", "bindgen"],
-    depfile: true,
-    srcs: ["android/bindgen.h"],
-    out: ["bindgen.rs"],
-}
-
-// This is a temporary hack to fix bindgen output files,
-// until a newer bindgen can do it with a flag.
-// The default int type for macros are changed
-// from u32 to i32 to work with other existing Rust.
-// Both u32 and i32 values should work with C libsqlite
-// as those macros have values in both i32 and u32 range.
-// See comments in later genrule modules about diff/patch
-// to detect and fix errors.
-bindgen_post_edit_cmd = " sed -i 's/: u32 /: i32 /' $(out) &&"
-
-genrule_default_cmd = "$(location bindgen.sh) $(location bindgen)"
-    + sqlite3_bindgen_flags
-    + common_bindgen_flags
-    + sqlite3_bindgen_clang_flags
-
-// In these genrule modules, diff -U3 is used to check if the
-// generated files are the same as the saved version.
-// This also catches any change made by bindgen_post_edit_cmd.
-// Any sed command failure or output difference will stop the genrule module.
-// To fix and resume the build, the diff -U3 output in stdout should
-// be saved and passed to the 'patch' command to fix the bindings.rs file.
-// The changes to bindgings.rs should be manually verified and tested.
-genrule {
-    name: "sqlite3_bindgen_x86",
-    defaults: ["sqlite3_bindgen_defaults"],
-    cmd: genrule_default_cmd + " --target=i386 &&"
-    + bindgen_post_edit_cmd
-    + " diff -U3 `dirname $(in)`/x86/bindings.rs $(out)",
-}
-
-genrule {
-    name: "sqlite3_bindgen_x86_64",
-    defaults: ["sqlite3_bindgen_defaults"],
-    cmd: genrule_default_cmd + " --target=x86_64 &&"
-    + bindgen_post_edit_cmd
-    + " diff -U3 `dirname $(in)`/x86_64/bindings.rs $(out)",
-}
-
-genrule {
-    name: "sqlite3_bindgen_arm",
-    defaults: ["sqlite3_bindgen_defaults"],
-    cmd: genrule_default_cmd + " --target=arm &&"
-    + bindgen_post_edit_cmd
-    + " diff -U3 `dirname $(in)`/arm/bindings.rs $(out)",
-}
-
-genrule {
-    name: "sqlite3_bindgen_arm64",
-    defaults: ["sqlite3_bindgen_defaults"],
-    cmd: genrule_default_cmd + " --target=arm64 &&"
-    + bindgen_post_edit_cmd
-    + " diff -U3 `dirname $(in)`/arm64/bindings.rs $(out)",
+rust_bindgen {
+    name: "libsqlite3_bindgen",
+    host_supported: true,
+    crate_name: "sqlite3_bindgen",
+    custom_bindgen: "sqlite3_bindgen_build",
+    wrapper_src: "wrapper.h",
+    source_stem: "bindgen",
+    cflags: ["-I external/sqlite/dist"] + sqlite3_bindgen_clang_flags,
 }
diff --git a/METADATA b/METADATA
index b7ea6f0..2272e9b 100644
--- a/METADATA
+++ b/METADATA
@@ -1,16 +1,18 @@
 name: "libsqlite3-sys"
-description:
-    "Native bindings to the libsqlite3 library"
-
+description: "Native bindings to the libsqlite3 library"
 third_party {
   url {
     type: HOMEPAGE
     value: "https://crates.io/crates/libsqlite3-sys"
   }
   url {
-    type: GIT
-    value: "https://github.com/rusqlite/rusqlite"
+    type: ARCHIVE
+    value: "https://static.crates.io/crates/libsqlite3-sys/libsqlite3-sys-0.18.0.crate"
   }
   version: "0.18.0"
-  last_upgrade_date { year: 2020 month: 6 day: 11 }
+  last_upgrade_date {
+    year: 2020
+    month: 6
+    day: 11
+  }
 }
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..46fc303
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1 @@
+include platform/prebuilts/rust:/OWNERS
diff --git a/README.android b/README.android
index c0c61a5..e4d22c0 100644
--- a/README.android
+++ b/README.android
@@ -1,22 +1,8 @@
 This package is imported to Android and uses Android's external/sqlite
 header files and compilation flags to generate bindings.
 
-Whenever this package is updated, the following common procedure
-for external/rust/crates and special steps should be followed:
-* Make sure that the files under android are still preserved.
-* Check for changes in Cargo.toml and rerun cargo2android.py
-  to verify impacts to Android.bp. The manually added modules
-  should be preserved and checked against any new changes from
-  Cargo.toml. Note that new/changed features can also affect
-  build.rs and thus affect the flags passed to bindgen.
-* Similar to Cargo.toml, build.rs changes could add/change
-  bindgen flags. Watch out for changes related to buildtime_bindgen
-  and match them with sqlite3_bindgen_{clang_flags, flags} in
-  Android.bp.
-* Make sure the clang flags are still valid w.r.t. external/sqlite,
-  see sqlite3_bindgen_clang_flags in Android.bp.
-* Run at least the following tests locally:
-  * make with both aosp_x86_64-eng and aosp_arm64-eng
-  * atest -c --include-subdirs external/rust/crates/libsqlite3-sys
-* If the make fails in genrule modules, follow the comments in
-  Android.bp to update the bindgen_post_edit_cmd or bindings.rs.
+If features are changed for the libsqlite3-sys crate, please ensure those
+features are changed in the sqlite_bindgen_build module.
+
+If you update libsqlite3-sys, check its build.rs against the one at
+android/build.rs to ensure it is updated if needed.
diff --git a/android/Android.bp b/android/Android.bp
new file mode 100644
index 0000000..ce103f0
--- /dev/null
+++ b/android/Android.bp
@@ -0,0 +1,11 @@
+rust_binary_host {
+    name: "sqlite3_bindgen_build",
+    srcs: ["build.rs"],
+    rustlibs: [
+        "libbindgen",
+        "libbindgen_cmd",
+    ],
+    lints: "android",
+    clippy_lints: "android",
+    multilib: "first",
+}
diff --git a/android/arm/bindings.rs b/android/arm/bindings.rs
deleted file mode 100644
index 6484960..0000000
--- a/android/arm/bindings.rs
+++ /dev/null
@@ -1,5229 +0,0 @@
-/* automatically generated by rust-bindgen (unknown version) */
-
-pub const SQLITE_VERSION: &'static [u8; 7usize] = b"3.32.2\0";
-pub const SQLITE_VERSION_NUMBER: i32 = 3032002;
-pub const SQLITE_SOURCE_ID: &'static [u8; 85usize] =
-    b"2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c\0";
-pub const SQLITE_OK: i32 = 0;
-pub const SQLITE_ERROR: i32 = 1;
-pub const SQLITE_INTERNAL: i32 = 2;
-pub const SQLITE_PERM: i32 = 3;
-pub const SQLITE_ABORT: i32 = 4;
-pub const SQLITE_BUSY: i32 = 5;
-pub const SQLITE_LOCKED: i32 = 6;
-pub const SQLITE_NOMEM: i32 = 7;
-pub const SQLITE_READONLY: i32 = 8;
-pub const SQLITE_INTERRUPT: i32 = 9;
-pub const SQLITE_IOERR: i32 = 10;
-pub const SQLITE_CORRUPT: i32 = 11;
-pub const SQLITE_NOTFOUND: i32 = 12;
-pub const SQLITE_FULL: i32 = 13;
-pub const SQLITE_CANTOPEN: i32 = 14;
-pub const SQLITE_PROTOCOL: i32 = 15;
-pub const SQLITE_EMPTY: i32 = 16;
-pub const SQLITE_SCHEMA: i32 = 17;
-pub const SQLITE_TOOBIG: i32 = 18;
-pub const SQLITE_CONSTRAINT: i32 = 19;
-pub const SQLITE_MISMATCH: i32 = 20;
-pub const SQLITE_MISUSE: i32 = 21;
-pub const SQLITE_NOLFS: i32 = 22;
-pub const SQLITE_AUTH: i32 = 23;
-pub const SQLITE_FORMAT: i32 = 24;
-pub const SQLITE_RANGE: i32 = 25;
-pub const SQLITE_NOTADB: i32 = 26;
-pub const SQLITE_NOTICE: i32 = 27;
-pub const SQLITE_WARNING: i32 = 28;
-pub const SQLITE_ROW: i32 = 100;
-pub const SQLITE_DONE: i32 = 101;
-pub const SQLITE_ERROR_MISSING_COLLSEQ: i32 = 257;
-pub const SQLITE_ERROR_RETRY: i32 = 513;
-pub const SQLITE_ERROR_SNAPSHOT: i32 = 769;
-pub const SQLITE_IOERR_READ: i32 = 266;
-pub const SQLITE_IOERR_SHORT_READ: i32 = 522;
-pub const SQLITE_IOERR_WRITE: i32 = 778;
-pub const SQLITE_IOERR_FSYNC: i32 = 1034;
-pub const SQLITE_IOERR_DIR_FSYNC: i32 = 1290;
-pub const SQLITE_IOERR_TRUNCATE: i32 = 1546;
-pub const SQLITE_IOERR_FSTAT: i32 = 1802;
-pub const SQLITE_IOERR_UNLOCK: i32 = 2058;
-pub const SQLITE_IOERR_RDLOCK: i32 = 2314;
-pub const SQLITE_IOERR_DELETE: i32 = 2570;
-pub const SQLITE_IOERR_BLOCKED: i32 = 2826;
-pub const SQLITE_IOERR_NOMEM: i32 = 3082;
-pub const SQLITE_IOERR_ACCESS: i32 = 3338;
-pub const SQLITE_IOERR_CHECKRESERVEDLOCK: i32 = 3594;
-pub const SQLITE_IOERR_LOCK: i32 = 3850;
-pub const SQLITE_IOERR_CLOSE: i32 = 4106;
-pub const SQLITE_IOERR_DIR_CLOSE: i32 = 4362;
-pub const SQLITE_IOERR_SHMOPEN: i32 = 4618;
-pub const SQLITE_IOERR_SHMSIZE: i32 = 4874;
-pub const SQLITE_IOERR_SHMLOCK: i32 = 5130;
-pub const SQLITE_IOERR_SHMMAP: i32 = 5386;
-pub const SQLITE_IOERR_SEEK: i32 = 5642;
-pub const SQLITE_IOERR_DELETE_NOENT: i32 = 5898;
-pub const SQLITE_IOERR_MMAP: i32 = 6154;
-pub const SQLITE_IOERR_GETTEMPPATH: i32 = 6410;
-pub const SQLITE_IOERR_CONVPATH: i32 = 6666;
-pub const SQLITE_IOERR_VNODE: i32 = 6922;
-pub const SQLITE_IOERR_AUTH: i32 = 7178;
-pub const SQLITE_IOERR_BEGIN_ATOMIC: i32 = 7434;
-pub const SQLITE_IOERR_COMMIT_ATOMIC: i32 = 7690;
-pub const SQLITE_IOERR_ROLLBACK_ATOMIC: i32 = 7946;
-pub const SQLITE_IOERR_DATA: i32 = 8202;
-pub const SQLITE_LOCKED_SHAREDCACHE: i32 = 262;
-pub const SQLITE_LOCKED_VTAB: i32 = 518;
-pub const SQLITE_BUSY_RECOVERY: i32 = 261;
-pub const SQLITE_BUSY_SNAPSHOT: i32 = 517;
-pub const SQLITE_BUSY_TIMEOUT: i32 = 773;
-pub const SQLITE_CANTOPEN_NOTEMPDIR: i32 = 270;
-pub const SQLITE_CANTOPEN_ISDIR: i32 = 526;
-pub const SQLITE_CANTOPEN_FULLPATH: i32 = 782;
-pub const SQLITE_CANTOPEN_CONVPATH: i32 = 1038;
-pub const SQLITE_CANTOPEN_DIRTYWAL: i32 = 1294;
-pub const SQLITE_CANTOPEN_SYMLINK: i32 = 1550;
-pub const SQLITE_CORRUPT_VTAB: i32 = 267;
-pub const SQLITE_CORRUPT_SEQUENCE: i32 = 523;
-pub const SQLITE_CORRUPT_INDEX: i32 = 779;
-pub const SQLITE_READONLY_RECOVERY: i32 = 264;
-pub const SQLITE_READONLY_CANTLOCK: i32 = 520;
-pub const SQLITE_READONLY_ROLLBACK: i32 = 776;
-pub const SQLITE_READONLY_DBMOVED: i32 = 1032;
-pub const SQLITE_READONLY_CANTINIT: i32 = 1288;
-pub const SQLITE_READONLY_DIRECTORY: i32 = 1544;
-pub const SQLITE_ABORT_ROLLBACK: i32 = 516;
-pub const SQLITE_CONSTRAINT_CHECK: i32 = 275;
-pub const SQLITE_CONSTRAINT_COMMITHOOK: i32 = 531;
-pub const SQLITE_CONSTRAINT_FOREIGNKEY: i32 = 787;
-pub const SQLITE_CONSTRAINT_FUNCTION: i32 = 1043;
-pub const SQLITE_CONSTRAINT_NOTNULL: i32 = 1299;
-pub const SQLITE_CONSTRAINT_PRIMARYKEY: i32 = 1555;
-pub const SQLITE_CONSTRAINT_TRIGGER: i32 = 1811;
-pub const SQLITE_CONSTRAINT_UNIQUE: i32 = 2067;
-pub const SQLITE_CONSTRAINT_VTAB: i32 = 2323;
-pub const SQLITE_CONSTRAINT_ROWID: i32 = 2579;
-pub const SQLITE_CONSTRAINT_PINNED: i32 = 2835;
-pub const SQLITE_NOTICE_RECOVER_WAL: i32 = 283;
-pub const SQLITE_NOTICE_RECOVER_ROLLBACK: i32 = 539;
-pub const SQLITE_WARNING_AUTOINDEX: i32 = 284;
-pub const SQLITE_AUTH_USER: i32 = 279;
-pub const SQLITE_OK_LOAD_PERMANENTLY: i32 = 256;
-pub const SQLITE_OK_SYMLINK: i32 = 512;
-pub const SQLITE_OPEN_READONLY: i32 = 1;
-pub const SQLITE_OPEN_READWRITE: i32 = 2;
-pub const SQLITE_OPEN_CREATE: i32 = 4;
-pub const SQLITE_OPEN_DELETEONCLOSE: i32 = 8;
-pub const SQLITE_OPEN_EXCLUSIVE: i32 = 16;
-pub const SQLITE_OPEN_AUTOPROXY: i32 = 32;
-pub const SQLITE_OPEN_URI: i32 = 64;
-pub const SQLITE_OPEN_MEMORY: i32 = 128;
-pub const SQLITE_OPEN_MAIN_DB: i32 = 256;
-pub const SQLITE_OPEN_TEMP_DB: i32 = 512;
-pub const SQLITE_OPEN_TRANSIENT_DB: i32 = 1024;
-pub const SQLITE_OPEN_MAIN_JOURNAL: i32 = 2048;
-pub const SQLITE_OPEN_TEMP_JOURNAL: i32 = 4096;
-pub const SQLITE_OPEN_SUBJOURNAL: i32 = 8192;
-pub const SQLITE_OPEN_MASTER_JOURNAL: i32 = 16384;
-pub const SQLITE_OPEN_NOMUTEX: i32 = 32768;
-pub const SQLITE_OPEN_FULLMUTEX: i32 = 65536;
-pub const SQLITE_OPEN_SHAREDCACHE: i32 = 131072;
-pub const SQLITE_OPEN_PRIVATECACHE: i32 = 262144;
-pub const SQLITE_OPEN_WAL: i32 = 524288;
-pub const SQLITE_OPEN_NOFOLLOW: i32 = 16777216;
-pub const SQLITE_IOCAP_ATOMIC: i32 = 1;
-pub const SQLITE_IOCAP_ATOMIC512: i32 = 2;
-pub const SQLITE_IOCAP_ATOMIC1K: i32 = 4;
-pub const SQLITE_IOCAP_ATOMIC2K: i32 = 8;
-pub const SQLITE_IOCAP_ATOMIC4K: i32 = 16;
-pub const SQLITE_IOCAP_ATOMIC8K: i32 = 32;
-pub const SQLITE_IOCAP_ATOMIC16K: i32 = 64;
-pub const SQLITE_IOCAP_ATOMIC32K: i32 = 128;
-pub const SQLITE_IOCAP_ATOMIC64K: i32 = 256;
-pub const SQLITE_IOCAP_SAFE_APPEND: i32 = 512;
-pub const SQLITE_IOCAP_SEQUENTIAL: i32 = 1024;
-pub const SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN: i32 = 2048;
-pub const SQLITE_IOCAP_POWERSAFE_OVERWRITE: i32 = 4096;
-pub const SQLITE_IOCAP_IMMUTABLE: i32 = 8192;
-pub const SQLITE_IOCAP_BATCH_ATOMIC: i32 = 16384;
-pub const SQLITE_LOCK_NONE: i32 = 0;
-pub const SQLITE_LOCK_SHARED: i32 = 1;
-pub const SQLITE_LOCK_RESERVED: i32 = 2;
-pub const SQLITE_LOCK_PENDING: i32 = 3;
-pub const SQLITE_LOCK_EXCLUSIVE: i32 = 4;
-pub const SQLITE_SYNC_NORMAL: i32 = 2;
-pub const SQLITE_SYNC_FULL: i32 = 3;
-pub const SQLITE_SYNC_DATAONLY: i32 = 16;
-pub const SQLITE_FCNTL_LOCKSTATE: i32 = 1;
-pub const SQLITE_FCNTL_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_FCNTL_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_FCNTL_LAST_ERRNO: i32 = 4;
-pub const SQLITE_FCNTL_SIZE_HINT: i32 = 5;
-pub const SQLITE_FCNTL_CHUNK_SIZE: i32 = 6;
-pub const SQLITE_FCNTL_FILE_POINTER: i32 = 7;
-pub const SQLITE_FCNTL_SYNC_OMITTED: i32 = 8;
-pub const SQLITE_FCNTL_WIN32_AV_RETRY: i32 = 9;
-pub const SQLITE_FCNTL_PERSIST_WAL: i32 = 10;
-pub const SQLITE_FCNTL_OVERWRITE: i32 = 11;
-pub const SQLITE_FCNTL_VFSNAME: i32 = 12;
-pub const SQLITE_FCNTL_POWERSAFE_OVERWRITE: i32 = 13;
-pub const SQLITE_FCNTL_PRAGMA: i32 = 14;
-pub const SQLITE_FCNTL_BUSYHANDLER: i32 = 15;
-pub const SQLITE_FCNTL_TEMPFILENAME: i32 = 16;
-pub const SQLITE_FCNTL_MMAP_SIZE: i32 = 18;
-pub const SQLITE_FCNTL_TRACE: i32 = 19;
-pub const SQLITE_FCNTL_HAS_MOVED: i32 = 20;
-pub const SQLITE_FCNTL_SYNC: i32 = 21;
-pub const SQLITE_FCNTL_COMMIT_PHASETWO: i32 = 22;
-pub const SQLITE_FCNTL_WIN32_SET_HANDLE: i32 = 23;
-pub const SQLITE_FCNTL_WAL_BLOCK: i32 = 24;
-pub const SQLITE_FCNTL_ZIPVFS: i32 = 25;
-pub const SQLITE_FCNTL_RBU: i32 = 26;
-pub const SQLITE_FCNTL_VFS_POINTER: i32 = 27;
-pub const SQLITE_FCNTL_JOURNAL_POINTER: i32 = 28;
-pub const SQLITE_FCNTL_WIN32_GET_HANDLE: i32 = 29;
-pub const SQLITE_FCNTL_PDB: i32 = 30;
-pub const SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: i32 = 31;
-pub const SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: i32 = 32;
-pub const SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: i32 = 33;
-pub const SQLITE_FCNTL_LOCK_TIMEOUT: i32 = 34;
-pub const SQLITE_FCNTL_DATA_VERSION: i32 = 35;
-pub const SQLITE_FCNTL_SIZE_LIMIT: i32 = 36;
-pub const SQLITE_FCNTL_CKPT_DONE: i32 = 37;
-pub const SQLITE_FCNTL_RESERVE_BYTES: i32 = 38;
-pub const SQLITE_FCNTL_CKPT_START: i32 = 39;
-pub const SQLITE_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_LAST_ERRNO: i32 = 4;
-pub const SQLITE_ACCESS_EXISTS: i32 = 0;
-pub const SQLITE_ACCESS_READWRITE: i32 = 1;
-pub const SQLITE_ACCESS_READ: i32 = 2;
-pub const SQLITE_SHM_UNLOCK: i32 = 1;
-pub const SQLITE_SHM_LOCK: i32 = 2;
-pub const SQLITE_SHM_SHARED: i32 = 4;
-pub const SQLITE_SHM_EXCLUSIVE: i32 = 8;
-pub const SQLITE_SHM_NLOCK: i32 = 8;
-pub const SQLITE_CONFIG_SINGLETHREAD: i32 = 1;
-pub const SQLITE_CONFIG_MULTITHREAD: i32 = 2;
-pub const SQLITE_CONFIG_SERIALIZED: i32 = 3;
-pub const SQLITE_CONFIG_MALLOC: i32 = 4;
-pub const SQLITE_CONFIG_GETMALLOC: i32 = 5;
-pub const SQLITE_CONFIG_SCRATCH: i32 = 6;
-pub const SQLITE_CONFIG_PAGECACHE: i32 = 7;
-pub const SQLITE_CONFIG_HEAP: i32 = 8;
-pub const SQLITE_CONFIG_MEMSTATUS: i32 = 9;
-pub const SQLITE_CONFIG_MUTEX: i32 = 10;
-pub const SQLITE_CONFIG_GETMUTEX: i32 = 11;
-pub const SQLITE_CONFIG_LOOKASIDE: i32 = 13;
-pub const SQLITE_CONFIG_PCACHE: i32 = 14;
-pub const SQLITE_CONFIG_GETPCACHE: i32 = 15;
-pub const SQLITE_CONFIG_LOG: i32 = 16;
-pub const SQLITE_CONFIG_URI: i32 = 17;
-pub const SQLITE_CONFIG_PCACHE2: i32 = 18;
-pub const SQLITE_CONFIG_GETPCACHE2: i32 = 19;
-pub const SQLITE_CONFIG_COVERING_INDEX_SCAN: i32 = 20;
-pub const SQLITE_CONFIG_SQLLOG: i32 = 21;
-pub const SQLITE_CONFIG_MMAP_SIZE: i32 = 22;
-pub const SQLITE_CONFIG_WIN32_HEAPSIZE: i32 = 23;
-pub const SQLITE_CONFIG_PCACHE_HDRSZ: i32 = 24;
-pub const SQLITE_CONFIG_PMASZ: i32 = 25;
-pub const SQLITE_CONFIG_STMTJRNL_SPILL: i32 = 26;
-pub const SQLITE_CONFIG_SMALL_MALLOC: i32 = 27;
-pub const SQLITE_CONFIG_SORTERREF_SIZE: i32 = 28;
-pub const SQLITE_CONFIG_MEMDB_MAXSIZE: i32 = 29;
-pub const SQLITE_DBCONFIG_MAINDBNAME: i32 = 1000;
-pub const SQLITE_DBCONFIG_LOOKASIDE: i32 = 1001;
-pub const SQLITE_DBCONFIG_ENABLE_FKEY: i32 = 1002;
-pub const SQLITE_DBCONFIG_ENABLE_TRIGGER: i32 = 1003;
-pub const SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: i32 = 1004;
-pub const SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: i32 = 1005;
-pub const SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: i32 = 1006;
-pub const SQLITE_DBCONFIG_ENABLE_QPSG: i32 = 1007;
-pub const SQLITE_DBCONFIG_TRIGGER_EQP: i32 = 1008;
-pub const SQLITE_DBCONFIG_RESET_DATABASE: i32 = 1009;
-pub const SQLITE_DBCONFIG_DEFENSIVE: i32 = 1010;
-pub const SQLITE_DBCONFIG_WRITABLE_SCHEMA: i32 = 1011;
-pub const SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: i32 = 1012;
-pub const SQLITE_DBCONFIG_DQS_DML: i32 = 1013;
-pub const SQLITE_DBCONFIG_DQS_DDL: i32 = 1014;
-pub const SQLITE_DBCONFIG_ENABLE_VIEW: i32 = 1015;
-pub const SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: i32 = 1016;
-pub const SQLITE_DBCONFIG_TRUSTED_SCHEMA: i32 = 1017;
-pub const SQLITE_DBCONFIG_MAX: i32 = 1017;
-pub const SQLITE_DENY: i32 = 1;
-pub const SQLITE_IGNORE: i32 = 2;
-pub const SQLITE_CREATE_INDEX: i32 = 1;
-pub const SQLITE_CREATE_TABLE: i32 = 2;
-pub const SQLITE_CREATE_TEMP_INDEX: i32 = 3;
-pub const SQLITE_CREATE_TEMP_TABLE: i32 = 4;
-pub const SQLITE_CREATE_TEMP_TRIGGER: i32 = 5;
-pub const SQLITE_CREATE_TEMP_VIEW: i32 = 6;
-pub const SQLITE_CREATE_TRIGGER: i32 = 7;
-pub const SQLITE_CREATE_VIEW: i32 = 8;
-pub const SQLITE_DELETE: i32 = 9;
-pub const SQLITE_DROP_INDEX: i32 = 10;
-pub const SQLITE_DROP_TABLE: i32 = 11;
-pub const SQLITE_DROP_TEMP_INDEX: i32 = 12;
-pub const SQLITE_DROP_TEMP_TABLE: i32 = 13;
-pub const SQLITE_DROP_TEMP_TRIGGER: i32 = 14;
-pub const SQLITE_DROP_TEMP_VIEW: i32 = 15;
-pub const SQLITE_DROP_TRIGGER: i32 = 16;
-pub const SQLITE_DROP_VIEW: i32 = 17;
-pub const SQLITE_INSERT: i32 = 18;
-pub const SQLITE_PRAGMA: i32 = 19;
-pub const SQLITE_READ: i32 = 20;
-pub const SQLITE_SELECT: i32 = 21;
-pub const SQLITE_TRANSACTION: i32 = 22;
-pub const SQLITE_UPDATE: i32 = 23;
-pub const SQLITE_ATTACH: i32 = 24;
-pub const SQLITE_DETACH: i32 = 25;
-pub const SQLITE_ALTER_TABLE: i32 = 26;
-pub const SQLITE_REINDEX: i32 = 27;
-pub const SQLITE_ANALYZE: i32 = 28;
-pub const SQLITE_CREATE_VTABLE: i32 = 29;
-pub const SQLITE_DROP_VTABLE: i32 = 30;
-pub const SQLITE_FUNCTION: i32 = 31;
-pub const SQLITE_SAVEPOINT: i32 = 32;
-pub const SQLITE_COPY: i32 = 0;
-pub const SQLITE_RECURSIVE: i32 = 33;
-pub const SQLITE_TRACE_STMT: i32 = 1;
-pub const SQLITE_TRACE_PROFILE: i32 = 2;
-pub const SQLITE_TRACE_ROW: i32 = 4;
-pub const SQLITE_TRACE_CLOSE: i32 = 8;
-pub const SQLITE_LIMIT_LENGTH: i32 = 0;
-pub const SQLITE_LIMIT_SQL_LENGTH: i32 = 1;
-pub const SQLITE_LIMIT_COLUMN: i32 = 2;
-pub const SQLITE_LIMIT_EXPR_DEPTH: i32 = 3;
-pub const SQLITE_LIMIT_COMPOUND_SELECT: i32 = 4;
-pub const SQLITE_LIMIT_VDBE_OP: i32 = 5;
-pub const SQLITE_LIMIT_FUNCTION_ARG: i32 = 6;
-pub const SQLITE_LIMIT_ATTACHED: i32 = 7;
-pub const SQLITE_LIMIT_LIKE_PATTERN_LENGTH: i32 = 8;
-pub const SQLITE_LIMIT_VARIABLE_NUMBER: i32 = 9;
-pub const SQLITE_LIMIT_TRIGGER_DEPTH: i32 = 10;
-pub const SQLITE_LIMIT_WORKER_THREADS: i32 = 11;
-pub const SQLITE_PREPARE_PERSISTENT: i32 = 1;
-pub const SQLITE_PREPARE_NORMALIZE: i32 = 2;
-pub const SQLITE_PREPARE_NO_VTAB: i32 = 4;
-pub const SQLITE_INTEGER: i32 = 1;
-pub const SQLITE_FLOAT: i32 = 2;
-pub const SQLITE_BLOB: i32 = 4;
-pub const SQLITE_NULL: i32 = 5;
-pub const SQLITE_TEXT: i32 = 3;
-pub const SQLITE3_TEXT: i32 = 3;
-pub const SQLITE_UTF8: i32 = 1;
-pub const SQLITE_UTF16LE: i32 = 2;
-pub const SQLITE_UTF16BE: i32 = 3;
-pub const SQLITE_UTF16: i32 = 4;
-pub const SQLITE_ANY: i32 = 5;
-pub const SQLITE_UTF16_ALIGNED: i32 = 8;
-pub const SQLITE_DETERMINISTIC: i32 = 2048;
-pub const SQLITE_DIRECTONLY: i32 = 524288;
-pub const SQLITE_SUBTYPE: i32 = 1048576;
-pub const SQLITE_INNOCUOUS: i32 = 2097152;
-pub const SQLITE_WIN32_DATA_DIRECTORY_TYPE: i32 = 1;
-pub const SQLITE_WIN32_TEMP_DIRECTORY_TYPE: i32 = 2;
-pub const SQLITE_INDEX_SCAN_UNIQUE: i32 = 1;
-pub const SQLITE_INDEX_CONSTRAINT_EQ: i32 = 2;
-pub const SQLITE_INDEX_CONSTRAINT_GT: i32 = 4;
-pub const SQLITE_INDEX_CONSTRAINT_LE: i32 = 8;
-pub const SQLITE_INDEX_CONSTRAINT_LT: i32 = 16;
-pub const SQLITE_INDEX_CONSTRAINT_GE: i32 = 32;
-pub const SQLITE_INDEX_CONSTRAINT_MATCH: i32 = 64;
-pub const SQLITE_INDEX_CONSTRAINT_LIKE: i32 = 65;
-pub const SQLITE_INDEX_CONSTRAINT_GLOB: i32 = 66;
-pub const SQLITE_INDEX_CONSTRAINT_REGEXP: i32 = 67;
-pub const SQLITE_INDEX_CONSTRAINT_NE: i32 = 68;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOT: i32 = 69;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOTNULL: i32 = 70;
-pub const SQLITE_INDEX_CONSTRAINT_ISNULL: i32 = 71;
-pub const SQLITE_INDEX_CONSTRAINT_IS: i32 = 72;
-pub const SQLITE_INDEX_CONSTRAINT_FUNCTION: i32 = 150;
-pub const SQLITE_MUTEX_FAST: i32 = 0;
-pub const SQLITE_MUTEX_RECURSIVE: i32 = 1;
-pub const SQLITE_MUTEX_STATIC_MASTER: i32 = 2;
-pub const SQLITE_MUTEX_STATIC_MEM: i32 = 3;
-pub const SQLITE_MUTEX_STATIC_MEM2: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_OPEN: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_PRNG: i32 = 5;
-pub const SQLITE_MUTEX_STATIC_LRU: i32 = 6;
-pub const SQLITE_MUTEX_STATIC_LRU2: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_PMEM: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_APP1: i32 = 8;
-pub const SQLITE_MUTEX_STATIC_APP2: i32 = 9;
-pub const SQLITE_MUTEX_STATIC_APP3: i32 = 10;
-pub const SQLITE_MUTEX_STATIC_VFS1: i32 = 11;
-pub const SQLITE_MUTEX_STATIC_VFS2: i32 = 12;
-pub const SQLITE_MUTEX_STATIC_VFS3: i32 = 13;
-pub const SQLITE_TESTCTRL_FIRST: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_SAVE: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_RESTORE: i32 = 6;
-pub const SQLITE_TESTCTRL_PRNG_RESET: i32 = 7;
-pub const SQLITE_TESTCTRL_BITVEC_TEST: i32 = 8;
-pub const SQLITE_TESTCTRL_FAULT_INSTALL: i32 = 9;
-pub const SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: i32 = 10;
-pub const SQLITE_TESTCTRL_PENDING_BYTE: i32 = 11;
-pub const SQLITE_TESTCTRL_ASSERT: i32 = 12;
-pub const SQLITE_TESTCTRL_ALWAYS: i32 = 13;
-pub const SQLITE_TESTCTRL_RESERVE: i32 = 14;
-pub const SQLITE_TESTCTRL_OPTIMIZATIONS: i32 = 15;
-pub const SQLITE_TESTCTRL_ISKEYWORD: i32 = 16;
-pub const SQLITE_TESTCTRL_SCRATCHMALLOC: i32 = 17;
-pub const SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: i32 = 17;
-pub const SQLITE_TESTCTRL_LOCALTIME_FAULT: i32 = 18;
-pub const SQLITE_TESTCTRL_EXPLAIN_STMT: i32 = 19;
-pub const SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD: i32 = 19;
-pub const SQLITE_TESTCTRL_NEVER_CORRUPT: i32 = 20;
-pub const SQLITE_TESTCTRL_VDBE_COVERAGE: i32 = 21;
-pub const SQLITE_TESTCTRL_BYTEORDER: i32 = 22;
-pub const SQLITE_TESTCTRL_ISINIT: i32 = 23;
-pub const SQLITE_TESTCTRL_SORTER_MMAP: i32 = 24;
-pub const SQLITE_TESTCTRL_IMPOSTER: i32 = 25;
-pub const SQLITE_TESTCTRL_PARSER_COVERAGE: i32 = 26;
-pub const SQLITE_TESTCTRL_RESULT_INTREAL: i32 = 27;
-pub const SQLITE_TESTCTRL_PRNG_SEED: i32 = 28;
-pub const SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: i32 = 29;
-pub const SQLITE_TESTCTRL_LAST: i32 = 29;
-pub const SQLITE_STATUS_MEMORY_USED: i32 = 0;
-pub const SQLITE_STATUS_PAGECACHE_USED: i32 = 1;
-pub const SQLITE_STATUS_PAGECACHE_OVERFLOW: i32 = 2;
-pub const SQLITE_STATUS_SCRATCH_USED: i32 = 3;
-pub const SQLITE_STATUS_SCRATCH_OVERFLOW: i32 = 4;
-pub const SQLITE_STATUS_MALLOC_SIZE: i32 = 5;
-pub const SQLITE_STATUS_PARSER_STACK: i32 = 6;
-pub const SQLITE_STATUS_PAGECACHE_SIZE: i32 = 7;
-pub const SQLITE_STATUS_SCRATCH_SIZE: i32 = 8;
-pub const SQLITE_STATUS_MALLOC_COUNT: i32 = 9;
-pub const SQLITE_DBSTATUS_LOOKASIDE_USED: i32 = 0;
-pub const SQLITE_DBSTATUS_CACHE_USED: i32 = 1;
-pub const SQLITE_DBSTATUS_SCHEMA_USED: i32 = 2;
-pub const SQLITE_DBSTATUS_STMT_USED: i32 = 3;
-pub const SQLITE_DBSTATUS_LOOKASIDE_HIT: i32 = 4;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: i32 = 5;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: i32 = 6;
-pub const SQLITE_DBSTATUS_CACHE_HIT: i32 = 7;
-pub const SQLITE_DBSTATUS_CACHE_MISS: i32 = 8;
-pub const SQLITE_DBSTATUS_CACHE_WRITE: i32 = 9;
-pub const SQLITE_DBSTATUS_DEFERRED_FKS: i32 = 10;
-pub const SQLITE_DBSTATUS_CACHE_USED_SHARED: i32 = 11;
-pub const SQLITE_DBSTATUS_CACHE_SPILL: i32 = 12;
-pub const SQLITE_DBSTATUS_MAX: i32 = 12;
-pub const SQLITE_STMTSTATUS_FULLSCAN_STEP: i32 = 1;
-pub const SQLITE_STMTSTATUS_SORT: i32 = 2;
-pub const SQLITE_STMTSTATUS_AUTOINDEX: i32 = 3;
-pub const SQLITE_STMTSTATUS_VM_STEP: i32 = 4;
-pub const SQLITE_STMTSTATUS_REPREPARE: i32 = 5;
-pub const SQLITE_STMTSTATUS_RUN: i32 = 6;
-pub const SQLITE_STMTSTATUS_MEMUSED: i32 = 99;
-pub const SQLITE_CHECKPOINT_PASSIVE: i32 = 0;
-pub const SQLITE_CHECKPOINT_FULL: i32 = 1;
-pub const SQLITE_CHECKPOINT_RESTART: i32 = 2;
-pub const SQLITE_CHECKPOINT_TRUNCATE: i32 = 3;
-pub const SQLITE_VTAB_CONSTRAINT_SUPPORT: i32 = 1;
-pub const SQLITE_VTAB_INNOCUOUS: i32 = 2;
-pub const SQLITE_VTAB_DIRECTONLY: i32 = 3;
-pub const SQLITE_ROLLBACK: i32 = 1;
-pub const SQLITE_FAIL: i32 = 3;
-pub const SQLITE_REPLACE: i32 = 5;
-pub const SQLITE_SCANSTAT_NLOOP: i32 = 0;
-pub const SQLITE_SCANSTAT_NVISIT: i32 = 1;
-pub const SQLITE_SCANSTAT_EST: i32 = 2;
-pub const SQLITE_SCANSTAT_NAME: i32 = 3;
-pub const SQLITE_SCANSTAT_EXPLAIN: i32 = 4;
-pub const SQLITE_SCANSTAT_SELECTID: i32 = 5;
-pub const SQLITE_SERIALIZE_NOCOPY: i32 = 1;
-pub const SQLITE_DESERIALIZE_FREEONCLOSE: i32 = 1;
-pub const SQLITE_DESERIALIZE_RESIZEABLE: i32 = 2;
-pub const SQLITE_DESERIALIZE_READONLY: i32 = 4;
-pub const NOT_WITHIN: i32 = 0;
-pub const PARTLY_WITHIN: i32 = 1;
-pub const FULLY_WITHIN: i32 = 2;
-pub const FTS5_TOKENIZE_QUERY: i32 = 1;
-pub const FTS5_TOKENIZE_PREFIX: i32 = 2;
-pub const FTS5_TOKENIZE_DOCUMENT: i32 = 4;
-pub const FTS5_TOKENIZE_AUX: i32 = 8;
-pub const FTS5_TOKEN_COLOCATED: i32 = 1;
-extern "C" {
-    pub static mut sqlite3_version: [::std::os::raw::c_char; 0usize];
-}
-extern "C" {
-    pub fn sqlite3_libversion() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_sourceid() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_libversion_number() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_threadsafe() -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3 {
-    _unused: [u8; 0],
-}
-pub type sqlite_int64 = ::std::os::raw::c_longlong;
-pub type sqlite_uint64 = ::std::os::raw::c_ulonglong;
-pub type sqlite3_int64 = sqlite_int64;
-pub type sqlite3_uint64 = sqlite_uint64;
-extern "C" {
-    pub fn sqlite3_close(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_close_v2(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_callback = ::std::option::Option<
-    unsafe extern "C" fn(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut *mut ::std::os::raw::c_char,
-        arg4: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int,
->;
-extern "C" {
-    pub fn sqlite3_exec(
-        arg1: *mut sqlite3,
-        sql: *const ::std::os::raw::c_char,
-        callback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut ::std::os::raw::c_char,
-                arg4: *mut *mut ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        errmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_file {
-    pub pMethods: *const sqlite3_io_methods,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_file() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_file>(),
-        4usize,
-        concat!("Size of: ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_file>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_file>())).pMethods as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_file),
-            "::",
-            stringify!(pMethods)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_io_methods {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xRead: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *mut ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xWrite: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *const ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file, size: sqlite3_int64) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pSize: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnlock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCheckReservedLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileControl: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            op: ::std::os::raw::c_int,
-            pArg: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSectorSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xDeviceCharacteristics: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xShmMap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iPg: ::std::os::raw::c_int,
-            pgsz: ::std::os::raw::c_int,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            offset: ::std::os::raw::c_int,
-            n: ::std::os::raw::c_int,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmBarrier: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_file)>,
-    pub xShmUnmap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            deleteFlag: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            iAmt: ::std::os::raw::c_int,
-            pp: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnfetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            p: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_io_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_io_methods>(),
-        76usize,
-        concat!("Size of: ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_io_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xClose as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xRead as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xRead)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xWrite as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xWrite)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xTruncate as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSync as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileSize as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xLock as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnlock as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnlock)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xCheckReservedLock as *const _ as usize
-        },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xCheckReservedLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileControl as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileControl)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSectorSize as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSectorSize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xDeviceCharacteristics as *const _
-                as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xDeviceCharacteristics)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmMap as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmMap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmLock as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmBarrier as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmBarrier)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmUnmap as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmUnmap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFetch as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnfetch as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnfetch)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_api_routines {
-    _unused: [u8; 0],
-}
-pub type sqlite3_syscall_ptr = ::std::option::Option<unsafe extern "C" fn()>;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vfs {
-    pub iVersion: ::std::os::raw::c_int,
-    pub szOsFile: ::std::os::raw::c_int,
-    pub mxPathname: ::std::os::raw::c_int,
-    pub pNext: *mut sqlite3_vfs,
-    pub zName: *const ::std::os::raw::c_char,
-    pub pAppData: *mut ::std::os::raw::c_void,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-            pOutFlags: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            syncDir: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xAccess: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            flags: ::std::os::raw::c_int,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFullPathname: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            nOut: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDlOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zFilename: *const ::std::os::raw::c_char,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xDlError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zErrMsg: *mut ::std::os::raw::c_char,
-        ),
-    >,
-    pub xDlSym: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut ::std::os::raw::c_void,
-            zSymbol: *const ::std::os::raw::c_char,
-        ) -> ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_vfs,
-                arg2: *mut ::std::os::raw::c_void,
-                zSymbol: *const ::std::os::raw::c_char,
-            ),
-        >,
-    >,
-    pub xDlClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut ::std::os::raw::c_void),
-    >,
-    pub xRandomness: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSleep: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            microseconds: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTime: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut f64) -> ::std::os::raw::c_int,
-    >,
-    pub xGetLastError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTimeInt64: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: sqlite3_syscall_ptr,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> sqlite3_syscall_ptr,
-    >,
-    pub xNextSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> *const ::std::os::raw::c_char,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vfs() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vfs>(),
-        88usize,
-        concat!("Size of: ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vfs>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).szOsFile as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(szOsFile)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).mxPathname as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(mxPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pNext as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).zName as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(zName)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pAppData as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xOpen as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDelete as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xAccess as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xAccess)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xFullPathname as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xFullPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlOpen as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlError as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlSym as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlSym)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlClose as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xRandomness as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xRandomness)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSleep as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSleep)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTime as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTime)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetLastError as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetLastError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTimeInt64 as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTimeInt64)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSetSystemCall as *const _ as usize },
-        76usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetSystemCall as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xNextSystemCall as *const _ as usize },
-        84usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xNextSystemCall)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_initialize() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_shutdown() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_init() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_end() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_config(arg1: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mem_methods {
-    pub xMalloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xRealloc: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            arg2: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xRoundup: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int,
-    >,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub pAppData: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mem_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mem_methods>(),
-        32usize,
-        concat!("Size of: ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mem_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xMalloc as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xMalloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xFree as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xFree)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRealloc as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRealloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xSize as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRoundup as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRoundup)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xInit as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xShutdown as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).pAppData as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_extended_result_codes(
-        arg1: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_last_insert_rowid(arg1: *mut sqlite3) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_set_last_insert_rowid(arg1: *mut sqlite3, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_total_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_interrupt(arg1: *mut sqlite3);
-}
-extern "C" {
-    pub fn sqlite3_complete(sql: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_complete16(sql: *const ::std::os::raw::c_void) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_timeout(
-        arg1: *mut sqlite3,
-        ms: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_table(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        pazResult: *mut *mut *mut ::std::os::raw::c_char,
-        pnRow: *mut ::std::os::raw::c_int,
-        pnColumn: *mut ::std::os::raw::c_int,
-        pzErrmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_free_table(result: *mut *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_mprintf(arg1: *const ::std::os::raw::c_char, ...)
-        -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_snprintf(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_char,
-        arg3: *const ::std::os::raw::c_char,
-        ...
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_malloc(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_malloc64(arg1: sqlite3_uint64) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc64(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: sqlite3_uint64,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_free(arg1: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_msize(arg1: *mut ::std::os::raw::c_void) -> sqlite3_uint64;
-}
-extern "C" {
-    pub fn sqlite3_memory_used() -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_memory_highwater(resetFlag: ::std::os::raw::c_int) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_randomness(N: ::std::os::raw::c_int, P: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_set_authorizer(
-        arg1: *mut sqlite3,
-        xAuth: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: *const ::std::os::raw::c_char,
-                arg6: *const ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pUserData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_trace(
-        arg1: *mut sqlite3,
-        xTrace: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_profile(
-        arg1: *mut sqlite3,
-        xProfile: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-                arg3: sqlite3_uint64,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_trace_v2(
-        arg1: *mut sqlite3,
-        uMask: ::std::os::raw::c_uint,
-        xCallback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: ::std::os::raw::c_uint,
-                arg2: *mut ::std::os::raw::c_void,
-                arg3: *mut ::std::os::raw::c_void,
-                arg4: *mut ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pCtx: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_progress_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg4: *mut ::std::os::raw::c_void,
-    );
-}
-extern "C" {
-    pub fn sqlite3_open(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open16(
-        filename: *const ::std::os::raw::c_void,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open_v2(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-        flags: ::std::os::raw::c_int,
-        zVfs: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_parameter(
-        zFilename: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_uri_boolean(
-        zFile: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-        bDefault: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_int64(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_int64,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_uri_key(
-        zFilename: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_database(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_journal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_wal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_database_file_object(arg1: *const ::std::os::raw::c_char) -> *mut sqlite3_file;
-}
-extern "C" {
-    pub fn sqlite3_create_filename(
-        zDatabase: *const ::std::os::raw::c_char,
-        zJournal: *const ::std::os::raw::c_char,
-        zWal: *const ::std::os::raw::c_char,
-        nParam: ::std::os::raw::c_int,
-        azParam: *mut *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_free_filename(arg1: *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_extended_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_errmsg(arg1: *mut sqlite3) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_errmsg16(arg1: *mut sqlite3) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_errstr(arg1: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_stmt {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_limit(
-        arg1: *mut sqlite3,
-        id: ::std::os::raw::c_int,
-        newVal: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_expanded_sql(pStmt: *mut sqlite3_stmt) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_normalized_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_readonly(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_isexplain(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_busy(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_value {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_context {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_bind_blob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_blob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_double(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: f64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_null(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_value(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const sqlite3_value,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_pointer(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut ::std::os::raw::c_void,
-        arg4: *const ::std::os::raw::c_char,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        n: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_count(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_index(
-        arg1: *mut sqlite3_stmt,
-        zName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_clear_bindings(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_name(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_name16(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_step(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_data_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_blob(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_double(arg1: *mut sqlite3_stmt, iCol: ::std::os::raw::c_int) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_column_int(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_int64(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_column_text(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_column_text16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_value(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_type(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_finalize(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function16(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_void,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function_v2(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_window_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xValue: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xInverse: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_aggregate_count(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_expired(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_transfer_bindings(
-        arg1: *mut sqlite3_stmt,
-        arg2: *mut sqlite3_stmt,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_global_recover() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_thread_cleanup();
-}
-extern "C" {
-    pub fn sqlite3_memory_alarm(
-        arg1: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: sqlite3_int64,
-                arg3: ::std::os::raw::c_int,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_blob(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_double(arg1: *mut sqlite3_value) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_value_int(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_int64(arg1: *mut sqlite3_value) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_value_pointer(
-        arg1: *mut sqlite3_value,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_value_text16(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16le(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16be(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes16(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_numeric_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_nochange(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_frombind(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_subtype(arg1: *mut sqlite3_value) -> ::std::os::raw::c_uint;
-}
-extern "C" {
-    pub fn sqlite3_value_dup(arg1: *const sqlite3_value) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_value_free(arg1: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_aggregate_context(
-        arg1: *mut sqlite3_context,
-        nBytes: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_user_data(arg1: *mut sqlite3_context) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_context_db_handle(arg1: *mut sqlite3_context) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_get_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_set_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-pub type sqlite3_destructor_type =
-    ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>;
-extern "C" {
-    pub fn sqlite3_result_blob(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_blob64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_double(arg1: *mut sqlite3_context, arg2: f64);
-}
-extern "C" {
-    pub fn sqlite3_result_error(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error_toobig(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_nomem(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_code(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int64(arg1: *mut sqlite3_context, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_result_null(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_text(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16le(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16be(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_value(arg1: *mut sqlite3_context, arg2: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_result_pointer(
-        arg1: *mut sqlite3_context,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob(arg1: *mut sqlite3_context, n: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob64(
-        arg1: *mut sqlite3_context,
-        n: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_result_subtype(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_uint);
-}
-extern "C" {
-    pub fn sqlite3_create_collation(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation_v2(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation16(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_void,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed16(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sleep(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub static mut sqlite3_temp_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub static mut sqlite3_data_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory8(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory16(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_autocommit(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_handle(arg1: *mut sqlite3_stmt) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_db_filename(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_db_readonly(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_next_stmt(pDb: *mut sqlite3, pStmt: *mut sqlite3_stmt) -> *mut sqlite3_stmt;
-}
-extern "C" {
-    pub fn sqlite3_commit_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_rollback_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_update_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: sqlite3_int64,
-            ),
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_enable_shared_cache(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_release_memory(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_release_memory(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_hard_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit(N: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_table_column_metadata(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        zTableName: *const ::std::os::raw::c_char,
-        zColumnName: *const ::std::os::raw::c_char,
-        pzDataType: *mut *const ::std::os::raw::c_char,
-        pzCollSeq: *mut *const ::std::os::raw::c_char,
-        pNotNull: *mut ::std::os::raw::c_int,
-        pPrimaryKey: *mut ::std::os::raw::c_int,
-        pAutoinc: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_load_extension(
-        db: *mut sqlite3,
-        zFile: *const ::std::os::raw::c_char,
-        zProc: *const ::std::os::raw::c_char,
-        pzErrMsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_enable_load_extension(
-        db: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_cancel_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset_auto_extension();
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_module {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xConnect: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBestIndex: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: *mut sqlite3_index_info,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDisconnect: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xDestroy: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            ppCursor: *mut *mut sqlite3_vtab_cursor,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xFilter: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            idxNum: ::std::os::raw::c_int,
-            idxStr: *const ::std::os::raw::c_char,
-            argc: ::std::os::raw::c_int,
-            argv: *mut *mut sqlite3_value,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xNext: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xEof: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            arg2: *mut sqlite3_context,
-            arg3: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            pRowid: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUpdate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut sqlite3_value,
-            arg4: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBegin: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xCommit: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xRollback: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xFindFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            nArg: ::std::os::raw::c_int,
-            zName: *const ::std::os::raw::c_char,
-            pxFunc: *mut ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut sqlite3_context,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *mut *mut sqlite3_value,
-                ),
-            >,
-            ppArg: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRename: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            zNew: *const ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSavepoint: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRelease: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRollbackTo: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShadowName: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_module() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_module>(),
-        96usize,
-        concat!("Size of: ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_module>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCreate as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xConnect as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xConnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBestIndex as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBestIndex)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDisconnect as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDisconnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDestroy as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xOpen as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xClose as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFilter as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFilter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xNext as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xEof as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xEof)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xColumn as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xColumn)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRowid as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xUpdate as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xUpdate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBegin as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBegin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSync as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCommit as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCommit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollback as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollback)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFindFunction as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFindFunction)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRename as *const _ as usize },
-        76usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRename)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSavepoint as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSavepoint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRelease as *const _ as usize },
-        84usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRelease)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollbackTo as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollbackTo)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xShadowName as *const _ as usize },
-        92usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xShadowName)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info {
-    pub nConstraint: ::std::os::raw::c_int,
-    pub aConstraint: *mut sqlite3_index_info_sqlite3_index_constraint,
-    pub nOrderBy: ::std::os::raw::c_int,
-    pub aOrderBy: *mut sqlite3_index_info_sqlite3_index_orderby,
-    pub aConstraintUsage: *mut sqlite3_index_info_sqlite3_index_constraint_usage,
-    pub idxNum: ::std::os::raw::c_int,
-    pub idxStr: *mut ::std::os::raw::c_char,
-    pub needToFreeIdxStr: ::std::os::raw::c_int,
-    pub orderByConsumed: ::std::os::raw::c_int,
-    pub estimatedCost: f64,
-    pub estimatedRows: sqlite3_int64,
-    pub idxFlags: ::std::os::raw::c_int,
-    pub colUsed: sqlite3_uint64,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint {
-    pub iColumn: ::std::os::raw::c_int,
-    pub op: ::std::os::raw::c_uchar,
-    pub usable: ::std::os::raw::c_uchar,
-    pub iTermOffset: ::std::os::raw::c_int,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        12usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iColumn
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).op as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(op)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).usable
-                as *const _ as usize
-        },
-        5usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(usable)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iTermOffset
-                as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iTermOffset)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_orderby {
-    pub iColumn: ::std::os::raw::c_int,
-    pub desc: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_orderby() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).iColumn as *const _
-                as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).desc as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(desc)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint_usage {
-    pub argvIndex: ::std::os::raw::c_int,
-    pub omit: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint_usage() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).argvIndex
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(argvIndex)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).omit
-                as *const _ as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(omit)
-        )
-    );
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info>(),
-        72usize,
-        concat!("Size of: ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nConstraint as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraint as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nOrderBy as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aOrderBy as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraintUsage as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraintUsage)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxNum as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxNum)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxStr as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).needToFreeIdxStr as *const _ as usize
-        },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(needToFreeIdxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).orderByConsumed as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(orderByConsumed)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedCost as *const _ as usize
-        },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedCost)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedRows as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedRows)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxFlags as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxFlags)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).colUsed as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(colUsed)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_create_module(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_module_v2(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_drop_modules(
-        db: *mut sqlite3,
-        azKeep: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab {
-    pub pModule: *const sqlite3_module,
-    pub nRef: ::std::os::raw::c_int,
-    pub zErrMsg: *mut ::std::os::raw::c_char,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab>(),
-        12usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).pModule as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(pModule)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).nRef as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(nRef)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).zErrMsg as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(zErrMsg)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab_cursor {
-    pub pVtab: *mut sqlite3_vtab,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab_cursor() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab_cursor>(),
-        4usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab_cursor>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab_cursor>())).pVtab as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab_cursor),
-            "::",
-            stringify!(pVtab)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_declare_vtab(
-        arg1: *mut sqlite3,
-        zSQL: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_overload_function(
-        arg1: *mut sqlite3,
-        zFuncName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_blob {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_blob_open(
-        arg1: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        zTable: *const ::std::os::raw::c_char,
-        zColumn: *const ::std::os::raw::c_char,
-        iRow: sqlite3_int64,
-        flags: ::std::os::raw::c_int,
-        ppBlob: *mut *mut sqlite3_blob,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_reopen(
-        arg1: *mut sqlite3_blob,
-        arg2: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_close(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_bytes(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_read(
-        arg1: *mut sqlite3_blob,
-        Z: *mut ::std::os::raw::c_void,
-        N: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_write(
-        arg1: *mut sqlite3_blob,
-        z: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_find(zVfsName: *const ::std::os::raw::c_char) -> *mut sqlite3_vfs;
-}
-extern "C" {
-    pub fn sqlite3_vfs_register(
-        arg1: *mut sqlite3_vfs,
-        makeDflt: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_unregister(arg1: *mut sqlite3_vfs) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_alloc(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_mutex_free(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_enter(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_try(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_leave(arg1: *mut sqlite3_mutex);
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex_methods {
-    pub xMutexInit: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexEnd: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexAlloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex,
-    >,
-    pub xMutexFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexEnter: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexTry: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexLeave: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexHeld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexNotheld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mutex_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mutex_methods>(),
-        36usize,
-        concat!("Size of: ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mutex_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexInit as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnd as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnd)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexAlloc as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexAlloc)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexFree as *const _ as usize
-        },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexFree)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnter as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexTry as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexTry)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexLeave as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexLeave)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexHeld as *const _ as usize
-        },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexHeld)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexNotheld as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexNotheld)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_db_mutex(arg1: *mut sqlite3) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_file_control(
-        arg1: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        op: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_test_control(op: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_count() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_name(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut *const ::std::os::raw::c_char,
-        arg3: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_check(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_str {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_str_new(arg1: *mut sqlite3) -> *mut sqlite3_str;
-}
-extern "C" {
-    pub fn sqlite3_str_finish(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_str_appendf(arg1: *mut sqlite3_str, zFormat: *const ::std::os::raw::c_char, ...);
-}
-extern "C" {
-    pub fn sqlite3_str_append(
-        arg1: *mut sqlite3_str,
-        zIn: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_appendall(arg1: *mut sqlite3_str, zIn: *const ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_str_appendchar(
-        arg1: *mut sqlite3_str,
-        N: ::std::os::raw::c_int,
-        C: ::std::os::raw::c_char,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_reset(arg1: *mut sqlite3_str);
-}
-extern "C" {
-    pub fn sqlite3_str_errcode(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_length(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_value(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_status(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut ::std::os::raw::c_int,
-        pHighwater: *mut ::std::os::raw::c_int,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_status64(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut sqlite3_int64,
-        pHighwater: *mut sqlite3_int64,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_status(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        pCur: *mut ::std::os::raw::c_int,
-        pHiwtr: *mut ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_status(
-        arg1: *mut sqlite3_stmt,
-        op: ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_page {
-    pub pBuf: *mut ::std::os::raw::c_void,
-    pub pExtra: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_page() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_page>(),
-        8usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_page>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pBuf as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pBuf)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pExtra as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pExtra)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods2 {
-    pub iVersion: ::std::os::raw::c_int,
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            szExtra: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache_page,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-    pub xShrink: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods2() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods2>(),
-        52usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods2>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).iVersion as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).pArg as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xInit as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShutdown as *const _ as usize
-        },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCreate as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCachesize as *const _ as usize
-        },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xPagecount as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xFetch as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xUnpin as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xRekey as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xTruncate as *const _ as usize
-        },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xDestroy as *const _ as usize
-        },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShrink as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShrink)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods {
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods>(),
-        44usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).pArg as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xInit as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xShutdown as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCreate as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCachesize as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xPagecount as *const _ as usize
-        },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xFetch as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xUnpin as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xRekey as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xTruncate as *const _ as usize
-        },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xDestroy as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_backup {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_backup_init(
-        pDest: *mut sqlite3,
-        zDestName: *const ::std::os::raw::c_char,
-        pSource: *mut sqlite3,
-        zSourceName: *const ::std::os::raw::c_char,
-    ) -> *mut sqlite3_backup;
-}
-extern "C" {
-    pub fn sqlite3_backup_step(
-        p: *mut sqlite3_backup,
-        nPage: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_finish(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_remaining(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_pagecount(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_unlock_notify(
-        pBlocked: *mut sqlite3,
-        xNotify: ::std::option::Option<
-            unsafe extern "C" fn(
-                apArg: *mut *mut ::std::os::raw::c_void,
-                nArg: ::std::os::raw::c_int,
-            ),
-        >,
-        pNotifyArg: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stricmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strnicmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strglob(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strlike(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-        cEsc: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_log(
-        iErrCode: ::std::os::raw::c_int,
-        zFormat: *const ::std::os::raw::c_char,
-        ...
-    );
-}
-extern "C" {
-    pub fn sqlite3_wal_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_wal_autocheckpoint(
-        db: *mut sqlite3,
-        N: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint_v2(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        eMode: ::std::os::raw::c_int,
-        pnLog: *mut ::std::os::raw::c_int,
-        pnCkpt: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_on_conflict(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_nochange(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_collation(
-        arg1: *mut sqlite3_index_info,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus(
-        pStmt: *mut sqlite3_stmt,
-        idx: ::std::os::raw::c_int,
-        iScanStatusOp: ::std::os::raw::c_int,
-        pOut: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus_reset(arg1: *mut sqlite3_stmt);
-}
-extern "C" {
-    pub fn sqlite3_db_cacheflush(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_system_errno(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct sqlite3_snapshot {
-    pub hidden: [::std::os::raw::c_uchar; 48usize],
-}
-#[test]
-fn bindgen_test_layout_sqlite3_snapshot() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_snapshot>(),
-        48usize,
-        concat!("Size of: ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_snapshot>(),
-        1usize,
-        concat!("Alignment of ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_snapshot>())).hidden as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_snapshot),
-            "::",
-            stringify!(hidden)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_snapshot_get(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        ppSnapshot: *mut *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_open(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pSnapshot: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_free(arg1: *mut sqlite3_snapshot);
-}
-extern "C" {
-    pub fn sqlite3_snapshot_cmp(
-        p1: *mut sqlite3_snapshot,
-        p2: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_recover(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_serialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        piSize: *mut sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> *mut ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_deserialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pData: *mut ::std::os::raw::c_uchar,
-        szDb: sqlite3_int64,
-        szBuf: sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_rtree_dbl = f64;
-extern "C" {
-    pub fn sqlite3_rtree_geometry_callback(
-        db: *mut sqlite3,
-        zGeom: *const ::std::os::raw::c_char,
-        xGeom: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_rtree_geometry,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut sqlite3_rtree_dbl,
-                arg4: *mut ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_geometry {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_geometry() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_geometry>(),
-        20usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_geometry>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pContext as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).nParam as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).aParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pUser as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).xDelUser as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_rtree_query_callback(
-        db: *mut sqlite3,
-        zQueryFunc: *const ::std::os::raw::c_char,
-        xQueryFunc: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut sqlite3_rtree_query_info) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-        xDestructor: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_query_info {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub aCoord: *mut sqlite3_rtree_dbl,
-    pub anQueue: *mut ::std::os::raw::c_uint,
-    pub nCoord: ::std::os::raw::c_int,
-    pub iLevel: ::std::os::raw::c_int,
-    pub mxLevel: ::std::os::raw::c_int,
-    pub iRowid: sqlite3_int64,
-    pub rParentScore: sqlite3_rtree_dbl,
-    pub eParentWithin: ::std::os::raw::c_int,
-    pub eWithin: ::std::os::raw::c_int,
-    pub rScore: sqlite3_rtree_dbl,
-    pub apSqlParam: *mut *mut sqlite3_value,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_query_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_query_info>(),
-        80usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_query_info>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pContext as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nParam as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pUser as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).xDelUser as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aCoord as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aCoord)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).anQueue as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(anQueue)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nCoord as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nCoord)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iLevel as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iLevel)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).mxLevel as *const _ as usize
-        },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(mxLevel)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iRowid as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iRowid)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rParentScore as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rParentScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eParentWithin as *const _ as usize
-        },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eParentWithin)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eWithin as *const _ as usize
-        },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eWithin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rScore as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).apSqlParam as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(apSqlParam)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Context {
-    _unused: [u8; 0],
-}
-pub type fts5_extension_function = ::std::option::Option<
-    unsafe extern "C" fn(
-        pApi: *const Fts5ExtensionApi,
-        pFts: *mut Fts5Context,
-        pCtx: *mut sqlite3_context,
-        nVal: ::std::os::raw::c_int,
-        apVal: *mut *mut sqlite3_value,
-    ),
->;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5PhraseIter {
-    pub a: *const ::std::os::raw::c_uchar,
-    pub b: *const ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_Fts5PhraseIter() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5PhraseIter>(),
-        8usize,
-        concat!("Size of: ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5PhraseIter>(),
-        4usize,
-        concat!("Alignment of ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).a as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(a)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).b as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(b)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5ExtensionApi {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xUserData: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xColumnCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xRowCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnRow: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnTotalSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            pCtx: *mut ::std::os::raw::c_void,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut ::std::os::raw::c_void,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *const ::std::os::raw::c_char,
-                    arg4: ::std::os::raw::c_int,
-                    arg5: ::std::os::raw::c_int,
-                    arg6: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInstCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnInst: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iIdx: ::std::os::raw::c_int,
-            piPhrase: *mut ::std::os::raw::c_int,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid:
-        ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Context) -> sqlite3_int64>,
-    pub xColumnText: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pz: *mut *const ::std::os::raw::c_char,
-            pn: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xQueryPhrase: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            pUserData: *mut ::std::os::raw::c_void,
-            arg2: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *const Fts5ExtensionApi,
-                    arg2: *mut Fts5Context,
-                    arg3: *mut ::std::os::raw::c_void,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pAux: *mut ::std::os::raw::c_void,
-            xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            bClear: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xPhraseFirst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-            arg4: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNext: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ),
-    >,
-    pub xPhraseFirstColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNextColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-        ),
-    >,
-}
-#[test]
-fn bindgen_test_layout_Fts5ExtensionApi() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5ExtensionApi>(),
-        80usize,
-        concat!("Size of: ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5ExtensionApi>(),
-        4usize,
-        concat!("Alignment of ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xUserData as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xUserData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnCount as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowCount as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowCount)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnTotalSize as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnTotalSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xTokenize as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseCount as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseSize as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInstCount as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInstCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInst as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowid as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnText as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnText)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnSize as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xQueryPhrase as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xQueryPhrase)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xSetAuxdata as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xSetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xGetAuxdata as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xGetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirst as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNext as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNext)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirstColumn as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirstColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNextColumn as *const _ as usize
-        },
-        76usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNextColumn)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Tokenizer {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_tokenizer {
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            azArg: *mut *const ::std::os::raw::c_char,
-            nArg: ::std::os::raw::c_int,
-            ppOut: *mut *mut Fts5Tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Tokenizer)>,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Tokenizer,
-            pCtx: *mut ::std::os::raw::c_void,
-            flags: ::std::os::raw::c_int,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    pCtx: *mut ::std::os::raw::c_void,
-                    tflags: ::std::os::raw::c_int,
-                    pToken: *const ::std::os::raw::c_char,
-                    nToken: ::std::os::raw::c_int,
-                    iStart: ::std::os::raw::c_int,
-                    iEnd: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_tokenizer() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_tokenizer>(),
-        12usize,
-        concat!("Size of: ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_tokenizer>(),
-        4usize,
-        concat!("Alignment of ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xCreate as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xDelete as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xTokenize as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_api {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreateTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFindTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            ppContext: *mut *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCreateFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            xFunction: fts5_extension_function,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_api() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_api>(),
-        16usize,
-        concat!("Size of: ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_api>(),
-        4usize,
-        concat!("Alignment of ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateTokenizer as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xFindTokenizer as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xFindTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateFunction as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateFunction)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct __va_list {
-    pub __ap: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout___va_list() {
-    assert_eq!(
-        ::std::mem::size_of::<__va_list>(),
-        4usize,
-        concat!("Size of: ", stringify!(__va_list))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<__va_list>(),
-        4usize,
-        concat!("Alignment of ", stringify!(__va_list))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<__va_list>())).__ap as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(__va_list),
-            "::",
-            stringify!(__ap)
-        )
-    );
-}
diff --git a/android/arm64/bindings.rs b/android/arm64/bindings.rs
deleted file mode 100644
index ccfd3e8..0000000
--- a/android/arm64/bindings.rs
+++ /dev/null
@@ -1,5273 +0,0 @@
-/* automatically generated by rust-bindgen (unknown version) */
-
-pub const SQLITE_VERSION: &'static [u8; 7usize] = b"3.32.2\0";
-pub const SQLITE_VERSION_NUMBER: i32 = 3032002;
-pub const SQLITE_SOURCE_ID: &'static [u8; 85usize] =
-    b"2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c\0";
-pub const SQLITE_OK: i32 = 0;
-pub const SQLITE_ERROR: i32 = 1;
-pub const SQLITE_INTERNAL: i32 = 2;
-pub const SQLITE_PERM: i32 = 3;
-pub const SQLITE_ABORT: i32 = 4;
-pub const SQLITE_BUSY: i32 = 5;
-pub const SQLITE_LOCKED: i32 = 6;
-pub const SQLITE_NOMEM: i32 = 7;
-pub const SQLITE_READONLY: i32 = 8;
-pub const SQLITE_INTERRUPT: i32 = 9;
-pub const SQLITE_IOERR: i32 = 10;
-pub const SQLITE_CORRUPT: i32 = 11;
-pub const SQLITE_NOTFOUND: i32 = 12;
-pub const SQLITE_FULL: i32 = 13;
-pub const SQLITE_CANTOPEN: i32 = 14;
-pub const SQLITE_PROTOCOL: i32 = 15;
-pub const SQLITE_EMPTY: i32 = 16;
-pub const SQLITE_SCHEMA: i32 = 17;
-pub const SQLITE_TOOBIG: i32 = 18;
-pub const SQLITE_CONSTRAINT: i32 = 19;
-pub const SQLITE_MISMATCH: i32 = 20;
-pub const SQLITE_MISUSE: i32 = 21;
-pub const SQLITE_NOLFS: i32 = 22;
-pub const SQLITE_AUTH: i32 = 23;
-pub const SQLITE_FORMAT: i32 = 24;
-pub const SQLITE_RANGE: i32 = 25;
-pub const SQLITE_NOTADB: i32 = 26;
-pub const SQLITE_NOTICE: i32 = 27;
-pub const SQLITE_WARNING: i32 = 28;
-pub const SQLITE_ROW: i32 = 100;
-pub const SQLITE_DONE: i32 = 101;
-pub const SQLITE_ERROR_MISSING_COLLSEQ: i32 = 257;
-pub const SQLITE_ERROR_RETRY: i32 = 513;
-pub const SQLITE_ERROR_SNAPSHOT: i32 = 769;
-pub const SQLITE_IOERR_READ: i32 = 266;
-pub const SQLITE_IOERR_SHORT_READ: i32 = 522;
-pub const SQLITE_IOERR_WRITE: i32 = 778;
-pub const SQLITE_IOERR_FSYNC: i32 = 1034;
-pub const SQLITE_IOERR_DIR_FSYNC: i32 = 1290;
-pub const SQLITE_IOERR_TRUNCATE: i32 = 1546;
-pub const SQLITE_IOERR_FSTAT: i32 = 1802;
-pub const SQLITE_IOERR_UNLOCK: i32 = 2058;
-pub const SQLITE_IOERR_RDLOCK: i32 = 2314;
-pub const SQLITE_IOERR_DELETE: i32 = 2570;
-pub const SQLITE_IOERR_BLOCKED: i32 = 2826;
-pub const SQLITE_IOERR_NOMEM: i32 = 3082;
-pub const SQLITE_IOERR_ACCESS: i32 = 3338;
-pub const SQLITE_IOERR_CHECKRESERVEDLOCK: i32 = 3594;
-pub const SQLITE_IOERR_LOCK: i32 = 3850;
-pub const SQLITE_IOERR_CLOSE: i32 = 4106;
-pub const SQLITE_IOERR_DIR_CLOSE: i32 = 4362;
-pub const SQLITE_IOERR_SHMOPEN: i32 = 4618;
-pub const SQLITE_IOERR_SHMSIZE: i32 = 4874;
-pub const SQLITE_IOERR_SHMLOCK: i32 = 5130;
-pub const SQLITE_IOERR_SHMMAP: i32 = 5386;
-pub const SQLITE_IOERR_SEEK: i32 = 5642;
-pub const SQLITE_IOERR_DELETE_NOENT: i32 = 5898;
-pub const SQLITE_IOERR_MMAP: i32 = 6154;
-pub const SQLITE_IOERR_GETTEMPPATH: i32 = 6410;
-pub const SQLITE_IOERR_CONVPATH: i32 = 6666;
-pub const SQLITE_IOERR_VNODE: i32 = 6922;
-pub const SQLITE_IOERR_AUTH: i32 = 7178;
-pub const SQLITE_IOERR_BEGIN_ATOMIC: i32 = 7434;
-pub const SQLITE_IOERR_COMMIT_ATOMIC: i32 = 7690;
-pub const SQLITE_IOERR_ROLLBACK_ATOMIC: i32 = 7946;
-pub const SQLITE_IOERR_DATA: i32 = 8202;
-pub const SQLITE_LOCKED_SHAREDCACHE: i32 = 262;
-pub const SQLITE_LOCKED_VTAB: i32 = 518;
-pub const SQLITE_BUSY_RECOVERY: i32 = 261;
-pub const SQLITE_BUSY_SNAPSHOT: i32 = 517;
-pub const SQLITE_BUSY_TIMEOUT: i32 = 773;
-pub const SQLITE_CANTOPEN_NOTEMPDIR: i32 = 270;
-pub const SQLITE_CANTOPEN_ISDIR: i32 = 526;
-pub const SQLITE_CANTOPEN_FULLPATH: i32 = 782;
-pub const SQLITE_CANTOPEN_CONVPATH: i32 = 1038;
-pub const SQLITE_CANTOPEN_DIRTYWAL: i32 = 1294;
-pub const SQLITE_CANTOPEN_SYMLINK: i32 = 1550;
-pub const SQLITE_CORRUPT_VTAB: i32 = 267;
-pub const SQLITE_CORRUPT_SEQUENCE: i32 = 523;
-pub const SQLITE_CORRUPT_INDEX: i32 = 779;
-pub const SQLITE_READONLY_RECOVERY: i32 = 264;
-pub const SQLITE_READONLY_CANTLOCK: i32 = 520;
-pub const SQLITE_READONLY_ROLLBACK: i32 = 776;
-pub const SQLITE_READONLY_DBMOVED: i32 = 1032;
-pub const SQLITE_READONLY_CANTINIT: i32 = 1288;
-pub const SQLITE_READONLY_DIRECTORY: i32 = 1544;
-pub const SQLITE_ABORT_ROLLBACK: i32 = 516;
-pub const SQLITE_CONSTRAINT_CHECK: i32 = 275;
-pub const SQLITE_CONSTRAINT_COMMITHOOK: i32 = 531;
-pub const SQLITE_CONSTRAINT_FOREIGNKEY: i32 = 787;
-pub const SQLITE_CONSTRAINT_FUNCTION: i32 = 1043;
-pub const SQLITE_CONSTRAINT_NOTNULL: i32 = 1299;
-pub const SQLITE_CONSTRAINT_PRIMARYKEY: i32 = 1555;
-pub const SQLITE_CONSTRAINT_TRIGGER: i32 = 1811;
-pub const SQLITE_CONSTRAINT_UNIQUE: i32 = 2067;
-pub const SQLITE_CONSTRAINT_VTAB: i32 = 2323;
-pub const SQLITE_CONSTRAINT_ROWID: i32 = 2579;
-pub const SQLITE_CONSTRAINT_PINNED: i32 = 2835;
-pub const SQLITE_NOTICE_RECOVER_WAL: i32 = 283;
-pub const SQLITE_NOTICE_RECOVER_ROLLBACK: i32 = 539;
-pub const SQLITE_WARNING_AUTOINDEX: i32 = 284;
-pub const SQLITE_AUTH_USER: i32 = 279;
-pub const SQLITE_OK_LOAD_PERMANENTLY: i32 = 256;
-pub const SQLITE_OK_SYMLINK: i32 = 512;
-pub const SQLITE_OPEN_READONLY: i32 = 1;
-pub const SQLITE_OPEN_READWRITE: i32 = 2;
-pub const SQLITE_OPEN_CREATE: i32 = 4;
-pub const SQLITE_OPEN_DELETEONCLOSE: i32 = 8;
-pub const SQLITE_OPEN_EXCLUSIVE: i32 = 16;
-pub const SQLITE_OPEN_AUTOPROXY: i32 = 32;
-pub const SQLITE_OPEN_URI: i32 = 64;
-pub const SQLITE_OPEN_MEMORY: i32 = 128;
-pub const SQLITE_OPEN_MAIN_DB: i32 = 256;
-pub const SQLITE_OPEN_TEMP_DB: i32 = 512;
-pub const SQLITE_OPEN_TRANSIENT_DB: i32 = 1024;
-pub const SQLITE_OPEN_MAIN_JOURNAL: i32 = 2048;
-pub const SQLITE_OPEN_TEMP_JOURNAL: i32 = 4096;
-pub const SQLITE_OPEN_SUBJOURNAL: i32 = 8192;
-pub const SQLITE_OPEN_MASTER_JOURNAL: i32 = 16384;
-pub const SQLITE_OPEN_NOMUTEX: i32 = 32768;
-pub const SQLITE_OPEN_FULLMUTEX: i32 = 65536;
-pub const SQLITE_OPEN_SHAREDCACHE: i32 = 131072;
-pub const SQLITE_OPEN_PRIVATECACHE: i32 = 262144;
-pub const SQLITE_OPEN_WAL: i32 = 524288;
-pub const SQLITE_OPEN_NOFOLLOW: i32 = 16777216;
-pub const SQLITE_IOCAP_ATOMIC: i32 = 1;
-pub const SQLITE_IOCAP_ATOMIC512: i32 = 2;
-pub const SQLITE_IOCAP_ATOMIC1K: i32 = 4;
-pub const SQLITE_IOCAP_ATOMIC2K: i32 = 8;
-pub const SQLITE_IOCAP_ATOMIC4K: i32 = 16;
-pub const SQLITE_IOCAP_ATOMIC8K: i32 = 32;
-pub const SQLITE_IOCAP_ATOMIC16K: i32 = 64;
-pub const SQLITE_IOCAP_ATOMIC32K: i32 = 128;
-pub const SQLITE_IOCAP_ATOMIC64K: i32 = 256;
-pub const SQLITE_IOCAP_SAFE_APPEND: i32 = 512;
-pub const SQLITE_IOCAP_SEQUENTIAL: i32 = 1024;
-pub const SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN: i32 = 2048;
-pub const SQLITE_IOCAP_POWERSAFE_OVERWRITE: i32 = 4096;
-pub const SQLITE_IOCAP_IMMUTABLE: i32 = 8192;
-pub const SQLITE_IOCAP_BATCH_ATOMIC: i32 = 16384;
-pub const SQLITE_LOCK_NONE: i32 = 0;
-pub const SQLITE_LOCK_SHARED: i32 = 1;
-pub const SQLITE_LOCK_RESERVED: i32 = 2;
-pub const SQLITE_LOCK_PENDING: i32 = 3;
-pub const SQLITE_LOCK_EXCLUSIVE: i32 = 4;
-pub const SQLITE_SYNC_NORMAL: i32 = 2;
-pub const SQLITE_SYNC_FULL: i32 = 3;
-pub const SQLITE_SYNC_DATAONLY: i32 = 16;
-pub const SQLITE_FCNTL_LOCKSTATE: i32 = 1;
-pub const SQLITE_FCNTL_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_FCNTL_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_FCNTL_LAST_ERRNO: i32 = 4;
-pub const SQLITE_FCNTL_SIZE_HINT: i32 = 5;
-pub const SQLITE_FCNTL_CHUNK_SIZE: i32 = 6;
-pub const SQLITE_FCNTL_FILE_POINTER: i32 = 7;
-pub const SQLITE_FCNTL_SYNC_OMITTED: i32 = 8;
-pub const SQLITE_FCNTL_WIN32_AV_RETRY: i32 = 9;
-pub const SQLITE_FCNTL_PERSIST_WAL: i32 = 10;
-pub const SQLITE_FCNTL_OVERWRITE: i32 = 11;
-pub const SQLITE_FCNTL_VFSNAME: i32 = 12;
-pub const SQLITE_FCNTL_POWERSAFE_OVERWRITE: i32 = 13;
-pub const SQLITE_FCNTL_PRAGMA: i32 = 14;
-pub const SQLITE_FCNTL_BUSYHANDLER: i32 = 15;
-pub const SQLITE_FCNTL_TEMPFILENAME: i32 = 16;
-pub const SQLITE_FCNTL_MMAP_SIZE: i32 = 18;
-pub const SQLITE_FCNTL_TRACE: i32 = 19;
-pub const SQLITE_FCNTL_HAS_MOVED: i32 = 20;
-pub const SQLITE_FCNTL_SYNC: i32 = 21;
-pub const SQLITE_FCNTL_COMMIT_PHASETWO: i32 = 22;
-pub const SQLITE_FCNTL_WIN32_SET_HANDLE: i32 = 23;
-pub const SQLITE_FCNTL_WAL_BLOCK: i32 = 24;
-pub const SQLITE_FCNTL_ZIPVFS: i32 = 25;
-pub const SQLITE_FCNTL_RBU: i32 = 26;
-pub const SQLITE_FCNTL_VFS_POINTER: i32 = 27;
-pub const SQLITE_FCNTL_JOURNAL_POINTER: i32 = 28;
-pub const SQLITE_FCNTL_WIN32_GET_HANDLE: i32 = 29;
-pub const SQLITE_FCNTL_PDB: i32 = 30;
-pub const SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: i32 = 31;
-pub const SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: i32 = 32;
-pub const SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: i32 = 33;
-pub const SQLITE_FCNTL_LOCK_TIMEOUT: i32 = 34;
-pub const SQLITE_FCNTL_DATA_VERSION: i32 = 35;
-pub const SQLITE_FCNTL_SIZE_LIMIT: i32 = 36;
-pub const SQLITE_FCNTL_CKPT_DONE: i32 = 37;
-pub const SQLITE_FCNTL_RESERVE_BYTES: i32 = 38;
-pub const SQLITE_FCNTL_CKPT_START: i32 = 39;
-pub const SQLITE_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_LAST_ERRNO: i32 = 4;
-pub const SQLITE_ACCESS_EXISTS: i32 = 0;
-pub const SQLITE_ACCESS_READWRITE: i32 = 1;
-pub const SQLITE_ACCESS_READ: i32 = 2;
-pub const SQLITE_SHM_UNLOCK: i32 = 1;
-pub const SQLITE_SHM_LOCK: i32 = 2;
-pub const SQLITE_SHM_SHARED: i32 = 4;
-pub const SQLITE_SHM_EXCLUSIVE: i32 = 8;
-pub const SQLITE_SHM_NLOCK: i32 = 8;
-pub const SQLITE_CONFIG_SINGLETHREAD: i32 = 1;
-pub const SQLITE_CONFIG_MULTITHREAD: i32 = 2;
-pub const SQLITE_CONFIG_SERIALIZED: i32 = 3;
-pub const SQLITE_CONFIG_MALLOC: i32 = 4;
-pub const SQLITE_CONFIG_GETMALLOC: i32 = 5;
-pub const SQLITE_CONFIG_SCRATCH: i32 = 6;
-pub const SQLITE_CONFIG_PAGECACHE: i32 = 7;
-pub const SQLITE_CONFIG_HEAP: i32 = 8;
-pub const SQLITE_CONFIG_MEMSTATUS: i32 = 9;
-pub const SQLITE_CONFIG_MUTEX: i32 = 10;
-pub const SQLITE_CONFIG_GETMUTEX: i32 = 11;
-pub const SQLITE_CONFIG_LOOKASIDE: i32 = 13;
-pub const SQLITE_CONFIG_PCACHE: i32 = 14;
-pub const SQLITE_CONFIG_GETPCACHE: i32 = 15;
-pub const SQLITE_CONFIG_LOG: i32 = 16;
-pub const SQLITE_CONFIG_URI: i32 = 17;
-pub const SQLITE_CONFIG_PCACHE2: i32 = 18;
-pub const SQLITE_CONFIG_GETPCACHE2: i32 = 19;
-pub const SQLITE_CONFIG_COVERING_INDEX_SCAN: i32 = 20;
-pub const SQLITE_CONFIG_SQLLOG: i32 = 21;
-pub const SQLITE_CONFIG_MMAP_SIZE: i32 = 22;
-pub const SQLITE_CONFIG_WIN32_HEAPSIZE: i32 = 23;
-pub const SQLITE_CONFIG_PCACHE_HDRSZ: i32 = 24;
-pub const SQLITE_CONFIG_PMASZ: i32 = 25;
-pub const SQLITE_CONFIG_STMTJRNL_SPILL: i32 = 26;
-pub const SQLITE_CONFIG_SMALL_MALLOC: i32 = 27;
-pub const SQLITE_CONFIG_SORTERREF_SIZE: i32 = 28;
-pub const SQLITE_CONFIG_MEMDB_MAXSIZE: i32 = 29;
-pub const SQLITE_DBCONFIG_MAINDBNAME: i32 = 1000;
-pub const SQLITE_DBCONFIG_LOOKASIDE: i32 = 1001;
-pub const SQLITE_DBCONFIG_ENABLE_FKEY: i32 = 1002;
-pub const SQLITE_DBCONFIG_ENABLE_TRIGGER: i32 = 1003;
-pub const SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: i32 = 1004;
-pub const SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: i32 = 1005;
-pub const SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: i32 = 1006;
-pub const SQLITE_DBCONFIG_ENABLE_QPSG: i32 = 1007;
-pub const SQLITE_DBCONFIG_TRIGGER_EQP: i32 = 1008;
-pub const SQLITE_DBCONFIG_RESET_DATABASE: i32 = 1009;
-pub const SQLITE_DBCONFIG_DEFENSIVE: i32 = 1010;
-pub const SQLITE_DBCONFIG_WRITABLE_SCHEMA: i32 = 1011;
-pub const SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: i32 = 1012;
-pub const SQLITE_DBCONFIG_DQS_DML: i32 = 1013;
-pub const SQLITE_DBCONFIG_DQS_DDL: i32 = 1014;
-pub const SQLITE_DBCONFIG_ENABLE_VIEW: i32 = 1015;
-pub const SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: i32 = 1016;
-pub const SQLITE_DBCONFIG_TRUSTED_SCHEMA: i32 = 1017;
-pub const SQLITE_DBCONFIG_MAX: i32 = 1017;
-pub const SQLITE_DENY: i32 = 1;
-pub const SQLITE_IGNORE: i32 = 2;
-pub const SQLITE_CREATE_INDEX: i32 = 1;
-pub const SQLITE_CREATE_TABLE: i32 = 2;
-pub const SQLITE_CREATE_TEMP_INDEX: i32 = 3;
-pub const SQLITE_CREATE_TEMP_TABLE: i32 = 4;
-pub const SQLITE_CREATE_TEMP_TRIGGER: i32 = 5;
-pub const SQLITE_CREATE_TEMP_VIEW: i32 = 6;
-pub const SQLITE_CREATE_TRIGGER: i32 = 7;
-pub const SQLITE_CREATE_VIEW: i32 = 8;
-pub const SQLITE_DELETE: i32 = 9;
-pub const SQLITE_DROP_INDEX: i32 = 10;
-pub const SQLITE_DROP_TABLE: i32 = 11;
-pub const SQLITE_DROP_TEMP_INDEX: i32 = 12;
-pub const SQLITE_DROP_TEMP_TABLE: i32 = 13;
-pub const SQLITE_DROP_TEMP_TRIGGER: i32 = 14;
-pub const SQLITE_DROP_TEMP_VIEW: i32 = 15;
-pub const SQLITE_DROP_TRIGGER: i32 = 16;
-pub const SQLITE_DROP_VIEW: i32 = 17;
-pub const SQLITE_INSERT: i32 = 18;
-pub const SQLITE_PRAGMA: i32 = 19;
-pub const SQLITE_READ: i32 = 20;
-pub const SQLITE_SELECT: i32 = 21;
-pub const SQLITE_TRANSACTION: i32 = 22;
-pub const SQLITE_UPDATE: i32 = 23;
-pub const SQLITE_ATTACH: i32 = 24;
-pub const SQLITE_DETACH: i32 = 25;
-pub const SQLITE_ALTER_TABLE: i32 = 26;
-pub const SQLITE_REINDEX: i32 = 27;
-pub const SQLITE_ANALYZE: i32 = 28;
-pub const SQLITE_CREATE_VTABLE: i32 = 29;
-pub const SQLITE_DROP_VTABLE: i32 = 30;
-pub const SQLITE_FUNCTION: i32 = 31;
-pub const SQLITE_SAVEPOINT: i32 = 32;
-pub const SQLITE_COPY: i32 = 0;
-pub const SQLITE_RECURSIVE: i32 = 33;
-pub const SQLITE_TRACE_STMT: i32 = 1;
-pub const SQLITE_TRACE_PROFILE: i32 = 2;
-pub const SQLITE_TRACE_ROW: i32 = 4;
-pub const SQLITE_TRACE_CLOSE: i32 = 8;
-pub const SQLITE_LIMIT_LENGTH: i32 = 0;
-pub const SQLITE_LIMIT_SQL_LENGTH: i32 = 1;
-pub const SQLITE_LIMIT_COLUMN: i32 = 2;
-pub const SQLITE_LIMIT_EXPR_DEPTH: i32 = 3;
-pub const SQLITE_LIMIT_COMPOUND_SELECT: i32 = 4;
-pub const SQLITE_LIMIT_VDBE_OP: i32 = 5;
-pub const SQLITE_LIMIT_FUNCTION_ARG: i32 = 6;
-pub const SQLITE_LIMIT_ATTACHED: i32 = 7;
-pub const SQLITE_LIMIT_LIKE_PATTERN_LENGTH: i32 = 8;
-pub const SQLITE_LIMIT_VARIABLE_NUMBER: i32 = 9;
-pub const SQLITE_LIMIT_TRIGGER_DEPTH: i32 = 10;
-pub const SQLITE_LIMIT_WORKER_THREADS: i32 = 11;
-pub const SQLITE_PREPARE_PERSISTENT: i32 = 1;
-pub const SQLITE_PREPARE_NORMALIZE: i32 = 2;
-pub const SQLITE_PREPARE_NO_VTAB: i32 = 4;
-pub const SQLITE_INTEGER: i32 = 1;
-pub const SQLITE_FLOAT: i32 = 2;
-pub const SQLITE_BLOB: i32 = 4;
-pub const SQLITE_NULL: i32 = 5;
-pub const SQLITE_TEXT: i32 = 3;
-pub const SQLITE3_TEXT: i32 = 3;
-pub const SQLITE_UTF8: i32 = 1;
-pub const SQLITE_UTF16LE: i32 = 2;
-pub const SQLITE_UTF16BE: i32 = 3;
-pub const SQLITE_UTF16: i32 = 4;
-pub const SQLITE_ANY: i32 = 5;
-pub const SQLITE_UTF16_ALIGNED: i32 = 8;
-pub const SQLITE_DETERMINISTIC: i32 = 2048;
-pub const SQLITE_DIRECTONLY: i32 = 524288;
-pub const SQLITE_SUBTYPE: i32 = 1048576;
-pub const SQLITE_INNOCUOUS: i32 = 2097152;
-pub const SQLITE_WIN32_DATA_DIRECTORY_TYPE: i32 = 1;
-pub const SQLITE_WIN32_TEMP_DIRECTORY_TYPE: i32 = 2;
-pub const SQLITE_INDEX_SCAN_UNIQUE: i32 = 1;
-pub const SQLITE_INDEX_CONSTRAINT_EQ: i32 = 2;
-pub const SQLITE_INDEX_CONSTRAINT_GT: i32 = 4;
-pub const SQLITE_INDEX_CONSTRAINT_LE: i32 = 8;
-pub const SQLITE_INDEX_CONSTRAINT_LT: i32 = 16;
-pub const SQLITE_INDEX_CONSTRAINT_GE: i32 = 32;
-pub const SQLITE_INDEX_CONSTRAINT_MATCH: i32 = 64;
-pub const SQLITE_INDEX_CONSTRAINT_LIKE: i32 = 65;
-pub const SQLITE_INDEX_CONSTRAINT_GLOB: i32 = 66;
-pub const SQLITE_INDEX_CONSTRAINT_REGEXP: i32 = 67;
-pub const SQLITE_INDEX_CONSTRAINT_NE: i32 = 68;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOT: i32 = 69;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOTNULL: i32 = 70;
-pub const SQLITE_INDEX_CONSTRAINT_ISNULL: i32 = 71;
-pub const SQLITE_INDEX_CONSTRAINT_IS: i32 = 72;
-pub const SQLITE_INDEX_CONSTRAINT_FUNCTION: i32 = 150;
-pub const SQLITE_MUTEX_FAST: i32 = 0;
-pub const SQLITE_MUTEX_RECURSIVE: i32 = 1;
-pub const SQLITE_MUTEX_STATIC_MASTER: i32 = 2;
-pub const SQLITE_MUTEX_STATIC_MEM: i32 = 3;
-pub const SQLITE_MUTEX_STATIC_MEM2: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_OPEN: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_PRNG: i32 = 5;
-pub const SQLITE_MUTEX_STATIC_LRU: i32 = 6;
-pub const SQLITE_MUTEX_STATIC_LRU2: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_PMEM: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_APP1: i32 = 8;
-pub const SQLITE_MUTEX_STATIC_APP2: i32 = 9;
-pub const SQLITE_MUTEX_STATIC_APP3: i32 = 10;
-pub const SQLITE_MUTEX_STATIC_VFS1: i32 = 11;
-pub const SQLITE_MUTEX_STATIC_VFS2: i32 = 12;
-pub const SQLITE_MUTEX_STATIC_VFS3: i32 = 13;
-pub const SQLITE_TESTCTRL_FIRST: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_SAVE: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_RESTORE: i32 = 6;
-pub const SQLITE_TESTCTRL_PRNG_RESET: i32 = 7;
-pub const SQLITE_TESTCTRL_BITVEC_TEST: i32 = 8;
-pub const SQLITE_TESTCTRL_FAULT_INSTALL: i32 = 9;
-pub const SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: i32 = 10;
-pub const SQLITE_TESTCTRL_PENDING_BYTE: i32 = 11;
-pub const SQLITE_TESTCTRL_ASSERT: i32 = 12;
-pub const SQLITE_TESTCTRL_ALWAYS: i32 = 13;
-pub const SQLITE_TESTCTRL_RESERVE: i32 = 14;
-pub const SQLITE_TESTCTRL_OPTIMIZATIONS: i32 = 15;
-pub const SQLITE_TESTCTRL_ISKEYWORD: i32 = 16;
-pub const SQLITE_TESTCTRL_SCRATCHMALLOC: i32 = 17;
-pub const SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: i32 = 17;
-pub const SQLITE_TESTCTRL_LOCALTIME_FAULT: i32 = 18;
-pub const SQLITE_TESTCTRL_EXPLAIN_STMT: i32 = 19;
-pub const SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD: i32 = 19;
-pub const SQLITE_TESTCTRL_NEVER_CORRUPT: i32 = 20;
-pub const SQLITE_TESTCTRL_VDBE_COVERAGE: i32 = 21;
-pub const SQLITE_TESTCTRL_BYTEORDER: i32 = 22;
-pub const SQLITE_TESTCTRL_ISINIT: i32 = 23;
-pub const SQLITE_TESTCTRL_SORTER_MMAP: i32 = 24;
-pub const SQLITE_TESTCTRL_IMPOSTER: i32 = 25;
-pub const SQLITE_TESTCTRL_PARSER_COVERAGE: i32 = 26;
-pub const SQLITE_TESTCTRL_RESULT_INTREAL: i32 = 27;
-pub const SQLITE_TESTCTRL_PRNG_SEED: i32 = 28;
-pub const SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: i32 = 29;
-pub const SQLITE_TESTCTRL_LAST: i32 = 29;
-pub const SQLITE_STATUS_MEMORY_USED: i32 = 0;
-pub const SQLITE_STATUS_PAGECACHE_USED: i32 = 1;
-pub const SQLITE_STATUS_PAGECACHE_OVERFLOW: i32 = 2;
-pub const SQLITE_STATUS_SCRATCH_USED: i32 = 3;
-pub const SQLITE_STATUS_SCRATCH_OVERFLOW: i32 = 4;
-pub const SQLITE_STATUS_MALLOC_SIZE: i32 = 5;
-pub const SQLITE_STATUS_PARSER_STACK: i32 = 6;
-pub const SQLITE_STATUS_PAGECACHE_SIZE: i32 = 7;
-pub const SQLITE_STATUS_SCRATCH_SIZE: i32 = 8;
-pub const SQLITE_STATUS_MALLOC_COUNT: i32 = 9;
-pub const SQLITE_DBSTATUS_LOOKASIDE_USED: i32 = 0;
-pub const SQLITE_DBSTATUS_CACHE_USED: i32 = 1;
-pub const SQLITE_DBSTATUS_SCHEMA_USED: i32 = 2;
-pub const SQLITE_DBSTATUS_STMT_USED: i32 = 3;
-pub const SQLITE_DBSTATUS_LOOKASIDE_HIT: i32 = 4;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: i32 = 5;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: i32 = 6;
-pub const SQLITE_DBSTATUS_CACHE_HIT: i32 = 7;
-pub const SQLITE_DBSTATUS_CACHE_MISS: i32 = 8;
-pub const SQLITE_DBSTATUS_CACHE_WRITE: i32 = 9;
-pub const SQLITE_DBSTATUS_DEFERRED_FKS: i32 = 10;
-pub const SQLITE_DBSTATUS_CACHE_USED_SHARED: i32 = 11;
-pub const SQLITE_DBSTATUS_CACHE_SPILL: i32 = 12;
-pub const SQLITE_DBSTATUS_MAX: i32 = 12;
-pub const SQLITE_STMTSTATUS_FULLSCAN_STEP: i32 = 1;
-pub const SQLITE_STMTSTATUS_SORT: i32 = 2;
-pub const SQLITE_STMTSTATUS_AUTOINDEX: i32 = 3;
-pub const SQLITE_STMTSTATUS_VM_STEP: i32 = 4;
-pub const SQLITE_STMTSTATUS_REPREPARE: i32 = 5;
-pub const SQLITE_STMTSTATUS_RUN: i32 = 6;
-pub const SQLITE_STMTSTATUS_MEMUSED: i32 = 99;
-pub const SQLITE_CHECKPOINT_PASSIVE: i32 = 0;
-pub const SQLITE_CHECKPOINT_FULL: i32 = 1;
-pub const SQLITE_CHECKPOINT_RESTART: i32 = 2;
-pub const SQLITE_CHECKPOINT_TRUNCATE: i32 = 3;
-pub const SQLITE_VTAB_CONSTRAINT_SUPPORT: i32 = 1;
-pub const SQLITE_VTAB_INNOCUOUS: i32 = 2;
-pub const SQLITE_VTAB_DIRECTONLY: i32 = 3;
-pub const SQLITE_ROLLBACK: i32 = 1;
-pub const SQLITE_FAIL: i32 = 3;
-pub const SQLITE_REPLACE: i32 = 5;
-pub const SQLITE_SCANSTAT_NLOOP: i32 = 0;
-pub const SQLITE_SCANSTAT_NVISIT: i32 = 1;
-pub const SQLITE_SCANSTAT_EST: i32 = 2;
-pub const SQLITE_SCANSTAT_NAME: i32 = 3;
-pub const SQLITE_SCANSTAT_EXPLAIN: i32 = 4;
-pub const SQLITE_SCANSTAT_SELECTID: i32 = 5;
-pub const SQLITE_SERIALIZE_NOCOPY: i32 = 1;
-pub const SQLITE_DESERIALIZE_FREEONCLOSE: i32 = 1;
-pub const SQLITE_DESERIALIZE_RESIZEABLE: i32 = 2;
-pub const SQLITE_DESERIALIZE_READONLY: i32 = 4;
-pub const NOT_WITHIN: i32 = 0;
-pub const PARTLY_WITHIN: i32 = 1;
-pub const FULLY_WITHIN: i32 = 2;
-pub const FTS5_TOKENIZE_QUERY: i32 = 1;
-pub const FTS5_TOKENIZE_PREFIX: i32 = 2;
-pub const FTS5_TOKENIZE_DOCUMENT: i32 = 4;
-pub const FTS5_TOKENIZE_AUX: i32 = 8;
-pub const FTS5_TOKEN_COLOCATED: i32 = 1;
-extern "C" {
-    pub static mut sqlite3_version: [::std::os::raw::c_char; 0usize];
-}
-extern "C" {
-    pub fn sqlite3_libversion() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_sourceid() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_libversion_number() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_threadsafe() -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3 {
-    _unused: [u8; 0],
-}
-pub type sqlite_int64 = ::std::os::raw::c_longlong;
-pub type sqlite_uint64 = ::std::os::raw::c_ulonglong;
-pub type sqlite3_int64 = sqlite_int64;
-pub type sqlite3_uint64 = sqlite_uint64;
-extern "C" {
-    pub fn sqlite3_close(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_close_v2(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_callback = ::std::option::Option<
-    unsafe extern "C" fn(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut *mut ::std::os::raw::c_char,
-        arg4: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int,
->;
-extern "C" {
-    pub fn sqlite3_exec(
-        arg1: *mut sqlite3,
-        sql: *const ::std::os::raw::c_char,
-        callback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut ::std::os::raw::c_char,
-                arg4: *mut *mut ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        errmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_file {
-    pub pMethods: *const sqlite3_io_methods,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_file() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_file>(),
-        8usize,
-        concat!("Size of: ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_file>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_file>())).pMethods as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_file),
-            "::",
-            stringify!(pMethods)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_io_methods {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xRead: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *mut ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xWrite: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *const ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file, size: sqlite3_int64) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pSize: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnlock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCheckReservedLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileControl: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            op: ::std::os::raw::c_int,
-            pArg: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSectorSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xDeviceCharacteristics: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xShmMap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iPg: ::std::os::raw::c_int,
-            pgsz: ::std::os::raw::c_int,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            offset: ::std::os::raw::c_int,
-            n: ::std::os::raw::c_int,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmBarrier: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_file)>,
-    pub xShmUnmap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            deleteFlag: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            iAmt: ::std::os::raw::c_int,
-            pp: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnfetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            p: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_io_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_io_methods>(),
-        152usize,
-        concat!("Size of: ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_io_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xClose as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xRead as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xRead)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xWrite as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xWrite)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xTruncate as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSync as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileSize as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xLock as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnlock as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnlock)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xCheckReservedLock as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xCheckReservedLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileControl as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileControl)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSectorSize as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSectorSize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xDeviceCharacteristics as *const _
-                as usize
-        },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xDeviceCharacteristics)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmMap as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmMap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmLock as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmBarrier as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmBarrier)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmUnmap as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmUnmap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFetch as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnfetch as *const _ as usize },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnfetch)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_api_routines {
-    _unused: [u8; 0],
-}
-pub type sqlite3_syscall_ptr = ::std::option::Option<unsafe extern "C" fn()>;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vfs {
-    pub iVersion: ::std::os::raw::c_int,
-    pub szOsFile: ::std::os::raw::c_int,
-    pub mxPathname: ::std::os::raw::c_int,
-    pub pNext: *mut sqlite3_vfs,
-    pub zName: *const ::std::os::raw::c_char,
-    pub pAppData: *mut ::std::os::raw::c_void,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-            pOutFlags: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            syncDir: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xAccess: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            flags: ::std::os::raw::c_int,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFullPathname: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            nOut: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDlOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zFilename: *const ::std::os::raw::c_char,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xDlError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zErrMsg: *mut ::std::os::raw::c_char,
-        ),
-    >,
-    pub xDlSym: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut ::std::os::raw::c_void,
-            zSymbol: *const ::std::os::raw::c_char,
-        ) -> ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_vfs,
-                arg2: *mut ::std::os::raw::c_void,
-                zSymbol: *const ::std::os::raw::c_char,
-            ),
-        >,
-    >,
-    pub xDlClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut ::std::os::raw::c_void),
-    >,
-    pub xRandomness: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSleep: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            microseconds: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTime: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut f64) -> ::std::os::raw::c_int,
-    >,
-    pub xGetLastError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTimeInt64: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: sqlite3_syscall_ptr,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> sqlite3_syscall_ptr,
-    >,
-    pub xNextSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> *const ::std::os::raw::c_char,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vfs() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vfs>(),
-        168usize,
-        concat!("Size of: ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vfs>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).szOsFile as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(szOsFile)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).mxPathname as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(mxPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pNext as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).zName as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(zName)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pAppData as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xOpen as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDelete as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xAccess as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xAccess)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xFullPathname as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xFullPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlOpen as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlError as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlSym as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlSym)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlClose as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xRandomness as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xRandomness)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSleep as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSleep)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTime as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTime)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetLastError as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetLastError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTimeInt64 as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTimeInt64)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSetSystemCall as *const _ as usize },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetSystemCall as *const _ as usize },
-        152usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xNextSystemCall as *const _ as usize },
-        160usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xNextSystemCall)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_initialize() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_shutdown() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_init() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_end() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_config(arg1: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mem_methods {
-    pub xMalloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xRealloc: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            arg2: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xRoundup: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int,
-    >,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub pAppData: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mem_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mem_methods>(),
-        64usize,
-        concat!("Size of: ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mem_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xMalloc as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xMalloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xFree as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xFree)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRealloc as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRealloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xSize as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRoundup as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRoundup)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xInit as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xShutdown as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).pAppData as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_extended_result_codes(
-        arg1: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_last_insert_rowid(arg1: *mut sqlite3) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_set_last_insert_rowid(arg1: *mut sqlite3, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_total_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_interrupt(arg1: *mut sqlite3);
-}
-extern "C" {
-    pub fn sqlite3_complete(sql: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_complete16(sql: *const ::std::os::raw::c_void) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_timeout(
-        arg1: *mut sqlite3,
-        ms: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_table(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        pazResult: *mut *mut *mut ::std::os::raw::c_char,
-        pnRow: *mut ::std::os::raw::c_int,
-        pnColumn: *mut ::std::os::raw::c_int,
-        pzErrmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_free_table(result: *mut *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_mprintf(arg1: *const ::std::os::raw::c_char, ...)
-        -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_snprintf(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_char,
-        arg3: *const ::std::os::raw::c_char,
-        ...
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_malloc(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_malloc64(arg1: sqlite3_uint64) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc64(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: sqlite3_uint64,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_free(arg1: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_msize(arg1: *mut ::std::os::raw::c_void) -> sqlite3_uint64;
-}
-extern "C" {
-    pub fn sqlite3_memory_used() -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_memory_highwater(resetFlag: ::std::os::raw::c_int) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_randomness(N: ::std::os::raw::c_int, P: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_set_authorizer(
-        arg1: *mut sqlite3,
-        xAuth: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: *const ::std::os::raw::c_char,
-                arg6: *const ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pUserData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_trace(
-        arg1: *mut sqlite3,
-        xTrace: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_profile(
-        arg1: *mut sqlite3,
-        xProfile: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-                arg3: sqlite3_uint64,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_trace_v2(
-        arg1: *mut sqlite3,
-        uMask: ::std::os::raw::c_uint,
-        xCallback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: ::std::os::raw::c_uint,
-                arg2: *mut ::std::os::raw::c_void,
-                arg3: *mut ::std::os::raw::c_void,
-                arg4: *mut ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pCtx: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_progress_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg4: *mut ::std::os::raw::c_void,
-    );
-}
-extern "C" {
-    pub fn sqlite3_open(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open16(
-        filename: *const ::std::os::raw::c_void,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open_v2(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-        flags: ::std::os::raw::c_int,
-        zVfs: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_parameter(
-        zFilename: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_uri_boolean(
-        zFile: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-        bDefault: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_int64(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_int64,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_uri_key(
-        zFilename: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_database(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_journal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_wal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_database_file_object(arg1: *const ::std::os::raw::c_char) -> *mut sqlite3_file;
-}
-extern "C" {
-    pub fn sqlite3_create_filename(
-        zDatabase: *const ::std::os::raw::c_char,
-        zJournal: *const ::std::os::raw::c_char,
-        zWal: *const ::std::os::raw::c_char,
-        nParam: ::std::os::raw::c_int,
-        azParam: *mut *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_free_filename(arg1: *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_extended_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_errmsg(arg1: *mut sqlite3) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_errmsg16(arg1: *mut sqlite3) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_errstr(arg1: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_stmt {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_limit(
-        arg1: *mut sqlite3,
-        id: ::std::os::raw::c_int,
-        newVal: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_expanded_sql(pStmt: *mut sqlite3_stmt) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_normalized_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_readonly(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_isexplain(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_busy(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_value {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_context {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_bind_blob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_blob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_double(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: f64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_null(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_value(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const sqlite3_value,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_pointer(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut ::std::os::raw::c_void,
-        arg4: *const ::std::os::raw::c_char,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        n: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_count(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_index(
-        arg1: *mut sqlite3_stmt,
-        zName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_clear_bindings(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_name(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_name16(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_step(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_data_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_blob(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_double(arg1: *mut sqlite3_stmt, iCol: ::std::os::raw::c_int) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_column_int(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_int64(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_column_text(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_column_text16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_value(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_type(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_finalize(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function16(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_void,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function_v2(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_window_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xValue: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xInverse: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_aggregate_count(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_expired(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_transfer_bindings(
-        arg1: *mut sqlite3_stmt,
-        arg2: *mut sqlite3_stmt,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_global_recover() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_thread_cleanup();
-}
-extern "C" {
-    pub fn sqlite3_memory_alarm(
-        arg1: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: sqlite3_int64,
-                arg3: ::std::os::raw::c_int,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_blob(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_double(arg1: *mut sqlite3_value) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_value_int(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_int64(arg1: *mut sqlite3_value) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_value_pointer(
-        arg1: *mut sqlite3_value,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_value_text16(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16le(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16be(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes16(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_numeric_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_nochange(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_frombind(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_subtype(arg1: *mut sqlite3_value) -> ::std::os::raw::c_uint;
-}
-extern "C" {
-    pub fn sqlite3_value_dup(arg1: *const sqlite3_value) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_value_free(arg1: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_aggregate_context(
-        arg1: *mut sqlite3_context,
-        nBytes: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_user_data(arg1: *mut sqlite3_context) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_context_db_handle(arg1: *mut sqlite3_context) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_get_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_set_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-pub type sqlite3_destructor_type =
-    ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>;
-extern "C" {
-    pub fn sqlite3_result_blob(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_blob64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_double(arg1: *mut sqlite3_context, arg2: f64);
-}
-extern "C" {
-    pub fn sqlite3_result_error(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error_toobig(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_nomem(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_code(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int64(arg1: *mut sqlite3_context, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_result_null(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_text(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16le(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16be(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_value(arg1: *mut sqlite3_context, arg2: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_result_pointer(
-        arg1: *mut sqlite3_context,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob(arg1: *mut sqlite3_context, n: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob64(
-        arg1: *mut sqlite3_context,
-        n: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_result_subtype(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_uint);
-}
-extern "C" {
-    pub fn sqlite3_create_collation(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation_v2(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation16(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_void,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed16(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sleep(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub static mut sqlite3_temp_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub static mut sqlite3_data_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory8(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory16(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_autocommit(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_handle(arg1: *mut sqlite3_stmt) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_db_filename(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_db_readonly(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_next_stmt(pDb: *mut sqlite3, pStmt: *mut sqlite3_stmt) -> *mut sqlite3_stmt;
-}
-extern "C" {
-    pub fn sqlite3_commit_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_rollback_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_update_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: sqlite3_int64,
-            ),
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_enable_shared_cache(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_release_memory(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_release_memory(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_hard_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit(N: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_table_column_metadata(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        zTableName: *const ::std::os::raw::c_char,
-        zColumnName: *const ::std::os::raw::c_char,
-        pzDataType: *mut *const ::std::os::raw::c_char,
-        pzCollSeq: *mut *const ::std::os::raw::c_char,
-        pNotNull: *mut ::std::os::raw::c_int,
-        pPrimaryKey: *mut ::std::os::raw::c_int,
-        pAutoinc: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_load_extension(
-        db: *mut sqlite3,
-        zFile: *const ::std::os::raw::c_char,
-        zProc: *const ::std::os::raw::c_char,
-        pzErrMsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_enable_load_extension(
-        db: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_cancel_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset_auto_extension();
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_module {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xConnect: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBestIndex: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: *mut sqlite3_index_info,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDisconnect: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xDestroy: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            ppCursor: *mut *mut sqlite3_vtab_cursor,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xFilter: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            idxNum: ::std::os::raw::c_int,
-            idxStr: *const ::std::os::raw::c_char,
-            argc: ::std::os::raw::c_int,
-            argv: *mut *mut sqlite3_value,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xNext: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xEof: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            arg2: *mut sqlite3_context,
-            arg3: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            pRowid: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUpdate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut sqlite3_value,
-            arg4: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBegin: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xCommit: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xRollback: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xFindFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            nArg: ::std::os::raw::c_int,
-            zName: *const ::std::os::raw::c_char,
-            pxFunc: *mut ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut sqlite3_context,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *mut *mut sqlite3_value,
-                ),
-            >,
-            ppArg: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRename: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            zNew: *const ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSavepoint: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRelease: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRollbackTo: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShadowName: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_module() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_module>(),
-        192usize,
-        concat!("Size of: ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_module>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCreate as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xConnect as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xConnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBestIndex as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBestIndex)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDisconnect as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDisconnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDestroy as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xOpen as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xClose as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFilter as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFilter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xNext as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xEof as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xEof)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xColumn as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xColumn)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRowid as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xUpdate as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xUpdate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBegin as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBegin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSync as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCommit as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCommit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollback as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollback)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFindFunction as *const _ as usize },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFindFunction)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRename as *const _ as usize },
-        152usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRename)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSavepoint as *const _ as usize },
-        160usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSavepoint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRelease as *const _ as usize },
-        168usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRelease)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollbackTo as *const _ as usize },
-        176usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollbackTo)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xShadowName as *const _ as usize },
-        184usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xShadowName)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info {
-    pub nConstraint: ::std::os::raw::c_int,
-    pub aConstraint: *mut sqlite3_index_info_sqlite3_index_constraint,
-    pub nOrderBy: ::std::os::raw::c_int,
-    pub aOrderBy: *mut sqlite3_index_info_sqlite3_index_orderby,
-    pub aConstraintUsage: *mut sqlite3_index_info_sqlite3_index_constraint_usage,
-    pub idxNum: ::std::os::raw::c_int,
-    pub idxStr: *mut ::std::os::raw::c_char,
-    pub needToFreeIdxStr: ::std::os::raw::c_int,
-    pub orderByConsumed: ::std::os::raw::c_int,
-    pub estimatedCost: f64,
-    pub estimatedRows: sqlite3_int64,
-    pub idxFlags: ::std::os::raw::c_int,
-    pub colUsed: sqlite3_uint64,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint {
-    pub iColumn: ::std::os::raw::c_int,
-    pub op: ::std::os::raw::c_uchar,
-    pub usable: ::std::os::raw::c_uchar,
-    pub iTermOffset: ::std::os::raw::c_int,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        12usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iColumn
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).op as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(op)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).usable
-                as *const _ as usize
-        },
-        5usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(usable)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iTermOffset
-                as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iTermOffset)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_orderby {
-    pub iColumn: ::std::os::raw::c_int,
-    pub desc: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_orderby() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).iColumn as *const _
-                as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).desc as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(desc)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint_usage {
-    pub argvIndex: ::std::os::raw::c_int,
-    pub omit: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint_usage() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).argvIndex
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(argvIndex)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).omit
-                as *const _ as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(omit)
-        )
-    );
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info>(),
-        96usize,
-        concat!("Size of: ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nConstraint as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraint as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nOrderBy as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aOrderBy as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraintUsage as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraintUsage)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxNum as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxNum)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxStr as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).needToFreeIdxStr as *const _ as usize
-        },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(needToFreeIdxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).orderByConsumed as *const _ as usize
-        },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(orderByConsumed)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedCost as *const _ as usize
-        },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedCost)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedRows as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedRows)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxFlags as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxFlags)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).colUsed as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(colUsed)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_create_module(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_module_v2(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_drop_modules(
-        db: *mut sqlite3,
-        azKeep: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab {
-    pub pModule: *const sqlite3_module,
-    pub nRef: ::std::os::raw::c_int,
-    pub zErrMsg: *mut ::std::os::raw::c_char,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab>(),
-        24usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).pModule as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(pModule)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).nRef as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(nRef)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).zErrMsg as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(zErrMsg)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab_cursor {
-    pub pVtab: *mut sqlite3_vtab,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab_cursor() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab_cursor>(),
-        8usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab_cursor>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab_cursor>())).pVtab as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab_cursor),
-            "::",
-            stringify!(pVtab)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_declare_vtab(
-        arg1: *mut sqlite3,
-        zSQL: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_overload_function(
-        arg1: *mut sqlite3,
-        zFuncName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_blob {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_blob_open(
-        arg1: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        zTable: *const ::std::os::raw::c_char,
-        zColumn: *const ::std::os::raw::c_char,
-        iRow: sqlite3_int64,
-        flags: ::std::os::raw::c_int,
-        ppBlob: *mut *mut sqlite3_blob,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_reopen(
-        arg1: *mut sqlite3_blob,
-        arg2: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_close(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_bytes(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_read(
-        arg1: *mut sqlite3_blob,
-        Z: *mut ::std::os::raw::c_void,
-        N: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_write(
-        arg1: *mut sqlite3_blob,
-        z: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_find(zVfsName: *const ::std::os::raw::c_char) -> *mut sqlite3_vfs;
-}
-extern "C" {
-    pub fn sqlite3_vfs_register(
-        arg1: *mut sqlite3_vfs,
-        makeDflt: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_unregister(arg1: *mut sqlite3_vfs) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_alloc(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_mutex_free(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_enter(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_try(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_leave(arg1: *mut sqlite3_mutex);
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex_methods {
-    pub xMutexInit: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexEnd: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexAlloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex,
-    >,
-    pub xMutexFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexEnter: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexTry: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexLeave: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexHeld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexNotheld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mutex_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mutex_methods>(),
-        72usize,
-        concat!("Size of: ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mutex_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexInit as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnd as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnd)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexAlloc as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexAlloc)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexFree as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexFree)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnter as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexTry as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexTry)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexLeave as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexLeave)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexHeld as *const _ as usize
-        },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexHeld)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexNotheld as *const _ as usize
-        },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexNotheld)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_db_mutex(arg1: *mut sqlite3) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_file_control(
-        arg1: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        op: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_test_control(op: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_count() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_name(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut *const ::std::os::raw::c_char,
-        arg3: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_check(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_str {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_str_new(arg1: *mut sqlite3) -> *mut sqlite3_str;
-}
-extern "C" {
-    pub fn sqlite3_str_finish(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_str_appendf(arg1: *mut sqlite3_str, zFormat: *const ::std::os::raw::c_char, ...);
-}
-extern "C" {
-    pub fn sqlite3_str_append(
-        arg1: *mut sqlite3_str,
-        zIn: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_appendall(arg1: *mut sqlite3_str, zIn: *const ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_str_appendchar(
-        arg1: *mut sqlite3_str,
-        N: ::std::os::raw::c_int,
-        C: ::std::os::raw::c_char,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_reset(arg1: *mut sqlite3_str);
-}
-extern "C" {
-    pub fn sqlite3_str_errcode(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_length(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_value(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_status(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut ::std::os::raw::c_int,
-        pHighwater: *mut ::std::os::raw::c_int,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_status64(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut sqlite3_int64,
-        pHighwater: *mut sqlite3_int64,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_status(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        pCur: *mut ::std::os::raw::c_int,
-        pHiwtr: *mut ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_status(
-        arg1: *mut sqlite3_stmt,
-        op: ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_page {
-    pub pBuf: *mut ::std::os::raw::c_void,
-    pub pExtra: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_page() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_page>(),
-        16usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_page>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pBuf as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pBuf)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pExtra as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pExtra)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods2 {
-    pub iVersion: ::std::os::raw::c_int,
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            szExtra: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache_page,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-    pub xShrink: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods2() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods2>(),
-        104usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods2>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).iVersion as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).pArg as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xInit as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShutdown as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCreate as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCachesize as *const _ as usize
-        },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xPagecount as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xFetch as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xUnpin as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xRekey as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xTruncate as *const _ as usize
-        },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xDestroy as *const _ as usize
-        },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShrink as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShrink)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods {
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods>(),
-        88usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).pArg as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xInit as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xShutdown as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCreate as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCachesize as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xPagecount as *const _ as usize
-        },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xFetch as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xUnpin as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xRekey as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xTruncate as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xDestroy as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_backup {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_backup_init(
-        pDest: *mut sqlite3,
-        zDestName: *const ::std::os::raw::c_char,
-        pSource: *mut sqlite3,
-        zSourceName: *const ::std::os::raw::c_char,
-    ) -> *mut sqlite3_backup;
-}
-extern "C" {
-    pub fn sqlite3_backup_step(
-        p: *mut sqlite3_backup,
-        nPage: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_finish(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_remaining(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_pagecount(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_unlock_notify(
-        pBlocked: *mut sqlite3,
-        xNotify: ::std::option::Option<
-            unsafe extern "C" fn(
-                apArg: *mut *mut ::std::os::raw::c_void,
-                nArg: ::std::os::raw::c_int,
-            ),
-        >,
-        pNotifyArg: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stricmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strnicmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strglob(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strlike(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-        cEsc: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_log(
-        iErrCode: ::std::os::raw::c_int,
-        zFormat: *const ::std::os::raw::c_char,
-        ...
-    );
-}
-extern "C" {
-    pub fn sqlite3_wal_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_wal_autocheckpoint(
-        db: *mut sqlite3,
-        N: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint_v2(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        eMode: ::std::os::raw::c_int,
-        pnLog: *mut ::std::os::raw::c_int,
-        pnCkpt: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_on_conflict(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_nochange(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_collation(
-        arg1: *mut sqlite3_index_info,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus(
-        pStmt: *mut sqlite3_stmt,
-        idx: ::std::os::raw::c_int,
-        iScanStatusOp: ::std::os::raw::c_int,
-        pOut: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus_reset(arg1: *mut sqlite3_stmt);
-}
-extern "C" {
-    pub fn sqlite3_db_cacheflush(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_system_errno(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct sqlite3_snapshot {
-    pub hidden: [::std::os::raw::c_uchar; 48usize],
-}
-#[test]
-fn bindgen_test_layout_sqlite3_snapshot() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_snapshot>(),
-        48usize,
-        concat!("Size of: ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_snapshot>(),
-        1usize,
-        concat!("Alignment of ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_snapshot>())).hidden as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_snapshot),
-            "::",
-            stringify!(hidden)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_snapshot_get(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        ppSnapshot: *mut *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_open(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pSnapshot: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_free(arg1: *mut sqlite3_snapshot);
-}
-extern "C" {
-    pub fn sqlite3_snapshot_cmp(
-        p1: *mut sqlite3_snapshot,
-        p2: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_recover(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_serialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        piSize: *mut sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> *mut ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_deserialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pData: *mut ::std::os::raw::c_uchar,
-        szDb: sqlite3_int64,
-        szBuf: sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_rtree_dbl = f64;
-extern "C" {
-    pub fn sqlite3_rtree_geometry_callback(
-        db: *mut sqlite3,
-        zGeom: *const ::std::os::raw::c_char,
-        xGeom: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_rtree_geometry,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut sqlite3_rtree_dbl,
-                arg4: *mut ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_geometry {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_geometry() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_geometry>(),
-        40usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_geometry>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pContext as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).nParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).aParam as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pUser as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).xDelUser as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_rtree_query_callback(
-        db: *mut sqlite3,
-        zQueryFunc: *const ::std::os::raw::c_char,
-        xQueryFunc: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut sqlite3_rtree_query_info) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-        xDestructor: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_query_info {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub aCoord: *mut sqlite3_rtree_dbl,
-    pub anQueue: *mut ::std::os::raw::c_uint,
-    pub nCoord: ::std::os::raw::c_int,
-    pub iLevel: ::std::os::raw::c_int,
-    pub mxLevel: ::std::os::raw::c_int,
-    pub iRowid: sqlite3_int64,
-    pub rParentScore: sqlite3_rtree_dbl,
-    pub eParentWithin: ::std::os::raw::c_int,
-    pub eWithin: ::std::os::raw::c_int,
-    pub rScore: sqlite3_rtree_dbl,
-    pub apSqlParam: *mut *mut sqlite3_value,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_query_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_query_info>(),
-        112usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_query_info>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pContext as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aParam as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pUser as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).xDelUser as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aCoord as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aCoord)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).anQueue as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(anQueue)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nCoord as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nCoord)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iLevel as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iLevel)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).mxLevel as *const _ as usize
-        },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(mxLevel)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iRowid as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iRowid)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rParentScore as *const _ as usize
-        },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rParentScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eParentWithin as *const _ as usize
-        },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eParentWithin)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eWithin as *const _ as usize
-        },
-        92usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eWithin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rScore as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).apSqlParam as *const _ as usize
-        },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(apSqlParam)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Context {
-    _unused: [u8; 0],
-}
-pub type fts5_extension_function = ::std::option::Option<
-    unsafe extern "C" fn(
-        pApi: *const Fts5ExtensionApi,
-        pFts: *mut Fts5Context,
-        pCtx: *mut sqlite3_context,
-        nVal: ::std::os::raw::c_int,
-        apVal: *mut *mut sqlite3_value,
-    ),
->;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5PhraseIter {
-    pub a: *const ::std::os::raw::c_uchar,
-    pub b: *const ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_Fts5PhraseIter() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5PhraseIter>(),
-        16usize,
-        concat!("Size of: ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5PhraseIter>(),
-        8usize,
-        concat!("Alignment of ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).a as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(a)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).b as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(b)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5ExtensionApi {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xUserData: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xColumnCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xRowCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnRow: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnTotalSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            pCtx: *mut ::std::os::raw::c_void,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut ::std::os::raw::c_void,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *const ::std::os::raw::c_char,
-                    arg4: ::std::os::raw::c_int,
-                    arg5: ::std::os::raw::c_int,
-                    arg6: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInstCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnInst: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iIdx: ::std::os::raw::c_int,
-            piPhrase: *mut ::std::os::raw::c_int,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid:
-        ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Context) -> sqlite3_int64>,
-    pub xColumnText: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pz: *mut *const ::std::os::raw::c_char,
-            pn: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xQueryPhrase: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            pUserData: *mut ::std::os::raw::c_void,
-            arg2: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *const Fts5ExtensionApi,
-                    arg2: *mut Fts5Context,
-                    arg3: *mut ::std::os::raw::c_void,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pAux: *mut ::std::os::raw::c_void,
-            xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            bClear: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xPhraseFirst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-            arg4: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNext: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ),
-    >,
-    pub xPhraseFirstColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNextColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-        ),
-    >,
-}
-#[test]
-fn bindgen_test_layout_Fts5ExtensionApi() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5ExtensionApi>(),
-        160usize,
-        concat!("Size of: ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5ExtensionApi>(),
-        8usize,
-        concat!("Alignment of ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xUserData as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xUserData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnCount as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowCount as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowCount)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnTotalSize as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnTotalSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xTokenize as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseCount as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseSize as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInstCount as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInstCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInst as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowid as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnText as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnText)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnSize as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xQueryPhrase as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xQueryPhrase)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xSetAuxdata as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xSetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xGetAuxdata as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xGetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirst as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNext as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNext)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirstColumn as *const _ as usize
-        },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirstColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNextColumn as *const _ as usize
-        },
-        152usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNextColumn)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Tokenizer {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_tokenizer {
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            azArg: *mut *const ::std::os::raw::c_char,
-            nArg: ::std::os::raw::c_int,
-            ppOut: *mut *mut Fts5Tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Tokenizer)>,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Tokenizer,
-            pCtx: *mut ::std::os::raw::c_void,
-            flags: ::std::os::raw::c_int,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    pCtx: *mut ::std::os::raw::c_void,
-                    tflags: ::std::os::raw::c_int,
-                    pToken: *const ::std::os::raw::c_char,
-                    nToken: ::std::os::raw::c_int,
-                    iStart: ::std::os::raw::c_int,
-                    iEnd: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_tokenizer() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_tokenizer>(),
-        24usize,
-        concat!("Size of: ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_tokenizer>(),
-        8usize,
-        concat!("Alignment of ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xCreate as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xDelete as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xTokenize as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_api {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreateTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFindTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            ppContext: *mut *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCreateFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            xFunction: fts5_extension_function,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_api() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_api>(),
-        32usize,
-        concat!("Size of: ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_api>(),
-        8usize,
-        concat!("Alignment of ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateTokenizer as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xFindTokenizer as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xFindTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateFunction as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateFunction)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct __va_list {
-    pub __stack: *mut ::std::os::raw::c_void,
-    pub __gr_top: *mut ::std::os::raw::c_void,
-    pub __vr_top: *mut ::std::os::raw::c_void,
-    pub __gr_offs: ::std::os::raw::c_int,
-    pub __vr_offs: ::std::os::raw::c_int,
-}
-#[test]
-fn bindgen_test_layout___va_list() {
-    assert_eq!(
-        ::std::mem::size_of::<__va_list>(),
-        32usize,
-        concat!("Size of: ", stringify!(__va_list))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<__va_list>(),
-        8usize,
-        concat!("Alignment of ", stringify!(__va_list))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<__va_list>())).__stack as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(__va_list),
-            "::",
-            stringify!(__stack)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<__va_list>())).__gr_top as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(__va_list),
-            "::",
-            stringify!(__gr_top)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<__va_list>())).__vr_top as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(__va_list),
-            "::",
-            stringify!(__vr_top)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<__va_list>())).__gr_offs as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(__va_list),
-            "::",
-            stringify!(__gr_offs)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<__va_list>())).__vr_offs as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(__va_list),
-            "::",
-            stringify!(__vr_offs)
-        )
-    );
-}
diff --git a/android/bindgen.h b/android/bindgen.h
deleted file mode 100644
index b5e2c60..0000000
--- a/android/bindgen.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "sqlite3.h"
diff --git a/android/build.rs b/android/build.rs
new file mode 100644
index 0000000..9c9c86a
--- /dev/null
+++ b/android/build.rs
@@ -0,0 +1,44 @@
+//! SQLite bindgen configuration
+
+use bindgen::callbacks::{IntKind, ParseCallbacks};
+
+#[derive(Debug)]
+struct SqliteTypeChooser;
+
+impl ParseCallbacks for SqliteTypeChooser {
+    fn int_macro(&self, _name: &str, value: i64) -> Option<IntKind> {
+        if value >= i32::min_value() as i64 && value <= i32::max_value() as i64 {
+            Some(IntKind::I32)
+        } else {
+            None
+        }
+    }
+}
+
+fn main() {
+    bindgen_cmd::build(|mut builder| {
+        builder = builder
+            .parse_callbacks(Box::new(SqliteTypeChooser))
+            .rustfmt_bindings(true)
+            .blacklist_function("sqlite3_vmprintf")
+            .blacklist_function("sqlite3_vsnprintf")
+            .blacklist_function("sqlite3_str_vappendf")
+            .blacklist_type("va_list")
+            .blacklist_type("__builtin_va_list")
+            .blacklist_type("__gnuc_va_list")
+            .blacklist_type("__va_list_tag")
+            .blacklist_item("__GNUC_VA_LIST");
+ 
+        if cfg!(feature = "unlock_notify") {
+            builder = builder.clang_arg("-DSQLITE_ENABLE_UNLOCK_NOTIFY");
+        }
+        if cfg!(feature = "preupdate_hook") {
+            builder = builder.clang_arg("-DSQLITE_ENABLE_PREUPDATE_HOOK");
+        }
+        if cfg!(feature = "session") {
+            builder = builder.clang_arg("-DSQLITE_ENABLE_SESSION");
+        }
+
+        builder
+    })
+}
diff --git a/android/x86/bindings.rs b/android/x86/bindings.rs
deleted file mode 100644
index 65fb0ba..0000000
--- a/android/x86/bindings.rs
+++ /dev/null
@@ -1,5201 +0,0 @@
-/* automatically generated by rust-bindgen (unknown version) */
-
-pub const SQLITE_VERSION: &'static [u8; 7usize] = b"3.32.2\0";
-pub const SQLITE_VERSION_NUMBER: i32 = 3032002;
-pub const SQLITE_SOURCE_ID: &'static [u8; 85usize] =
-    b"2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c\0";
-pub const SQLITE_OK: i32 = 0;
-pub const SQLITE_ERROR: i32 = 1;
-pub const SQLITE_INTERNAL: i32 = 2;
-pub const SQLITE_PERM: i32 = 3;
-pub const SQLITE_ABORT: i32 = 4;
-pub const SQLITE_BUSY: i32 = 5;
-pub const SQLITE_LOCKED: i32 = 6;
-pub const SQLITE_NOMEM: i32 = 7;
-pub const SQLITE_READONLY: i32 = 8;
-pub const SQLITE_INTERRUPT: i32 = 9;
-pub const SQLITE_IOERR: i32 = 10;
-pub const SQLITE_CORRUPT: i32 = 11;
-pub const SQLITE_NOTFOUND: i32 = 12;
-pub const SQLITE_FULL: i32 = 13;
-pub const SQLITE_CANTOPEN: i32 = 14;
-pub const SQLITE_PROTOCOL: i32 = 15;
-pub const SQLITE_EMPTY: i32 = 16;
-pub const SQLITE_SCHEMA: i32 = 17;
-pub const SQLITE_TOOBIG: i32 = 18;
-pub const SQLITE_CONSTRAINT: i32 = 19;
-pub const SQLITE_MISMATCH: i32 = 20;
-pub const SQLITE_MISUSE: i32 = 21;
-pub const SQLITE_NOLFS: i32 = 22;
-pub const SQLITE_AUTH: i32 = 23;
-pub const SQLITE_FORMAT: i32 = 24;
-pub const SQLITE_RANGE: i32 = 25;
-pub const SQLITE_NOTADB: i32 = 26;
-pub const SQLITE_NOTICE: i32 = 27;
-pub const SQLITE_WARNING: i32 = 28;
-pub const SQLITE_ROW: i32 = 100;
-pub const SQLITE_DONE: i32 = 101;
-pub const SQLITE_ERROR_MISSING_COLLSEQ: i32 = 257;
-pub const SQLITE_ERROR_RETRY: i32 = 513;
-pub const SQLITE_ERROR_SNAPSHOT: i32 = 769;
-pub const SQLITE_IOERR_READ: i32 = 266;
-pub const SQLITE_IOERR_SHORT_READ: i32 = 522;
-pub const SQLITE_IOERR_WRITE: i32 = 778;
-pub const SQLITE_IOERR_FSYNC: i32 = 1034;
-pub const SQLITE_IOERR_DIR_FSYNC: i32 = 1290;
-pub const SQLITE_IOERR_TRUNCATE: i32 = 1546;
-pub const SQLITE_IOERR_FSTAT: i32 = 1802;
-pub const SQLITE_IOERR_UNLOCK: i32 = 2058;
-pub const SQLITE_IOERR_RDLOCK: i32 = 2314;
-pub const SQLITE_IOERR_DELETE: i32 = 2570;
-pub const SQLITE_IOERR_BLOCKED: i32 = 2826;
-pub const SQLITE_IOERR_NOMEM: i32 = 3082;
-pub const SQLITE_IOERR_ACCESS: i32 = 3338;
-pub const SQLITE_IOERR_CHECKRESERVEDLOCK: i32 = 3594;
-pub const SQLITE_IOERR_LOCK: i32 = 3850;
-pub const SQLITE_IOERR_CLOSE: i32 = 4106;
-pub const SQLITE_IOERR_DIR_CLOSE: i32 = 4362;
-pub const SQLITE_IOERR_SHMOPEN: i32 = 4618;
-pub const SQLITE_IOERR_SHMSIZE: i32 = 4874;
-pub const SQLITE_IOERR_SHMLOCK: i32 = 5130;
-pub const SQLITE_IOERR_SHMMAP: i32 = 5386;
-pub const SQLITE_IOERR_SEEK: i32 = 5642;
-pub const SQLITE_IOERR_DELETE_NOENT: i32 = 5898;
-pub const SQLITE_IOERR_MMAP: i32 = 6154;
-pub const SQLITE_IOERR_GETTEMPPATH: i32 = 6410;
-pub const SQLITE_IOERR_CONVPATH: i32 = 6666;
-pub const SQLITE_IOERR_VNODE: i32 = 6922;
-pub const SQLITE_IOERR_AUTH: i32 = 7178;
-pub const SQLITE_IOERR_BEGIN_ATOMIC: i32 = 7434;
-pub const SQLITE_IOERR_COMMIT_ATOMIC: i32 = 7690;
-pub const SQLITE_IOERR_ROLLBACK_ATOMIC: i32 = 7946;
-pub const SQLITE_IOERR_DATA: i32 = 8202;
-pub const SQLITE_LOCKED_SHAREDCACHE: i32 = 262;
-pub const SQLITE_LOCKED_VTAB: i32 = 518;
-pub const SQLITE_BUSY_RECOVERY: i32 = 261;
-pub const SQLITE_BUSY_SNAPSHOT: i32 = 517;
-pub const SQLITE_BUSY_TIMEOUT: i32 = 773;
-pub const SQLITE_CANTOPEN_NOTEMPDIR: i32 = 270;
-pub const SQLITE_CANTOPEN_ISDIR: i32 = 526;
-pub const SQLITE_CANTOPEN_FULLPATH: i32 = 782;
-pub const SQLITE_CANTOPEN_CONVPATH: i32 = 1038;
-pub const SQLITE_CANTOPEN_DIRTYWAL: i32 = 1294;
-pub const SQLITE_CANTOPEN_SYMLINK: i32 = 1550;
-pub const SQLITE_CORRUPT_VTAB: i32 = 267;
-pub const SQLITE_CORRUPT_SEQUENCE: i32 = 523;
-pub const SQLITE_CORRUPT_INDEX: i32 = 779;
-pub const SQLITE_READONLY_RECOVERY: i32 = 264;
-pub const SQLITE_READONLY_CANTLOCK: i32 = 520;
-pub const SQLITE_READONLY_ROLLBACK: i32 = 776;
-pub const SQLITE_READONLY_DBMOVED: i32 = 1032;
-pub const SQLITE_READONLY_CANTINIT: i32 = 1288;
-pub const SQLITE_READONLY_DIRECTORY: i32 = 1544;
-pub const SQLITE_ABORT_ROLLBACK: i32 = 516;
-pub const SQLITE_CONSTRAINT_CHECK: i32 = 275;
-pub const SQLITE_CONSTRAINT_COMMITHOOK: i32 = 531;
-pub const SQLITE_CONSTRAINT_FOREIGNKEY: i32 = 787;
-pub const SQLITE_CONSTRAINT_FUNCTION: i32 = 1043;
-pub const SQLITE_CONSTRAINT_NOTNULL: i32 = 1299;
-pub const SQLITE_CONSTRAINT_PRIMARYKEY: i32 = 1555;
-pub const SQLITE_CONSTRAINT_TRIGGER: i32 = 1811;
-pub const SQLITE_CONSTRAINT_UNIQUE: i32 = 2067;
-pub const SQLITE_CONSTRAINT_VTAB: i32 = 2323;
-pub const SQLITE_CONSTRAINT_ROWID: i32 = 2579;
-pub const SQLITE_CONSTRAINT_PINNED: i32 = 2835;
-pub const SQLITE_NOTICE_RECOVER_WAL: i32 = 283;
-pub const SQLITE_NOTICE_RECOVER_ROLLBACK: i32 = 539;
-pub const SQLITE_WARNING_AUTOINDEX: i32 = 284;
-pub const SQLITE_AUTH_USER: i32 = 279;
-pub const SQLITE_OK_LOAD_PERMANENTLY: i32 = 256;
-pub const SQLITE_OK_SYMLINK: i32 = 512;
-pub const SQLITE_OPEN_READONLY: i32 = 1;
-pub const SQLITE_OPEN_READWRITE: i32 = 2;
-pub const SQLITE_OPEN_CREATE: i32 = 4;
-pub const SQLITE_OPEN_DELETEONCLOSE: i32 = 8;
-pub const SQLITE_OPEN_EXCLUSIVE: i32 = 16;
-pub const SQLITE_OPEN_AUTOPROXY: i32 = 32;
-pub const SQLITE_OPEN_URI: i32 = 64;
-pub const SQLITE_OPEN_MEMORY: i32 = 128;
-pub const SQLITE_OPEN_MAIN_DB: i32 = 256;
-pub const SQLITE_OPEN_TEMP_DB: i32 = 512;
-pub const SQLITE_OPEN_TRANSIENT_DB: i32 = 1024;
-pub const SQLITE_OPEN_MAIN_JOURNAL: i32 = 2048;
-pub const SQLITE_OPEN_TEMP_JOURNAL: i32 = 4096;
-pub const SQLITE_OPEN_SUBJOURNAL: i32 = 8192;
-pub const SQLITE_OPEN_MASTER_JOURNAL: i32 = 16384;
-pub const SQLITE_OPEN_NOMUTEX: i32 = 32768;
-pub const SQLITE_OPEN_FULLMUTEX: i32 = 65536;
-pub const SQLITE_OPEN_SHAREDCACHE: i32 = 131072;
-pub const SQLITE_OPEN_PRIVATECACHE: i32 = 262144;
-pub const SQLITE_OPEN_WAL: i32 = 524288;
-pub const SQLITE_OPEN_NOFOLLOW: i32 = 16777216;
-pub const SQLITE_IOCAP_ATOMIC: i32 = 1;
-pub const SQLITE_IOCAP_ATOMIC512: i32 = 2;
-pub const SQLITE_IOCAP_ATOMIC1K: i32 = 4;
-pub const SQLITE_IOCAP_ATOMIC2K: i32 = 8;
-pub const SQLITE_IOCAP_ATOMIC4K: i32 = 16;
-pub const SQLITE_IOCAP_ATOMIC8K: i32 = 32;
-pub const SQLITE_IOCAP_ATOMIC16K: i32 = 64;
-pub const SQLITE_IOCAP_ATOMIC32K: i32 = 128;
-pub const SQLITE_IOCAP_ATOMIC64K: i32 = 256;
-pub const SQLITE_IOCAP_SAFE_APPEND: i32 = 512;
-pub const SQLITE_IOCAP_SEQUENTIAL: i32 = 1024;
-pub const SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN: i32 = 2048;
-pub const SQLITE_IOCAP_POWERSAFE_OVERWRITE: i32 = 4096;
-pub const SQLITE_IOCAP_IMMUTABLE: i32 = 8192;
-pub const SQLITE_IOCAP_BATCH_ATOMIC: i32 = 16384;
-pub const SQLITE_LOCK_NONE: i32 = 0;
-pub const SQLITE_LOCK_SHARED: i32 = 1;
-pub const SQLITE_LOCK_RESERVED: i32 = 2;
-pub const SQLITE_LOCK_PENDING: i32 = 3;
-pub const SQLITE_LOCK_EXCLUSIVE: i32 = 4;
-pub const SQLITE_SYNC_NORMAL: i32 = 2;
-pub const SQLITE_SYNC_FULL: i32 = 3;
-pub const SQLITE_SYNC_DATAONLY: i32 = 16;
-pub const SQLITE_FCNTL_LOCKSTATE: i32 = 1;
-pub const SQLITE_FCNTL_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_FCNTL_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_FCNTL_LAST_ERRNO: i32 = 4;
-pub const SQLITE_FCNTL_SIZE_HINT: i32 = 5;
-pub const SQLITE_FCNTL_CHUNK_SIZE: i32 = 6;
-pub const SQLITE_FCNTL_FILE_POINTER: i32 = 7;
-pub const SQLITE_FCNTL_SYNC_OMITTED: i32 = 8;
-pub const SQLITE_FCNTL_WIN32_AV_RETRY: i32 = 9;
-pub const SQLITE_FCNTL_PERSIST_WAL: i32 = 10;
-pub const SQLITE_FCNTL_OVERWRITE: i32 = 11;
-pub const SQLITE_FCNTL_VFSNAME: i32 = 12;
-pub const SQLITE_FCNTL_POWERSAFE_OVERWRITE: i32 = 13;
-pub const SQLITE_FCNTL_PRAGMA: i32 = 14;
-pub const SQLITE_FCNTL_BUSYHANDLER: i32 = 15;
-pub const SQLITE_FCNTL_TEMPFILENAME: i32 = 16;
-pub const SQLITE_FCNTL_MMAP_SIZE: i32 = 18;
-pub const SQLITE_FCNTL_TRACE: i32 = 19;
-pub const SQLITE_FCNTL_HAS_MOVED: i32 = 20;
-pub const SQLITE_FCNTL_SYNC: i32 = 21;
-pub const SQLITE_FCNTL_COMMIT_PHASETWO: i32 = 22;
-pub const SQLITE_FCNTL_WIN32_SET_HANDLE: i32 = 23;
-pub const SQLITE_FCNTL_WAL_BLOCK: i32 = 24;
-pub const SQLITE_FCNTL_ZIPVFS: i32 = 25;
-pub const SQLITE_FCNTL_RBU: i32 = 26;
-pub const SQLITE_FCNTL_VFS_POINTER: i32 = 27;
-pub const SQLITE_FCNTL_JOURNAL_POINTER: i32 = 28;
-pub const SQLITE_FCNTL_WIN32_GET_HANDLE: i32 = 29;
-pub const SQLITE_FCNTL_PDB: i32 = 30;
-pub const SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: i32 = 31;
-pub const SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: i32 = 32;
-pub const SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: i32 = 33;
-pub const SQLITE_FCNTL_LOCK_TIMEOUT: i32 = 34;
-pub const SQLITE_FCNTL_DATA_VERSION: i32 = 35;
-pub const SQLITE_FCNTL_SIZE_LIMIT: i32 = 36;
-pub const SQLITE_FCNTL_CKPT_DONE: i32 = 37;
-pub const SQLITE_FCNTL_RESERVE_BYTES: i32 = 38;
-pub const SQLITE_FCNTL_CKPT_START: i32 = 39;
-pub const SQLITE_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_LAST_ERRNO: i32 = 4;
-pub const SQLITE_ACCESS_EXISTS: i32 = 0;
-pub const SQLITE_ACCESS_READWRITE: i32 = 1;
-pub const SQLITE_ACCESS_READ: i32 = 2;
-pub const SQLITE_SHM_UNLOCK: i32 = 1;
-pub const SQLITE_SHM_LOCK: i32 = 2;
-pub const SQLITE_SHM_SHARED: i32 = 4;
-pub const SQLITE_SHM_EXCLUSIVE: i32 = 8;
-pub const SQLITE_SHM_NLOCK: i32 = 8;
-pub const SQLITE_CONFIG_SINGLETHREAD: i32 = 1;
-pub const SQLITE_CONFIG_MULTITHREAD: i32 = 2;
-pub const SQLITE_CONFIG_SERIALIZED: i32 = 3;
-pub const SQLITE_CONFIG_MALLOC: i32 = 4;
-pub const SQLITE_CONFIG_GETMALLOC: i32 = 5;
-pub const SQLITE_CONFIG_SCRATCH: i32 = 6;
-pub const SQLITE_CONFIG_PAGECACHE: i32 = 7;
-pub const SQLITE_CONFIG_HEAP: i32 = 8;
-pub const SQLITE_CONFIG_MEMSTATUS: i32 = 9;
-pub const SQLITE_CONFIG_MUTEX: i32 = 10;
-pub const SQLITE_CONFIG_GETMUTEX: i32 = 11;
-pub const SQLITE_CONFIG_LOOKASIDE: i32 = 13;
-pub const SQLITE_CONFIG_PCACHE: i32 = 14;
-pub const SQLITE_CONFIG_GETPCACHE: i32 = 15;
-pub const SQLITE_CONFIG_LOG: i32 = 16;
-pub const SQLITE_CONFIG_URI: i32 = 17;
-pub const SQLITE_CONFIG_PCACHE2: i32 = 18;
-pub const SQLITE_CONFIG_GETPCACHE2: i32 = 19;
-pub const SQLITE_CONFIG_COVERING_INDEX_SCAN: i32 = 20;
-pub const SQLITE_CONFIG_SQLLOG: i32 = 21;
-pub const SQLITE_CONFIG_MMAP_SIZE: i32 = 22;
-pub const SQLITE_CONFIG_WIN32_HEAPSIZE: i32 = 23;
-pub const SQLITE_CONFIG_PCACHE_HDRSZ: i32 = 24;
-pub const SQLITE_CONFIG_PMASZ: i32 = 25;
-pub const SQLITE_CONFIG_STMTJRNL_SPILL: i32 = 26;
-pub const SQLITE_CONFIG_SMALL_MALLOC: i32 = 27;
-pub const SQLITE_CONFIG_SORTERREF_SIZE: i32 = 28;
-pub const SQLITE_CONFIG_MEMDB_MAXSIZE: i32 = 29;
-pub const SQLITE_DBCONFIG_MAINDBNAME: i32 = 1000;
-pub const SQLITE_DBCONFIG_LOOKASIDE: i32 = 1001;
-pub const SQLITE_DBCONFIG_ENABLE_FKEY: i32 = 1002;
-pub const SQLITE_DBCONFIG_ENABLE_TRIGGER: i32 = 1003;
-pub const SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: i32 = 1004;
-pub const SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: i32 = 1005;
-pub const SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: i32 = 1006;
-pub const SQLITE_DBCONFIG_ENABLE_QPSG: i32 = 1007;
-pub const SQLITE_DBCONFIG_TRIGGER_EQP: i32 = 1008;
-pub const SQLITE_DBCONFIG_RESET_DATABASE: i32 = 1009;
-pub const SQLITE_DBCONFIG_DEFENSIVE: i32 = 1010;
-pub const SQLITE_DBCONFIG_WRITABLE_SCHEMA: i32 = 1011;
-pub const SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: i32 = 1012;
-pub const SQLITE_DBCONFIG_DQS_DML: i32 = 1013;
-pub const SQLITE_DBCONFIG_DQS_DDL: i32 = 1014;
-pub const SQLITE_DBCONFIG_ENABLE_VIEW: i32 = 1015;
-pub const SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: i32 = 1016;
-pub const SQLITE_DBCONFIG_TRUSTED_SCHEMA: i32 = 1017;
-pub const SQLITE_DBCONFIG_MAX: i32 = 1017;
-pub const SQLITE_DENY: i32 = 1;
-pub const SQLITE_IGNORE: i32 = 2;
-pub const SQLITE_CREATE_INDEX: i32 = 1;
-pub const SQLITE_CREATE_TABLE: i32 = 2;
-pub const SQLITE_CREATE_TEMP_INDEX: i32 = 3;
-pub const SQLITE_CREATE_TEMP_TABLE: i32 = 4;
-pub const SQLITE_CREATE_TEMP_TRIGGER: i32 = 5;
-pub const SQLITE_CREATE_TEMP_VIEW: i32 = 6;
-pub const SQLITE_CREATE_TRIGGER: i32 = 7;
-pub const SQLITE_CREATE_VIEW: i32 = 8;
-pub const SQLITE_DELETE: i32 = 9;
-pub const SQLITE_DROP_INDEX: i32 = 10;
-pub const SQLITE_DROP_TABLE: i32 = 11;
-pub const SQLITE_DROP_TEMP_INDEX: i32 = 12;
-pub const SQLITE_DROP_TEMP_TABLE: i32 = 13;
-pub const SQLITE_DROP_TEMP_TRIGGER: i32 = 14;
-pub const SQLITE_DROP_TEMP_VIEW: i32 = 15;
-pub const SQLITE_DROP_TRIGGER: i32 = 16;
-pub const SQLITE_DROP_VIEW: i32 = 17;
-pub const SQLITE_INSERT: i32 = 18;
-pub const SQLITE_PRAGMA: i32 = 19;
-pub const SQLITE_READ: i32 = 20;
-pub const SQLITE_SELECT: i32 = 21;
-pub const SQLITE_TRANSACTION: i32 = 22;
-pub const SQLITE_UPDATE: i32 = 23;
-pub const SQLITE_ATTACH: i32 = 24;
-pub const SQLITE_DETACH: i32 = 25;
-pub const SQLITE_ALTER_TABLE: i32 = 26;
-pub const SQLITE_REINDEX: i32 = 27;
-pub const SQLITE_ANALYZE: i32 = 28;
-pub const SQLITE_CREATE_VTABLE: i32 = 29;
-pub const SQLITE_DROP_VTABLE: i32 = 30;
-pub const SQLITE_FUNCTION: i32 = 31;
-pub const SQLITE_SAVEPOINT: i32 = 32;
-pub const SQLITE_COPY: i32 = 0;
-pub const SQLITE_RECURSIVE: i32 = 33;
-pub const SQLITE_TRACE_STMT: i32 = 1;
-pub const SQLITE_TRACE_PROFILE: i32 = 2;
-pub const SQLITE_TRACE_ROW: i32 = 4;
-pub const SQLITE_TRACE_CLOSE: i32 = 8;
-pub const SQLITE_LIMIT_LENGTH: i32 = 0;
-pub const SQLITE_LIMIT_SQL_LENGTH: i32 = 1;
-pub const SQLITE_LIMIT_COLUMN: i32 = 2;
-pub const SQLITE_LIMIT_EXPR_DEPTH: i32 = 3;
-pub const SQLITE_LIMIT_COMPOUND_SELECT: i32 = 4;
-pub const SQLITE_LIMIT_VDBE_OP: i32 = 5;
-pub const SQLITE_LIMIT_FUNCTION_ARG: i32 = 6;
-pub const SQLITE_LIMIT_ATTACHED: i32 = 7;
-pub const SQLITE_LIMIT_LIKE_PATTERN_LENGTH: i32 = 8;
-pub const SQLITE_LIMIT_VARIABLE_NUMBER: i32 = 9;
-pub const SQLITE_LIMIT_TRIGGER_DEPTH: i32 = 10;
-pub const SQLITE_LIMIT_WORKER_THREADS: i32 = 11;
-pub const SQLITE_PREPARE_PERSISTENT: i32 = 1;
-pub const SQLITE_PREPARE_NORMALIZE: i32 = 2;
-pub const SQLITE_PREPARE_NO_VTAB: i32 = 4;
-pub const SQLITE_INTEGER: i32 = 1;
-pub const SQLITE_FLOAT: i32 = 2;
-pub const SQLITE_BLOB: i32 = 4;
-pub const SQLITE_NULL: i32 = 5;
-pub const SQLITE_TEXT: i32 = 3;
-pub const SQLITE3_TEXT: i32 = 3;
-pub const SQLITE_UTF8: i32 = 1;
-pub const SQLITE_UTF16LE: i32 = 2;
-pub const SQLITE_UTF16BE: i32 = 3;
-pub const SQLITE_UTF16: i32 = 4;
-pub const SQLITE_ANY: i32 = 5;
-pub const SQLITE_UTF16_ALIGNED: i32 = 8;
-pub const SQLITE_DETERMINISTIC: i32 = 2048;
-pub const SQLITE_DIRECTONLY: i32 = 524288;
-pub const SQLITE_SUBTYPE: i32 = 1048576;
-pub const SQLITE_INNOCUOUS: i32 = 2097152;
-pub const SQLITE_WIN32_DATA_DIRECTORY_TYPE: i32 = 1;
-pub const SQLITE_WIN32_TEMP_DIRECTORY_TYPE: i32 = 2;
-pub const SQLITE_INDEX_SCAN_UNIQUE: i32 = 1;
-pub const SQLITE_INDEX_CONSTRAINT_EQ: i32 = 2;
-pub const SQLITE_INDEX_CONSTRAINT_GT: i32 = 4;
-pub const SQLITE_INDEX_CONSTRAINT_LE: i32 = 8;
-pub const SQLITE_INDEX_CONSTRAINT_LT: i32 = 16;
-pub const SQLITE_INDEX_CONSTRAINT_GE: i32 = 32;
-pub const SQLITE_INDEX_CONSTRAINT_MATCH: i32 = 64;
-pub const SQLITE_INDEX_CONSTRAINT_LIKE: i32 = 65;
-pub const SQLITE_INDEX_CONSTRAINT_GLOB: i32 = 66;
-pub const SQLITE_INDEX_CONSTRAINT_REGEXP: i32 = 67;
-pub const SQLITE_INDEX_CONSTRAINT_NE: i32 = 68;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOT: i32 = 69;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOTNULL: i32 = 70;
-pub const SQLITE_INDEX_CONSTRAINT_ISNULL: i32 = 71;
-pub const SQLITE_INDEX_CONSTRAINT_IS: i32 = 72;
-pub const SQLITE_INDEX_CONSTRAINT_FUNCTION: i32 = 150;
-pub const SQLITE_MUTEX_FAST: i32 = 0;
-pub const SQLITE_MUTEX_RECURSIVE: i32 = 1;
-pub const SQLITE_MUTEX_STATIC_MASTER: i32 = 2;
-pub const SQLITE_MUTEX_STATIC_MEM: i32 = 3;
-pub const SQLITE_MUTEX_STATIC_MEM2: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_OPEN: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_PRNG: i32 = 5;
-pub const SQLITE_MUTEX_STATIC_LRU: i32 = 6;
-pub const SQLITE_MUTEX_STATIC_LRU2: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_PMEM: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_APP1: i32 = 8;
-pub const SQLITE_MUTEX_STATIC_APP2: i32 = 9;
-pub const SQLITE_MUTEX_STATIC_APP3: i32 = 10;
-pub const SQLITE_MUTEX_STATIC_VFS1: i32 = 11;
-pub const SQLITE_MUTEX_STATIC_VFS2: i32 = 12;
-pub const SQLITE_MUTEX_STATIC_VFS3: i32 = 13;
-pub const SQLITE_TESTCTRL_FIRST: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_SAVE: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_RESTORE: i32 = 6;
-pub const SQLITE_TESTCTRL_PRNG_RESET: i32 = 7;
-pub const SQLITE_TESTCTRL_BITVEC_TEST: i32 = 8;
-pub const SQLITE_TESTCTRL_FAULT_INSTALL: i32 = 9;
-pub const SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: i32 = 10;
-pub const SQLITE_TESTCTRL_PENDING_BYTE: i32 = 11;
-pub const SQLITE_TESTCTRL_ASSERT: i32 = 12;
-pub const SQLITE_TESTCTRL_ALWAYS: i32 = 13;
-pub const SQLITE_TESTCTRL_RESERVE: i32 = 14;
-pub const SQLITE_TESTCTRL_OPTIMIZATIONS: i32 = 15;
-pub const SQLITE_TESTCTRL_ISKEYWORD: i32 = 16;
-pub const SQLITE_TESTCTRL_SCRATCHMALLOC: i32 = 17;
-pub const SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: i32 = 17;
-pub const SQLITE_TESTCTRL_LOCALTIME_FAULT: i32 = 18;
-pub const SQLITE_TESTCTRL_EXPLAIN_STMT: i32 = 19;
-pub const SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD: i32 = 19;
-pub const SQLITE_TESTCTRL_NEVER_CORRUPT: i32 = 20;
-pub const SQLITE_TESTCTRL_VDBE_COVERAGE: i32 = 21;
-pub const SQLITE_TESTCTRL_BYTEORDER: i32 = 22;
-pub const SQLITE_TESTCTRL_ISINIT: i32 = 23;
-pub const SQLITE_TESTCTRL_SORTER_MMAP: i32 = 24;
-pub const SQLITE_TESTCTRL_IMPOSTER: i32 = 25;
-pub const SQLITE_TESTCTRL_PARSER_COVERAGE: i32 = 26;
-pub const SQLITE_TESTCTRL_RESULT_INTREAL: i32 = 27;
-pub const SQLITE_TESTCTRL_PRNG_SEED: i32 = 28;
-pub const SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: i32 = 29;
-pub const SQLITE_TESTCTRL_LAST: i32 = 29;
-pub const SQLITE_STATUS_MEMORY_USED: i32 = 0;
-pub const SQLITE_STATUS_PAGECACHE_USED: i32 = 1;
-pub const SQLITE_STATUS_PAGECACHE_OVERFLOW: i32 = 2;
-pub const SQLITE_STATUS_SCRATCH_USED: i32 = 3;
-pub const SQLITE_STATUS_SCRATCH_OVERFLOW: i32 = 4;
-pub const SQLITE_STATUS_MALLOC_SIZE: i32 = 5;
-pub const SQLITE_STATUS_PARSER_STACK: i32 = 6;
-pub const SQLITE_STATUS_PAGECACHE_SIZE: i32 = 7;
-pub const SQLITE_STATUS_SCRATCH_SIZE: i32 = 8;
-pub const SQLITE_STATUS_MALLOC_COUNT: i32 = 9;
-pub const SQLITE_DBSTATUS_LOOKASIDE_USED: i32 = 0;
-pub const SQLITE_DBSTATUS_CACHE_USED: i32 = 1;
-pub const SQLITE_DBSTATUS_SCHEMA_USED: i32 = 2;
-pub const SQLITE_DBSTATUS_STMT_USED: i32 = 3;
-pub const SQLITE_DBSTATUS_LOOKASIDE_HIT: i32 = 4;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: i32 = 5;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: i32 = 6;
-pub const SQLITE_DBSTATUS_CACHE_HIT: i32 = 7;
-pub const SQLITE_DBSTATUS_CACHE_MISS: i32 = 8;
-pub const SQLITE_DBSTATUS_CACHE_WRITE: i32 = 9;
-pub const SQLITE_DBSTATUS_DEFERRED_FKS: i32 = 10;
-pub const SQLITE_DBSTATUS_CACHE_USED_SHARED: i32 = 11;
-pub const SQLITE_DBSTATUS_CACHE_SPILL: i32 = 12;
-pub const SQLITE_DBSTATUS_MAX: i32 = 12;
-pub const SQLITE_STMTSTATUS_FULLSCAN_STEP: i32 = 1;
-pub const SQLITE_STMTSTATUS_SORT: i32 = 2;
-pub const SQLITE_STMTSTATUS_AUTOINDEX: i32 = 3;
-pub const SQLITE_STMTSTATUS_VM_STEP: i32 = 4;
-pub const SQLITE_STMTSTATUS_REPREPARE: i32 = 5;
-pub const SQLITE_STMTSTATUS_RUN: i32 = 6;
-pub const SQLITE_STMTSTATUS_MEMUSED: i32 = 99;
-pub const SQLITE_CHECKPOINT_PASSIVE: i32 = 0;
-pub const SQLITE_CHECKPOINT_FULL: i32 = 1;
-pub const SQLITE_CHECKPOINT_RESTART: i32 = 2;
-pub const SQLITE_CHECKPOINT_TRUNCATE: i32 = 3;
-pub const SQLITE_VTAB_CONSTRAINT_SUPPORT: i32 = 1;
-pub const SQLITE_VTAB_INNOCUOUS: i32 = 2;
-pub const SQLITE_VTAB_DIRECTONLY: i32 = 3;
-pub const SQLITE_ROLLBACK: i32 = 1;
-pub const SQLITE_FAIL: i32 = 3;
-pub const SQLITE_REPLACE: i32 = 5;
-pub const SQLITE_SCANSTAT_NLOOP: i32 = 0;
-pub const SQLITE_SCANSTAT_NVISIT: i32 = 1;
-pub const SQLITE_SCANSTAT_EST: i32 = 2;
-pub const SQLITE_SCANSTAT_NAME: i32 = 3;
-pub const SQLITE_SCANSTAT_EXPLAIN: i32 = 4;
-pub const SQLITE_SCANSTAT_SELECTID: i32 = 5;
-pub const SQLITE_SERIALIZE_NOCOPY: i32 = 1;
-pub const SQLITE_DESERIALIZE_FREEONCLOSE: i32 = 1;
-pub const SQLITE_DESERIALIZE_RESIZEABLE: i32 = 2;
-pub const SQLITE_DESERIALIZE_READONLY: i32 = 4;
-pub const NOT_WITHIN: i32 = 0;
-pub const PARTLY_WITHIN: i32 = 1;
-pub const FULLY_WITHIN: i32 = 2;
-pub const FTS5_TOKENIZE_QUERY: i32 = 1;
-pub const FTS5_TOKENIZE_PREFIX: i32 = 2;
-pub const FTS5_TOKENIZE_DOCUMENT: i32 = 4;
-pub const FTS5_TOKENIZE_AUX: i32 = 8;
-pub const FTS5_TOKEN_COLOCATED: i32 = 1;
-extern "C" {
-    pub static mut sqlite3_version: [::std::os::raw::c_char; 0usize];
-}
-extern "C" {
-    pub fn sqlite3_libversion() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_sourceid() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_libversion_number() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_threadsafe() -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3 {
-    _unused: [u8; 0],
-}
-pub type sqlite_int64 = ::std::os::raw::c_longlong;
-pub type sqlite_uint64 = ::std::os::raw::c_ulonglong;
-pub type sqlite3_int64 = sqlite_int64;
-pub type sqlite3_uint64 = sqlite_uint64;
-extern "C" {
-    pub fn sqlite3_close(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_close_v2(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_callback = ::std::option::Option<
-    unsafe extern "C" fn(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut *mut ::std::os::raw::c_char,
-        arg4: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int,
->;
-extern "C" {
-    pub fn sqlite3_exec(
-        arg1: *mut sqlite3,
-        sql: *const ::std::os::raw::c_char,
-        callback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut ::std::os::raw::c_char,
-                arg4: *mut *mut ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        errmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_file {
-    pub pMethods: *const sqlite3_io_methods,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_file() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_file>(),
-        4usize,
-        concat!("Size of: ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_file>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_file>())).pMethods as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_file),
-            "::",
-            stringify!(pMethods)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_io_methods {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xRead: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *mut ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xWrite: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *const ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file, size: sqlite3_int64) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pSize: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnlock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCheckReservedLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileControl: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            op: ::std::os::raw::c_int,
-            pArg: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSectorSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xDeviceCharacteristics: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xShmMap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iPg: ::std::os::raw::c_int,
-            pgsz: ::std::os::raw::c_int,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            offset: ::std::os::raw::c_int,
-            n: ::std::os::raw::c_int,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmBarrier: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_file)>,
-    pub xShmUnmap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            deleteFlag: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            iAmt: ::std::os::raw::c_int,
-            pp: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnfetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            p: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_io_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_io_methods>(),
-        76usize,
-        concat!("Size of: ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_io_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xClose as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xRead as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xRead)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xWrite as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xWrite)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xTruncate as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSync as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileSize as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xLock as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnlock as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnlock)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xCheckReservedLock as *const _ as usize
-        },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xCheckReservedLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileControl as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileControl)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSectorSize as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSectorSize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xDeviceCharacteristics as *const _
-                as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xDeviceCharacteristics)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmMap as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmMap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmLock as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmBarrier as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmBarrier)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmUnmap as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmUnmap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFetch as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnfetch as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnfetch)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_api_routines {
-    _unused: [u8; 0],
-}
-pub type sqlite3_syscall_ptr = ::std::option::Option<unsafe extern "C" fn()>;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vfs {
-    pub iVersion: ::std::os::raw::c_int,
-    pub szOsFile: ::std::os::raw::c_int,
-    pub mxPathname: ::std::os::raw::c_int,
-    pub pNext: *mut sqlite3_vfs,
-    pub zName: *const ::std::os::raw::c_char,
-    pub pAppData: *mut ::std::os::raw::c_void,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-            pOutFlags: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            syncDir: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xAccess: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            flags: ::std::os::raw::c_int,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFullPathname: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            nOut: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDlOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zFilename: *const ::std::os::raw::c_char,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xDlError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zErrMsg: *mut ::std::os::raw::c_char,
-        ),
-    >,
-    pub xDlSym: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut ::std::os::raw::c_void,
-            zSymbol: *const ::std::os::raw::c_char,
-        ) -> ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_vfs,
-                arg2: *mut ::std::os::raw::c_void,
-                zSymbol: *const ::std::os::raw::c_char,
-            ),
-        >,
-    >,
-    pub xDlClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut ::std::os::raw::c_void),
-    >,
-    pub xRandomness: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSleep: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            microseconds: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTime: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut f64) -> ::std::os::raw::c_int,
-    >,
-    pub xGetLastError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTimeInt64: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: sqlite3_syscall_ptr,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> sqlite3_syscall_ptr,
-    >,
-    pub xNextSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> *const ::std::os::raw::c_char,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vfs() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vfs>(),
-        88usize,
-        concat!("Size of: ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vfs>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).szOsFile as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(szOsFile)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).mxPathname as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(mxPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pNext as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).zName as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(zName)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pAppData as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xOpen as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDelete as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xAccess as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xAccess)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xFullPathname as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xFullPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlOpen as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlError as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlSym as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlSym)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlClose as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xRandomness as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xRandomness)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSleep as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSleep)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTime as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTime)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetLastError as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetLastError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTimeInt64 as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTimeInt64)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSetSystemCall as *const _ as usize },
-        76usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetSystemCall as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xNextSystemCall as *const _ as usize },
-        84usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xNextSystemCall)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_initialize() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_shutdown() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_init() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_end() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_config(arg1: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mem_methods {
-    pub xMalloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xRealloc: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            arg2: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xRoundup: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int,
-    >,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub pAppData: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mem_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mem_methods>(),
-        32usize,
-        concat!("Size of: ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mem_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xMalloc as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xMalloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xFree as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xFree)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRealloc as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRealloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xSize as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRoundup as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRoundup)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xInit as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xShutdown as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).pAppData as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_extended_result_codes(
-        arg1: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_last_insert_rowid(arg1: *mut sqlite3) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_set_last_insert_rowid(arg1: *mut sqlite3, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_total_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_interrupt(arg1: *mut sqlite3);
-}
-extern "C" {
-    pub fn sqlite3_complete(sql: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_complete16(sql: *const ::std::os::raw::c_void) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_timeout(
-        arg1: *mut sqlite3,
-        ms: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_table(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        pazResult: *mut *mut *mut ::std::os::raw::c_char,
-        pnRow: *mut ::std::os::raw::c_int,
-        pnColumn: *mut ::std::os::raw::c_int,
-        pzErrmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_free_table(result: *mut *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_mprintf(arg1: *const ::std::os::raw::c_char, ...)
-        -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_snprintf(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_char,
-        arg3: *const ::std::os::raw::c_char,
-        ...
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_malloc(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_malloc64(arg1: sqlite3_uint64) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc64(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: sqlite3_uint64,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_free(arg1: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_msize(arg1: *mut ::std::os::raw::c_void) -> sqlite3_uint64;
-}
-extern "C" {
-    pub fn sqlite3_memory_used() -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_memory_highwater(resetFlag: ::std::os::raw::c_int) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_randomness(N: ::std::os::raw::c_int, P: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_set_authorizer(
-        arg1: *mut sqlite3,
-        xAuth: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: *const ::std::os::raw::c_char,
-                arg6: *const ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pUserData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_trace(
-        arg1: *mut sqlite3,
-        xTrace: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_profile(
-        arg1: *mut sqlite3,
-        xProfile: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-                arg3: sqlite3_uint64,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_trace_v2(
-        arg1: *mut sqlite3,
-        uMask: ::std::os::raw::c_uint,
-        xCallback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: ::std::os::raw::c_uint,
-                arg2: *mut ::std::os::raw::c_void,
-                arg3: *mut ::std::os::raw::c_void,
-                arg4: *mut ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pCtx: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_progress_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg4: *mut ::std::os::raw::c_void,
-    );
-}
-extern "C" {
-    pub fn sqlite3_open(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open16(
-        filename: *const ::std::os::raw::c_void,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open_v2(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-        flags: ::std::os::raw::c_int,
-        zVfs: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_parameter(
-        zFilename: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_uri_boolean(
-        zFile: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-        bDefault: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_int64(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_int64,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_uri_key(
-        zFilename: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_database(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_journal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_wal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_database_file_object(arg1: *const ::std::os::raw::c_char) -> *mut sqlite3_file;
-}
-extern "C" {
-    pub fn sqlite3_create_filename(
-        zDatabase: *const ::std::os::raw::c_char,
-        zJournal: *const ::std::os::raw::c_char,
-        zWal: *const ::std::os::raw::c_char,
-        nParam: ::std::os::raw::c_int,
-        azParam: *mut *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_free_filename(arg1: *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_extended_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_errmsg(arg1: *mut sqlite3) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_errmsg16(arg1: *mut sqlite3) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_errstr(arg1: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_stmt {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_limit(
-        arg1: *mut sqlite3,
-        id: ::std::os::raw::c_int,
-        newVal: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_expanded_sql(pStmt: *mut sqlite3_stmt) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_normalized_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_readonly(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_isexplain(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_busy(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_value {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_context {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_bind_blob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_blob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_double(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: f64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_null(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_value(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const sqlite3_value,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_pointer(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut ::std::os::raw::c_void,
-        arg4: *const ::std::os::raw::c_char,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        n: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_count(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_index(
-        arg1: *mut sqlite3_stmt,
-        zName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_clear_bindings(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_name(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_name16(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_step(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_data_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_blob(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_double(arg1: *mut sqlite3_stmt, iCol: ::std::os::raw::c_int) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_column_int(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_int64(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_column_text(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_column_text16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_value(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_type(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_finalize(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function16(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_void,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function_v2(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_window_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xValue: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xInverse: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_aggregate_count(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_expired(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_transfer_bindings(
-        arg1: *mut sqlite3_stmt,
-        arg2: *mut sqlite3_stmt,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_global_recover() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_thread_cleanup();
-}
-extern "C" {
-    pub fn sqlite3_memory_alarm(
-        arg1: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: sqlite3_int64,
-                arg3: ::std::os::raw::c_int,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_blob(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_double(arg1: *mut sqlite3_value) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_value_int(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_int64(arg1: *mut sqlite3_value) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_value_pointer(
-        arg1: *mut sqlite3_value,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_value_text16(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16le(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16be(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes16(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_numeric_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_nochange(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_frombind(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_subtype(arg1: *mut sqlite3_value) -> ::std::os::raw::c_uint;
-}
-extern "C" {
-    pub fn sqlite3_value_dup(arg1: *const sqlite3_value) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_value_free(arg1: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_aggregate_context(
-        arg1: *mut sqlite3_context,
-        nBytes: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_user_data(arg1: *mut sqlite3_context) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_context_db_handle(arg1: *mut sqlite3_context) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_get_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_set_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-pub type sqlite3_destructor_type =
-    ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>;
-extern "C" {
-    pub fn sqlite3_result_blob(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_blob64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_double(arg1: *mut sqlite3_context, arg2: f64);
-}
-extern "C" {
-    pub fn sqlite3_result_error(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error_toobig(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_nomem(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_code(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int64(arg1: *mut sqlite3_context, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_result_null(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_text(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16le(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16be(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_value(arg1: *mut sqlite3_context, arg2: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_result_pointer(
-        arg1: *mut sqlite3_context,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob(arg1: *mut sqlite3_context, n: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob64(
-        arg1: *mut sqlite3_context,
-        n: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_result_subtype(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_uint);
-}
-extern "C" {
-    pub fn sqlite3_create_collation(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation_v2(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation16(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_void,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed16(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sleep(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub static mut sqlite3_temp_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub static mut sqlite3_data_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory8(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory16(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_autocommit(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_handle(arg1: *mut sqlite3_stmt) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_db_filename(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_db_readonly(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_next_stmt(pDb: *mut sqlite3, pStmt: *mut sqlite3_stmt) -> *mut sqlite3_stmt;
-}
-extern "C" {
-    pub fn sqlite3_commit_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_rollback_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_update_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: sqlite3_int64,
-            ),
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_enable_shared_cache(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_release_memory(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_release_memory(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_hard_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit(N: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_table_column_metadata(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        zTableName: *const ::std::os::raw::c_char,
-        zColumnName: *const ::std::os::raw::c_char,
-        pzDataType: *mut *const ::std::os::raw::c_char,
-        pzCollSeq: *mut *const ::std::os::raw::c_char,
-        pNotNull: *mut ::std::os::raw::c_int,
-        pPrimaryKey: *mut ::std::os::raw::c_int,
-        pAutoinc: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_load_extension(
-        db: *mut sqlite3,
-        zFile: *const ::std::os::raw::c_char,
-        zProc: *const ::std::os::raw::c_char,
-        pzErrMsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_enable_load_extension(
-        db: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_cancel_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset_auto_extension();
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_module {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xConnect: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBestIndex: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: *mut sqlite3_index_info,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDisconnect: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xDestroy: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            ppCursor: *mut *mut sqlite3_vtab_cursor,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xFilter: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            idxNum: ::std::os::raw::c_int,
-            idxStr: *const ::std::os::raw::c_char,
-            argc: ::std::os::raw::c_int,
-            argv: *mut *mut sqlite3_value,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xNext: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xEof: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            arg2: *mut sqlite3_context,
-            arg3: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            pRowid: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUpdate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut sqlite3_value,
-            arg4: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBegin: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xCommit: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xRollback: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xFindFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            nArg: ::std::os::raw::c_int,
-            zName: *const ::std::os::raw::c_char,
-            pxFunc: *mut ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut sqlite3_context,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *mut *mut sqlite3_value,
-                ),
-            >,
-            ppArg: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRename: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            zNew: *const ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSavepoint: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRelease: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRollbackTo: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShadowName: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_module() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_module>(),
-        96usize,
-        concat!("Size of: ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_module>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCreate as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xConnect as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xConnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBestIndex as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBestIndex)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDisconnect as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDisconnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDestroy as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xOpen as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xClose as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFilter as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFilter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xNext as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xEof as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xEof)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xColumn as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xColumn)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRowid as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xUpdate as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xUpdate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBegin as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBegin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSync as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCommit as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCommit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollback as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollback)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFindFunction as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFindFunction)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRename as *const _ as usize },
-        76usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRename)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSavepoint as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSavepoint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRelease as *const _ as usize },
-        84usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRelease)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollbackTo as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollbackTo)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xShadowName as *const _ as usize },
-        92usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xShadowName)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info {
-    pub nConstraint: ::std::os::raw::c_int,
-    pub aConstraint: *mut sqlite3_index_info_sqlite3_index_constraint,
-    pub nOrderBy: ::std::os::raw::c_int,
-    pub aOrderBy: *mut sqlite3_index_info_sqlite3_index_orderby,
-    pub aConstraintUsage: *mut sqlite3_index_info_sqlite3_index_constraint_usage,
-    pub idxNum: ::std::os::raw::c_int,
-    pub idxStr: *mut ::std::os::raw::c_char,
-    pub needToFreeIdxStr: ::std::os::raw::c_int,
-    pub orderByConsumed: ::std::os::raw::c_int,
-    pub estimatedCost: f64,
-    pub estimatedRows: sqlite3_int64,
-    pub idxFlags: ::std::os::raw::c_int,
-    pub colUsed: sqlite3_uint64,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint {
-    pub iColumn: ::std::os::raw::c_int,
-    pub op: ::std::os::raw::c_uchar,
-    pub usable: ::std::os::raw::c_uchar,
-    pub iTermOffset: ::std::os::raw::c_int,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        12usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iColumn
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).op as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(op)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).usable
-                as *const _ as usize
-        },
-        5usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(usable)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iTermOffset
-                as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iTermOffset)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_orderby {
-    pub iColumn: ::std::os::raw::c_int,
-    pub desc: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_orderby() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).iColumn as *const _
-                as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).desc as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(desc)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint_usage {
-    pub argvIndex: ::std::os::raw::c_int,
-    pub omit: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint_usage() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).argvIndex
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(argvIndex)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).omit
-                as *const _ as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(omit)
-        )
-    );
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info>(),
-        64usize,
-        concat!("Size of: ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nConstraint as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraint as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nOrderBy as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aOrderBy as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraintUsage as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraintUsage)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxNum as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxNum)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxStr as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).needToFreeIdxStr as *const _ as usize
-        },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(needToFreeIdxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).orderByConsumed as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(orderByConsumed)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedCost as *const _ as usize
-        },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedCost)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedRows as *const _ as usize
-        },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedRows)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxFlags as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxFlags)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).colUsed as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(colUsed)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_create_module(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_module_v2(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_drop_modules(
-        db: *mut sqlite3,
-        azKeep: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab {
-    pub pModule: *const sqlite3_module,
-    pub nRef: ::std::os::raw::c_int,
-    pub zErrMsg: *mut ::std::os::raw::c_char,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab>(),
-        12usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).pModule as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(pModule)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).nRef as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(nRef)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).zErrMsg as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(zErrMsg)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab_cursor {
-    pub pVtab: *mut sqlite3_vtab,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab_cursor() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab_cursor>(),
-        4usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab_cursor>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab_cursor>())).pVtab as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab_cursor),
-            "::",
-            stringify!(pVtab)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_declare_vtab(
-        arg1: *mut sqlite3,
-        zSQL: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_overload_function(
-        arg1: *mut sqlite3,
-        zFuncName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_blob {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_blob_open(
-        arg1: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        zTable: *const ::std::os::raw::c_char,
-        zColumn: *const ::std::os::raw::c_char,
-        iRow: sqlite3_int64,
-        flags: ::std::os::raw::c_int,
-        ppBlob: *mut *mut sqlite3_blob,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_reopen(
-        arg1: *mut sqlite3_blob,
-        arg2: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_close(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_bytes(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_read(
-        arg1: *mut sqlite3_blob,
-        Z: *mut ::std::os::raw::c_void,
-        N: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_write(
-        arg1: *mut sqlite3_blob,
-        z: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_find(zVfsName: *const ::std::os::raw::c_char) -> *mut sqlite3_vfs;
-}
-extern "C" {
-    pub fn sqlite3_vfs_register(
-        arg1: *mut sqlite3_vfs,
-        makeDflt: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_unregister(arg1: *mut sqlite3_vfs) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_alloc(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_mutex_free(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_enter(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_try(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_leave(arg1: *mut sqlite3_mutex);
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex_methods {
-    pub xMutexInit: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexEnd: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexAlloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex,
-    >,
-    pub xMutexFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexEnter: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexTry: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexLeave: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexHeld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexNotheld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mutex_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mutex_methods>(),
-        36usize,
-        concat!("Size of: ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mutex_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexInit as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnd as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnd)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexAlloc as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexAlloc)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexFree as *const _ as usize
-        },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexFree)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnter as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexTry as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexTry)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexLeave as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexLeave)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexHeld as *const _ as usize
-        },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexHeld)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexNotheld as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexNotheld)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_db_mutex(arg1: *mut sqlite3) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_file_control(
-        arg1: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        op: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_test_control(op: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_count() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_name(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut *const ::std::os::raw::c_char,
-        arg3: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_check(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_str {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_str_new(arg1: *mut sqlite3) -> *mut sqlite3_str;
-}
-extern "C" {
-    pub fn sqlite3_str_finish(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_str_appendf(arg1: *mut sqlite3_str, zFormat: *const ::std::os::raw::c_char, ...);
-}
-extern "C" {
-    pub fn sqlite3_str_append(
-        arg1: *mut sqlite3_str,
-        zIn: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_appendall(arg1: *mut sqlite3_str, zIn: *const ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_str_appendchar(
-        arg1: *mut sqlite3_str,
-        N: ::std::os::raw::c_int,
-        C: ::std::os::raw::c_char,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_reset(arg1: *mut sqlite3_str);
-}
-extern "C" {
-    pub fn sqlite3_str_errcode(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_length(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_value(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_status(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut ::std::os::raw::c_int,
-        pHighwater: *mut ::std::os::raw::c_int,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_status64(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut sqlite3_int64,
-        pHighwater: *mut sqlite3_int64,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_status(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        pCur: *mut ::std::os::raw::c_int,
-        pHiwtr: *mut ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_status(
-        arg1: *mut sqlite3_stmt,
-        op: ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_page {
-    pub pBuf: *mut ::std::os::raw::c_void,
-    pub pExtra: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_page() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_page>(),
-        8usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_page>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pBuf as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pBuf)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pExtra as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pExtra)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods2 {
-    pub iVersion: ::std::os::raw::c_int,
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            szExtra: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache_page,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-    pub xShrink: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods2() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods2>(),
-        52usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods2>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).iVersion as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).pArg as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xInit as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShutdown as *const _ as usize
-        },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCreate as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCachesize as *const _ as usize
-        },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xPagecount as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xFetch as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xUnpin as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xRekey as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xTruncate as *const _ as usize
-        },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xDestroy as *const _ as usize
-        },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShrink as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShrink)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods {
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods>(),
-        44usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).pArg as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xInit as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xShutdown as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCreate as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCachesize as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xPagecount as *const _ as usize
-        },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xFetch as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xUnpin as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xRekey as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xTruncate as *const _ as usize
-        },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xDestroy as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_backup {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_backup_init(
-        pDest: *mut sqlite3,
-        zDestName: *const ::std::os::raw::c_char,
-        pSource: *mut sqlite3,
-        zSourceName: *const ::std::os::raw::c_char,
-    ) -> *mut sqlite3_backup;
-}
-extern "C" {
-    pub fn sqlite3_backup_step(
-        p: *mut sqlite3_backup,
-        nPage: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_finish(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_remaining(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_pagecount(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_unlock_notify(
-        pBlocked: *mut sqlite3,
-        xNotify: ::std::option::Option<
-            unsafe extern "C" fn(
-                apArg: *mut *mut ::std::os::raw::c_void,
-                nArg: ::std::os::raw::c_int,
-            ),
-        >,
-        pNotifyArg: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stricmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strnicmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strglob(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strlike(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-        cEsc: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_log(
-        iErrCode: ::std::os::raw::c_int,
-        zFormat: *const ::std::os::raw::c_char,
-        ...
-    );
-}
-extern "C" {
-    pub fn sqlite3_wal_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_wal_autocheckpoint(
-        db: *mut sqlite3,
-        N: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint_v2(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        eMode: ::std::os::raw::c_int,
-        pnLog: *mut ::std::os::raw::c_int,
-        pnCkpt: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_on_conflict(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_nochange(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_collation(
-        arg1: *mut sqlite3_index_info,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus(
-        pStmt: *mut sqlite3_stmt,
-        idx: ::std::os::raw::c_int,
-        iScanStatusOp: ::std::os::raw::c_int,
-        pOut: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus_reset(arg1: *mut sqlite3_stmt);
-}
-extern "C" {
-    pub fn sqlite3_db_cacheflush(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_system_errno(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct sqlite3_snapshot {
-    pub hidden: [::std::os::raw::c_uchar; 48usize],
-}
-#[test]
-fn bindgen_test_layout_sqlite3_snapshot() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_snapshot>(),
-        48usize,
-        concat!("Size of: ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_snapshot>(),
-        1usize,
-        concat!("Alignment of ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_snapshot>())).hidden as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_snapshot),
-            "::",
-            stringify!(hidden)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_snapshot_get(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        ppSnapshot: *mut *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_open(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pSnapshot: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_free(arg1: *mut sqlite3_snapshot);
-}
-extern "C" {
-    pub fn sqlite3_snapshot_cmp(
-        p1: *mut sqlite3_snapshot,
-        p2: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_recover(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_serialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        piSize: *mut sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> *mut ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_deserialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pData: *mut ::std::os::raw::c_uchar,
-        szDb: sqlite3_int64,
-        szBuf: sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_rtree_dbl = f64;
-extern "C" {
-    pub fn sqlite3_rtree_geometry_callback(
-        db: *mut sqlite3,
-        zGeom: *const ::std::os::raw::c_char,
-        xGeom: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_rtree_geometry,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut sqlite3_rtree_dbl,
-                arg4: *mut ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_geometry {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_geometry() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_geometry>(),
-        20usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_geometry>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pContext as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).nParam as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).aParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pUser as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).xDelUser as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_rtree_query_callback(
-        db: *mut sqlite3,
-        zQueryFunc: *const ::std::os::raw::c_char,
-        xQueryFunc: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut sqlite3_rtree_query_info) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-        xDestructor: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_query_info {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub aCoord: *mut sqlite3_rtree_dbl,
-    pub anQueue: *mut ::std::os::raw::c_uint,
-    pub nCoord: ::std::os::raw::c_int,
-    pub iLevel: ::std::os::raw::c_int,
-    pub mxLevel: ::std::os::raw::c_int,
-    pub iRowid: sqlite3_int64,
-    pub rParentScore: sqlite3_rtree_dbl,
-    pub eParentWithin: ::std::os::raw::c_int,
-    pub eWithin: ::std::os::raw::c_int,
-    pub rScore: sqlite3_rtree_dbl,
-    pub apSqlParam: *mut *mut sqlite3_value,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_query_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_query_info>(),
-        76usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_query_info>(),
-        4usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pContext as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nParam as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pUser as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).xDelUser as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aCoord as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aCoord)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).anQueue as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(anQueue)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nCoord as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nCoord)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iLevel as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iLevel)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).mxLevel as *const _ as usize
-        },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(mxLevel)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iRowid as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iRowid)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rParentScore as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rParentScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eParentWithin as *const _ as usize
-        },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eParentWithin)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eWithin as *const _ as usize
-        },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eWithin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rScore as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).apSqlParam as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(apSqlParam)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Context {
-    _unused: [u8; 0],
-}
-pub type fts5_extension_function = ::std::option::Option<
-    unsafe extern "C" fn(
-        pApi: *const Fts5ExtensionApi,
-        pFts: *mut Fts5Context,
-        pCtx: *mut sqlite3_context,
-        nVal: ::std::os::raw::c_int,
-        apVal: *mut *mut sqlite3_value,
-    ),
->;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5PhraseIter {
-    pub a: *const ::std::os::raw::c_uchar,
-    pub b: *const ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_Fts5PhraseIter() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5PhraseIter>(),
-        8usize,
-        concat!("Size of: ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5PhraseIter>(),
-        4usize,
-        concat!("Alignment of ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).a as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(a)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).b as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(b)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5ExtensionApi {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xUserData: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xColumnCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xRowCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnRow: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnTotalSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            pCtx: *mut ::std::os::raw::c_void,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut ::std::os::raw::c_void,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *const ::std::os::raw::c_char,
-                    arg4: ::std::os::raw::c_int,
-                    arg5: ::std::os::raw::c_int,
-                    arg6: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInstCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnInst: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iIdx: ::std::os::raw::c_int,
-            piPhrase: *mut ::std::os::raw::c_int,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid:
-        ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Context) -> sqlite3_int64>,
-    pub xColumnText: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pz: *mut *const ::std::os::raw::c_char,
-            pn: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xQueryPhrase: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            pUserData: *mut ::std::os::raw::c_void,
-            arg2: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *const Fts5ExtensionApi,
-                    arg2: *mut Fts5Context,
-                    arg3: *mut ::std::os::raw::c_void,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pAux: *mut ::std::os::raw::c_void,
-            xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            bClear: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xPhraseFirst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-            arg4: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNext: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ),
-    >,
-    pub xPhraseFirstColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNextColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-        ),
-    >,
-}
-#[test]
-fn bindgen_test_layout_Fts5ExtensionApi() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5ExtensionApi>(),
-        80usize,
-        concat!("Size of: ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5ExtensionApi>(),
-        4usize,
-        concat!("Alignment of ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xUserData as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xUserData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnCount as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowCount as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowCount)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnTotalSize as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnTotalSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xTokenize as *const _ as usize },
-        20usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseCount as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseSize as *const _ as usize },
-        28usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInstCount as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInstCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInst as *const _ as usize },
-        36usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowid as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnText as *const _ as usize },
-        44usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnText)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnSize as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xQueryPhrase as *const _ as usize },
-        52usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xQueryPhrase)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xSetAuxdata as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xSetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xGetAuxdata as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xGetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirst as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNext as *const _ as usize },
-        68usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNext)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirstColumn as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirstColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNextColumn as *const _ as usize
-        },
-        76usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNextColumn)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Tokenizer {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_tokenizer {
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            azArg: *mut *const ::std::os::raw::c_char,
-            nArg: ::std::os::raw::c_int,
-            ppOut: *mut *mut Fts5Tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Tokenizer)>,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Tokenizer,
-            pCtx: *mut ::std::os::raw::c_void,
-            flags: ::std::os::raw::c_int,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    pCtx: *mut ::std::os::raw::c_void,
-                    tflags: ::std::os::raw::c_int,
-                    pToken: *const ::std::os::raw::c_char,
-                    nToken: ::std::os::raw::c_int,
-                    iStart: ::std::os::raw::c_int,
-                    iEnd: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_tokenizer() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_tokenizer>(),
-        12usize,
-        concat!("Size of: ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_tokenizer>(),
-        4usize,
-        concat!("Alignment of ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xCreate as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xDelete as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xTokenize as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_api {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreateTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFindTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            ppContext: *mut *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCreateFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            xFunction: fts5_extension_function,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_api() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_api>(),
-        16usize,
-        concat!("Size of: ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_api>(),
-        4usize,
-        concat!("Alignment of ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateTokenizer as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xFindTokenizer as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xFindTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateFunction as *const _ as usize },
-        12usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateFunction)
-        )
-    );
-}
diff --git a/android/x86_64/bindings.rs b/android/x86_64/bindings.rs
deleted file mode 100644
index 52e9a58..0000000
--- a/android/x86_64/bindings.rs
+++ /dev/null
@@ -1,5201 +0,0 @@
-/* automatically generated by rust-bindgen (unknown version) */
-
-pub const SQLITE_VERSION: &'static [u8; 7usize] = b"3.32.2\0";
-pub const SQLITE_VERSION_NUMBER: i32 = 3032002;
-pub const SQLITE_SOURCE_ID: &'static [u8; 85usize] =
-    b"2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c\0";
-pub const SQLITE_OK: i32 = 0;
-pub const SQLITE_ERROR: i32 = 1;
-pub const SQLITE_INTERNAL: i32 = 2;
-pub const SQLITE_PERM: i32 = 3;
-pub const SQLITE_ABORT: i32 = 4;
-pub const SQLITE_BUSY: i32 = 5;
-pub const SQLITE_LOCKED: i32 = 6;
-pub const SQLITE_NOMEM: i32 = 7;
-pub const SQLITE_READONLY: i32 = 8;
-pub const SQLITE_INTERRUPT: i32 = 9;
-pub const SQLITE_IOERR: i32 = 10;
-pub const SQLITE_CORRUPT: i32 = 11;
-pub const SQLITE_NOTFOUND: i32 = 12;
-pub const SQLITE_FULL: i32 = 13;
-pub const SQLITE_CANTOPEN: i32 = 14;
-pub const SQLITE_PROTOCOL: i32 = 15;
-pub const SQLITE_EMPTY: i32 = 16;
-pub const SQLITE_SCHEMA: i32 = 17;
-pub const SQLITE_TOOBIG: i32 = 18;
-pub const SQLITE_CONSTRAINT: i32 = 19;
-pub const SQLITE_MISMATCH: i32 = 20;
-pub const SQLITE_MISUSE: i32 = 21;
-pub const SQLITE_NOLFS: i32 = 22;
-pub const SQLITE_AUTH: i32 = 23;
-pub const SQLITE_FORMAT: i32 = 24;
-pub const SQLITE_RANGE: i32 = 25;
-pub const SQLITE_NOTADB: i32 = 26;
-pub const SQLITE_NOTICE: i32 = 27;
-pub const SQLITE_WARNING: i32 = 28;
-pub const SQLITE_ROW: i32 = 100;
-pub const SQLITE_DONE: i32 = 101;
-pub const SQLITE_ERROR_MISSING_COLLSEQ: i32 = 257;
-pub const SQLITE_ERROR_RETRY: i32 = 513;
-pub const SQLITE_ERROR_SNAPSHOT: i32 = 769;
-pub const SQLITE_IOERR_READ: i32 = 266;
-pub const SQLITE_IOERR_SHORT_READ: i32 = 522;
-pub const SQLITE_IOERR_WRITE: i32 = 778;
-pub const SQLITE_IOERR_FSYNC: i32 = 1034;
-pub const SQLITE_IOERR_DIR_FSYNC: i32 = 1290;
-pub const SQLITE_IOERR_TRUNCATE: i32 = 1546;
-pub const SQLITE_IOERR_FSTAT: i32 = 1802;
-pub const SQLITE_IOERR_UNLOCK: i32 = 2058;
-pub const SQLITE_IOERR_RDLOCK: i32 = 2314;
-pub const SQLITE_IOERR_DELETE: i32 = 2570;
-pub const SQLITE_IOERR_BLOCKED: i32 = 2826;
-pub const SQLITE_IOERR_NOMEM: i32 = 3082;
-pub const SQLITE_IOERR_ACCESS: i32 = 3338;
-pub const SQLITE_IOERR_CHECKRESERVEDLOCK: i32 = 3594;
-pub const SQLITE_IOERR_LOCK: i32 = 3850;
-pub const SQLITE_IOERR_CLOSE: i32 = 4106;
-pub const SQLITE_IOERR_DIR_CLOSE: i32 = 4362;
-pub const SQLITE_IOERR_SHMOPEN: i32 = 4618;
-pub const SQLITE_IOERR_SHMSIZE: i32 = 4874;
-pub const SQLITE_IOERR_SHMLOCK: i32 = 5130;
-pub const SQLITE_IOERR_SHMMAP: i32 = 5386;
-pub const SQLITE_IOERR_SEEK: i32 = 5642;
-pub const SQLITE_IOERR_DELETE_NOENT: i32 = 5898;
-pub const SQLITE_IOERR_MMAP: i32 = 6154;
-pub const SQLITE_IOERR_GETTEMPPATH: i32 = 6410;
-pub const SQLITE_IOERR_CONVPATH: i32 = 6666;
-pub const SQLITE_IOERR_VNODE: i32 = 6922;
-pub const SQLITE_IOERR_AUTH: i32 = 7178;
-pub const SQLITE_IOERR_BEGIN_ATOMIC: i32 = 7434;
-pub const SQLITE_IOERR_COMMIT_ATOMIC: i32 = 7690;
-pub const SQLITE_IOERR_ROLLBACK_ATOMIC: i32 = 7946;
-pub const SQLITE_IOERR_DATA: i32 = 8202;
-pub const SQLITE_LOCKED_SHAREDCACHE: i32 = 262;
-pub const SQLITE_LOCKED_VTAB: i32 = 518;
-pub const SQLITE_BUSY_RECOVERY: i32 = 261;
-pub const SQLITE_BUSY_SNAPSHOT: i32 = 517;
-pub const SQLITE_BUSY_TIMEOUT: i32 = 773;
-pub const SQLITE_CANTOPEN_NOTEMPDIR: i32 = 270;
-pub const SQLITE_CANTOPEN_ISDIR: i32 = 526;
-pub const SQLITE_CANTOPEN_FULLPATH: i32 = 782;
-pub const SQLITE_CANTOPEN_CONVPATH: i32 = 1038;
-pub const SQLITE_CANTOPEN_DIRTYWAL: i32 = 1294;
-pub const SQLITE_CANTOPEN_SYMLINK: i32 = 1550;
-pub const SQLITE_CORRUPT_VTAB: i32 = 267;
-pub const SQLITE_CORRUPT_SEQUENCE: i32 = 523;
-pub const SQLITE_CORRUPT_INDEX: i32 = 779;
-pub const SQLITE_READONLY_RECOVERY: i32 = 264;
-pub const SQLITE_READONLY_CANTLOCK: i32 = 520;
-pub const SQLITE_READONLY_ROLLBACK: i32 = 776;
-pub const SQLITE_READONLY_DBMOVED: i32 = 1032;
-pub const SQLITE_READONLY_CANTINIT: i32 = 1288;
-pub const SQLITE_READONLY_DIRECTORY: i32 = 1544;
-pub const SQLITE_ABORT_ROLLBACK: i32 = 516;
-pub const SQLITE_CONSTRAINT_CHECK: i32 = 275;
-pub const SQLITE_CONSTRAINT_COMMITHOOK: i32 = 531;
-pub const SQLITE_CONSTRAINT_FOREIGNKEY: i32 = 787;
-pub const SQLITE_CONSTRAINT_FUNCTION: i32 = 1043;
-pub const SQLITE_CONSTRAINT_NOTNULL: i32 = 1299;
-pub const SQLITE_CONSTRAINT_PRIMARYKEY: i32 = 1555;
-pub const SQLITE_CONSTRAINT_TRIGGER: i32 = 1811;
-pub const SQLITE_CONSTRAINT_UNIQUE: i32 = 2067;
-pub const SQLITE_CONSTRAINT_VTAB: i32 = 2323;
-pub const SQLITE_CONSTRAINT_ROWID: i32 = 2579;
-pub const SQLITE_CONSTRAINT_PINNED: i32 = 2835;
-pub const SQLITE_NOTICE_RECOVER_WAL: i32 = 283;
-pub const SQLITE_NOTICE_RECOVER_ROLLBACK: i32 = 539;
-pub const SQLITE_WARNING_AUTOINDEX: i32 = 284;
-pub const SQLITE_AUTH_USER: i32 = 279;
-pub const SQLITE_OK_LOAD_PERMANENTLY: i32 = 256;
-pub const SQLITE_OK_SYMLINK: i32 = 512;
-pub const SQLITE_OPEN_READONLY: i32 = 1;
-pub const SQLITE_OPEN_READWRITE: i32 = 2;
-pub const SQLITE_OPEN_CREATE: i32 = 4;
-pub const SQLITE_OPEN_DELETEONCLOSE: i32 = 8;
-pub const SQLITE_OPEN_EXCLUSIVE: i32 = 16;
-pub const SQLITE_OPEN_AUTOPROXY: i32 = 32;
-pub const SQLITE_OPEN_URI: i32 = 64;
-pub const SQLITE_OPEN_MEMORY: i32 = 128;
-pub const SQLITE_OPEN_MAIN_DB: i32 = 256;
-pub const SQLITE_OPEN_TEMP_DB: i32 = 512;
-pub const SQLITE_OPEN_TRANSIENT_DB: i32 = 1024;
-pub const SQLITE_OPEN_MAIN_JOURNAL: i32 = 2048;
-pub const SQLITE_OPEN_TEMP_JOURNAL: i32 = 4096;
-pub const SQLITE_OPEN_SUBJOURNAL: i32 = 8192;
-pub const SQLITE_OPEN_MASTER_JOURNAL: i32 = 16384;
-pub const SQLITE_OPEN_NOMUTEX: i32 = 32768;
-pub const SQLITE_OPEN_FULLMUTEX: i32 = 65536;
-pub const SQLITE_OPEN_SHAREDCACHE: i32 = 131072;
-pub const SQLITE_OPEN_PRIVATECACHE: i32 = 262144;
-pub const SQLITE_OPEN_WAL: i32 = 524288;
-pub const SQLITE_OPEN_NOFOLLOW: i32 = 16777216;
-pub const SQLITE_IOCAP_ATOMIC: i32 = 1;
-pub const SQLITE_IOCAP_ATOMIC512: i32 = 2;
-pub const SQLITE_IOCAP_ATOMIC1K: i32 = 4;
-pub const SQLITE_IOCAP_ATOMIC2K: i32 = 8;
-pub const SQLITE_IOCAP_ATOMIC4K: i32 = 16;
-pub const SQLITE_IOCAP_ATOMIC8K: i32 = 32;
-pub const SQLITE_IOCAP_ATOMIC16K: i32 = 64;
-pub const SQLITE_IOCAP_ATOMIC32K: i32 = 128;
-pub const SQLITE_IOCAP_ATOMIC64K: i32 = 256;
-pub const SQLITE_IOCAP_SAFE_APPEND: i32 = 512;
-pub const SQLITE_IOCAP_SEQUENTIAL: i32 = 1024;
-pub const SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN: i32 = 2048;
-pub const SQLITE_IOCAP_POWERSAFE_OVERWRITE: i32 = 4096;
-pub const SQLITE_IOCAP_IMMUTABLE: i32 = 8192;
-pub const SQLITE_IOCAP_BATCH_ATOMIC: i32 = 16384;
-pub const SQLITE_LOCK_NONE: i32 = 0;
-pub const SQLITE_LOCK_SHARED: i32 = 1;
-pub const SQLITE_LOCK_RESERVED: i32 = 2;
-pub const SQLITE_LOCK_PENDING: i32 = 3;
-pub const SQLITE_LOCK_EXCLUSIVE: i32 = 4;
-pub const SQLITE_SYNC_NORMAL: i32 = 2;
-pub const SQLITE_SYNC_FULL: i32 = 3;
-pub const SQLITE_SYNC_DATAONLY: i32 = 16;
-pub const SQLITE_FCNTL_LOCKSTATE: i32 = 1;
-pub const SQLITE_FCNTL_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_FCNTL_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_FCNTL_LAST_ERRNO: i32 = 4;
-pub const SQLITE_FCNTL_SIZE_HINT: i32 = 5;
-pub const SQLITE_FCNTL_CHUNK_SIZE: i32 = 6;
-pub const SQLITE_FCNTL_FILE_POINTER: i32 = 7;
-pub const SQLITE_FCNTL_SYNC_OMITTED: i32 = 8;
-pub const SQLITE_FCNTL_WIN32_AV_RETRY: i32 = 9;
-pub const SQLITE_FCNTL_PERSIST_WAL: i32 = 10;
-pub const SQLITE_FCNTL_OVERWRITE: i32 = 11;
-pub const SQLITE_FCNTL_VFSNAME: i32 = 12;
-pub const SQLITE_FCNTL_POWERSAFE_OVERWRITE: i32 = 13;
-pub const SQLITE_FCNTL_PRAGMA: i32 = 14;
-pub const SQLITE_FCNTL_BUSYHANDLER: i32 = 15;
-pub const SQLITE_FCNTL_TEMPFILENAME: i32 = 16;
-pub const SQLITE_FCNTL_MMAP_SIZE: i32 = 18;
-pub const SQLITE_FCNTL_TRACE: i32 = 19;
-pub const SQLITE_FCNTL_HAS_MOVED: i32 = 20;
-pub const SQLITE_FCNTL_SYNC: i32 = 21;
-pub const SQLITE_FCNTL_COMMIT_PHASETWO: i32 = 22;
-pub const SQLITE_FCNTL_WIN32_SET_HANDLE: i32 = 23;
-pub const SQLITE_FCNTL_WAL_BLOCK: i32 = 24;
-pub const SQLITE_FCNTL_ZIPVFS: i32 = 25;
-pub const SQLITE_FCNTL_RBU: i32 = 26;
-pub const SQLITE_FCNTL_VFS_POINTER: i32 = 27;
-pub const SQLITE_FCNTL_JOURNAL_POINTER: i32 = 28;
-pub const SQLITE_FCNTL_WIN32_GET_HANDLE: i32 = 29;
-pub const SQLITE_FCNTL_PDB: i32 = 30;
-pub const SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: i32 = 31;
-pub const SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: i32 = 32;
-pub const SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: i32 = 33;
-pub const SQLITE_FCNTL_LOCK_TIMEOUT: i32 = 34;
-pub const SQLITE_FCNTL_DATA_VERSION: i32 = 35;
-pub const SQLITE_FCNTL_SIZE_LIMIT: i32 = 36;
-pub const SQLITE_FCNTL_CKPT_DONE: i32 = 37;
-pub const SQLITE_FCNTL_RESERVE_BYTES: i32 = 38;
-pub const SQLITE_FCNTL_CKPT_START: i32 = 39;
-pub const SQLITE_GET_LOCKPROXYFILE: i32 = 2;
-pub const SQLITE_SET_LOCKPROXYFILE: i32 = 3;
-pub const SQLITE_LAST_ERRNO: i32 = 4;
-pub const SQLITE_ACCESS_EXISTS: i32 = 0;
-pub const SQLITE_ACCESS_READWRITE: i32 = 1;
-pub const SQLITE_ACCESS_READ: i32 = 2;
-pub const SQLITE_SHM_UNLOCK: i32 = 1;
-pub const SQLITE_SHM_LOCK: i32 = 2;
-pub const SQLITE_SHM_SHARED: i32 = 4;
-pub const SQLITE_SHM_EXCLUSIVE: i32 = 8;
-pub const SQLITE_SHM_NLOCK: i32 = 8;
-pub const SQLITE_CONFIG_SINGLETHREAD: i32 = 1;
-pub const SQLITE_CONFIG_MULTITHREAD: i32 = 2;
-pub const SQLITE_CONFIG_SERIALIZED: i32 = 3;
-pub const SQLITE_CONFIG_MALLOC: i32 = 4;
-pub const SQLITE_CONFIG_GETMALLOC: i32 = 5;
-pub const SQLITE_CONFIG_SCRATCH: i32 = 6;
-pub const SQLITE_CONFIG_PAGECACHE: i32 = 7;
-pub const SQLITE_CONFIG_HEAP: i32 = 8;
-pub const SQLITE_CONFIG_MEMSTATUS: i32 = 9;
-pub const SQLITE_CONFIG_MUTEX: i32 = 10;
-pub const SQLITE_CONFIG_GETMUTEX: i32 = 11;
-pub const SQLITE_CONFIG_LOOKASIDE: i32 = 13;
-pub const SQLITE_CONFIG_PCACHE: i32 = 14;
-pub const SQLITE_CONFIG_GETPCACHE: i32 = 15;
-pub const SQLITE_CONFIG_LOG: i32 = 16;
-pub const SQLITE_CONFIG_URI: i32 = 17;
-pub const SQLITE_CONFIG_PCACHE2: i32 = 18;
-pub const SQLITE_CONFIG_GETPCACHE2: i32 = 19;
-pub const SQLITE_CONFIG_COVERING_INDEX_SCAN: i32 = 20;
-pub const SQLITE_CONFIG_SQLLOG: i32 = 21;
-pub const SQLITE_CONFIG_MMAP_SIZE: i32 = 22;
-pub const SQLITE_CONFIG_WIN32_HEAPSIZE: i32 = 23;
-pub const SQLITE_CONFIG_PCACHE_HDRSZ: i32 = 24;
-pub const SQLITE_CONFIG_PMASZ: i32 = 25;
-pub const SQLITE_CONFIG_STMTJRNL_SPILL: i32 = 26;
-pub const SQLITE_CONFIG_SMALL_MALLOC: i32 = 27;
-pub const SQLITE_CONFIG_SORTERREF_SIZE: i32 = 28;
-pub const SQLITE_CONFIG_MEMDB_MAXSIZE: i32 = 29;
-pub const SQLITE_DBCONFIG_MAINDBNAME: i32 = 1000;
-pub const SQLITE_DBCONFIG_LOOKASIDE: i32 = 1001;
-pub const SQLITE_DBCONFIG_ENABLE_FKEY: i32 = 1002;
-pub const SQLITE_DBCONFIG_ENABLE_TRIGGER: i32 = 1003;
-pub const SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: i32 = 1004;
-pub const SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: i32 = 1005;
-pub const SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: i32 = 1006;
-pub const SQLITE_DBCONFIG_ENABLE_QPSG: i32 = 1007;
-pub const SQLITE_DBCONFIG_TRIGGER_EQP: i32 = 1008;
-pub const SQLITE_DBCONFIG_RESET_DATABASE: i32 = 1009;
-pub const SQLITE_DBCONFIG_DEFENSIVE: i32 = 1010;
-pub const SQLITE_DBCONFIG_WRITABLE_SCHEMA: i32 = 1011;
-pub const SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: i32 = 1012;
-pub const SQLITE_DBCONFIG_DQS_DML: i32 = 1013;
-pub const SQLITE_DBCONFIG_DQS_DDL: i32 = 1014;
-pub const SQLITE_DBCONFIG_ENABLE_VIEW: i32 = 1015;
-pub const SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: i32 = 1016;
-pub const SQLITE_DBCONFIG_TRUSTED_SCHEMA: i32 = 1017;
-pub const SQLITE_DBCONFIG_MAX: i32 = 1017;
-pub const SQLITE_DENY: i32 = 1;
-pub const SQLITE_IGNORE: i32 = 2;
-pub const SQLITE_CREATE_INDEX: i32 = 1;
-pub const SQLITE_CREATE_TABLE: i32 = 2;
-pub const SQLITE_CREATE_TEMP_INDEX: i32 = 3;
-pub const SQLITE_CREATE_TEMP_TABLE: i32 = 4;
-pub const SQLITE_CREATE_TEMP_TRIGGER: i32 = 5;
-pub const SQLITE_CREATE_TEMP_VIEW: i32 = 6;
-pub const SQLITE_CREATE_TRIGGER: i32 = 7;
-pub const SQLITE_CREATE_VIEW: i32 = 8;
-pub const SQLITE_DELETE: i32 = 9;
-pub const SQLITE_DROP_INDEX: i32 = 10;
-pub const SQLITE_DROP_TABLE: i32 = 11;
-pub const SQLITE_DROP_TEMP_INDEX: i32 = 12;
-pub const SQLITE_DROP_TEMP_TABLE: i32 = 13;
-pub const SQLITE_DROP_TEMP_TRIGGER: i32 = 14;
-pub const SQLITE_DROP_TEMP_VIEW: i32 = 15;
-pub const SQLITE_DROP_TRIGGER: i32 = 16;
-pub const SQLITE_DROP_VIEW: i32 = 17;
-pub const SQLITE_INSERT: i32 = 18;
-pub const SQLITE_PRAGMA: i32 = 19;
-pub const SQLITE_READ: i32 = 20;
-pub const SQLITE_SELECT: i32 = 21;
-pub const SQLITE_TRANSACTION: i32 = 22;
-pub const SQLITE_UPDATE: i32 = 23;
-pub const SQLITE_ATTACH: i32 = 24;
-pub const SQLITE_DETACH: i32 = 25;
-pub const SQLITE_ALTER_TABLE: i32 = 26;
-pub const SQLITE_REINDEX: i32 = 27;
-pub const SQLITE_ANALYZE: i32 = 28;
-pub const SQLITE_CREATE_VTABLE: i32 = 29;
-pub const SQLITE_DROP_VTABLE: i32 = 30;
-pub const SQLITE_FUNCTION: i32 = 31;
-pub const SQLITE_SAVEPOINT: i32 = 32;
-pub const SQLITE_COPY: i32 = 0;
-pub const SQLITE_RECURSIVE: i32 = 33;
-pub const SQLITE_TRACE_STMT: i32 = 1;
-pub const SQLITE_TRACE_PROFILE: i32 = 2;
-pub const SQLITE_TRACE_ROW: i32 = 4;
-pub const SQLITE_TRACE_CLOSE: i32 = 8;
-pub const SQLITE_LIMIT_LENGTH: i32 = 0;
-pub const SQLITE_LIMIT_SQL_LENGTH: i32 = 1;
-pub const SQLITE_LIMIT_COLUMN: i32 = 2;
-pub const SQLITE_LIMIT_EXPR_DEPTH: i32 = 3;
-pub const SQLITE_LIMIT_COMPOUND_SELECT: i32 = 4;
-pub const SQLITE_LIMIT_VDBE_OP: i32 = 5;
-pub const SQLITE_LIMIT_FUNCTION_ARG: i32 = 6;
-pub const SQLITE_LIMIT_ATTACHED: i32 = 7;
-pub const SQLITE_LIMIT_LIKE_PATTERN_LENGTH: i32 = 8;
-pub const SQLITE_LIMIT_VARIABLE_NUMBER: i32 = 9;
-pub const SQLITE_LIMIT_TRIGGER_DEPTH: i32 = 10;
-pub const SQLITE_LIMIT_WORKER_THREADS: i32 = 11;
-pub const SQLITE_PREPARE_PERSISTENT: i32 = 1;
-pub const SQLITE_PREPARE_NORMALIZE: i32 = 2;
-pub const SQLITE_PREPARE_NO_VTAB: i32 = 4;
-pub const SQLITE_INTEGER: i32 = 1;
-pub const SQLITE_FLOAT: i32 = 2;
-pub const SQLITE_BLOB: i32 = 4;
-pub const SQLITE_NULL: i32 = 5;
-pub const SQLITE_TEXT: i32 = 3;
-pub const SQLITE3_TEXT: i32 = 3;
-pub const SQLITE_UTF8: i32 = 1;
-pub const SQLITE_UTF16LE: i32 = 2;
-pub const SQLITE_UTF16BE: i32 = 3;
-pub const SQLITE_UTF16: i32 = 4;
-pub const SQLITE_ANY: i32 = 5;
-pub const SQLITE_UTF16_ALIGNED: i32 = 8;
-pub const SQLITE_DETERMINISTIC: i32 = 2048;
-pub const SQLITE_DIRECTONLY: i32 = 524288;
-pub const SQLITE_SUBTYPE: i32 = 1048576;
-pub const SQLITE_INNOCUOUS: i32 = 2097152;
-pub const SQLITE_WIN32_DATA_DIRECTORY_TYPE: i32 = 1;
-pub const SQLITE_WIN32_TEMP_DIRECTORY_TYPE: i32 = 2;
-pub const SQLITE_INDEX_SCAN_UNIQUE: i32 = 1;
-pub const SQLITE_INDEX_CONSTRAINT_EQ: i32 = 2;
-pub const SQLITE_INDEX_CONSTRAINT_GT: i32 = 4;
-pub const SQLITE_INDEX_CONSTRAINT_LE: i32 = 8;
-pub const SQLITE_INDEX_CONSTRAINT_LT: i32 = 16;
-pub const SQLITE_INDEX_CONSTRAINT_GE: i32 = 32;
-pub const SQLITE_INDEX_CONSTRAINT_MATCH: i32 = 64;
-pub const SQLITE_INDEX_CONSTRAINT_LIKE: i32 = 65;
-pub const SQLITE_INDEX_CONSTRAINT_GLOB: i32 = 66;
-pub const SQLITE_INDEX_CONSTRAINT_REGEXP: i32 = 67;
-pub const SQLITE_INDEX_CONSTRAINT_NE: i32 = 68;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOT: i32 = 69;
-pub const SQLITE_INDEX_CONSTRAINT_ISNOTNULL: i32 = 70;
-pub const SQLITE_INDEX_CONSTRAINT_ISNULL: i32 = 71;
-pub const SQLITE_INDEX_CONSTRAINT_IS: i32 = 72;
-pub const SQLITE_INDEX_CONSTRAINT_FUNCTION: i32 = 150;
-pub const SQLITE_MUTEX_FAST: i32 = 0;
-pub const SQLITE_MUTEX_RECURSIVE: i32 = 1;
-pub const SQLITE_MUTEX_STATIC_MASTER: i32 = 2;
-pub const SQLITE_MUTEX_STATIC_MEM: i32 = 3;
-pub const SQLITE_MUTEX_STATIC_MEM2: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_OPEN: i32 = 4;
-pub const SQLITE_MUTEX_STATIC_PRNG: i32 = 5;
-pub const SQLITE_MUTEX_STATIC_LRU: i32 = 6;
-pub const SQLITE_MUTEX_STATIC_LRU2: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_PMEM: i32 = 7;
-pub const SQLITE_MUTEX_STATIC_APP1: i32 = 8;
-pub const SQLITE_MUTEX_STATIC_APP2: i32 = 9;
-pub const SQLITE_MUTEX_STATIC_APP3: i32 = 10;
-pub const SQLITE_MUTEX_STATIC_VFS1: i32 = 11;
-pub const SQLITE_MUTEX_STATIC_VFS2: i32 = 12;
-pub const SQLITE_MUTEX_STATIC_VFS3: i32 = 13;
-pub const SQLITE_TESTCTRL_FIRST: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_SAVE: i32 = 5;
-pub const SQLITE_TESTCTRL_PRNG_RESTORE: i32 = 6;
-pub const SQLITE_TESTCTRL_PRNG_RESET: i32 = 7;
-pub const SQLITE_TESTCTRL_BITVEC_TEST: i32 = 8;
-pub const SQLITE_TESTCTRL_FAULT_INSTALL: i32 = 9;
-pub const SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: i32 = 10;
-pub const SQLITE_TESTCTRL_PENDING_BYTE: i32 = 11;
-pub const SQLITE_TESTCTRL_ASSERT: i32 = 12;
-pub const SQLITE_TESTCTRL_ALWAYS: i32 = 13;
-pub const SQLITE_TESTCTRL_RESERVE: i32 = 14;
-pub const SQLITE_TESTCTRL_OPTIMIZATIONS: i32 = 15;
-pub const SQLITE_TESTCTRL_ISKEYWORD: i32 = 16;
-pub const SQLITE_TESTCTRL_SCRATCHMALLOC: i32 = 17;
-pub const SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: i32 = 17;
-pub const SQLITE_TESTCTRL_LOCALTIME_FAULT: i32 = 18;
-pub const SQLITE_TESTCTRL_EXPLAIN_STMT: i32 = 19;
-pub const SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD: i32 = 19;
-pub const SQLITE_TESTCTRL_NEVER_CORRUPT: i32 = 20;
-pub const SQLITE_TESTCTRL_VDBE_COVERAGE: i32 = 21;
-pub const SQLITE_TESTCTRL_BYTEORDER: i32 = 22;
-pub const SQLITE_TESTCTRL_ISINIT: i32 = 23;
-pub const SQLITE_TESTCTRL_SORTER_MMAP: i32 = 24;
-pub const SQLITE_TESTCTRL_IMPOSTER: i32 = 25;
-pub const SQLITE_TESTCTRL_PARSER_COVERAGE: i32 = 26;
-pub const SQLITE_TESTCTRL_RESULT_INTREAL: i32 = 27;
-pub const SQLITE_TESTCTRL_PRNG_SEED: i32 = 28;
-pub const SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: i32 = 29;
-pub const SQLITE_TESTCTRL_LAST: i32 = 29;
-pub const SQLITE_STATUS_MEMORY_USED: i32 = 0;
-pub const SQLITE_STATUS_PAGECACHE_USED: i32 = 1;
-pub const SQLITE_STATUS_PAGECACHE_OVERFLOW: i32 = 2;
-pub const SQLITE_STATUS_SCRATCH_USED: i32 = 3;
-pub const SQLITE_STATUS_SCRATCH_OVERFLOW: i32 = 4;
-pub const SQLITE_STATUS_MALLOC_SIZE: i32 = 5;
-pub const SQLITE_STATUS_PARSER_STACK: i32 = 6;
-pub const SQLITE_STATUS_PAGECACHE_SIZE: i32 = 7;
-pub const SQLITE_STATUS_SCRATCH_SIZE: i32 = 8;
-pub const SQLITE_STATUS_MALLOC_COUNT: i32 = 9;
-pub const SQLITE_DBSTATUS_LOOKASIDE_USED: i32 = 0;
-pub const SQLITE_DBSTATUS_CACHE_USED: i32 = 1;
-pub const SQLITE_DBSTATUS_SCHEMA_USED: i32 = 2;
-pub const SQLITE_DBSTATUS_STMT_USED: i32 = 3;
-pub const SQLITE_DBSTATUS_LOOKASIDE_HIT: i32 = 4;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: i32 = 5;
-pub const SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: i32 = 6;
-pub const SQLITE_DBSTATUS_CACHE_HIT: i32 = 7;
-pub const SQLITE_DBSTATUS_CACHE_MISS: i32 = 8;
-pub const SQLITE_DBSTATUS_CACHE_WRITE: i32 = 9;
-pub const SQLITE_DBSTATUS_DEFERRED_FKS: i32 = 10;
-pub const SQLITE_DBSTATUS_CACHE_USED_SHARED: i32 = 11;
-pub const SQLITE_DBSTATUS_CACHE_SPILL: i32 = 12;
-pub const SQLITE_DBSTATUS_MAX: i32 = 12;
-pub const SQLITE_STMTSTATUS_FULLSCAN_STEP: i32 = 1;
-pub const SQLITE_STMTSTATUS_SORT: i32 = 2;
-pub const SQLITE_STMTSTATUS_AUTOINDEX: i32 = 3;
-pub const SQLITE_STMTSTATUS_VM_STEP: i32 = 4;
-pub const SQLITE_STMTSTATUS_REPREPARE: i32 = 5;
-pub const SQLITE_STMTSTATUS_RUN: i32 = 6;
-pub const SQLITE_STMTSTATUS_MEMUSED: i32 = 99;
-pub const SQLITE_CHECKPOINT_PASSIVE: i32 = 0;
-pub const SQLITE_CHECKPOINT_FULL: i32 = 1;
-pub const SQLITE_CHECKPOINT_RESTART: i32 = 2;
-pub const SQLITE_CHECKPOINT_TRUNCATE: i32 = 3;
-pub const SQLITE_VTAB_CONSTRAINT_SUPPORT: i32 = 1;
-pub const SQLITE_VTAB_INNOCUOUS: i32 = 2;
-pub const SQLITE_VTAB_DIRECTONLY: i32 = 3;
-pub const SQLITE_ROLLBACK: i32 = 1;
-pub const SQLITE_FAIL: i32 = 3;
-pub const SQLITE_REPLACE: i32 = 5;
-pub const SQLITE_SCANSTAT_NLOOP: i32 = 0;
-pub const SQLITE_SCANSTAT_NVISIT: i32 = 1;
-pub const SQLITE_SCANSTAT_EST: i32 = 2;
-pub const SQLITE_SCANSTAT_NAME: i32 = 3;
-pub const SQLITE_SCANSTAT_EXPLAIN: i32 = 4;
-pub const SQLITE_SCANSTAT_SELECTID: i32 = 5;
-pub const SQLITE_SERIALIZE_NOCOPY: i32 = 1;
-pub const SQLITE_DESERIALIZE_FREEONCLOSE: i32 = 1;
-pub const SQLITE_DESERIALIZE_RESIZEABLE: i32 = 2;
-pub const SQLITE_DESERIALIZE_READONLY: i32 = 4;
-pub const NOT_WITHIN: i32 = 0;
-pub const PARTLY_WITHIN: i32 = 1;
-pub const FULLY_WITHIN: i32 = 2;
-pub const FTS5_TOKENIZE_QUERY: i32 = 1;
-pub const FTS5_TOKENIZE_PREFIX: i32 = 2;
-pub const FTS5_TOKENIZE_DOCUMENT: i32 = 4;
-pub const FTS5_TOKENIZE_AUX: i32 = 8;
-pub const FTS5_TOKEN_COLOCATED: i32 = 1;
-extern "C" {
-    pub static mut sqlite3_version: [::std::os::raw::c_char; 0usize];
-}
-extern "C" {
-    pub fn sqlite3_libversion() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_sourceid() -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_libversion_number() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_threadsafe() -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3 {
-    _unused: [u8; 0],
-}
-pub type sqlite_int64 = ::std::os::raw::c_longlong;
-pub type sqlite_uint64 = ::std::os::raw::c_ulonglong;
-pub type sqlite3_int64 = sqlite_int64;
-pub type sqlite3_uint64 = sqlite_uint64;
-extern "C" {
-    pub fn sqlite3_close(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_close_v2(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_callback = ::std::option::Option<
-    unsafe extern "C" fn(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut *mut ::std::os::raw::c_char,
-        arg4: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int,
->;
-extern "C" {
-    pub fn sqlite3_exec(
-        arg1: *mut sqlite3,
-        sql: *const ::std::os::raw::c_char,
-        callback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut ::std::os::raw::c_char,
-                arg4: *mut *mut ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        errmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_file {
-    pub pMethods: *const sqlite3_io_methods,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_file() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_file>(),
-        8usize,
-        concat!("Size of: ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_file>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_file))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_file>())).pMethods as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_file),
-            "::",
-            stringify!(pMethods)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_io_methods {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xRead: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *mut ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xWrite: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: *const ::std::os::raw::c_void,
-            iAmt: ::std::os::raw::c_int,
-            iOfst: sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file, size: sqlite3_int64) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pSize: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnlock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            arg2: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCheckReservedLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFileControl: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            op: ::std::os::raw::c_int,
-            pArg: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSectorSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xDeviceCharacteristics: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::std::os::raw::c_int,
-    >,
-    pub xShmMap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iPg: ::std::os::raw::c_int,
-            pgsz: ::std::os::raw::c_int,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmLock: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            offset: ::std::os::raw::c_int,
-            n: ::std::os::raw::c_int,
-            flags: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShmBarrier: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_file)>,
-    pub xShmUnmap: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            deleteFlag: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            iAmt: ::std::os::raw::c_int,
-            pp: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUnfetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_file,
-            iOfst: sqlite3_int64,
-            p: *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_io_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_io_methods>(),
-        152usize,
-        concat!("Size of: ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_io_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_io_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xClose as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xRead as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xRead)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xWrite as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xWrite)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xTruncate as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSync as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileSize as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xLock as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnlock as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnlock)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xCheckReservedLock as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xCheckReservedLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFileControl as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFileControl)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xSectorSize as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xSectorSize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_io_methods>())).xDeviceCharacteristics as *const _
-                as usize
-        },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xDeviceCharacteristics)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmMap as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmMap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmLock as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmLock)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmBarrier as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmBarrier)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xShmUnmap as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xShmUnmap)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xFetch as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_io_methods>())).xUnfetch as *const _ as usize },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_io_methods),
-            "::",
-            stringify!(xUnfetch)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_api_routines {
-    _unused: [u8; 0],
-}
-pub type sqlite3_syscall_ptr = ::std::option::Option<unsafe extern "C" fn()>;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vfs {
-    pub iVersion: ::std::os::raw::c_int,
-    pub szOsFile: ::std::os::raw::c_int,
-    pub mxPathname: ::std::os::raw::c_int,
-    pub pNext: *mut sqlite3_vfs,
-    pub zName: *const ::std::os::raw::c_char,
-    pub pAppData: *mut ::std::os::raw::c_void,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: *mut sqlite3_file,
-            flags: ::std::os::raw::c_int,
-            pOutFlags: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            syncDir: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xAccess: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            flags: ::std::os::raw::c_int,
-            pResOut: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFullPathname: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            nOut: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDlOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zFilename: *const ::std::os::raw::c_char,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xDlError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zErrMsg: *mut ::std::os::raw::c_char,
-        ),
-    >,
-    pub xDlSym: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut ::std::os::raw::c_void,
-            zSymbol: *const ::std::os::raw::c_char,
-        ) -> ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_vfs,
-                arg2: *mut ::std::os::raw::c_void,
-                zSymbol: *const ::std::os::raw::c_char,
-            ),
-        >,
-    >,
-    pub xDlClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut ::std::os::raw::c_void),
-    >,
-    pub xRandomness: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            nByte: ::std::os::raw::c_int,
-            zOut: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSleep: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            microseconds: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTime: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut f64) -> ::std::os::raw::c_int,
-    >,
-    pub xGetLastError: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCurrentTimeInt64: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            arg2: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-            arg2: sqlite3_syscall_ptr,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> sqlite3_syscall_ptr,
-    >,
-    pub xNextSystemCall: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vfs,
-            zName: *const ::std::os::raw::c_char,
-        ) -> *const ::std::os::raw::c_char,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vfs() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vfs>(),
-        168usize,
-        concat!("Size of: ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vfs>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_vfs))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).szOsFile as *const _ as usize },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(szOsFile)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).mxPathname as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(mxPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pNext as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).zName as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(zName)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).pAppData as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xOpen as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDelete as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xAccess as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xAccess)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xFullPathname as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xFullPathname)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlOpen as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlError as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlSym as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlSym)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xDlClose as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xDlClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xRandomness as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xRandomness)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSleep as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSleep)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTime as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTime)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetLastError as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetLastError)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xCurrentTimeInt64 as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xCurrentTimeInt64)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xSetSystemCall as *const _ as usize },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xSetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xGetSystemCall as *const _ as usize },
-        152usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xGetSystemCall)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vfs>())).xNextSystemCall as *const _ as usize },
-        160usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vfs),
-            "::",
-            stringify!(xNextSystemCall)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_initialize() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_shutdown() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_init() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_os_end() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_config(arg1: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mem_methods {
-    pub xMalloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xRealloc: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            arg2: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xSize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xRoundup: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int,
-    >,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub pAppData: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mem_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mem_methods>(),
-        64usize,
-        concat!("Size of: ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mem_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_mem_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xMalloc as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xMalloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xFree as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xFree)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRealloc as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRealloc)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xSize as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xRoundup as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xRoundup)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xInit as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).xShutdown as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mem_methods>())).pAppData as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mem_methods),
-            "::",
-            stringify!(pAppData)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_extended_result_codes(
-        arg1: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_last_insert_rowid(arg1: *mut sqlite3) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_set_last_insert_rowid(arg1: *mut sqlite3, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_total_changes(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_interrupt(arg1: *mut sqlite3);
-}
-extern "C" {
-    pub fn sqlite3_complete(sql: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_complete16(sql: *const ::std::os::raw::c_void) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_busy_timeout(
-        arg1: *mut sqlite3,
-        ms: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_table(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        pazResult: *mut *mut *mut ::std::os::raw::c_char,
-        pnRow: *mut ::std::os::raw::c_int,
-        pnColumn: *mut ::std::os::raw::c_int,
-        pzErrmsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_free_table(result: *mut *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_mprintf(arg1: *const ::std::os::raw::c_char, ...)
-        -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_snprintf(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_char,
-        arg3: *const ::std::os::raw::c_char,
-        ...
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_malloc(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_malloc64(arg1: sqlite3_uint64) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_realloc64(
-        arg1: *mut ::std::os::raw::c_void,
-        arg2: sqlite3_uint64,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_free(arg1: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_msize(arg1: *mut ::std::os::raw::c_void) -> sqlite3_uint64;
-}
-extern "C" {
-    pub fn sqlite3_memory_used() -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_memory_highwater(resetFlag: ::std::os::raw::c_int) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_randomness(N: ::std::os::raw::c_int, P: *mut ::std::os::raw::c_void);
-}
-extern "C" {
-    pub fn sqlite3_set_authorizer(
-        arg1: *mut sqlite3,
-        xAuth: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: *const ::std::os::raw::c_char,
-                arg6: *const ::std::os::raw::c_char,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pUserData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_trace(
-        arg1: *mut sqlite3,
-        xTrace: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_profile(
-        arg1: *mut sqlite3,
-        xProfile: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *const ::std::os::raw::c_char,
-                arg3: sqlite3_uint64,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_trace_v2(
-        arg1: *mut sqlite3,
-        uMask: ::std::os::raw::c_uint,
-        xCallback: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: ::std::os::raw::c_uint,
-                arg2: *mut ::std::os::raw::c_void,
-                arg3: *mut ::std::os::raw::c_void,
-                arg4: *mut ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pCtx: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_progress_handler(
-        arg1: *mut sqlite3,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg4: *mut ::std::os::raw::c_void,
-    );
-}
-extern "C" {
-    pub fn sqlite3_open(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open16(
-        filename: *const ::std::os::raw::c_void,
-        ppDb: *mut *mut sqlite3,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_open_v2(
-        filename: *const ::std::os::raw::c_char,
-        ppDb: *mut *mut sqlite3,
-        flags: ::std::os::raw::c_int,
-        zVfs: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_parameter(
-        zFilename: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_uri_boolean(
-        zFile: *const ::std::os::raw::c_char,
-        zParam: *const ::std::os::raw::c_char,
-        bDefault: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_uri_int64(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_int64,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_uri_key(
-        zFilename: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_database(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_journal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_filename_wal(
-        arg1: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_database_file_object(arg1: *const ::std::os::raw::c_char) -> *mut sqlite3_file;
-}
-extern "C" {
-    pub fn sqlite3_create_filename(
-        zDatabase: *const ::std::os::raw::c_char,
-        zJournal: *const ::std::os::raw::c_char,
-        zWal: *const ::std::os::raw::c_char,
-        nParam: ::std::os::raw::c_int,
-        azParam: *mut *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_free_filename(arg1: *mut ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_extended_errcode(db: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_errmsg(arg1: *mut sqlite3) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_errmsg16(arg1: *mut sqlite3) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_errstr(arg1: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_stmt {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_limit(
-        arg1: *mut sqlite3,
-        id: ::std::os::raw::c_int,
-        newVal: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_char,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v2(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_prepare16_v3(
-        db: *mut sqlite3,
-        zSql: *const ::std::os::raw::c_void,
-        nByte: ::std::os::raw::c_int,
-        prepFlags: ::std::os::raw::c_uint,
-        ppStmt: *mut *mut sqlite3_stmt,
-        pzTail: *mut *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_expanded_sql(pStmt: *mut sqlite3_stmt) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_normalized_sql(pStmt: *mut sqlite3_stmt) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_readonly(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_isexplain(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_busy(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_value {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_context {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_bind_blob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_blob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_double(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: f64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_int64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_null(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_void,
-        arg4: ::std::os::raw::c_int,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_text64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: sqlite3_uint64,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_value(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *const sqlite3_value,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_pointer(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: *mut ::std::os::raw::c_void,
-        arg4: *const ::std::os::raw::c_char,
-        arg5: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        n: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_zeroblob64(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-        arg3: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_count(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_bind_parameter_index(
-        arg1: *mut sqlite3_stmt,
-        zName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_clear_bindings(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_name(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_name16(
-        arg1: *mut sqlite3_stmt,
-        N: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_database_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_table_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_origin_name16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_column_decltype16(
-        arg1: *mut sqlite3_stmt,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_step(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_data_count(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_blob(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_double(arg1: *mut sqlite3_stmt, iCol: ::std::os::raw::c_int) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_column_int(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_int64(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_column_text(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_column_text16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_column_value(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_bytes16(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_column_type(
-        arg1: *mut sqlite3_stmt,
-        iCol: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_finalize(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset(pStmt: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function16(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_void,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_function_v2(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xFunc: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_window_function(
-        db: *mut sqlite3,
-        zFunctionName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-        eTextRep: ::std::os::raw::c_int,
-        pApp: *mut ::std::os::raw::c_void,
-        xStep: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xFinal: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xValue: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_context)>,
-        xInverse: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_context,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut *mut sqlite3_value,
-            ),
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_aggregate_count(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_expired(arg1: *mut sqlite3_stmt) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_transfer_bindings(
-        arg1: *mut sqlite3_stmt,
-        arg2: *mut sqlite3_stmt,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_global_recover() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_thread_cleanup();
-}
-extern "C" {
-    pub fn sqlite3_memory_alarm(
-        arg1: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: sqlite3_int64,
-                arg3: ::std::os::raw::c_int,
-            ),
-        >,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_blob(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_double(arg1: *mut sqlite3_value) -> f64;
-}
-extern "C" {
-    pub fn sqlite3_value_int(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_int64(arg1: *mut sqlite3_value) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_value_pointer(
-        arg1: *mut sqlite3_value,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_value_text16(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16le(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_text16be(arg1: *mut sqlite3_value) -> *const ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_bytes16(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_numeric_type(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_nochange(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_frombind(arg1: *mut sqlite3_value) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_value_subtype(arg1: *mut sqlite3_value) -> ::std::os::raw::c_uint;
-}
-extern "C" {
-    pub fn sqlite3_value_dup(arg1: *const sqlite3_value) -> *mut sqlite3_value;
-}
-extern "C" {
-    pub fn sqlite3_value_free(arg1: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_aggregate_context(
-        arg1: *mut sqlite3_context,
-        nBytes: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_user_data(arg1: *mut sqlite3_context) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_context_db_handle(arg1: *mut sqlite3_context) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_get_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_set_auxdata(
-        arg1: *mut sqlite3_context,
-        N: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-pub type sqlite3_destructor_type =
-    ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>;
-extern "C" {
-    pub fn sqlite3_result_blob(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_blob64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_double(arg1: *mut sqlite3_context, arg2: f64);
-}
-extern "C" {
-    pub fn sqlite3_result_error(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_error_toobig(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_nomem(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_error_code(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_int64(arg1: *mut sqlite3_context, arg2: sqlite3_int64);
-}
-extern "C" {
-    pub fn sqlite3_result_null(arg1: *mut sqlite3_context);
-}
-extern "C" {
-    pub fn sqlite3_result_text(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text64(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: sqlite3_uint64,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        encoding: ::std::os::raw::c_uchar,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16le(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_text16be(
-        arg1: *mut sqlite3_context,
-        arg2: *const ::std::os::raw::c_void,
-        arg3: ::std::os::raw::c_int,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_value(arg1: *mut sqlite3_context, arg2: *mut sqlite3_value);
-}
-extern "C" {
-    pub fn sqlite3_result_pointer(
-        arg1: *mut sqlite3_context,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: *const ::std::os::raw::c_char,
-        arg4: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    );
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob(arg1: *mut sqlite3_context, n: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_result_zeroblob64(
-        arg1: *mut sqlite3_context,
-        n: sqlite3_uint64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_result_subtype(arg1: *mut sqlite3_context, arg2: ::std::os::raw::c_uint);
-}
-extern "C" {
-    pub fn sqlite3_create_collation(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation_v2(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_collation16(
-        arg1: *mut sqlite3,
-        zName: *const ::std::os::raw::c_void,
-        eTextRep: ::std::os::raw::c_int,
-        pArg: *mut ::std::os::raw::c_void,
-        xCompare: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-                arg4: ::std::os::raw::c_int,
-                arg5: *const ::std::os::raw::c_void,
-            ) -> ::std::os::raw::c_int,
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_collation_needed16(
-        arg1: *mut sqlite3,
-        arg2: *mut ::std::os::raw::c_void,
-        arg3: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                eTextRep: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_void,
-            ),
-        >,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_sleep(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub static mut sqlite3_temp_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub static mut sqlite3_data_directory: *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory8(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_win32_set_directory16(
-        type_: ::std::os::raw::c_ulong,
-        zValue: *const ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_get_autocommit(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_handle(arg1: *mut sqlite3_stmt) -> *mut sqlite3;
-}
-extern "C" {
-    pub fn sqlite3_db_filename(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_db_readonly(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_next_stmt(pDb: *mut sqlite3, pStmt: *mut sqlite3_stmt) -> *mut sqlite3_stmt;
-}
-extern "C" {
-    pub fn sqlite3_commit_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_rollback_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_update_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: ::std::os::raw::c_int,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: *const ::std::os::raw::c_char,
-                arg5: sqlite3_int64,
-            ),
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_enable_shared_cache(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_release_memory(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_release_memory(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_hard_heap_limit64(N: sqlite3_int64) -> sqlite3_int64;
-}
-extern "C" {
-    pub fn sqlite3_soft_heap_limit(N: ::std::os::raw::c_int);
-}
-extern "C" {
-    pub fn sqlite3_table_column_metadata(
-        db: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        zTableName: *const ::std::os::raw::c_char,
-        zColumnName: *const ::std::os::raw::c_char,
-        pzDataType: *mut *const ::std::os::raw::c_char,
-        pzCollSeq: *mut *const ::std::os::raw::c_char,
-        pNotNull: *mut ::std::os::raw::c_int,
-        pPrimaryKey: *mut ::std::os::raw::c_int,
-        pAutoinc: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_load_extension(
-        db: *mut sqlite3,
-        zFile: *const ::std::os::raw::c_char,
-        zProc: *const ::std::os::raw::c_char,
-        pzErrMsg: *mut *mut ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_enable_load_extension(
-        db: *mut sqlite3,
-        onoff: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_cancel_auto_extension(
-        xEntryPoint: ::std::option::Option<unsafe extern "C" fn()>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_reset_auto_extension();
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_module {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xConnect: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3,
-            pAux: *mut ::std::os::raw::c_void,
-            argc: ::std::os::raw::c_int,
-            argv: *const *const ::std::os::raw::c_char,
-            ppVTab: *mut *mut sqlite3_vtab,
-            arg2: *mut *mut ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBestIndex: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: *mut sqlite3_index_info,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDisconnect: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xDestroy: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xOpen: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            ppCursor: *mut *mut sqlite3_vtab_cursor,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xClose: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xFilter: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            idxNum: ::std::os::raw::c_int,
-            idxStr: *const ::std::os::raw::c_char,
-            argc: ::std::os::raw::c_int,
-            argv: *mut *mut sqlite3_value,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xNext: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xEof: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_vtab_cursor) -> ::std::os::raw::c_int,
-    >,
-    pub xColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            arg2: *mut sqlite3_context,
-            arg3: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab_cursor,
-            pRowid: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xUpdate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_vtab,
-            arg2: ::std::os::raw::c_int,
-            arg3: *mut *mut sqlite3_value,
-            arg4: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xBegin: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xSync: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xCommit: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xRollback: ::std::option::Option<
-        unsafe extern "C" fn(pVTab: *mut sqlite3_vtab) -> ::std::os::raw::c_int,
-    >,
-    pub xFindFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            nArg: ::std::os::raw::c_int,
-            zName: *const ::std::os::raw::c_char,
-            pxFunc: *mut ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut sqlite3_context,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *mut *mut sqlite3_value,
-                ),
-            >,
-            ppArg: *mut *mut ::std::os::raw::c_void,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRename: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVtab: *mut sqlite3_vtab,
-            zNew: *const ::std::os::raw::c_char,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSavepoint: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRelease: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRollbackTo: ::std::option::Option<
-        unsafe extern "C" fn(
-            pVTab: *mut sqlite3_vtab,
-            arg1: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xShadowName: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_module() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_module>(),
-        192usize,
-        concat!("Size of: ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_module>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_module))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCreate as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xConnect as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xConnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBestIndex as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBestIndex)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDisconnect as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDisconnect)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xDestroy as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xOpen as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xOpen)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xClose as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xClose)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFilter as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFilter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xNext as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xNext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xEof as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xEof)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xColumn as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xColumn)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRowid as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xUpdate as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xUpdate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xBegin as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xBegin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSync as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSync)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xCommit as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xCommit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollback as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollback)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xFindFunction as *const _ as usize },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xFindFunction)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRename as *const _ as usize },
-        152usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRename)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xSavepoint as *const _ as usize },
-        160usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xSavepoint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRelease as *const _ as usize },
-        168usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRelease)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xRollbackTo as *const _ as usize },
-        176usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xRollbackTo)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_module>())).xShadowName as *const _ as usize },
-        184usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_module),
-            "::",
-            stringify!(xShadowName)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info {
-    pub nConstraint: ::std::os::raw::c_int,
-    pub aConstraint: *mut sqlite3_index_info_sqlite3_index_constraint,
-    pub nOrderBy: ::std::os::raw::c_int,
-    pub aOrderBy: *mut sqlite3_index_info_sqlite3_index_orderby,
-    pub aConstraintUsage: *mut sqlite3_index_info_sqlite3_index_constraint_usage,
-    pub idxNum: ::std::os::raw::c_int,
-    pub idxStr: *mut ::std::os::raw::c_char,
-    pub needToFreeIdxStr: ::std::os::raw::c_int,
-    pub orderByConsumed: ::std::os::raw::c_int,
-    pub estimatedCost: f64,
-    pub estimatedRows: sqlite3_int64,
-    pub idxFlags: ::std::os::raw::c_int,
-    pub colUsed: sqlite3_uint64,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint {
-    pub iColumn: ::std::os::raw::c_int,
-    pub op: ::std::os::raw::c_uchar,
-    pub usable: ::std::os::raw::c_uchar,
-    pub iTermOffset: ::std::os::raw::c_int,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        12usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iColumn
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).op as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(op)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).usable
-                as *const _ as usize
-        },
-        5usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(usable)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint>())).iTermOffset
-                as *const _ as usize
-        },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint),
-            "::",
-            stringify!(iTermOffset)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_orderby {
-    pub iColumn: ::std::os::raw::c_int,
-    pub desc: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_orderby() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_orderby>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).iColumn as *const _
-                as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(iColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_orderby>())).desc as *const _
-                as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_orderby),
-            "::",
-            stringify!(desc)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_index_info_sqlite3_index_constraint_usage {
-    pub argvIndex: ::std::os::raw::c_int,
-    pub omit: ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info_sqlite3_index_constraint_usage() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        8usize,
-        concat!(
-            "Size of: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint_usage>(),
-        4usize,
-        concat!(
-            "Alignment of ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).argvIndex
-                as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(argvIndex)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info_sqlite3_index_constraint_usage>())).omit
-                as *const _ as usize
-        },
-        4usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info_sqlite3_index_constraint_usage),
-            "::",
-            stringify!(omit)
-        )
-    );
-}
-#[test]
-fn bindgen_test_layout_sqlite3_index_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_index_info>(),
-        96usize,
-        concat!("Size of: ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_index_info>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_index_info))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nConstraint as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraint as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraint)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).nOrderBy as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(nOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).aOrderBy as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aOrderBy)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).aConstraintUsage as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(aConstraintUsage)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxNum as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxNum)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxStr as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).needToFreeIdxStr as *const _ as usize
-        },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(needToFreeIdxStr)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).orderByConsumed as *const _ as usize
-        },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(orderByConsumed)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedCost as *const _ as usize
-        },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedCost)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_index_info>())).estimatedRows as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(estimatedRows)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).idxFlags as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(idxFlags)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_index_info>())).colUsed as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_index_info),
-            "::",
-            stringify!(colUsed)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_create_module(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_create_module_v2(
-        db: *mut sqlite3,
-        zName: *const ::std::os::raw::c_char,
-        p: *const sqlite3_module,
-        pClientData: *mut ::std::os::raw::c_void,
-        xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_drop_modules(
-        db: *mut sqlite3,
-        azKeep: *mut *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab {
-    pub pModule: *const sqlite3_module,
-    pub nRef: ::std::os::raw::c_int,
-    pub zErrMsg: *mut ::std::os::raw::c_char,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab>(),
-        24usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).pModule as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(pModule)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).nRef as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(nRef)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab>())).zErrMsg as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab),
-            "::",
-            stringify!(zErrMsg)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_vtab_cursor {
-    pub pVtab: *mut sqlite3_vtab,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_vtab_cursor() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_vtab_cursor>(),
-        8usize,
-        concat!("Size of: ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_vtab_cursor>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_vtab_cursor))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_vtab_cursor>())).pVtab as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_vtab_cursor),
-            "::",
-            stringify!(pVtab)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_declare_vtab(
-        arg1: *mut sqlite3,
-        zSQL: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_overload_function(
-        arg1: *mut sqlite3,
-        zFuncName: *const ::std::os::raw::c_char,
-        nArg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_blob {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_blob_open(
-        arg1: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        zTable: *const ::std::os::raw::c_char,
-        zColumn: *const ::std::os::raw::c_char,
-        iRow: sqlite3_int64,
-        flags: ::std::os::raw::c_int,
-        ppBlob: *mut *mut sqlite3_blob,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_reopen(
-        arg1: *mut sqlite3_blob,
-        arg2: sqlite3_int64,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_close(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_bytes(arg1: *mut sqlite3_blob) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_read(
-        arg1: *mut sqlite3_blob,
-        Z: *mut ::std::os::raw::c_void,
-        N: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_blob_write(
-        arg1: *mut sqlite3_blob,
-        z: *const ::std::os::raw::c_void,
-        n: ::std::os::raw::c_int,
-        iOffset: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_find(zVfsName: *const ::std::os::raw::c_char) -> *mut sqlite3_vfs;
-}
-extern "C" {
-    pub fn sqlite3_vfs_register(
-        arg1: *mut sqlite3_vfs,
-        makeDflt: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vfs_unregister(arg1: *mut sqlite3_vfs) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_alloc(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_mutex_free(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_enter(arg1: *mut sqlite3_mutex);
-}
-extern "C" {
-    pub fn sqlite3_mutex_try(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_mutex_leave(arg1: *mut sqlite3_mutex);
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_mutex_methods {
-    pub xMutexInit: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexEnd: ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>,
-    pub xMutexAlloc: ::std::option::Option<
-        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> *mut sqlite3_mutex,
-    >,
-    pub xMutexFree: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexEnter: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexTry: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexLeave: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_mutex)>,
-    pub xMutexHeld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-    pub xMutexNotheld: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_mutex) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_mutex_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_mutex_methods>(),
-        72usize,
-        concat!("Size of: ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_mutex_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_mutex_methods))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexInit as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexInit)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnd as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnd)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexAlloc as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexAlloc)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexFree as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexFree)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexEnter as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexEnter)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexTry as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexTry)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexLeave as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexLeave)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexHeld as *const _ as usize
-        },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexHeld)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_mutex_methods>())).xMutexNotheld as *const _ as usize
-        },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_mutex_methods),
-            "::",
-            stringify!(xMutexNotheld)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_db_mutex(arg1: *mut sqlite3) -> *mut sqlite3_mutex;
-}
-extern "C" {
-    pub fn sqlite3_file_control(
-        arg1: *mut sqlite3,
-        zDbName: *const ::std::os::raw::c_char,
-        op: ::std::os::raw::c_int,
-        arg2: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_test_control(op: ::std::os::raw::c_int, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_count() -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_name(
-        arg1: ::std::os::raw::c_int,
-        arg2: *mut *const ::std::os::raw::c_char,
-        arg3: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_keyword_check(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_str {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_str_new(arg1: *mut sqlite3) -> *mut sqlite3_str;
-}
-extern "C" {
-    pub fn sqlite3_str_finish(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_str_appendf(arg1: *mut sqlite3_str, zFormat: *const ::std::os::raw::c_char, ...);
-}
-extern "C" {
-    pub fn sqlite3_str_append(
-        arg1: *mut sqlite3_str,
-        zIn: *const ::std::os::raw::c_char,
-        N: ::std::os::raw::c_int,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_appendall(arg1: *mut sqlite3_str, zIn: *const ::std::os::raw::c_char);
-}
-extern "C" {
-    pub fn sqlite3_str_appendchar(
-        arg1: *mut sqlite3_str,
-        N: ::std::os::raw::c_int,
-        C: ::std::os::raw::c_char,
-    );
-}
-extern "C" {
-    pub fn sqlite3_str_reset(arg1: *mut sqlite3_str);
-}
-extern "C" {
-    pub fn sqlite3_str_errcode(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_length(arg1: *mut sqlite3_str) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_str_value(arg1: *mut sqlite3_str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_status(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut ::std::os::raw::c_int,
-        pHighwater: *mut ::std::os::raw::c_int,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_status64(
-        op: ::std::os::raw::c_int,
-        pCurrent: *mut sqlite3_int64,
-        pHighwater: *mut sqlite3_int64,
-        resetFlag: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_db_status(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        pCur: *mut ::std::os::raw::c_int,
-        pHiwtr: *mut ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_status(
-        arg1: *mut sqlite3_stmt,
-        op: ::std::os::raw::c_int,
-        resetFlg: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_page {
-    pub pBuf: *mut ::std::os::raw::c_void,
-    pub pExtra: *mut ::std::os::raw::c_void,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_page() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_page>(),
-        16usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_page>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_page))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pBuf as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pBuf)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_page>())).pExtra as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_page),
-            "::",
-            stringify!(pExtra)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods2 {
-    pub iVersion: ::std::os::raw::c_int,
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            szExtra: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache_page,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut sqlite3_pcache_page,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-    pub xShrink: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods2() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods2>(),
-        104usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods2>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods2))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).iVersion as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).pArg as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xInit as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShutdown as *const _ as usize
-        },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCreate as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xCachesize as *const _ as usize
-        },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xPagecount as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xFetch as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xUnpin as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xRekey as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xTruncate as *const _ as usize
-        },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xDestroy as *const _ as usize
-        },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods2>())).xShrink as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods2),
-            "::",
-            stringify!(xShrink)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_pcache_methods {
-    pub pArg: *mut ::std::os::raw::c_void,
-    pub xInit: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
-    >,
-    pub xShutdown: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            szPage: ::std::os::raw::c_int,
-            bPurgeable: ::std::os::raw::c_int,
-        ) -> *mut sqlite3_pcache,
-    >,
-    pub xCachesize: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, nCachesize: ::std::os::raw::c_int),
-    >,
-    pub xPagecount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache) -> ::std::os::raw::c_int,
-    >,
-    pub xFetch: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            key: ::std::os::raw::c_uint,
-            createFlag: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xUnpin: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            discard: ::std::os::raw::c_int,
-        ),
-    >,
-    pub xRekey: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut sqlite3_pcache,
-            arg2: *mut ::std::os::raw::c_void,
-            oldKey: ::std::os::raw::c_uint,
-            newKey: ::std::os::raw::c_uint,
-        ),
-    >,
-    pub xTruncate: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut sqlite3_pcache, iLimit: ::std::os::raw::c_uint),
-    >,
-    pub xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut sqlite3_pcache)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_pcache_methods() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_pcache_methods>(),
-        88usize,
-        concat!("Size of: ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_pcache_methods>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_pcache_methods))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).pArg as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(pArg)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xInit as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xInit)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xShutdown as *const _ as usize
-        },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xShutdown)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCreate as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xCachesize as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xCachesize)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xPagecount as *const _ as usize
-        },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xPagecount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xFetch as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xFetch)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xUnpin as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xUnpin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xRekey as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xRekey)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xTruncate as *const _ as usize
-        },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xTruncate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_pcache_methods>())).xDestroy as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_pcache_methods),
-            "::",
-            stringify!(xDestroy)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_backup {
-    _unused: [u8; 0],
-}
-extern "C" {
-    pub fn sqlite3_backup_init(
-        pDest: *mut sqlite3,
-        zDestName: *const ::std::os::raw::c_char,
-        pSource: *mut sqlite3,
-        zSourceName: *const ::std::os::raw::c_char,
-    ) -> *mut sqlite3_backup;
-}
-extern "C" {
-    pub fn sqlite3_backup_step(
-        p: *mut sqlite3_backup,
-        nPage: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_finish(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_remaining(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_backup_pagecount(p: *mut sqlite3_backup) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_unlock_notify(
-        pBlocked: *mut sqlite3,
-        xNotify: ::std::option::Option<
-            unsafe extern "C" fn(
-                apArg: *mut *mut ::std::os::raw::c_void,
-                nArg: ::std::os::raw::c_int,
-            ),
-        >,
-        pNotifyArg: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stricmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strnicmp(
-        arg1: *const ::std::os::raw::c_char,
-        arg2: *const ::std::os::raw::c_char,
-        arg3: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strglob(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_strlike(
-        zGlob: *const ::std::os::raw::c_char,
-        zStr: *const ::std::os::raw::c_char,
-        cEsc: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_log(
-        iErrCode: ::std::os::raw::c_int,
-        zFormat: *const ::std::os::raw::c_char,
-        ...
-    );
-}
-extern "C" {
-    pub fn sqlite3_wal_hook(
-        arg1: *mut sqlite3,
-        arg2: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut ::std::os::raw::c_void,
-                arg2: *mut sqlite3,
-                arg3: *const ::std::os::raw::c_char,
-                arg4: ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        arg3: *mut ::std::os::raw::c_void,
-    ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
-    pub fn sqlite3_wal_autocheckpoint(
-        db: *mut sqlite3,
-        N: ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_wal_checkpoint_v2(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-        eMode: ::std::os::raw::c_int,
-        pnLog: *mut ::std::os::raw::c_int,
-        pnCkpt: *mut ::std::os::raw::c_int,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_config(
-        arg1: *mut sqlite3,
-        op: ::std::os::raw::c_int,
-        ...
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_on_conflict(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_nochange(arg1: *mut sqlite3_context) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_vtab_collation(
-        arg1: *mut sqlite3_index_info,
-        arg2: ::std::os::raw::c_int,
-    ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus(
-        pStmt: *mut sqlite3_stmt,
-        idx: ::std::os::raw::c_int,
-        iScanStatusOp: ::std::os::raw::c_int,
-        pOut: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_stmt_scanstatus_reset(arg1: *mut sqlite3_stmt);
-}
-extern "C" {
-    pub fn sqlite3_db_cacheflush(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_system_errno(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct sqlite3_snapshot {
-    pub hidden: [::std::os::raw::c_uchar; 48usize],
-}
-#[test]
-fn bindgen_test_layout_sqlite3_snapshot() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_snapshot>(),
-        48usize,
-        concat!("Size of: ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_snapshot>(),
-        1usize,
-        concat!("Alignment of ", stringify!(sqlite3_snapshot))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_snapshot>())).hidden as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_snapshot),
-            "::",
-            stringify!(hidden)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_snapshot_get(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        ppSnapshot: *mut *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_open(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pSnapshot: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_free(arg1: *mut sqlite3_snapshot);
-}
-extern "C" {
-    pub fn sqlite3_snapshot_cmp(
-        p1: *mut sqlite3_snapshot,
-        p2: *mut sqlite3_snapshot,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_snapshot_recover(
-        db: *mut sqlite3,
-        zDb: *const ::std::os::raw::c_char,
-    ) -> ::std::os::raw::c_int;
-}
-extern "C" {
-    pub fn sqlite3_serialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        piSize: *mut sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> *mut ::std::os::raw::c_uchar;
-}
-extern "C" {
-    pub fn sqlite3_deserialize(
-        db: *mut sqlite3,
-        zSchema: *const ::std::os::raw::c_char,
-        pData: *mut ::std::os::raw::c_uchar,
-        szDb: sqlite3_int64,
-        szBuf: sqlite3_int64,
-        mFlags: ::std::os::raw::c_uint,
-    ) -> ::std::os::raw::c_int;
-}
-pub type sqlite3_rtree_dbl = f64;
-extern "C" {
-    pub fn sqlite3_rtree_geometry_callback(
-        db: *mut sqlite3,
-        zGeom: *const ::std::os::raw::c_char,
-        xGeom: ::std::option::Option<
-            unsafe extern "C" fn(
-                arg1: *mut sqlite3_rtree_geometry,
-                arg2: ::std::os::raw::c_int,
-                arg3: *mut sqlite3_rtree_dbl,
-                arg4: *mut ::std::os::raw::c_int,
-            ) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_geometry {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_geometry() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_geometry>(),
-        40usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_geometry>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_geometry))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pContext as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).nParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).aParam as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).pUser as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_geometry>())).xDelUser as *const _ as usize },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_geometry),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-}
-extern "C" {
-    pub fn sqlite3_rtree_query_callback(
-        db: *mut sqlite3,
-        zQueryFunc: *const ::std::os::raw::c_char,
-        xQueryFunc: ::std::option::Option<
-            unsafe extern "C" fn(arg1: *mut sqlite3_rtree_query_info) -> ::std::os::raw::c_int,
-        >,
-        pContext: *mut ::std::os::raw::c_void,
-        xDestructor: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct sqlite3_rtree_query_info {
-    pub pContext: *mut ::std::os::raw::c_void,
-    pub nParam: ::std::os::raw::c_int,
-    pub aParam: *mut sqlite3_rtree_dbl,
-    pub pUser: *mut ::std::os::raw::c_void,
-    pub xDelUser: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-    pub aCoord: *mut sqlite3_rtree_dbl,
-    pub anQueue: *mut ::std::os::raw::c_uint,
-    pub nCoord: ::std::os::raw::c_int,
-    pub iLevel: ::std::os::raw::c_int,
-    pub mxLevel: ::std::os::raw::c_int,
-    pub iRowid: sqlite3_int64,
-    pub rParentScore: sqlite3_rtree_dbl,
-    pub eParentWithin: ::std::os::raw::c_int,
-    pub eWithin: ::std::os::raw::c_int,
-    pub rScore: sqlite3_rtree_dbl,
-    pub apSqlParam: *mut *mut sqlite3_value,
-}
-#[test]
-fn bindgen_test_layout_sqlite3_rtree_query_info() {
-    assert_eq!(
-        ::std::mem::size_of::<sqlite3_rtree_query_info>(),
-        112usize,
-        concat!("Size of: ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<sqlite3_rtree_query_info>(),
-        8usize,
-        concat!("Alignment of ", stringify!(sqlite3_rtree_query_info))
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pContext as *const _ as usize
-        },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pContext)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nParam as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aParam as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aParam)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).pUser as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(pUser)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).xDelUser as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(xDelUser)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).aCoord as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(aCoord)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).anQueue as *const _ as usize
-        },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(anQueue)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).nCoord as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(nCoord)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iLevel as *const _ as usize },
-        60usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iLevel)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).mxLevel as *const _ as usize
-        },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(mxLevel)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).iRowid as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(iRowid)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rParentScore as *const _ as usize
-        },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rParentScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eParentWithin as *const _ as usize
-        },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eParentWithin)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).eWithin as *const _ as usize
-        },
-        92usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(eWithin)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).rScore as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(rScore)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<sqlite3_rtree_query_info>())).apSqlParam as *const _ as usize
-        },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(sqlite3_rtree_query_info),
-            "::",
-            stringify!(apSqlParam)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Context {
-    _unused: [u8; 0],
-}
-pub type fts5_extension_function = ::std::option::Option<
-    unsafe extern "C" fn(
-        pApi: *const Fts5ExtensionApi,
-        pFts: *mut Fts5Context,
-        pCtx: *mut sqlite3_context,
-        nVal: ::std::os::raw::c_int,
-        apVal: *mut *mut sqlite3_value,
-    ),
->;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5PhraseIter {
-    pub a: *const ::std::os::raw::c_uchar,
-    pub b: *const ::std::os::raw::c_uchar,
-}
-#[test]
-fn bindgen_test_layout_Fts5PhraseIter() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5PhraseIter>(),
-        16usize,
-        concat!("Size of: ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5PhraseIter>(),
-        8usize,
-        concat!("Alignment of ", stringify!(Fts5PhraseIter))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).a as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(a)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5PhraseIter>())).b as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5PhraseIter),
-            "::",
-            stringify!(b)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5ExtensionApi {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xUserData: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xColumnCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xRowCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnRow: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnTotalSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut sqlite3_int64,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            pCtx: *mut ::std::os::raw::c_void,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *mut ::std::os::raw::c_void,
-                    arg2: ::std::os::raw::c_int,
-                    arg3: *const ::std::os::raw::c_char,
-                    arg4: ::std::os::raw::c_int,
-                    arg5: ::std::os::raw::c_int,
-                    arg6: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseCount: ::std::option::Option<
-        unsafe extern "C" fn(arg1: *mut Fts5Context) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInstCount: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pnInst: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xInst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iIdx: ::std::os::raw::c_int,
-            piPhrase: *mut ::std::os::raw::c_int,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xRowid:
-        ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Context) -> sqlite3_int64>,
-    pub xColumnText: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pz: *mut *const ::std::os::raw::c_char,
-            pn: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xColumnSize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iCol: ::std::os::raw::c_int,
-            pnToken: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xQueryPhrase: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            pUserData: *mut ::std::os::raw::c_void,
-            arg2: ::std::option::Option<
-                unsafe extern "C" fn(
-                    arg1: *const Fts5ExtensionApi,
-                    arg2: *mut Fts5Context,
-                    arg3: *mut ::std::os::raw::c_void,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xSetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            pAux: *mut ::std::os::raw::c_void,
-            xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xGetAuxdata: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            bClear: ::std::os::raw::c_int,
-        ) -> *mut ::std::os::raw::c_void,
-    >,
-    pub xPhraseFirst: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-            arg4: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNext: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-            piOff: *mut ::std::os::raw::c_int,
-        ),
-    >,
-    pub xPhraseFirstColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            iPhrase: ::std::os::raw::c_int,
-            arg2: *mut Fts5PhraseIter,
-            arg3: *mut ::std::os::raw::c_int,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xPhraseNextColumn: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Context,
-            arg2: *mut Fts5PhraseIter,
-            piCol: *mut ::std::os::raw::c_int,
-        ),
-    >,
-}
-#[test]
-fn bindgen_test_layout_Fts5ExtensionApi() {
-    assert_eq!(
-        ::std::mem::size_of::<Fts5ExtensionApi>(),
-        160usize,
-        concat!("Size of: ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<Fts5ExtensionApi>(),
-        8usize,
-        concat!("Alignment of ", stringify!(Fts5ExtensionApi))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xUserData as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xUserData)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnCount as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowCount as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowCount)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnTotalSize as *const _ as usize
-        },
-        32usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnTotalSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xTokenize as *const _ as usize },
-        40usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseCount as *const _ as usize },
-        48usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseSize as *const _ as usize },
-        56usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInstCount as *const _ as usize },
-        64usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInstCount)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xInst as *const _ as usize },
-        72usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xInst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xRowid as *const _ as usize },
-        80usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xRowid)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnText as *const _ as usize },
-        88usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnText)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xColumnSize as *const _ as usize },
-        96usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xColumnSize)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xQueryPhrase as *const _ as usize },
-        104usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xQueryPhrase)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xSetAuxdata as *const _ as usize },
-        112usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xSetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xGetAuxdata as *const _ as usize },
-        120usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xGetAuxdata)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirst as *const _ as usize },
-        128usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirst)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNext as *const _ as usize },
-        136usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNext)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseFirstColumn as *const _ as usize
-        },
-        144usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseFirstColumn)
-        )
-    );
-    assert_eq!(
-        unsafe {
-            &(*(::std::ptr::null::<Fts5ExtensionApi>())).xPhraseNextColumn as *const _ as usize
-        },
-        152usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(Fts5ExtensionApi),
-            "::",
-            stringify!(xPhraseNextColumn)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct Fts5Tokenizer {
-    _unused: [u8; 0],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_tokenizer {
-    pub xCreate: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut ::std::os::raw::c_void,
-            azArg: *mut *const ::std::os::raw::c_char,
-            nArg: ::std::os::raw::c_int,
-            ppOut: *mut *mut Fts5Tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xDelete: ::std::option::Option<unsafe extern "C" fn(arg1: *mut Fts5Tokenizer)>,
-    pub xTokenize: ::std::option::Option<
-        unsafe extern "C" fn(
-            arg1: *mut Fts5Tokenizer,
-            pCtx: *mut ::std::os::raw::c_void,
-            flags: ::std::os::raw::c_int,
-            pText: *const ::std::os::raw::c_char,
-            nText: ::std::os::raw::c_int,
-            xToken: ::std::option::Option<
-                unsafe extern "C" fn(
-                    pCtx: *mut ::std::os::raw::c_void,
-                    tflags: ::std::os::raw::c_int,
-                    pToken: *const ::std::os::raw::c_char,
-                    nToken: ::std::os::raw::c_int,
-                    iStart: ::std::os::raw::c_int,
-                    iEnd: ::std::os::raw::c_int,
-                ) -> ::std::os::raw::c_int,
-            >,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_tokenizer() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_tokenizer>(),
-        24usize,
-        concat!("Size of: ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_tokenizer>(),
-        8usize,
-        concat!("Alignment of ", stringify!(fts5_tokenizer))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xCreate as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xCreate)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xDelete as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xDelete)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_tokenizer>())).xTokenize as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_tokenizer),
-            "::",
-            stringify!(xTokenize)
-        )
-    );
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fts5_api {
-    pub iVersion: ::std::os::raw::c_int,
-    pub xCreateTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xFindTokenizer: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            ppContext: *mut *mut ::std::os::raw::c_void,
-            pTokenizer: *mut fts5_tokenizer,
-        ) -> ::std::os::raw::c_int,
-    >,
-    pub xCreateFunction: ::std::option::Option<
-        unsafe extern "C" fn(
-            pApi: *mut fts5_api,
-            zName: *const ::std::os::raw::c_char,
-            pContext: *mut ::std::os::raw::c_void,
-            xFunction: fts5_extension_function,
-            xDestroy: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
-        ) -> ::std::os::raw::c_int,
-    >,
-}
-#[test]
-fn bindgen_test_layout_fts5_api() {
-    assert_eq!(
-        ::std::mem::size_of::<fts5_api>(),
-        32usize,
-        concat!("Size of: ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<fts5_api>(),
-        8usize,
-        concat!("Alignment of ", stringify!(fts5_api))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).iVersion as *const _ as usize },
-        0usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(iVersion)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateTokenizer as *const _ as usize },
-        8usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xFindTokenizer as *const _ as usize },
-        16usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xFindTokenizer)
-        )
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<fts5_api>())).xCreateFunction as *const _ as usize },
-        24usize,
-        concat!(
-            "Offset of field: ",
-            stringify!(fts5_api),
-            "::",
-            stringify!(xCreateFunction)
-        )
-    );
-}
diff --git a/post_update.sh b/post_update.sh
new file mode 100755
index 0000000..52614aa
--- /dev/null
+++ b/post_update.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# $1 Path to the new version.
+# $2 Path to the old version.
+
+set -x
+set -e
+
+cp -a -n -r $2/android $1/
