#include "ot4xb.ch" #include "libpq4xb.ch" init proc load_the_libpq_dll() * Begin local e if nLoadLibrary("libpq.dll") == 0 e := Error():New() e:severity := 3 e:subsystem := "libpq4xb" e:description := "Unable to load libpq.dll" Eval( ErrorBlock() , e ) end return BEGIN STRUCTURE pgNotify MEMBER LPSTR relname STRZ_READ cRelName MEMBER int be_pid MEMBER LPSTR extra MEMBER POINTER32 pNext LINK oNext END STRUCTURE BEGIN STRUCTURE pqPrintOpt MEMBER BYTEBOOL header MEMBER BYTEBOOL align MEMBER BYTEBOOL standard MEMBER BYTEBOOL html3 MEMBER BYTEBOOL expanded MEMBER BYTEBOOL pager GWSTALIGNNEXTMEMBER(8) MEMBER LPSTR fieldSep DYNSZ cFieldSep MEMBER LPSTR tableOpt DYNSZ cTableOpt MEMBER LPSTR caption DYNSZ cCaption MEMBER POINTER32 fieldName DYNAMIC METHOD SetFieldNames BLOCK {|s,a| _xfree(s:fieldName), s:fieldName := iif(a == NIL,0,Array2ppMarshall(a)) } DYNAMIC METHOD GetFieldNames BLOCK {|s| ppMarshall2Array(s:fieldName) } END STRUCTURE BEGIN STRUCTURE pqConnInfoOption MEMBER LPSTR keyword STRZ_READ cKeyword MEMBER LPSTR envvar STRZ_READ cEnvVar MEMBER LPSTR compiled STRZ_READ cCompiled MEMBER LPSTR val STRZ_READ cVal MEMBER LPSTR label STRZ_READ cLabel MEMBER LPSTR dispchar STRZ_READ cDispChar MEMBER int dispsize END STRUCTURE BEGIN STRUCTURE pqArgBlock_internal_union MEMBER POINTER32 ptr ; GWSTBACK ; MEMBER int integer END STRUCTURE BEGIN STRUCTURE pqArgBlock MEMBER int len MEMBER int isint ; GWSTBACK ; MEMBER BOOL lIsInt MEMBER POINTER32 ptr ; GWSTBACK MEMBER int integer ; GWSTBACK MEMBER @ pqArgBlock_internal_union u END STRUCTURE function PQsetdb(host,port,opt,tty,dbname) ; return PQsetdbLogin(host,port,opt,tty,dbname, 0 , 0 ) DLL libpq XIMPORT HANDLE PQconnectStart(LPSTR conninfo) DLL libpq XIMPORT int PQconnectPoll(HANDLE conn) DLL libpq XIMPORT HANDLE PQconnectdb(LPSTR conninfo) DLL libpq XIMPORT HANDLE PQsetdbLogin(LPSTR host,LPSTR port,LPSTR opt,LPSTR tty,LPSTR db,LPSTR login,LPSTR pwd) DLL libpq XIMPORT void PQfinish(HANDLE conn) DLL libpq XIMPORT POINTER32 PQconndefaults() DLL libpq XIMPORT void PQconninfoFree(POINTER32 connOptions) DLL libpq XIMPORT int PQresetStart(HANDLE conn) DLL libpq XIMPORT int PQresetPoll(HANDLE conn) DLL libpq XIMPORT void PQreset(HANDLE conn) DLL libpq XIMPORT HANDLE PQgetCancel(HANDLE conn) DLL libpq XIMPORT void PQfreeCancel(HANDLE cancel) DLL libpq XIMPORT int PQcancel(HANDLE cancel, LPSTR errbuf, int errbufsize) ; DEFAULT errbufsize := iif(Valtype(errbuf)=="C",Len(errbuf),0) DLL libpq XIMPORT int PQrequestCancel(HANDLE conn) DLL libpq XIMPORT ZSTRING PQdb(HANDLE conn) DLL libpq XIMPORT ZSTRING PQuser(HANDLE conn) DLL libpq XIMPORT ZSTRING PQpass(HANDLE conn) DLL libpq XIMPORT ZSTRING PQhost(HANDLE conn) DLL libpq XIMPORT ZSTRING PQport(HANDLE conn) DLL libpq XIMPORT ZSTRING PQtty(HANDLE conn) DLL libpq XIMPORT ZSTRING PQoptions(HANDLE conn) DLL libpq XIMPORT int PQstatus(HANDLE conn) DLL libpq XIMPORT int PQtransactionStatus(HANDLE conn) DLL libpq XIMPORT ZSTRING PQparameterStatus(HANDLE conn,LPSTR paramName) DLL libpq XIMPORT int PQprotocolVersion(HANDLE conn) DLL libpq XIMPORT int PQserverVersion(HANDLE conn) DLL libpq XIMPORT ZSTRING PQerrorMessage(HANDLE conn) DLL libpq XIMPORT int PQsocket(HANDLE conn) DLL libpq XIMPORT int PQbackendPID(HANDLE conn) DLL libpq XIMPORT int PQconnectionNeedsPassword(HANDLE conn) DLL libpq XIMPORT int PQconnectionUsedPassword(HANDLE conn) DLL libpq XIMPORT int PQclientEncoding(HANDLE conn) DLL libpq XIMPORT int PQsetClientEncoding(HANDLE conn,LPSTR encoding) DLL libpq XIMPORT POINTER32 PQgetssl(HANDLE conn) DLL libpq XIMPORT void PQinitSSL(int do_init) DLL libpq XIMPORT int PQsetErrorVerbosity(HANDLE conn,int verbosity) DLL libpq XIMPORT void PQtrace(HANDLE conn, POINTER32 debug_port) DLL libpq XIMPORT void PQuntrace(HANDLE conn) DLL libpq XIMPORT DWORD PQsetNoticeReceiver(HANDLE conn,DWORD pProc, POINTER32 pArg) DLL libpq XIMPORT DWORD PQsetNoticeProcessor(HANDLE conn, DWORD pProc,POINTER32 pArg) DLL libpq XIMPORT DWORD PQregisterThreadLock(DWORD pNewhandler) DLL libpq XIMPORT HANDLE PQexec(HANDLE conn, LPSTR cQuery) DLL libpq XIMPORT HANDLE PQexecParams(HANDLE conn,LPSTR command, int nParams, LPLONG paramTypes,; POINTER32 pValues, LPLONG pLen, LPLONG pFormats,int resultFormat) DLL libpq XIMPORT HANDLE PQprepare(HANDLE conn, LPSTR cStmtName,LPSTR query, int nParams,LPLONG paramTypes) DLL libpq XIMPORT HANDLE PQexecPrepared(HANDLE conn,LPSTR cStmtName,int nParams, POINTER32 pValues,; LPLONG pLen, LPLONG pFormats,int resultFormat) DLL libpq XIMPORT int PQsendQuery(HANDLE conn, LPSTR query) DLL libpq XIMPORT int PQsendQueryParams( HANDLE conn,LPSTR command, int nParams,LPLONG paramTypes,; POINTER32 pValues, LPLONG pLen, LPLONG pFormats,int resultFormat) DLL libpq XIMPORT int PQsendPrepare(HANDLE conn, LPSTR pStmtName, LPSTR query, int nParams,LPLONG paramTypes) DLL libpq XIMPORT int PQsendQueryPrepared(HANDLE conn,LPSTR stmtName,int nParams, POINTER32 pValues,; LPLONG pLen, LPLONG pFormats, int resultFormat) DLL libpq XIMPORT HANDLE PQgetResult(HANDLE conn) DLL libpq XIMPORT int PQisBusy(HANDLE conn) DLL libpq XIMPORT int PQconsumeInput(HANDLE conn) DLL libpq XIMPORT POINTER32 PQnotifies(HANDLE conn) DLL libpq XIMPORT int PQputCopyData(HANDLE conn,LPSTR buffer, int nBytes) ; DEFAULT nBytes := iif(Valtype(buffer)=="C",Len(buffer),0) DLL libpq XIMPORT int PQputCopyEnd(HANDLE conn,LPSTR errormsg) DLL libpq XIMPORT int PQgetCopyData(HANDLE conn,POINTER32 ppBuffer, BOOL async) DLL libpq XIMPORT int PQsetnonblocking(HANDLE conn, int arg) DLL libpq XIMPORT BOOL PQisnonblocking(HANDLE conn) DLL libpq XIMPORT BOOL PQisthreadsafe() DLL libpq XIMPORT BOOL PQflush(HANDLE conn) DLL libpq XIMPORT int PQresultStatus(HANDLE result) DLL libpq XIMPORT ZSTRING PQresStatus(int status) DLL libpq XIMPORT ZSTRING PQresultErrorMessage(HANDLE result ) DLL libpq XIMPORT ZSTRING PQresultErrorField(HANDLE result, int fieldcode) DLL libpq XIMPORT int PQntuples(HANDLE result) DLL libpq XIMPORT int PQnfields(HANDLE result) DLL libpq XIMPORT int PQbinaryTuples(HANDLE result) DLL libpq XIMPORT ZSTRING PQfname(HANDLE result,int field_num) DLL libpq XIMPORT int PQfnumber(HANDLE result, LPSTR field_name) DLL libpq XIMPORT int PQftable(HANDLE result, int field_num) DLL libpq XIMPORT int PQftablecol(HANDLE result, int field_num) DLL libpq XIMPORT int PQfformat(HANDLE result, int field_num) DLL libpq XIMPORT int PQftype(HANDLE result, int field_num) DLL libpq XIMPORT int PQfsize(HANDLE result, int field_num) DLL libpq XIMPORT int PQfmod(HANDLE result, int field_num) DLL libpq XIMPORT ZSTRING PQcmdStatus(HANDLE result) DLL libpq XIMPORT INT PQoidValue(HANDLE result) DLL libpq XIMPORT ZSTRING PQcmdTuples(HANDLE result) DLL libpq XIMPORT ZSTRING PQgetvalue(HANDLE result, int tup_num, int field_num) DLL libpq XIMPORT int PQgetlength(HANDLE result, int tup_num, int field_num) DLL libpq XIMPORT int PQgetisnull(HANDLE result, int tup_num, int field_num) DLL libpq XIMPORT int PQnparams(HANDLE result) DLL libpq XIMPORT int PQparamtype(HANDLE result, int param_num) DLL libpq XIMPORT HANDLE PQdescribePrepared(HANDLE conn, LPSTR stmt) DLL libpq XIMPORT HANDLE PQdescribePortal(HANDLE conn,LPSTR portal) DLL libpq XIMPORT int PQsendDescribePrepared(HANDLE conn,LPSTR stmt) DLL libpq XIMPORT int PQsendDescribePortal(HANDLE conn,LPSTR portal) DLL libpq XIMPORT void PQclear(HANDLE pgResult) DLL libpq XIMPORT void PQfreemem(POINTER32 ptr) DLL libpq XIMPORT void PQfreeNotify(POINTER32 ptr) SYMBOL PQfreemem DLL libpq XIMPORT HANDLE PQmakeEmptyPGresult(HANDLE conn, int status) DLL libpq XIMPORT int PQescapeStringConn(HANDLE conn, LPSTR pTo,LPSTR pFrom,int nLen,LPLONG pError) DLL libpq XIMPORT LPBYTE PQescapeByteaConn(HANDLE conn,LPSTR pFrom, DWORD cbFrom,LPDWORD cbResult) function cPqEscapeByteA(conn,cFrom) * Begin local cbResult := 0 local pStr := 0 local cStr if ( Valtype( cFrom ) $ "CM" ) pStr := PQescapeByteaConn(conn,cFrom,Len(cFrom),@cbResult) if( pStr != 0 ) cStr := PeekStr(pStr,0,cbResult) ; PQfreemem( pStr ) return cStr end end return NIL DLL libpq XIMPORT LPBYTE PQunescapeBytea(LPSTR pText, LPDWORD cbResult) function cPqUnescapeByteA(cText) * Begin local cbResult := 0 local pStr := 0 local cStr if ( Valtype( cText ) $ "CM" ) pStr := PQunescapeBytea(cText,@cbResult) if( pStr != 0 ) cStr := PeekStr(pStr,0,cbResult) ; PQfreemem( pStr ) return cStr end end return NIL DLL libpq XIMPORT int lo_open(HANDLE conn, int nObjOid, int mode) DLL libpq XIMPORT int lo_close(HANDLE conn, int fd) DLL libpq XIMPORT int lo_read(HANDLE conn, int fd, LPSTR buf, DWORD nLen) DLL libpq XIMPORT int lo_write(HANDLE conn, int fd,LPSTR buf, DWORD nLen) DLL libpq XIMPORT int lo_lseek(HANDLE conn, int fd, int offset, int whence) DLL libpq XIMPORT int lo_creat(HANDLE conn, int mode) DLL libpq XIMPORT int lo_create(HANDLE conn,int nObjOid) DLL libpq XIMPORT int lo_tell(HANDLE conn, int fd) DLL libpq XIMPORT int lo_truncate(HANDLE conn, int fd,DWORD len) DLL libpq XIMPORT int lo_unlink(HANDLE conn, int nObjOid) DLL libpq XIMPORT int lo_import(HANDLE conn, LPSTR filename) DLL libpq XIMPORT int lo_export(HANDLE conn,int nObjOid, LPSTR filename) DLL libpq XIMPORT int PQmblen(LPSTR s, int encoding) DLL libpq XIMPORT int PQdsplen(LPSTR s, int encoding) DLL libpq XIMPORT int PQenv2encoding() DLL libpq XIMPORT LPSTR PQencryptPassword(LPSTR passwd,LPSTR user) function cPQencryptPassword(cPwd,cUser) * Begin local pStr := PQencryptPassword(cPwd,cUser) local cStr if ( pStr != 0 ) cStr := PeekStr(pStr,0,-1); PQfreemem( pStr ) return cStr end return NIL DLL libpq XIMPORT int pg_char_to_encoding(LPSTR name) DLL libpq XIMPORT ZSTRING pg_encoding_to_char(int encoding) DLL libpq XIMPORT int pg_valid_server_encoding_id(int encoding) //------------------------------------------------------------------------------------------------------------------------- // Deprecated routines for copy in/out // DLL libpq XIMPORT int PQgetline(HANDLE conn,LPSTR string, int len) // DLL libpq XIMPORT int PQputline(HANDLE conn,LPSTR string) // DLL libpq XIMPORT int PQgetlineAsync(HANDLE conn,LPSTR buffer, int bufsize); // DEFAULT bufsize := iif(Valtype(buffer)=="C",Len(buffer),0) // DLL libpq XIMPORT int PQputnbytes(HANDLE conn,LPSTR buffer, int nbytes) // DEFAULT nbytes := iif(Valtype(buffer)=="C",Len(buffer),0) // DLL libpq XIMPORT int PQendcopy(HANDLE conn) //------------------------------------------------------------------------------------------------------------------------- // "Fast path" interface --- not really recommended for application use // DLL libpq XIMPORT PGresult *PQfn( HANDLE conn,int fnid, LPLONG result_buf, LPLONG result_len,; // BOOL result_is_int, POINTER32 args, int nargs) //------------------------------------------------------------------------------------------------------------------------- // PQoidStatus is deprecated in favor of PQoidValue. It is not thread-safe. // DLL libpq XIMPORT ZSTRING PQoidStatus(HANDLE result) // NOT THREAD SAFE //------------------------------------------------------------------------------------------------------------------------- // These forms are deprecated // DLL libpq XIMPORT DWORD PQescapeString(LPSTR pTo,LPSTR pFrom, int nLen) // DLL libpq XIMPORT LPBYTE PQescapeBytea(LPSTR pFrom, DWORD cbFrom,LPDWORD pcbTo) //------------------------------------------------------------------------------------------------------------------------- // The contents of FILE structure vary on single/multi thread and debug on/off compilation // DLL libpq XIMPORT void PQprint(POINTER32 pFILE_out,HANDLE result,POINTER32 ps) // really old printing routines // DLL libpq XIMPORT void PQdisplayTuples(HANDLE result,POINTER32 pFILE,BOOL nFillAlign,; // LPSTR cFieldSep, BOOL bPrintHeader,BOOL bQuiet) // DLL libpq XIMPORT void PQprintTuples(HANDLE result,POINTER32 pFILE, BOOL bPrintAttName,; // int terseOutput, int width) //-------------------------------------------------------------------------------------------------------------------------