123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- #
- #
- # Nim's Runtime Library
- # (c) Copyright 2015 Andreas Rumpf
- #
- # See the file "copying.txt", included in this
- # distribution, for details about the copyright.
- #
- # This module contains the definitions for structures and externs for
- # functions used by frontend postgres applications. It is based on
- # Postgresql's libpq-fe.h.
- #
- # It is for postgreSQL version 7.4 and higher with support for the v3.0
- # connection-protocol.
- #
- {.deadCodeElim: on.} # dce option deprecated
- when defined(windows):
- const
- dllName = "libpq.dll"
- elif defined(macosx):
- const
- dllName = "libpq.dylib"
- else:
- const
- dllName = "libpq.so(.5|)"
- type
- POid* = ptr Oid
- Oid* = int32
- const
- ERROR_MSG_LENGTH* = 4096
- CMDSTATUS_LEN* = 40
- type
- SockAddr* = array[1..112, int8]
- PGresAttDesc*{.pure, final.} = object
- name*: cstring
- adtid*: Oid
- adtsize*: int
- PPGresAttDesc* = ptr PGresAttDesc
- PPPGresAttDesc* = ptr PPGresAttDesc
- PGresAttValue*{.pure, final.} = object
- length*: int32
- value*: cstring
- PPGresAttValue* = ptr PGresAttValue
- PPPGresAttValue* = ptr PPGresAttValue
- PExecStatusType* = ptr ExecStatusType
- ExecStatusType* = enum
- PGRES_EMPTY_QUERY = 0, PGRES_COMMAND_OK, PGRES_TUPLES_OK, PGRES_COPY_OUT,
- PGRES_COPY_IN, PGRES_BAD_RESPONSE, PGRES_NONFATAL_ERROR, PGRES_FATAL_ERROR
- PGlobjfuncs*{.pure, final.} = object
- fn_lo_open*: Oid
- fn_lo_close*: Oid
- fn_lo_creat*: Oid
- fn_lo_unlink*: Oid
- fn_lo_lseek*: Oid
- fn_lo_tell*: Oid
- fn_lo_read*: Oid
- fn_lo_write*: Oid
- PPGlobjfuncs* = ptr PGlobjfuncs
- PConnStatusType* = ptr ConnStatusType
- ConnStatusType* = enum
- CONNECTION_OK, CONNECTION_BAD, CONNECTION_STARTED, CONNECTION_MADE,
- CONNECTION_AWAITING_RESPONSE, CONNECTION_AUTH_OK, CONNECTION_SETENV,
- CONNECTION_SSL_STARTUP, CONNECTION_NEEDED
- PGconn*{.pure, final.} = object
- pghost*: cstring
- pgtty*: cstring
- pgport*: cstring
- pgoptions*: cstring
- dbName*: cstring
- status*: ConnStatusType
- errorMessage*: array[0..(ERROR_MSG_LENGTH) - 1, char]
- Pfin*: File
- Pfout*: File
- Pfdebug*: File
- sock*: int32
- laddr*: SockAddr
- raddr*: SockAddr
- salt*: array[0..(2) - 1, char]
- asyncNotifyWaiting*: int32
- notifyList*: pointer
- pguser*: cstring
- pgpass*: cstring
- lobjfuncs*: PPGlobjfuncs
- PPGconn* = ptr PGconn
- PGresult*{.pure, final.} = object
- ntups*: int32
- numAttributes*: int32
- attDescs*: PPGresAttDesc
- tuples*: PPPGresAttValue
- tupArrSize*: int32
- resultStatus*: ExecStatusType
- cmdStatus*: array[0..(CMDSTATUS_LEN) - 1, char]
- binary*: int32
- conn*: PPGconn
- PPGresult* = ptr PGresult
- PPostgresPollingStatusType* = ptr PostgresPollingStatusType
- PostgresPollingStatusType* = enum
- PGRES_POLLING_FAILED = 0, PGRES_POLLING_READING, PGRES_POLLING_WRITING,
- PGRES_POLLING_OK, PGRES_POLLING_ACTIVE
- PPGTransactionStatusType* = ptr PGTransactionStatusType
- PGTransactionStatusType* = enum
- PQTRANS_IDLE, PQTRANS_ACTIVE, PQTRANS_INTRANS, PQTRANS_INERROR,
- PQTRANS_UNKNOWN
- PPGVerbosity* = ptr PGVerbosity
- PGVerbosity* = enum
- PQERRORS_TERSE, PQERRORS_DEFAULT, PQERRORS_VERBOSE
- PpgNotify* = ptr pgNotify
- pgNotify*{.pure, final.} = object
- relname*: cstring
- be_pid*: int32
- extra*: cstring
- PQnoticeReceiver* = proc (arg: pointer, res: PPGresult){.cdecl.}
- PQnoticeProcessor* = proc (arg: pointer, message: cstring){.cdecl.}
- Ppqbool* = ptr pqbool
- pqbool* = char
- P_PQprintOpt* = ptr PQprintOpt
- PQprintOpt*{.pure, final.} = object
- header*: pqbool
- align*: pqbool
- standard*: pqbool
- html3*: pqbool
- expanded*: pqbool
- pager*: pqbool
- fieldSep*: cstring
- tableOpt*: cstring
- caption*: cstring
- fieldName*: ptr cstring
- P_PQconninfoOption* = ptr PQconninfoOption
- PQconninfoOption*{.pure, final.} = object
- keyword*: cstring
- envvar*: cstring
- compiled*: cstring
- val*: cstring
- label*: cstring
- dispchar*: cstring
- dispsize*: int32
- PPQArgBlock* = ptr PQArgBlock
- PQArgBlock*{.pure, final.} = object
- length*: int32
- isint*: int32
- p*: pointer
- {.deprecated: [TSockAddr: SockAddr, TPGresAttDesc: PgresAttDesc,
- TPGresAttValue: PgresAttValue, TExecStatusType: ExecStatusType,
- TPGlobjfuncs: Pglobjfuncs, TConnStatusType: ConnStatusType, TPGconn: Pgconn,
- TPGresult: PGresult].}
- proc pqconnectStart*(conninfo: cstring): PPGconn{.cdecl, dynlib: dllName,
- importc: "PQconnectStart".}
- proc pqconnectPoll*(conn: PPGconn): PostgresPollingStatusType{.cdecl,
- dynlib: dllName, importc: "PQconnectPoll".}
- proc pqconnectdb*(conninfo: cstring): PPGconn{.cdecl, dynlib: dllName,
- importc: "PQconnectdb".}
- proc pqsetdbLogin*(pghost: cstring, pgport: cstring, pgoptions: cstring,
- pgtty: cstring, dbName: cstring, login: cstring, pwd: cstring): PPGconn{.
- cdecl, dynlib: dllName, importc: "PQsetdbLogin".}
- proc pqsetdb*(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME: cstring): Ppgconn
- proc pqfinish*(conn: PPGconn){.cdecl, dynlib: dllName, importc: "PQfinish".}
- proc pqconndefaults*(): PPQconninfoOption{.cdecl, dynlib: dllName,
- importc: "PQconndefaults".}
- proc pqconninfoFree*(connOptions: PPQconninfoOption){.cdecl, dynlib: dllName,
- importc: "PQconninfoFree".}
- proc pqresetStart*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQresetStart".}
- proc pqresetPoll*(conn: PPGconn): PostgresPollingStatusType{.cdecl,
- dynlib: dllName, importc: "PQresetPoll".}
- proc pqreset*(conn: PPGconn){.cdecl, dynlib: dllName, importc: "PQreset".}
- proc pqrequestCancel*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQrequestCancel".}
- proc pqdb*(conn: PPGconn): cstring{.cdecl, dynlib: dllName, importc: "PQdb".}
- proc pquser*(conn: PPGconn): cstring{.cdecl, dynlib: dllName, importc: "PQuser".}
- proc pqpass*(conn: PPGconn): cstring{.cdecl, dynlib: dllName, importc: "PQpass".}
- proc pqhost*(conn: PPGconn): cstring{.cdecl, dynlib: dllName, importc: "PQhost".}
- proc pqport*(conn: PPGconn): cstring{.cdecl, dynlib: dllName, importc: "PQport".}
- proc pqtty*(conn: PPGconn): cstring{.cdecl, dynlib: dllName, importc: "PQtty".}
- proc pqoptions*(conn: PPGconn): cstring{.cdecl, dynlib: dllName,
- importc: "PQoptions".}
- proc pqstatus*(conn: PPGconn): ConnStatusType{.cdecl, dynlib: dllName,
- importc: "PQstatus".}
- proc pqtransactionStatus*(conn: PPGconn): PGTransactionStatusType{.cdecl,
- dynlib: dllName, importc: "PQtransactionStatus".}
- proc pqparameterStatus*(conn: PPGconn, paramName: cstring): cstring{.cdecl,
- dynlib: dllName, importc: "PQparameterStatus".}
- proc pqprotocolVersion*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQprotocolVersion".}
- proc pqerrorMessage*(conn: PPGconn): cstring{.cdecl, dynlib: dllName,
- importc: "PQerrorMessage".}
- proc pqsocket*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQsocket".}
- proc pqbackendPID*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQbackendPID".}
- proc pqclientEncoding*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQclientEncoding".}
- proc pqsetClientEncoding*(conn: PPGconn, encoding: cstring): int32{.cdecl,
- dynlib: dllName, importc: "PQsetClientEncoding".}
- when defined(USE_SSL):
- # Get the SSL structure associated with a connection
- proc pqgetssl*(conn: PPGconn): PSSL{.cdecl, dynlib: dllName,
- importc: "PQgetssl".}
- proc pqsetErrorVerbosity*(conn: PPGconn, verbosity: PGVerbosity): PGVerbosity{.
- cdecl, dynlib: dllName, importc: "PQsetErrorVerbosity".}
- proc pqtrace*(conn: PPGconn, debug_port: File){.cdecl, dynlib: dllName,
- importc: "PQtrace".}
- proc pquntrace*(conn: PPGconn){.cdecl, dynlib: dllName, importc: "PQuntrace".}
- proc pqsetNoticeReceiver*(conn: PPGconn, theProc: PQnoticeReceiver, arg: pointer): PQnoticeReceiver{.
- cdecl, dynlib: dllName, importc: "PQsetNoticeReceiver".}
- proc pqsetNoticeProcessor*(conn: PPGconn, theProc: PQnoticeProcessor,
- arg: pointer): PQnoticeProcessor{.cdecl,
- dynlib: dllName, importc: "PQsetNoticeProcessor".}
- proc pqexec*(conn: PPGconn, query: cstring): PPGresult{.cdecl, dynlib: dllName,
- importc: "PQexec".}
- proc pqexecParams*(conn: PPGconn, command: cstring, nParams: int32,
- paramTypes: POid, paramValues: cstringArray,
- paramLengths, paramFormats: ptr int32, resultFormat: int32): PPGresult{.
- cdecl, dynlib: dllName, importc: "PQexecParams".}
- proc pqprepare*(conn: PPGconn, stmtName, query: cstring, nParams: int32,
- paramTypes: POid): PPGresult{.cdecl, dynlib: dllName, importc: "PQprepare".}
- proc pqexecPrepared*(conn: PPGconn, stmtName: cstring, nParams: int32,
- paramValues: cstringArray,
- paramLengths, paramFormats: ptr int32, resultFormat: int32): PPGresult{.
- cdecl, dynlib: dllName, importc: "PQexecPrepared".}
- proc pqsendQuery*(conn: PPGconn, query: cstring): int32{.cdecl, dynlib: dllName,
- importc: "PQsendQuery".}
- proc pqsendQueryParams*(conn: PPGconn, command: cstring, nParams: int32,
- paramTypes: POid, paramValues: cstringArray,
- paramLengths, paramFormats: ptr int32,
- resultFormat: int32): int32{.cdecl, dynlib: dllName,
- importc: "PQsendQueryParams".}
- proc pqsendQueryPrepared*(conn: PPGconn, stmtName: cstring, nParams: int32,
- paramValues: cstringArray,
- paramLengths, paramFormats: ptr int32,
- resultFormat: int32): int32{.cdecl, dynlib: dllName,
- importc: "PQsendQueryPrepared".}
- proc pqgetResult*(conn: PPGconn): PPGresult{.cdecl, dynlib: dllName,
- importc: "PQgetResult".}
- proc pqisBusy*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQisBusy".}
- proc pqconsumeInput*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQconsumeInput".}
- proc pqnotifies*(conn: PPGconn): PPGnotify{.cdecl, dynlib: dllName,
- importc: "PQnotifies".}
- proc pqputCopyData*(conn: PPGconn, buffer: cstring, nbytes: int32): int32{.
- cdecl, dynlib: dllName, importc: "PQputCopyData".}
- proc pqputCopyEnd*(conn: PPGconn, errormsg: cstring): int32{.cdecl,
- dynlib: dllName, importc: "PQputCopyEnd".}
- proc pqgetCopyData*(conn: PPGconn, buffer: cstringArray, async: int32): int32{.
- cdecl, dynlib: dllName, importc: "PQgetCopyData".}
- proc pqgetline*(conn: PPGconn, str: cstring, len: int32): int32{.cdecl,
- dynlib: dllName, importc: "PQgetline".}
- proc pqputline*(conn: PPGconn, str: cstring): int32{.cdecl, dynlib: dllName,
- importc: "PQputline".}
- proc pqgetlineAsync*(conn: PPGconn, buffer: cstring, bufsize: int32): int32{.
- cdecl, dynlib: dllName, importc: "PQgetlineAsync".}
- proc pqputnbytes*(conn: PPGconn, buffer: cstring, nbytes: int32): int32{.cdecl,
- dynlib: dllName, importc: "PQputnbytes".}
- proc pqendcopy*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQendcopy".}
- proc pqsetnonblocking*(conn: PPGconn, arg: int32): int32{.cdecl,
- dynlib: dllName, importc: "PQsetnonblocking".}
- proc pqisnonblocking*(conn: PPGconn): int32{.cdecl, dynlib: dllName,
- importc: "PQisnonblocking".}
- proc pqflush*(conn: PPGconn): int32{.cdecl, dynlib: dllName, importc: "PQflush".}
- proc pqfn*(conn: PPGconn, fnid: int32, result_buf, result_len: ptr int32,
- result_is_int: int32, args: PPQArgBlock, nargs: int32): PPGresult{.
- cdecl, dynlib: dllName, importc: "PQfn".}
- proc pqresultStatus*(res: PPGresult): ExecStatusType{.cdecl, dynlib: dllName,
- importc: "PQresultStatus".}
- proc pqresStatus*(status: ExecStatusType): cstring{.cdecl, dynlib: dllName,
- importc: "PQresStatus".}
- proc pqresultErrorMessage*(res: PPGresult): cstring{.cdecl, dynlib: dllName,
- importc: "PQresultErrorMessage".}
- proc pqresultErrorField*(res: PPGresult, fieldcode: int32): cstring{.cdecl,
- dynlib: dllName, importc: "PQresultErrorField".}
- proc pqntuples*(res: PPGresult): int32{.cdecl, dynlib: dllName,
- importc: "PQntuples".}
- proc pqnfields*(res: PPGresult): int32{.cdecl, dynlib: dllName,
- importc: "PQnfields".}
- proc pqbinaryTuples*(res: PPGresult): int32{.cdecl, dynlib: dllName,
- importc: "PQbinaryTuples".}
- proc pqfname*(res: PPGresult, field_num: int32): cstring{.cdecl,
- dynlib: dllName, importc: "PQfname".}
- proc pqfnumber*(res: PPGresult, field_name: cstring): int32{.cdecl,
- dynlib: dllName, importc: "PQfnumber".}
- proc pqftable*(res: PPGresult, field_num: int32): Oid{.cdecl, dynlib: dllName,
- importc: "PQftable".}
- proc pqftablecol*(res: PPGresult, field_num: int32): int32{.cdecl,
- dynlib: dllName, importc: "PQftablecol".}
- proc pqfformat*(res: PPGresult, field_num: int32): int32{.cdecl,
- dynlib: dllName, importc: "PQfformat".}
- proc pqftype*(res: PPGresult, field_num: int32): Oid{.cdecl, dynlib: dllName,
- importc: "PQftype".}
- proc pqfsize*(res: PPGresult, field_num: int32): int32{.cdecl, dynlib: dllName,
- importc: "PQfsize".}
- proc pqfmod*(res: PPGresult, field_num: int32): int32{.cdecl, dynlib: dllName,
- importc: "PQfmod".}
- proc pqcmdStatus*(res: PPGresult): cstring{.cdecl, dynlib: dllName,
- importc: "PQcmdStatus".}
- proc pqoidStatus*(res: PPGresult): cstring{.cdecl, dynlib: dllName,
- importc: "PQoidStatus".}
- proc pqoidValue*(res: PPGresult): Oid{.cdecl, dynlib: dllName,
- importc: "PQoidValue".}
- proc pqcmdTuples*(res: PPGresult): cstring{.cdecl, dynlib: dllName,
- importc: "PQcmdTuples".}
- proc pqgetvalue*(res: PPGresult, tup_num: int32, field_num: int32): cstring{.
- cdecl, dynlib: dllName, importc: "PQgetvalue".}
- proc pqgetlength*(res: PPGresult, tup_num: int32, field_num: int32): int32{.
- cdecl, dynlib: dllName, importc: "PQgetlength".}
- proc pqgetisnull*(res: PPGresult, tup_num: int32, field_num: int32): int32{.
- cdecl, dynlib: dllName, importc: "PQgetisnull".}
- proc pqclear*(res: PPGresult){.cdecl, dynlib: dllName, importc: "PQclear".}
- proc pqfreemem*(p: pointer){.cdecl, dynlib: dllName, importc: "PQfreemem".}
- proc pqmakeEmptyPGresult*(conn: PPGconn, status: ExecStatusType): PPGresult{.
- cdecl, dynlib: dllName, importc: "PQmakeEmptyPGresult".}
- proc pqescapeString*(till, `from`: cstring, len: int): int{.cdecl,
- dynlib: dllName, importc: "PQescapeString".}
- proc pqescapeBytea*(bintext: cstring, binlen: int, bytealen: var int): cstring{.
- cdecl, dynlib: dllName, importc: "PQescapeBytea".}
- proc pqunescapeBytea*(strtext: cstring, retbuflen: var int): cstring{.cdecl,
- dynlib: dllName, importc: "PQunescapeBytea".}
- proc pqprint*(fout: File, res: PPGresult, ps: PPQprintOpt){.cdecl,
- dynlib: dllName, importc: "PQprint".}
- proc pqdisplayTuples*(res: PPGresult, fp: File, fillAlign: int32,
- fieldSep: cstring, printHeader: int32, quiet: int32){.
- cdecl, dynlib: dllName, importc: "PQdisplayTuples".}
- proc pqprintTuples*(res: PPGresult, fout: File, printAttName: int32,
- terseOutput: int32, width: int32){.cdecl, dynlib: dllName,
- importc: "PQprintTuples".}
- proc lo_open*(conn: PPGconn, lobjId: Oid, mode: int32): int32{.cdecl,
- dynlib: dllName, importc: "lo_open".}
- proc lo_close*(conn: PPGconn, fd: int32): int32{.cdecl, dynlib: dllName,
- importc: "lo_close".}
- proc lo_read*(conn: PPGconn, fd: int32, buf: cstring, length: int): int32{.
- cdecl, dynlib: dllName, importc: "lo_read".}
- proc lo_write*(conn: PPGconn, fd: int32, buf: cstring, length: int): int32{.
- cdecl, dynlib: dllName, importc: "lo_write".}
- proc lo_lseek*(conn: PPGconn, fd: int32, offset: int32, whence: int32): int32{.
- cdecl, dynlib: dllName, importc: "lo_lseek".}
- proc lo_creat*(conn: PPGconn, mode: int32): Oid{.cdecl, dynlib: dllName,
- importc: "lo_creat".}
- proc lo_tell*(conn: PPGconn, fd: int32): int32{.cdecl, dynlib: dllName,
- importc: "lo_tell".}
- proc lo_unlink*(conn: PPGconn, lobjId: Oid): int32{.cdecl, dynlib: dllName,
- importc: "lo_unlink".}
- proc lo_import*(conn: PPGconn, filename: cstring): Oid{.cdecl, dynlib: dllName,
- importc: "lo_import".}
- proc lo_export*(conn: PPGconn, lobjId: Oid, filename: cstring): int32{.cdecl,
- dynlib: dllName, importc: "lo_export".}
- proc pqmblen*(s: cstring, encoding: int32): int32{.cdecl, dynlib: dllName,
- importc: "PQmblen".}
- proc pqenv2encoding*(): int32{.cdecl, dynlib: dllName, importc: "PQenv2encoding".}
- proc pqsetdb(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME: cstring): PPgConn =
- result = pqSetdbLogin(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME, "", "")
|