/* automatically generated by rust-bindgen */

pub const __GNUC_VA_LIST: i32 = 1;
pub const SQLITE_VERSION: &'static [u8; 6usize] = b"3.6.8\x00";
pub const SQLITE_VERSION_NUMBER: i32 = 3006008;
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_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_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_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_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_ACCESS_EXISTS: i32 = 0;
pub const SQLITE_ACCESS_READWRITE: i32 = 1;
pub const SQLITE_ACCESS_READ: i32 = 2;
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_DBCONFIG_LOOKASIDE: i32 = 1001;
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_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_PRNG: i32 = 5;
pub const SQLITE_MUTEX_STATIC_LRU: i32 = 6;
pub const SQLITE_MUTEX_STATIC_LRU2: i32 = 7;
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_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_DBSTATUS_LOOKASIDE_USED: i32 = 0;
pub const SQLITE_STMTSTATUS_FULLSCAN_STEP: i32 = 1;
pub const SQLITE_STMTSTATUS_SORT: i32 = 2;
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_libversion_number() -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn sqlite3_threadsafe() -> ::std::os::raw::c_int;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3([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;
}
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>,
}
#[test]
fn bindgen_test_layout_sqlite3_file_sqlite3_io_methods() {
    assert_eq!(::std::mem::size_of::<sqlite3_file_sqlite3_io_methods>() ,
               104usize);
    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>,
}
#[test]
fn bindgen_test_layout_sqlite3_vfs() {
    assert_eq!(::std::mem::size_of::<sqlite3_vfs>() , 136usize);
    assert_eq!(::std::mem::align_of::<sqlite3_vfs>() , 8usize);
}
impl Clone for sqlite3_vfs {
    fn clone(&self) -> Self { *self }
}
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_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_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;
}
#[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;
}
#[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_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,
                                    arg2: *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,
                                       arg2: *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,
                                      arg2: *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_key(db: *mut sqlite3, pKey: *const ::std::os::raw::c_void,
                       nKey: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn sqlite3_rekey(db: *mut sqlite3,
                         pKey: *const ::std::os::raw::c_void,
                         nKey: ::std::os::raw::c_int)
     -> ::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" {
    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_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_soft_heap_limit(arg1: ::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>,
}
#[test]
fn bindgen_test_layout_sqlite3_module() {
    assert_eq!(::std::mem::size_of::<sqlite3_module>() , 160usize);
    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,
                                 arg1: *const sqlite3_module,
                                 arg2: *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,
                                    arg1: *const sqlite3_module,
                                    arg2: *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,
                                zCreateTable: *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_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_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)]
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;
