#![allow(non_camel_case_types, non_snake_case, non_upper_case_globals)]

/* automatically generated by rust-bindgen */

#[repr(C)]
pub struct __BindgenUnionField<T>(::std::marker::PhantomData<T>);
impl <T> __BindgenUnionField<T> {
    #[inline]
    pub fn new() -> Self { __BindgenUnionField(::std::marker::PhantomData) }
    #[inline]
    pub unsafe fn as_ref(&self) -> &T { ::std::mem::transmute(self) }
    #[inline]
    pub unsafe fn as_mut(&mut self) -> &mut T { ::std::mem::transmute(self) }
}
impl <T> ::std::default::Default for __BindgenUnionField<T> {
    #[inline]
    fn default() -> Self { Self::new() }
}
impl <T> ::std::clone::Clone for __BindgenUnionField<T> {
    #[inline]
    fn clone(&self) -> Self { Self::new() }
}
impl <T> ::std::marker::Copy for __BindgenUnionField<T> { }
impl <T> ::std::fmt::Debug for __BindgenUnionField<T> {
    fn fmt(&self, fmt: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        fmt.write_str("__BindgenUnionField")
    }
}
pub type __int64_t = ::std::os::raw::c_longlong;
pub type __darwin_size_t = ::std::os::raw::c_ulong;
pub type __darwin_off_t = __int64_t;
pub type fpos_t = __darwin_off_t;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct __sbuf {
    pub _base: *mut ::std::os::raw::c_uchar,
    pub _size: ::std::os::raw::c_int,
}
#[test]
fn bindgen_test_layout___sbuf() {
    assert_eq!(::std::mem::size_of::<__sbuf>() , 16usize);
    assert_eq!(::std::mem::align_of::<__sbuf>() , 8usize);
}
impl Clone for __sbuf {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __sFILEX([u8; 0]);
#[repr(C)]
#[derive(Debug, Copy)]
pub struct __sFILE {
    pub _p: *mut ::std::os::raw::c_uchar,
    pub _r: ::std::os::raw::c_int,
    pub _w: ::std::os::raw::c_int,
    pub _flags: ::std::os::raw::c_short,
    pub _file: ::std::os::raw::c_short,
    pub _bf: __sbuf,
    pub _lbfsize: ::std::os::raw::c_int,
    pub _cookie: *mut ::std::os::raw::c_void,
    pub _close: ::std::option::Option<unsafe extern "C" fn(arg1:
                                                               *mut ::std::os::raw::c_void)
                                          -> ::std::os::raw::c_int>,
    pub _read: ::std::option::Option<unsafe extern "C" fn(arg1:
                                                              *mut ::std::os::raw::c_void,
                                                          arg2:
                                                              *mut ::std::os::raw::c_char,
                                                          arg3:
                                                              ::std::os::raw::c_int)
                                         -> ::std::os::raw::c_int>,
    pub _seek: ::std::option::Option<unsafe extern "C" fn(arg1:
                                                              *mut ::std::os::raw::c_void,
                                                          arg2: fpos_t,
                                                          arg3:
                                                              ::std::os::raw::c_int)
                                         -> ::std::os::raw::c_longlong>,
    pub _write: ::std::option::Option<unsafe extern "C" fn(arg1:
                                                               *mut ::std::os::raw::c_void,
                                                           arg2:
                                                               *const ::std::os::raw::c_char,
                                                           arg3:
                                                               ::std::os::raw::c_int)
                                          -> ::std::os::raw::c_int>,
    pub _ub: __sbuf,
    pub _extra: *mut __sFILEX,
    pub _ur: ::std::os::raw::c_int,
    pub _ubuf: [::std::os::raw::c_uchar; 3usize],
    pub _nbuf: [::std::os::raw::c_uchar; 1usize],
    pub _lb: __sbuf,
    pub _blksize: ::std::os::raw::c_int,
    pub _offset: fpos_t,
}
#[test]
fn bindgen_test_layout___sFILE() {
    assert_eq!(::std::mem::size_of::<__sFILE>() , 152usize);
    assert_eq!(::std::mem::align_of::<__sFILE>() , 8usize);
}
impl Clone for __sFILE {
    fn clone(&self) -> Self { *self }
}
pub type FILE = __sFILE;
pub type Oid = ::std::os::raw::c_uint;
pub const CONNECTION_OK: _bindgen_ty_2 = _bindgen_ty_2::CONNECTION_OK;
pub const CONNECTION_BAD: _bindgen_ty_2 = _bindgen_ty_2::CONNECTION_BAD;
pub const CONNECTION_STARTED: _bindgen_ty_2 =
    _bindgen_ty_2::CONNECTION_STARTED;
pub const CONNECTION_MADE: _bindgen_ty_2 = _bindgen_ty_2::CONNECTION_MADE;
pub const CONNECTION_AWAITING_RESPONSE: _bindgen_ty_2 =
    _bindgen_ty_2::CONNECTION_AWAITING_RESPONSE;
pub const CONNECTION_AUTH_OK: _bindgen_ty_2 =
    _bindgen_ty_2::CONNECTION_AUTH_OK;
pub const CONNECTION_SETENV: _bindgen_ty_2 = _bindgen_ty_2::CONNECTION_SETENV;
pub const CONNECTION_SSL_STARTUP: _bindgen_ty_2 =
    _bindgen_ty_2::CONNECTION_SSL_STARTUP;
pub const CONNECTION_NEEDED: _bindgen_ty_2 = _bindgen_ty_2::CONNECTION_NEEDED;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum _bindgen_ty_2 {
    CONNECTION_OK = 0,
    CONNECTION_BAD = 1,
    CONNECTION_STARTED = 2,
    CONNECTION_MADE = 3,
    CONNECTION_AWAITING_RESPONSE = 4,
    CONNECTION_AUTH_OK = 5,
    CONNECTION_SETENV = 6,
    CONNECTION_SSL_STARTUP = 7,
    CONNECTION_NEEDED = 8,
}
pub use self::_bindgen_ty_2 as ConnStatusType;
pub const PGRES_POLLING_FAILED: _bindgen_ty_3 =
    _bindgen_ty_3::PGRES_POLLING_FAILED;
pub const PGRES_POLLING_READING: _bindgen_ty_3 =
    _bindgen_ty_3::PGRES_POLLING_READING;
pub const PGRES_POLLING_WRITING: _bindgen_ty_3 =
    _bindgen_ty_3::PGRES_POLLING_WRITING;
pub const PGRES_POLLING_OK: _bindgen_ty_3 = _bindgen_ty_3::PGRES_POLLING_OK;
pub const PGRES_POLLING_ACTIVE: _bindgen_ty_3 =
    _bindgen_ty_3::PGRES_POLLING_ACTIVE;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum _bindgen_ty_3 {
    PGRES_POLLING_FAILED = 0,
    PGRES_POLLING_READING = 1,
    PGRES_POLLING_WRITING = 2,
    PGRES_POLLING_OK = 3,
    PGRES_POLLING_ACTIVE = 4,
}
pub use self::_bindgen_ty_3 as PostgresPollingStatusType;
pub const PGRES_EMPTY_QUERY: _bindgen_ty_4 = _bindgen_ty_4::PGRES_EMPTY_QUERY;
pub const PGRES_COMMAND_OK: _bindgen_ty_4 = _bindgen_ty_4::PGRES_COMMAND_OK;
pub const PGRES_TUPLES_OK: _bindgen_ty_4 = _bindgen_ty_4::PGRES_TUPLES_OK;
pub const PGRES_COPY_OUT: _bindgen_ty_4 = _bindgen_ty_4::PGRES_COPY_OUT;
pub const PGRES_COPY_IN: _bindgen_ty_4 = _bindgen_ty_4::PGRES_COPY_IN;
pub const PGRES_BAD_RESPONSE: _bindgen_ty_4 =
    _bindgen_ty_4::PGRES_BAD_RESPONSE;
pub const PGRES_NONFATAL_ERROR: _bindgen_ty_4 =
    _bindgen_ty_4::PGRES_NONFATAL_ERROR;
pub const PGRES_FATAL_ERROR: _bindgen_ty_4 = _bindgen_ty_4::PGRES_FATAL_ERROR;
pub const PGRES_COPY_BOTH: _bindgen_ty_4 = _bindgen_ty_4::PGRES_COPY_BOTH;
pub const PGRES_SINGLE_TUPLE: _bindgen_ty_4 =
    _bindgen_ty_4::PGRES_SINGLE_TUPLE;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum _bindgen_ty_4 {
    PGRES_EMPTY_QUERY = 0,
    PGRES_COMMAND_OK = 1,
    PGRES_TUPLES_OK = 2,
    PGRES_COPY_OUT = 3,
    PGRES_COPY_IN = 4,
    PGRES_BAD_RESPONSE = 5,
    PGRES_NONFATAL_ERROR = 6,
    PGRES_FATAL_ERROR = 7,
    PGRES_COPY_BOTH = 8,
    PGRES_SINGLE_TUPLE = 9,
}
pub use self::_bindgen_ty_4 as ExecStatusType;
pub const PQTRANS_IDLE: _bindgen_ty_5 = _bindgen_ty_5::PQTRANS_IDLE;
pub const PQTRANS_ACTIVE: _bindgen_ty_5 = _bindgen_ty_5::PQTRANS_ACTIVE;
pub const PQTRANS_INTRANS: _bindgen_ty_5 = _bindgen_ty_5::PQTRANS_INTRANS;
pub const PQTRANS_INERROR: _bindgen_ty_5 = _bindgen_ty_5::PQTRANS_INERROR;
pub const PQTRANS_UNKNOWN: _bindgen_ty_5 = _bindgen_ty_5::PQTRANS_UNKNOWN;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum _bindgen_ty_5 {
    PQTRANS_IDLE = 0,
    PQTRANS_ACTIVE = 1,
    PQTRANS_INTRANS = 2,
    PQTRANS_INERROR = 3,
    PQTRANS_UNKNOWN = 4,
}
pub use self::_bindgen_ty_5 as PGTransactionStatusType;
pub const PQERRORS_TERSE: _bindgen_ty_6 = _bindgen_ty_6::PQERRORS_TERSE;
pub const PQERRORS_DEFAULT: _bindgen_ty_6 = _bindgen_ty_6::PQERRORS_DEFAULT;
pub const PQERRORS_VERBOSE: _bindgen_ty_6 = _bindgen_ty_6::PQERRORS_VERBOSE;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum _bindgen_ty_6 {
    PQERRORS_TERSE = 0,
    PQERRORS_DEFAULT = 1,
    PQERRORS_VERBOSE = 2,
}
pub use self::_bindgen_ty_6 as PGVerbosity;
pub const PQPING_OK: _bindgen_ty_7 = _bindgen_ty_7::PQPING_OK;
pub const PQPING_REJECT: _bindgen_ty_7 = _bindgen_ty_7::PQPING_REJECT;
pub const PQPING_NO_RESPONSE: _bindgen_ty_7 =
    _bindgen_ty_7::PQPING_NO_RESPONSE;
pub const PQPING_NO_ATTEMPT: _bindgen_ty_7 = _bindgen_ty_7::PQPING_NO_ATTEMPT;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum _bindgen_ty_7 {
    PQPING_OK = 0,
    PQPING_REJECT = 1,
    PQPING_NO_RESPONSE = 2,
    PQPING_NO_ATTEMPT = 3,
}
pub use self::_bindgen_ty_7 as PGPing;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct pg_conn([u8; 0]);
pub type PGconn = pg_conn;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct pg_result([u8; 0]);
pub type PGresult = pg_result;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct pg_cancel([u8; 0]);
pub type PGcancel = pg_cancel;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct pgNotify {
    pub relname: *mut ::std::os::raw::c_char,
    pub be_pid: ::std::os::raw::c_int,
    pub extra: *mut ::std::os::raw::c_char,
    pub next: *mut pgNotify,
}
#[test]
fn bindgen_test_layout_pgNotify() {
    assert_eq!(::std::mem::size_of::<pgNotify>() , 32usize);
    assert_eq!(::std::mem::align_of::<pgNotify>() , 8usize);
}
impl Clone for pgNotify {
    fn clone(&self) -> Self { *self }
}
pub type PGnotify = pgNotify;
pub type PQnoticeReceiver =
    ::std::option::Option<unsafe extern "C" fn(arg:
                                                   *mut ::std::os::raw::c_void,
                                               res: *const PGresult)>;
pub type PQnoticeProcessor =
    ::std::option::Option<unsafe extern "C" fn(arg:
                                                   *mut ::std::os::raw::c_void,
                                               message:
                                                   *const ::std::os::raw::c_char)>;
pub type pqbool = ::std::os::raw::c_char;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct _PQprintOpt {
    pub header: pqbool,
    pub align: pqbool,
    pub standard: pqbool,
    pub html3: pqbool,
    pub expanded: pqbool,
    pub pager: pqbool,
    pub fieldSep: *mut ::std::os::raw::c_char,
    pub tableOpt: *mut ::std::os::raw::c_char,
    pub caption: *mut ::std::os::raw::c_char,
    pub fieldName: *mut *mut ::std::os::raw::c_char,
}
#[test]
fn bindgen_test_layout__PQprintOpt() {
    assert_eq!(::std::mem::size_of::<_PQprintOpt>() , 40usize);
    assert_eq!(::std::mem::align_of::<_PQprintOpt>() , 8usize);
}
impl Clone for _PQprintOpt {
    fn clone(&self) -> Self { *self }
}
pub type PQprintOpt = _PQprintOpt;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct _PQconninfoOption {
    pub keyword: *mut ::std::os::raw::c_char,
    pub envvar: *mut ::std::os::raw::c_char,
    pub compiled: *mut ::std::os::raw::c_char,
    pub val: *mut ::std::os::raw::c_char,
    pub label: *mut ::std::os::raw::c_char,
    pub dispchar: *mut ::std::os::raw::c_char,
    pub dispsize: ::std::os::raw::c_int,
}
#[test]
fn bindgen_test_layout__PQconninfoOption() {
    assert_eq!(::std::mem::size_of::<_PQconninfoOption>() , 56usize);
    assert_eq!(::std::mem::align_of::<_PQconninfoOption>() , 8usize);
}
impl Clone for _PQconninfoOption {
    fn clone(&self) -> Self { *self }
}
pub type PQconninfoOption = _PQconninfoOption;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct _bindgen_ty_8 {
    pub len: ::std::os::raw::c_int,
    pub isint: ::std::os::raw::c_int,
    pub u: _bindgen_ty_8__bindgen_ty_1,
}
#[repr(C)]
#[derive(Debug, Copy)]
pub struct _bindgen_ty_8__bindgen_ty_1 {
    pub ptr: __BindgenUnionField<*mut ::std::os::raw::c_int>,
    pub integer: __BindgenUnionField<::std::os::raw::c_int>,
    pub bindgen_union_field: u64,
}
#[test]
fn bindgen_test_layout__bindgen_ty_8__bindgen_ty_1() {
    assert_eq!(::std::mem::size_of::<_bindgen_ty_8__bindgen_ty_1>() , 8usize);
    assert_eq!(::std::mem::align_of::<_bindgen_ty_8__bindgen_ty_1>() ,
               8usize);
}
impl Clone for _bindgen_ty_8__bindgen_ty_1 {
    fn clone(&self) -> Self { *self }
}
#[test]
fn bindgen_test_layout__bindgen_ty_8() {
    assert_eq!(::std::mem::size_of::<_bindgen_ty_8>() , 16usize);
    assert_eq!(::std::mem::align_of::<_bindgen_ty_8>() , 8usize);
}
impl Clone for _bindgen_ty_8 {
    fn clone(&self) -> Self { *self }
}
pub type PQArgBlock = _bindgen_ty_8;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct pgresAttDesc {
    pub name: *mut ::std::os::raw::c_char,
    pub tableid: Oid,
    pub columnid: ::std::os::raw::c_int,
    pub format: ::std::os::raw::c_int,
    pub typid: Oid,
    pub typlen: ::std::os::raw::c_int,
    pub atttypmod: ::std::os::raw::c_int,
}
#[test]
fn bindgen_test_layout_pgresAttDesc() {
    assert_eq!(::std::mem::size_of::<pgresAttDesc>() , 32usize);
    assert_eq!(::std::mem::align_of::<pgresAttDesc>() , 8usize);
}
impl Clone for pgresAttDesc {
    fn clone(&self) -> Self { *self }
}
pub type PGresAttDesc = pgresAttDesc;
extern "C" {
    pub fn PQconnectStart(conninfo: *const ::std::os::raw::c_char)
     -> *mut PGconn;
}
extern "C" {
    pub fn PQconnectStartParams(keywords:
                                    *const *const ::std::os::raw::c_char,
                                values: *const *const ::std::os::raw::c_char,
                                expand_dbname: ::std::os::raw::c_int)
     -> *mut PGconn;
}
extern "C" {
    pub fn PQconnectPoll(conn: *mut PGconn) -> PostgresPollingStatusType;
}
extern "C" {
    pub fn PQconnectdb(conninfo: *const ::std::os::raw::c_char)
     -> *mut PGconn;
}
extern "C" {
    pub fn PQconnectdbParams(keywords: *const *const ::std::os::raw::c_char,
                             values: *const *const ::std::os::raw::c_char,
                             expand_dbname: ::std::os::raw::c_int)
     -> *mut PGconn;
}
extern "C" {
    pub fn PQsetdbLogin(pghost: *const ::std::os::raw::c_char,
                        pgport: *const ::std::os::raw::c_char,
                        pgoptions: *const ::std::os::raw::c_char,
                        pgtty: *const ::std::os::raw::c_char,
                        dbName: *const ::std::os::raw::c_char,
                        login: *const ::std::os::raw::c_char,
                        pwd: *const ::std::os::raw::c_char) -> *mut PGconn;
}
extern "C" {
    pub fn PQfinish(conn: *mut PGconn);
}
extern "C" {
    pub fn PQconndefaults() -> *mut PQconninfoOption;
}
extern "C" {
    pub fn PQconninfoParse(conninfo: *const ::std::os::raw::c_char,
                           errmsg: *mut *mut ::std::os::raw::c_char)
     -> *mut PQconninfoOption;
}
extern "C" {
    pub fn PQconninfo(conn: *mut PGconn) -> *mut PQconninfoOption;
}
extern "C" {
    pub fn PQconninfoFree(connOptions: *mut PQconninfoOption);
}
extern "C" {
    pub fn PQresetStart(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQresetPoll(conn: *mut PGconn) -> PostgresPollingStatusType;
}
extern "C" {
    pub fn PQreset(conn: *mut PGconn);
}
extern "C" {
    pub fn PQgetCancel(conn: *mut PGconn) -> *mut PGcancel;
}
extern "C" {
    pub fn PQfreeCancel(cancel: *mut PGcancel);
}
extern "C" {
    pub fn PQcancel(cancel: *mut PGcancel,
                    errbuf: *mut ::std::os::raw::c_char,
                    errbufsize: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQrequestCancel(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQdb(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQuser(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQpass(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQhost(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQport(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQtty(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQoptions(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQstatus(conn: *const PGconn) -> ConnStatusType;
}
extern "C" {
    pub fn PQtransactionStatus(conn: *const PGconn)
     -> PGTransactionStatusType;
}
extern "C" {
    pub fn PQparameterStatus(conn: *const PGconn,
                             paramName: *const ::std::os::raw::c_char)
     -> *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQprotocolVersion(conn: *const PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQserverVersion(conn: *const PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQerrorMessage(conn: *const PGconn) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQsocket(conn: *const PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQbackendPID(conn: *const PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQconnectionNeedsPassword(conn: *const PGconn)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQconnectionUsedPassword(conn: *const PGconn)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQclientEncoding(conn: *const PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsetClientEncoding(conn: *mut PGconn,
                               encoding: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsslInUse(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsslStruct(conn: *mut PGconn,
                       struct_name: *const ::std::os::raw::c_char)
     -> *mut ::std::os::raw::c_void;
}
extern "C" {
    pub fn PQsslAttribute(conn: *mut PGconn,
                          attribute_name: *const ::std::os::raw::c_char)
     -> *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQsslAttributeNames(conn: *mut PGconn)
     -> *const *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQgetssl(conn: *mut PGconn) -> *mut ::std::os::raw::c_void;
}
extern "C" {
    pub fn PQinitSSL(do_init: ::std::os::raw::c_int);
}
extern "C" {
    pub fn PQinitOpenSSL(do_ssl: ::std::os::raw::c_int,
                         do_crypto: ::std::os::raw::c_int);
}
extern "C" {
    pub fn PQsetErrorVerbosity(conn: *mut PGconn, verbosity: PGVerbosity)
     -> PGVerbosity;
}
extern "C" {
    pub fn PQtrace(conn: *mut PGconn, debug_port: *mut FILE);
}
extern "C" {
    pub fn PQuntrace(conn: *mut PGconn);
}
extern "C" {
    pub fn PQsetNoticeReceiver(conn: *mut PGconn, proc_: PQnoticeReceiver,
                               arg: *mut ::std::os::raw::c_void)
     -> PQnoticeReceiver;
}
extern "C" {
    pub fn PQsetNoticeProcessor(conn: *mut PGconn, proc_: PQnoticeProcessor,
                                arg: *mut ::std::os::raw::c_void)
     -> PQnoticeProcessor;
}
pub type pgthreadlock_t =
    ::std::option::Option<unsafe extern "C" fn(acquire:
                                                   ::std::os::raw::c_int)>;
extern "C" {
    pub fn PQregisterThreadLock(newhandler: pgthreadlock_t) -> pgthreadlock_t;
}
extern "C" {
    pub fn PQexec(conn: *mut PGconn, query: *const ::std::os::raw::c_char)
     -> *mut PGresult;
}
extern "C" {
    pub fn PQexecParams(conn: *mut PGconn,
                        command: *const ::std::os::raw::c_char,
                        nParams: ::std::os::raw::c_int,
                        paramTypes: *const Oid,
                        paramValues: *const *const ::std::os::raw::c_char,
                        paramLengths: *const ::std::os::raw::c_int,
                        paramFormats: *const ::std::os::raw::c_int,
                        resultFormat: ::std::os::raw::c_int) -> *mut PGresult;
}
extern "C" {
    pub fn PQprepare(conn: *mut PGconn,
                     stmtName: *const ::std::os::raw::c_char,
                     query: *const ::std::os::raw::c_char,
                     nParams: ::std::os::raw::c_int, paramTypes: *const Oid)
     -> *mut PGresult;
}
extern "C" {
    pub fn PQexecPrepared(conn: *mut PGconn,
                          stmtName: *const ::std::os::raw::c_char,
                          nParams: ::std::os::raw::c_int,
                          paramValues: *const *const ::std::os::raw::c_char,
                          paramLengths: *const ::std::os::raw::c_int,
                          paramFormats: *const ::std::os::raw::c_int,
                          resultFormat: ::std::os::raw::c_int)
     -> *mut PGresult;
}
extern "C" {
    pub fn PQsendQuery(conn: *mut PGconn,
                       query: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsendQueryParams(conn: *mut PGconn,
                             command: *const ::std::os::raw::c_char,
                             nParams: ::std::os::raw::c_int,
                             paramTypes: *const Oid,
                             paramValues:
                                 *const *const ::std::os::raw::c_char,
                             paramLengths: *const ::std::os::raw::c_int,
                             paramFormats: *const ::std::os::raw::c_int,
                             resultFormat: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsendPrepare(conn: *mut PGconn,
                         stmtName: *const ::std::os::raw::c_char,
                         query: *const ::std::os::raw::c_char,
                         nParams: ::std::os::raw::c_int,
                         paramTypes: *const Oid) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsendQueryPrepared(conn: *mut PGconn,
                               stmtName: *const ::std::os::raw::c_char,
                               nParams: ::std::os::raw::c_int,
                               paramValues:
                                   *const *const ::std::os::raw::c_char,
                               paramLengths: *const ::std::os::raw::c_int,
                               paramFormats: *const ::std::os::raw::c_int,
                               resultFormat: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsetSingleRowMode(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQgetResult(conn: *mut PGconn) -> *mut PGresult;
}
extern "C" {
    pub fn PQisBusy(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQconsumeInput(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQnotifies(conn: *mut PGconn) -> *mut PGnotify;
}
extern "C" {
    pub fn PQputCopyData(conn: *mut PGconn,
                         buffer: *const ::std::os::raw::c_char,
                         nbytes: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQputCopyEnd(conn: *mut PGconn,
                        errormsg: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQgetCopyData(conn: *mut PGconn,
                         buffer: *mut *mut ::std::os::raw::c_char,
                         async: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQgetline(conn: *mut PGconn, string: *mut ::std::os::raw::c_char,
                     length: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQputline(conn: *mut PGconn, string: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQgetlineAsync(conn: *mut PGconn,
                          buffer: *mut ::std::os::raw::c_char,
                          bufsize: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQputnbytes(conn: *mut PGconn,
                       buffer: *const ::std::os::raw::c_char,
                       nbytes: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQendcopy(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsetnonblocking(conn: *mut PGconn, arg: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQisnonblocking(conn: *const PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQisthreadsafe() -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQping(conninfo: *const ::std::os::raw::c_char) -> PGPing;
}
extern "C" {
    pub fn PQpingParams(keywords: *const *const ::std::os::raw::c_char,
                        values: *const *const ::std::os::raw::c_char,
                        expand_dbname: ::std::os::raw::c_int) -> PGPing;
}
extern "C" {
    pub fn PQflush(conn: *mut PGconn) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQfn(conn: *mut PGconn, fnid: ::std::os::raw::c_int,
                result_buf: *mut ::std::os::raw::c_int,
                result_len: *mut ::std::os::raw::c_int,
                result_is_int: ::std::os::raw::c_int, args: *const PQArgBlock,
                nargs: ::std::os::raw::c_int) -> *mut PGresult;
}
extern "C" {
    pub fn PQresultStatus(res: *const PGresult) -> ExecStatusType;
}
extern "C" {
    pub fn PQresStatus(status: ExecStatusType) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQresultErrorMessage(res: *const PGresult)
     -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQresultErrorField(res: *const PGresult,
                              fieldcode: ::std::os::raw::c_int)
     -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQntuples(res: *const PGresult) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQnfields(res: *const PGresult) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQbinaryTuples(res: *const PGresult) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQfname(res: *const PGresult, field_num: ::std::os::raw::c_int)
     -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQfnumber(res: *const PGresult,
                     field_name: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQftable(res: *const PGresult, field_num: ::std::os::raw::c_int)
     -> Oid;
}
extern "C" {
    pub fn PQftablecol(res: *const PGresult, field_num: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQfformat(res: *const PGresult, field_num: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQftype(res: *const PGresult, field_num: ::std::os::raw::c_int)
     -> Oid;
}
extern "C" {
    pub fn PQfsize(res: *const PGresult, field_num: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQfmod(res: *const PGresult, field_num: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQcmdStatus(res: *mut PGresult) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQoidStatus(res: *const PGresult) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQoidValue(res: *const PGresult) -> Oid;
}
extern "C" {
    pub fn PQcmdTuples(res: *mut PGresult) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQgetvalue(res: *const PGresult, tup_num: ::std::os::raw::c_int,
                      field_num: ::std::os::raw::c_int)
     -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQgetlength(res: *const PGresult, tup_num: ::std::os::raw::c_int,
                       field_num: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQgetisnull(res: *const PGresult, tup_num: ::std::os::raw::c_int,
                       field_num: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQnparams(res: *const PGresult) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQparamtype(res: *const PGresult, param_num: ::std::os::raw::c_int)
     -> Oid;
}
extern "C" {
    pub fn PQdescribePrepared(conn: *mut PGconn,
                              stmt: *const ::std::os::raw::c_char)
     -> *mut PGresult;
}
extern "C" {
    pub fn PQdescribePortal(conn: *mut PGconn,
                            portal: *const ::std::os::raw::c_char)
     -> *mut PGresult;
}
extern "C" {
    pub fn PQsendDescribePrepared(conn: *mut PGconn,
                                  stmt: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQsendDescribePortal(conn: *mut PGconn,
                                portal: *const ::std::os::raw::c_char)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQclear(res: *mut PGresult);
}
extern "C" {
    pub fn PQfreemem(ptr: *mut ::std::os::raw::c_void);
}
extern "C" {
    pub fn PQmakeEmptyPGresult(conn: *mut PGconn, status: ExecStatusType)
     -> *mut PGresult;
}
extern "C" {
    pub fn PQcopyResult(src: *const PGresult, flags: ::std::os::raw::c_int)
     -> *mut PGresult;
}
extern "C" {
    pub fn PQsetResultAttrs(res: *mut PGresult,
                            numAttributes: ::std::os::raw::c_int,
                            attDescs: *mut PGresAttDesc)
     -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQresultAlloc(res: *mut PGresult, nBytes: usize)
     -> *mut ::std::os::raw::c_void;
}
extern "C" {
    pub fn PQsetvalue(res: *mut PGresult, tup_num: ::std::os::raw::c_int,
                      field_num: ::std::os::raw::c_int,
                      value: *mut ::std::os::raw::c_char,
                      len: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQescapeStringConn(conn: *mut PGconn,
                              to: *mut ::std::os::raw::c_char,
                              from: *const ::std::os::raw::c_char,
                              length: usize,
                              error: *mut ::std::os::raw::c_int) -> usize;
}
extern "C" {
    pub fn PQescapeLiteral(conn: *mut PGconn,
                           str: *const ::std::os::raw::c_char, len: usize)
     -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQescapeIdentifier(conn: *mut PGconn,
                              str: *const ::std::os::raw::c_char, len: usize)
     -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn PQescapeByteaConn(conn: *mut PGconn,
                             from: *const ::std::os::raw::c_uchar,
                             from_length: usize, to_length: *mut usize)
     -> *mut ::std::os::raw::c_uchar;
}
extern "C" {
    pub fn PQunescapeBytea(strtext: *const ::std::os::raw::c_uchar,
                           retbuflen: *mut usize)
     -> *mut ::std::os::raw::c_uchar;
}
extern "C" {
    pub fn PQescapeString(to: *mut ::std::os::raw::c_char,
                          from: *const ::std::os::raw::c_char, length: usize)
     -> usize;
}
extern "C" {
    pub fn PQescapeBytea(from: *const ::std::os::raw::c_uchar,
                         from_length: usize, to_length: *mut usize)
     -> *mut ::std::os::raw::c_uchar;
}
extern "C" {
    pub fn PQprint(fout: *mut FILE, res: *const PGresult,
                   ps: *const PQprintOpt);
}
extern "C" {
    pub fn PQdisplayTuples(res: *const PGresult, fp: *mut FILE,
                           fillAlign: ::std::os::raw::c_int,
                           fieldSep: *const ::std::os::raw::c_char,
                           printHeader: ::std::os::raw::c_int,
                           quiet: ::std::os::raw::c_int);
}
extern "C" {
    pub fn PQprintTuples(res: *const PGresult, fout: *mut FILE,
                         printAttName: ::std::os::raw::c_int,
                         terseOutput: ::std::os::raw::c_int,
                         width: ::std::os::raw::c_int);
}
extern "C" {
    pub fn PQlibVersion() -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQmblen(s: *const ::std::os::raw::c_char,
                   encoding: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQdsplen(s: *const ::std::os::raw::c_char,
                    encoding: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQenv2encoding() -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn PQencryptPassword(passwd: *const ::std::os::raw::c_char,
                             user: *const ::std::os::raw::c_char)
     -> *mut ::std::os::raw::c_char;
}
