/* automatically generated by rust-bindgen */

pub const __GNUC_VA_LIST: i32 = 1;
pub const SQLITE_VERSION: &'static [u8; 7usize] = b"3.7.16\x00";
pub const SQLITE_VERSION_NUMBER: i32 = 3007016;
pub const SQLITE_SOURCE_ID: &'static [u8; 61usize] =
    b"2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90\x00";
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_ROW: i32 = 100;
pub const SQLITE_DONE: i32 = 101;
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_LOCKED_SHAREDCACHE: i32 = 262;
pub const SQLITE_BUSY_RECOVERY: i32 = 261;
pub const SQLITE_CANTOPEN_NOTEMPDIR: i32 = 270;
pub const SQLITE_CANTOPEN_ISDIR: i32 = 526;
pub const SQLITE_CANTOPEN_FULLPATH: i32 = 782;
pub const SQLITE_CORRUPT_VTAB: i32 = 267;
pub const SQLITE_READONLY_RECOVERY: i32 = 264;
pub const SQLITE_READONLY_CANTLOCK: i32 = 520;
pub const SQLITE_READONLY_ROLLBACK: i32 = 776;
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_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_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_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_GET_LOCKPROXYFILE: i32 = 2;
pub const SQLITE_SET_LOCKPROXYFILE: i32 = 3;
pub const SQLITE_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_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_DBCONFIG_LOOKASIDE: i32 = 1001;
pub const SQLITE_DBCONFIG_ENABLE_FKEY: i32 = 1002;
pub const SQLITE_DBCONFIG_ENABLE_TRIGGER: i32 = 1003;
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_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_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_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_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_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_LOCALTIME_FAULT: i32 = 18;
pub const SQLITE_TESTCTRL_EXPLAIN_STMT: i32 = 19;
pub const SQLITE_TESTCTRL_LAST: i32 = 19;
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_MAX: i32 = 9;
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_CHECKPOINT_PASSIVE: i32 = 0;
pub const SQLITE_CHECKPOINT_FULL: i32 = 1;
pub const SQLITE_CHECKPOINT_RESTART: i32 = 2;
pub const SQLITE_VTAB_CONSTRAINT_SUPPORT: i32 = 1;
pub const SQLITE_ROLLBACK: i32 = 1;
pub const SQLITE_FAIL: i32 = 3;
pub const SQLITE_REPLACE: i32 = 5;
pub type va_list = __builtin_va_list;
pub type __gnuc_va_list = __builtin_va_list;
extern "C" {
    #[link_name = "sqlite3_version"]
    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_compileoption_used(zOptName: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn sqlite3_compileoption_get(N: ::std::os::raw::c_int)
     -> *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn sqlite3_threadsafe() -> ::std::os::raw::c_int;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3([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)]
pub struct sqlite3_file {
    pub pMethods: *const sqlite3_file_sqlite3_io_methods,
}
#[repr(C)]
#[derive(Debug, Copy)]
pub struct sqlite3_file_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>,
}
#[test]
fn bindgen_test_layout_sqlite3_file_sqlite3_io_methods() {
    assert_eq!(::std::mem::size_of::<sqlite3_file_sqlite3_io_methods>() ,
               136usize);
    assert_eq!(::std::mem::align_of::<sqlite3_file_sqlite3_io_methods>() ,
               8usize);
}
impl Clone for sqlite3_file_sqlite3_io_methods {
    fn clone(&self) -> Self { *self }
}
#[test]
fn bindgen_test_layout_sqlite3_file() {
    assert_eq!(::std::mem::size_of::<sqlite3_file>() , 8usize);
    assert_eq!(::std::mem::align_of::<sqlite3_file>() , 8usize);
}
impl Clone for sqlite3_file {
    fn clone(&self) -> Self { *self }
}
pub type sqlite3_io_methods = sqlite3_file_sqlite3_io_methods;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3_mutex([u8; 0]);
#[repr(C)]
#[derive(Debug, Copy)]
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()>>,
    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)
                                                  ->
                                                      ::std::option::Option<unsafe extern "C" fn()>>,
    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);
    assert_eq!(::std::mem::align_of::<sqlite3_vfs>() , 8usize);
}
impl Clone for sqlite3_vfs {
    fn clone(&self) -> Self { *self }
}
pub type sqlite3_syscall_ptr = ::std::option::Option<unsafe extern "C" fn()>;
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)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_mem_methods>() , 8usize);
}
impl Clone for sqlite3_mem_methods {
    fn clone(&self) -> Self { *self }
}
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_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_vmprintf(arg1: *const ::std::os::raw::c_char,
                            arg2: *mut __va_list_tag)
     -> *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_vsnprintf(arg1: ::std::os::raw::c_int,
                             arg2: *mut ::std::os::raw::c_char,
                             arg3: *const ::std::os::raw::c_char,
                             arg4: *mut __va_list_tag)
     -> *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_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_free(arg1: *mut ::std::os::raw::c_void);
}
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_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_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([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_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_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_busy(arg1: *mut sqlite3_stmt)
     -> ::std::os::raw::c_int;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct Mem([u8; 0]);
pub type sqlite3_value = Mem;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3_context([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_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,
                             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_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_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_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_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_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_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_type(arg1: *mut sqlite3_stmt,
                               iCol: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
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_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_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_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_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_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_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_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_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_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_zeroblob(arg1: *mut sqlite3_context,
                                   n: ::std::os::raw::c_int);
}
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" {
    #[link_name = "sqlite3_temp_directory"]
    pub static mut sqlite3_temp_directory: *mut ::std::os::raw::c_char;
}
extern "C" {
    #[link_name = "sqlite3_data_directory"]
    pub static mut sqlite3_data_directory: *mut ::std::os::raw::c_char;
}
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_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_reset_auto_extension();
}
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_vtab>() , 8usize);
}
impl Clone for sqlite3_vtab {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
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,
}
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint>()
               , 4usize);
}
impl Clone for sqlite3_index_info_sqlite3_index_constraint {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_index_info_sqlite3_index_orderby>()
               , 4usize);
}
impl Clone for sqlite3_index_info_sqlite3_index_orderby {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_index_info_sqlite3_index_constraint_usage>()
               , 4usize);
}
impl Clone for sqlite3_index_info_sqlite3_index_constraint_usage {
    fn clone(&self) -> Self { *self }
}
#[test]
fn bindgen_test_layout_sqlite3_index_info() {
    assert_eq!(::std::mem::size_of::<sqlite3_index_info>() , 72usize);
    assert_eq!(::std::mem::align_of::<sqlite3_index_info>() , 8usize);
}
impl Clone for sqlite3_index_info {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_vtab_cursor>() , 8usize);
}
impl Clone for sqlite3_vtab_cursor {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
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>,
}
#[test]
fn bindgen_test_layout_sqlite3_module() {
    assert_eq!(::std::mem::size_of::<sqlite3_module>() , 184usize);
    assert_eq!(::std::mem::align_of::<sqlite3_module>() , 8usize);
}
impl Clone for sqlite3_module {
    fn clone(&self) -> Self { *self }
}
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_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([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)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_mutex_methods>() , 8usize);
}
impl Clone for sqlite3_mutex_methods {
    fn clone(&self) -> Self { *self }
}
extern "C" {
    pub fn sqlite3_mutex_held(arg1: *mut sqlite3_mutex)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn sqlite3_mutex_notheld(arg1: *mut sqlite3_mutex)
     -> ::std::os::raw::c_int;
}
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_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_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([u8; 0]);
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_pcache_page>() , 8usize);
}
impl Clone for sqlite3_pcache_page {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_pcache_methods2>() , 8usize);
}
impl Clone for sqlite3_pcache_methods2 {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
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);
    assert_eq!(::std::mem::align_of::<sqlite3_pcache_methods>() , 8usize);
}
impl Clone for sqlite3_pcache_methods {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3_backup([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_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;
}
#[repr(C)]
#[derive(Debug, Copy)]
pub struct sqlite3_rtree_geometry {
    pub pContext: *mut ::std::os::raw::c_void,
    pub nParam: ::std::os::raw::c_int,
    pub aParam: *mut f64,
    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);
    assert_eq!(::std::mem::align_of::<sqlite3_rtree_geometry>() , 8usize);
}
impl Clone for sqlite3_rtree_geometry {
    fn clone(&self) -> Self { *self }
}
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,
                                                                                          n:
                                                                                              ::std::os::raw::c_int,
                                                                                          a:
                                                                                              *mut f64,
                                                                                          pRes:
                                                                                              *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)]
pub struct __va_list_tag {
    pub gp_offset: ::std::os::raw::c_uint,
    pub fp_offset: ::std::os::raw::c_uint,
    pub overflow_arg_area: *mut ::std::os::raw::c_void,
    pub reg_save_area: *mut ::std::os::raw::c_void,
}
impl Clone for __va_list_tag {
    fn clone(&self) -> Self { *self }
}
pub type __builtin_va_list = [__va_list_tag; 1usize];

pub const SQLITE_DETERMINISTIC: i32 = 2048;
