123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- {
- Contains the Postgres protocol 3 functions calls
- Call InitialisePostgres3 before using any of the calls, and call ReleasePostgres3
- when finished.
- }
- unit postgres3dyn;
- {$mode objfpc}{$H+}
- interface
- uses
- dynlibs, SysUtils, dllistdyn;
- {$IFDEF Unix}
- const
- pqlib = 'libpq.so';
- {$ENDIF}
- {$IFDEF Win32}
- const
- pqlib = 'libpq.dll';
- {$ENDIF}
- {$PACKRECORDS C}
- {$i postgres3types.inc}
- var
- { ----------------
- * Exported functions of libpq
- * ----------------
- }
- { === in fe-connect.c === }
- { make a new client connection to the backend }
- { Asynchronous (non-blocking) }
- (* Const before type ignored *)
- PQconnectStart : function (conninfo:Pchar):PPGconn;cdecl;
- PQconnectPoll : function (conn:PPGconn):PostgresPollingStatusType;cdecl;
- { Synchronous (blocking) }
- (* Const before type ignored *)
- PQconnectdb : function (conninfo:Pchar):PPGconn;cdecl;
- PQsetdbLogin : function (pghost:Pchar; pgport:Pchar; pgoptions:Pchar; pgtty:Pchar; dbName:Pchar;login:Pchar; pwd:Pchar):PPGconn;cdecl;
- { was #define dname(params) para_def_expr }
- { argument types are unknown }
- { return type might be wrong }
- { close the current connection and free the PGconn data structure }
- PQfinish : procedure (conn:PPGconn);cdecl;
- { get info about connection options known to PQconnectdb }
- PQconndefaults : function : PPQconninfoOption;cdecl;
- { free the data structure returned by PQconndefaults() }
- PQconninfoFree : procedure (connOptions:PPQconninfoOption);cdecl;
- {
- * close the current connection and restablish a new one with the same
- * parameters
- }
- { Asynchronous (non-blocking) }
- PQresetStart : function (conn:PPGconn):longint;cdecl;
- PQresetPoll : function (conn:PPGconn):PostgresPollingStatusType;cdecl;
- { Synchronous (blocking) }
- PQreset : procedure (conn:PPGconn);cdecl;
- { issue a cancel request }
- PQrequestCancel : function (conn:PPGconn):longint;cdecl;
- { Accessor functions for PGconn objects }
- PQdb : function (conn:PPGconn):Pchar;cdecl;
- PQuser : function (conn:PPGconn):Pchar;cdecl;
- PQpass : function (conn:PPGconn):Pchar;cdecl;
- PQhost : function (conn:PPGconn):Pchar;cdecl;
- PQport : function (conn:PPGconn):Pchar;cdecl;
- PQtty : function (conn:PPGconn):Pchar;cdecl;
- PQoptions : function (conn:PPGconn):Pchar;cdecl;
- PQstatus : function (conn:PPGconn):TConnStatusType;cdecl;
- PQtransactionStatus : function (conn:PPGconn):PGTransactionStatusType;cdecl;
- PQparameterStatus : function (conn:PPGconn; paramName:Pchar):Pchar;cdecl;
- PQprotocolVersion : function (conn:PPGconn):longint;cdecl;
- PQerrorMessage : function (conn:PPGconn):Pchar;cdecl;
- PQsocket : function (conn:PPGconn):longint;cdecl;
- PQbackendPID : function (conn:PPGconn):longint;cdecl;
- PQclientEncoding : function (conn:PPGconn):longint;cdecl;
- PQsetClientEncoding : function (conn:PPGconn; encoding:Pchar):longint;cdecl;
- {$ifdef USE_SSL}
- { Get the SSL structure associated with a connection }
- PQgetssl : function (conn:PPGconn):PSSL;cdecl;
- {$endif}
- { Set verbosity for PQerrorMessage and PQresultErrorMessage }
- PQsetErrorVerbosity : function (conn:PPGconn; verbosity:PGVerbosity):PGVerbosity;cdecl;
- { Enable/disable tracing }
- PQtrace : procedure (conn:PPGconn; debug_port:PFILE);cdecl;
- PQuntrace : procedure (conn:PPGconn);cdecl;
- { Override default notice handling routines }
- PQsetNoticeReceiver : function (conn:PPGconn; proc:PQnoticeReceiver; arg:pointer):PQnoticeReceiver;cdecl;
- PQsetNoticeProcessor : function (conn:PPGconn; proc:PQnoticeProcessor; arg:pointer):PQnoticeProcessor;cdecl;
- { === in fe-exec.c === }
- { Simple synchronous query }
- PQexec : function (conn:PPGconn; query:Pchar):PPGresult;cdecl;
- PQexecParams : function (conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;
- PQexecPrepared : function (conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;
- PQPrepare : function (conn:PPGconn; stmtName:Pchar; query:Pchar; nParams:longint; paramTypes:POid):PPGresult;cdecl;
- { Interface for multiple-result or asynchronous queries }
- PQsendQuery : function (conn:PPGconn; query:Pchar):longint;cdecl;
- PQsendQueryParams : function (conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):longint;cdecl;
- PQsendQueryPrepared : function (conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;paramFormats:Plongint; resultFormat:longint):longint;cdecl;
- PQgetResult : function (conn:PPGconn):PPGresult;cdecl;
- { Routines for managing an asynchronous query }
- PQisBusy : function (conn:PPGconn):longint;cdecl;
- PQconsumeInput : function (conn:PPGconn):longint;cdecl;
- { LISTEN/NOTIFY support }
- PQnotifies : function (conn:PPGconn):PPGnotify;cdecl;
- { Routines for copy in/out }
- PQputCopyData : function (conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;
- PQputCopyEnd : function (conn:PPGconn; errormsg:Pchar):longint;cdecl;
- PQgetCopyData : function (conn:PPGconn; buffer:PPchar; async:longint):longint;cdecl;
- { Deprecated routines for copy in/out }
- PQgetline : function (conn:PPGconn; _string:Pchar; length:longint):longint;cdecl;
- PQputline : function (conn:PPGconn; _string:Pchar):longint;cdecl;
- PQgetlineAsync : function (conn:PPGconn; buffer:Pchar; bufsize:longint):longint;cdecl;
- PQputnbytes : function (conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;
- PQendcopy : function (conn:PPGconn):longint;cdecl;
- { Set blocking/nonblocking connection to the backend }
- PQsetnonblocking : function (conn:PPGconn; arg:longint):longint;cdecl;
- PQisnonblocking : function (conn:PPGconn):longint;cdecl;
- { Force the write buffer to be written (or at least try) }
- PQflush : function (conn:PPGconn):longint;cdecl;
- {
- * "Fast path" interface --- not really recommended for application
- * use
- }
- PQfn : function (conn:PPGconn; fnid:longint; result_buf:Plongint; result_len:Plongint; result_is_int:longint;args:PPQArgBlock; nargs:longint):PPGresult;cdecl;
- { Accessor functions for PGresult objects }
- PQresultStatus : function (res:PPGresult):TExecStatusType;cdecl;
- PQresStatus : function (status:TExecStatusType):Pchar;cdecl;
- PQresultErrorMessage : function (res:PPGresult):Pchar;cdecl;
- PQresultErrorField : function (res:PPGresult; fieldcode:longint):Pchar;cdecl;
- PQntuples : function (res:PPGresult):longint;cdecl;
- PQnfields : function (res:PPGresult):longint;cdecl;
- PQbinaryTuples : function (res:PPGresult):longint;cdecl;
- PQfname : function (res:PPGresult; field_num:longint):Pchar;cdecl;
- PQfnumber : function (res:PPGresult; field_name:Pchar):longint;cdecl;
- PQftable : function (res:PPGresult; field_num:longint):Oid;cdecl;
- PQftablecol : function (res:PPGresult; field_num:longint):longint;cdecl;
- PQfformat : function (res:PPGresult; field_num:longint):longint;cdecl;
- PQftype : function (res:PPGresult; field_num:longint):Oid;cdecl;
- PQfsize : function (res:PPGresult; field_num:longint):longint;cdecl;
- PQfmod : function (res:PPGresult; field_num:longint):longint;cdecl;
- PQcmdStatus : function (res:PPGresult):Pchar;cdecl;
- PQoidStatus : function (res:PPGresult):Pchar;cdecl;
- { old and ugly }
- PQoidValue : function (res:PPGresult):Oid;cdecl;
- { new and improved }
- PQcmdTuples : function (res:PPGresult):Pchar;cdecl;
- PQgetvalue : function (res:PPGresult; tup_num:longint; field_num:longint):Pchar;cdecl;
- PQgetlength : function (res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;
- PQgetisnull : function (res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;
- { Delete a PGresult }
- PQclear : procedure (res:PPGresult);cdecl;
- { For freeing other alloc'd results, such as PGnotify structs }
- PQfreemem : procedure (ptr:pointer);cdecl;
- { Exists for backward compatibility. bjm 2003-03-24 }
- { was #define dname(params) para_def_expr }
- { argument types are unknown }
- { return type might be wrong }
- // function PQfreeNotify(ptr : longint) : longint;
- {
- * Make an empty PGresult with given status (some apps find this
- * useful). If conn is not NULL and status indicates an error, the
- * conn's errorMessage is copied.
- }
- PQmakeEmptyPGresult : function (conn:PPGconn; status:TExecStatusType):PPGresult;cdecl;
- { Quoting strings before inclusion in queries. }
- PQescapeString : function (till:Pchar; from:Pchar; length:size_t):size_t;cdecl;
- PQescapeBytea : function (bintext:Pbyte; binlen:size_t; bytealen:Psize_t):Pbyte;cdecl;
- PQunescapeBytea : function (strtext:Pbyte; retbuflen:Psize_t):Pbyte;cdecl;
- { === in fe-print.c === }
- { output stream }
- PQprint : procedure (fout:PFILE; res:PPGresult; ps:PPQprintOpt);cdecl;
- { option structure }
- {
- * really old printing routines
- }
- { where to send the output }
- { pad the fields with spaces }
- { field separator }
- { display headers? }
- PQdisplayTuples : procedure (res:PPGresult; fp:PFILE; fillAlign:longint; fieldSep:Pchar; printHeader:longint;quiet:longint);cdecl;
- (* Const before type ignored *)
- { output stream }
- { print attribute names }
- { delimiter bars }
- PQprintTuples : procedure (res:PPGresult; fout:PFILE; printAttName:longint; terseOutput:longint; width:longint);cdecl;
- { width of column, if 0, use variable
- * width }
- { === in fe-lobj.c === }
- { Large-object access routines }
- lo_open : function (conn:PPGconn; lobjId:Oid; mode:longint):longint;cdecl;
- lo_close : function (conn:PPGconn; fd:longint):longint;cdecl;
- lo_read : function (conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;
- lo_write : function (conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;
- lo_lseek : function (conn:PPGconn; fd:longint; offset:longint; whence:longint):longint;cdecl;
- lo_creat : function (conn:PPGconn; mode:longint):Oid;cdecl;
- lo_tell : function (conn:PPGconn; fd:longint):longint;cdecl;
- lo_unlink : function (conn:PPGconn; lobjId:Oid):longint;cdecl;
- lo_import : function (conn:PPGconn; filename:Pchar):Oid;cdecl;
- lo_export : function (conn:PPGconn; lobjId:Oid; filename:Pchar):longint;cdecl;
- { === in fe-misc.c === }
- { Determine length of multibyte encoded char at *s }
- PQmblen : function (s:Pbyte; encoding:longint):longint;cdecl;
- { Get encoding id from environment variable PGCLIENTENCODING }
- PQenv2encoding: function :longint;cdecl;
- Procedure InitialisePostgres3;
- Procedure ReleasePostgres3;
- var Postgres3LibraryHandle : TLibHandle;
- implementation
- var RefCount : integer;
- Procedure InitialisePostgres3;
- begin
- inc(RefCount);
- if RefCount = 1 then
- begin
- Postgres3LibraryHandle := loadlibrary(pqlib);
- if Postgres3LibraryHandle = nilhandle then
- begin
- RefCount := 0;
- Raise EInOutError.Create('Can not load PosgreSQL client. Is it installed? ('+pqlib+')');
- end;
- pointer(PQconnectStart) := GetProcedureAddress(Postgres3LibraryHandle,'PQconnectStart');
- pointer(PQconnectPoll) := GetProcedureAddress(Postgres3LibraryHandle,'PQconnectPoll');
- pointer(PQconnectdb) := GetProcedureAddress(Postgres3LibraryHandle,'PQconnectdb');
- pointer(PQsetdbLogin) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetdbLogin');
- pointer(PQfinish) := GetProcedureAddress(Postgres3LibraryHandle,'PQfinish');
- pointer(PQconndefaults) := GetProcedureAddress(Postgres3LibraryHandle,'PQconndefaults');
- pointer(PQconninfoFree) := GetProcedureAddress(Postgres3LibraryHandle,'PQconninfoFree');
- pointer(PQresetStart) := GetProcedureAddress(Postgres3LibraryHandle,'PQresetStart');
- pointer(PQresetPoll) := GetProcedureAddress(Postgres3LibraryHandle,'PQresetPoll');
- pointer(PQreset) := GetProcedureAddress(Postgres3LibraryHandle,'PQreset');
- pointer(PQrequestCancel) := GetProcedureAddress(Postgres3LibraryHandle,'PQrequestCancel');
- pointer(PQdb) := GetProcedureAddress(Postgres3LibraryHandle,'PQdb');
- pointer(PQuser) := GetProcedureAddress(Postgres3LibraryHandle,'PQuser');
- pointer(PQpass) := GetProcedureAddress(Postgres3LibraryHandle,'PQpass');
- pointer(PQhost) := GetProcedureAddress(Postgres3LibraryHandle,'PQhost');
- pointer(PQport) := GetProcedureAddress(Postgres3LibraryHandle,'PQport');
- pointer(PQtty) := GetProcedureAddress(Postgres3LibraryHandle,'PQtty');
- pointer(PQoptions) := GetProcedureAddress(Postgres3LibraryHandle,'PQoptions');
- pointer(PQstatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQstatus');
- pointer(PQtransactionStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQtransactionStatus');
- pointer(PQparameterStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQparameterStatus');
- pointer(PQprotocolVersion) := GetProcedureAddress(Postgres3LibraryHandle,'PQprotocolVersion');
- pointer(PQerrorMessage) := GetProcedureAddress(Postgres3LibraryHandle,'PQerrorMessage');
- pointer(PQsocket) := GetProcedureAddress(Postgres3LibraryHandle,'PQsocket');
- pointer(PQbackendPID) := GetProcedureAddress(Postgres3LibraryHandle,'PQbackendPID');
- pointer(PQclientEncoding) := GetProcedureAddress(Postgres3LibraryHandle,'PQclientEncoding');
- pointer(PQsetClientEncoding) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetClientEncoding');
- {$ifdef USE_SSL}
- pointer(PQgetssl) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetssl');
- {$endif}
- pointer(PQsetErrorVerbosity) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetErrorVerbosity');
- pointer(PQtrace) := GetProcedureAddress(Postgres3LibraryHandle,'PQtrace');
- pointer(PQuntrace) := GetProcedureAddress(Postgres3LibraryHandle,'PQuntrace');
- pointer(PQsetNoticeReceiver) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetNoticeReceiver');
- pointer(PQsetNoticeProcessor) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetNoticeProcessor');
- pointer(PQexec) := GetProcedureAddress(Postgres3LibraryHandle,'PQexec');
- pointer(PQexecParams) := GetProcedureAddress(Postgres3LibraryHandle,'PQexecParams');
- pointer(PQexecPrepared) := GetProcedureAddress(Postgres3LibraryHandle,'PQexecPrepared');
- pointer(PQPrepare) := GetProcedureAddress(Postgres3LibraryHandle,'PQPrepare');
- pointer(PQsendQuery) := GetProcedureAddress(Postgres3LibraryHandle,'PQsendQuery');
- pointer(PQsendQueryParams) := GetProcedureAddress(Postgres3LibraryHandle,'PQsendQueryParams');
- pointer(PQsendQueryPrepared) := GetProcedureAddress(Postgres3LibraryHandle,'PQsendQueryPrepared');
- pointer(PQgetResult) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetResult');
- pointer(PQisBusy) := GetProcedureAddress(Postgres3LibraryHandle,'PQisBusy');
- pointer(PQconsumeInput) := GetProcedureAddress(Postgres3LibraryHandle,'PQconsumeInput');
- pointer(PQnotifies) := GetProcedureAddress(Postgres3LibraryHandle,'PQnotifies');
- pointer(PQputCopyData) := GetProcedureAddress(Postgres3LibraryHandle,'PQputCopyData');
- pointer(PQputCopyEnd) := GetProcedureAddress(Postgres3LibraryHandle,'PQputCopyEnd');
- pointer(PQgetCopyData) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetCopyData');
- pointer(PQgetline) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetline');
- pointer(PQputline) := GetProcedureAddress(Postgres3LibraryHandle,'PQputline');
- pointer(PQgetlineAsync) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetlineAsync');
- pointer(PQputnbytes) := GetProcedureAddress(Postgres3LibraryHandle,'PQputnbytes');
- pointer(PQendcopy) := GetProcedureAddress(Postgres3LibraryHandle,'PQendcopy');
- pointer(PQsetnonblocking) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetnonblocking');
- pointer(PQisnonblocking) := GetProcedureAddress(Postgres3LibraryHandle,'PQisnonblocking');
- pointer(PQflush) := GetProcedureAddress(Postgres3LibraryHandle,'PQflush');
- pointer(PQfn) := GetProcedureAddress(Postgres3LibraryHandle,'PQfn');
- pointer(PQresultStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQresultStatus');
- pointer(PQresStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQresStatus');
- pointer(PQresultErrorMessage) := GetProcedureAddress(Postgres3LibraryHandle,'PQresultErrorMessage');
- pointer(PQresultErrorField) := GetProcedureAddress(Postgres3LibraryHandle,'PQresultErrorField');
- pointer(PQntuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQntuples');
- pointer(PQnfields) := GetProcedureAddress(Postgres3LibraryHandle,'PQnfields');
- pointer(PQbinaryTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQbinaryTuples');
- pointer(PQfname) := GetProcedureAddress(Postgres3LibraryHandle,'PQfname');
- pointer(PQfnumber) := GetProcedureAddress(Postgres3LibraryHandle,'PQfnumber');
- pointer(PQftable) := GetProcedureAddress(Postgres3LibraryHandle,'PQftable');
- pointer(PQftablecol) := GetProcedureAddress(Postgres3LibraryHandle,'PQftablecol');
- pointer(PQfformat) := GetProcedureAddress(Postgres3LibraryHandle,'PQfformat');
- pointer(PQftype) := GetProcedureAddress(Postgres3LibraryHandle,'PQftype');
- pointer(PQfsize) := GetProcedureAddress(Postgres3LibraryHandle,'PQfsize');
- pointer(PQfmod) := GetProcedureAddress(Postgres3LibraryHandle,'PQfmod');
- pointer(PQcmdStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQcmdStatus');
- pointer(PQoidStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQoidStatus');
- pointer(PQoidValue) := GetProcedureAddress(Postgres3LibraryHandle,'PQoidValue');
- pointer(PQcmdTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQcmdTuples');
- pointer(PQgetvalue) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetvalue');
- pointer(PQgetlength) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetlength');
- pointer(PQgetisnull) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetisnull');
- pointer(PQclear) := GetProcedureAddress(Postgres3LibraryHandle,'PQclear');
- pointer(PQfreemem) := GetProcedureAddress(Postgres3LibraryHandle,'PQfreemem');
- pointer(PQmakeEmptyPGresult) := GetProcedureAddress(Postgres3LibraryHandle,'PQmakeEmptyPGresult');
- pointer(PQescapeString) := GetProcedureAddress(Postgres3LibraryHandle,'PQescapeString');
- pointer(PQescapeBytea) := GetProcedureAddress(Postgres3LibraryHandle,'PQescapeBytea');
- pointer(PQunescapeBytea) := GetProcedureAddress(Postgres3LibraryHandle,'PQunescapeBytea');
- pointer(PQprint) := GetProcedureAddress(Postgres3LibraryHandle,'PQprint');
- pointer(PQdisplayTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQdisplayTuples');
- pointer(PQprintTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQprintTuples');
- pointer(lo_open) := GetProcedureAddress(Postgres3LibraryHandle,'lo_open');
- pointer(lo_close) := GetProcedureAddress(Postgres3LibraryHandle,'lo_close');
- pointer(lo_read) := GetProcedureAddress(Postgres3LibraryHandle,'lo_read');
- pointer(lo_write) := GetProcedureAddress(Postgres3LibraryHandle,'lo_write');
- pointer(lo_lseek) := GetProcedureAddress(Postgres3LibraryHandle,'lo_lseek');
- pointer(lo_creat) := GetProcedureAddress(Postgres3LibraryHandle,'lo_creat');
- pointer(lo_tell) := GetProcedureAddress(Postgres3LibraryHandle,'lo_tell');
- pointer(lo_unlink) := GetProcedureAddress(Postgres3LibraryHandle,'lo_unlink');
- pointer(lo_import) := GetProcedureAddress(Postgres3LibraryHandle,'lo_import');
- pointer(lo_export) := GetProcedureAddress(Postgres3LibraryHandle,'lo_export');
- pointer(PQmblen) := GetProcedureAddress(Postgres3LibraryHandle,'PQmblen');
- pointer(PQenv2encoding) := GetProcedureAddress(Postgres3LibraryHandle,'PQenv2encoding');
- InitialiseDllist;
- end;
- end;
- Procedure ReleasePostgres3;
- begin
- if RefCount > 0 then dec(RefCount);
- if RefCount = 0 then
- begin
- if not UnloadLibrary(Postgres3LibraryHandle) then inc(RefCount);
- ReleaseDllist;
- end;
- end;
- // This function is also defined in postgres3!
- function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
- begin
- PQsetdb:=PQsetdbLogin(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME,'','');
- end;
- end.
|