|
@@ -0,0 +1,352 @@
|
|
|
+# 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.}
|
|
|
+
|
|
|
+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
|
|
|
+ TSockAddr* = array[1..112, int8]
|
|
|
+ TPGresAttDesc*{.pure, final.} = object
|
|
|
+ name*: cstring
|
|
|
+ adtid*: Oid
|
|
|
+ adtsize*: int
|
|
|
+
|
|
|
+ PPGresAttDesc* = ptr TPGresAttDesc
|
|
|
+ PPPGresAttDesc* = ptr PPGresAttDesc
|
|
|
+ TPGresAttValue*{.pure, final.} = object
|
|
|
+ length*: int32
|
|
|
+ value*: cstring
|
|
|
+
|
|
|
+ PPGresAttValue* = ptr TPGresAttValue
|
|
|
+ PPPGresAttValue* = ptr PPGresAttValue
|
|
|
+ PExecStatusType* = ptr TExecStatusType
|
|
|
+ TExecStatusType* = 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
|
|
|
+ TPGlobjfuncs*{.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 TPGlobjfuncs
|
|
|
+ PConnStatusType* = ptr TConnStatusType
|
|
|
+ TConnStatusType* = enum
|
|
|
+ CONNECTION_OK, CONNECTION_BAD, CONNECTION_STARTED, CONNECTION_MADE,
|
|
|
+ CONNECTION_AWAITING_RESPONSE, CONNECTION_AUTH_OK, CONNECTION_SETENV,
|
|
|
+ CONNECTION_SSL_STARTUP, CONNECTION_NEEDED
|
|
|
+ TPGconn*{.pure, final.} = object
|
|
|
+ pghost*: cstring
|
|
|
+ pgtty*: cstring
|
|
|
+ pgport*: cstring
|
|
|
+ pgoptions*: cstring
|
|
|
+ dbName*: cstring
|
|
|
+ status*: TConnStatusType
|
|
|
+ errorMessage*: array[0..(ERROR_MSG_LENGTH) - 1, char]
|
|
|
+ Pfin*: TFile
|
|
|
+ Pfout*: TFile
|
|
|
+ Pfdebug*: TFile
|
|
|
+ sock*: int32
|
|
|
+ laddr*: TSockAddr
|
|
|
+ raddr*: TSockAddr
|
|
|
+ salt*: array[0..(2) - 1, char]
|
|
|
+ asyncNotifyWaiting*: int32
|
|
|
+ notifyList*: pointer
|
|
|
+ pguser*: cstring
|
|
|
+ pgpass*: cstring
|
|
|
+ lobjfuncs*: PPGlobjfuncs
|
|
|
+
|
|
|
+ PPGconn* = ptr TPGconn
|
|
|
+ TPGresult*{.pure, final.} = object
|
|
|
+ ntups*: int32
|
|
|
+ numAttributes*: int32
|
|
|
+ attDescs*: PPGresAttDesc
|
|
|
+ tuples*: PPPGresAttValue
|
|
|
+ tupArrSize*: int32
|
|
|
+ resultStatus*: TExecStatusType
|
|
|
+ cmdStatus*: array[0..(CMDSTATUS_LEN) - 1, char]
|
|
|
+ binary*: int32
|
|
|
+ conn*: PPGconn
|
|
|
+
|
|
|
+ PPGresult* = ptr TPGresult
|
|
|
+ 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
|
|
|
+
|
|
|
+
|
|
|
+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): TConnStatusType{.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: TFile){.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): TExecStatusType{.cdecl, dynlib: dllName,
|
|
|
+ importc: "PQresultStatus".}
|
|
|
+proc PQresStatus*(status: TExecStatusType): 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: TExecStatusType): 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: TFile, res: PPGresult, ps: PPQprintOpt){.cdecl,
|
|
|
+ dynlib: dllName, importc: "PQprint".}
|
|
|
+proc PQdisplayTuples*(res: PPGresult, fp: TFile, fillAlign: int32,
|
|
|
+ fieldSep: cstring, printHeader: int32, quiet: int32){.
|
|
|
+ cdecl, dynlib: dllName, importc: "PQdisplayTuples".}
|
|
|
+proc PQprintTuples*(res: PPGresult, fout: TFile, 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, "", "")
|