set_tuplefield_int2(&tuple[STATS_NON_UNIQUE], (Int2) (ci->drivers.unique_index ? FALSE : TRUE));
/* no index qualifier */
- set_tuplefield_string(&tuple[STATS_INDEX_QUALIFIER], CurrCat(conn));
+ set_tuplefield_string(&tuple[STATS_INDEX_QUALIFIER], GET_SCHEMA_NAME(table_schemaname));
snprintf(buf, sizeof(table_name), "%s_idx_fake_oid", table_name);
set_tuplefield_string(&tuple[STATS_INDEX_NAME], buf);
set_tuplefield_int2(&tuple[STATS_NON_UNIQUE], TRUE);
/* no index qualifier */
- set_tuplefield_string(&tuple[STATS_INDEX_QUALIFIER], CurrCat(conn));
+ set_tuplefield_string(&tuple[STATS_INDEX_QUALIFIER], GET_SCHEMA_NAME(table_schemaname));
set_tuplefield_string(&tuple[STATS_INDEX_NAME], index_name);
/*
#include <errno.h>
#endif /* WIN32 */
#ifndef NOT_USE_LIBPQ
+#ifdef RESET_CRYPTO_CALLBACKS
+#include <openssl/ssl.h>
+#endif /* RESET_CRYPTO_CALLBACKS */
#include <libpq-fe.h>
#endif /* NOT_USE_LIBPQ */
#include "loadlib.h"
#ifndef NOT_USE_LIBPQ
#pragma comment(lib, "libpq")
#pragma comment(lib, "ssleay32")
+#ifdef RESET_CRYPTO_CALLBACKS
+#pragma comment(lib, "libeay32")
+#endif /* RESET_CRYPTO_CALLBACKS */
#endif /* NOT_USE_LIBPQ */
#ifdef _HANDLE_ENLIST_IN_DTC_
#ifdef UNICODE_SUPPORT
#ifndef NOT_USE_LIBPQ
#pragma comment(linker, "/Delayload:libpq.dll")
#pragma comment(linker, "/Delayload:ssleay32.dll")
+#ifdef RESET_CRYPTO_CALLBACKS
+#pragma comment(linker, "/Delayload:libeay32.dll")
+#endif /* RESET_CRYPTO_CALLBACKS */
#endif /* NOT_USE_LIBPQ */
#ifdef UNICODE_SUPPORT
#pragma comment(linker, "/Delayload:pgenlist.dll")
int i;
static const char * const libarray[] = {"libssl32", "ssleay32"};
- mylog("Dli%sHook Notify=%d %p\n", (dliFailLoadLib == dliNotify || dliFailGetProc == dliNotify) ? "Error" : "Notify", dliNotify, pdli);
+ mylog("Dli%sHook %s Notify=%d\n", (dliFailLoadLib == dliNotify || dliFailGetProc == dliNotify) ? "Error" : "Notify", NULL != pdli->szDll ? pdli->szDll : pdli->dlp.szProcName, dliNotify);
switch (dliNotify)
{
case dliNotePreLoadLibrary:
/* The dll names are case sensitive for the unload helper */
if (loaded_libpq)
{
+#ifdef RESET_CRYPTO_CALLBACKS
+ /*
+ * May be needed to avoid crash on exit
+ * when libpq doesn't reset the callbacks.
+ */
+ CRYPTO_set_locking_callback(NULL);
+ CRYPTO_set_id_callback(NULL);
+ mylog("passed RESET_CRYPTO_CALLBACKS\n");
+#else
+ mylog("not passed RESET_CRYPTO_CALLBACKS\n");
+#endif /* RESET_CRYPTO_CALLBACKS */
success = (*func)(libpqdll);
mylog("%s unload success=%d\n", libpqdll, success);
}
SC_clear_error(stmt);
StartRollbackState(stmt);
ret = PGAPI_GetStmtOption(StatementHandle, Option, Value, NULL, 64);
- ret = DiscardRollbackState(stmt, ret, FALSE);
+ ret = DiscardStatementSvp(stmt, ret, FALSE);
LEAVE_STMT_CS(stmt);
return ret;
}
*
* Comments: See "notice.txt" for copyright and license information.
*
- * $Id: psqlodbc.h,v 1.123 2008/09/21 15:35:44 hinoue Exp $
+ * $Id: psqlodbc.h,v 1.124 2008/11/23 01:00:53 hinoue Exp $
*
*/
#define FORMAT_ULPTR "%lu" /* ULONG_PTR */
#endif /* _WIN64 */
#else
-#define FORMAT_SIZE_T "%xu" /* size_t */
-#define FORMAT_SSIZE_T "%xd" /* ssize_t */
+#define FORMAT_SIZE_T "%zu" /* size_t */
+#define FORMAT_SSIZE_T "%zd" /* ssize_t */
#ifndef HAVE_SSIZE_T
typedef long ssize_t
#endif /* HAVE_SSIZE_T */
#ifndef __VERSION_H__
#define __VERSION_H__
-#define POSTGRESDRIVERVERSION "08.03.0400"
-#define POSTGRES_RESOURCE_VERSION "08.03.0400\0"
-#define PG_DRVFILE_VERSION 8,3,04,00
-#define PG_BUILD_VERSION "200811070001"
+#define POSTGRESDRIVERVERSION "08.03.0401"
+#define POSTGRES_RESOURCE_VERSION "08.03.0401\0"
+#define PG_DRVFILE_VERSION 8,3,04,01
+#define PG_BUILD_VERSION "200811230001"
#endif
!IF "$(USE_LIBPQ)" != "no"
SSL_DLL = "SSLEAY32.dll"
+RESET_CRYPTO = yes
ADD_DEFINES = $(ADD_DEFINES) /D "SSL_DLL=\"$(SSL_DLL)\"" /D USE_SSL
!ELSE
ADD_DEFINES = $(ADD_DEFINES) /D NOT_USE_LIBPQ
MSVC_VERSION=vc70
!IF "$(USE_LIBPQ)" != "no"
VC07_DELAY_LOAD=/DelayLoad:libpq.dll /DelayLoad:$(SSL_DLL)
+!IF "$(RESET_CRYPTO)" == "yes"
+VC07_DELAY_LOAD=$(VC07_DELAY_LOAD) /DelayLoad:libeay32.dll
+ADD_DEFINES=$(ADD_DEFINES) /D RESET_CRYPTO_CALLBACKS
+!ENDIF
!ENDIF
!IF "$(USE_SSPI)" == "yes"
VC07_DELAY_LOAD=$(VC07_DELAY_LOAD) /Delayload:secur32.dll /Delayload:crypt32.dll
!ENDIF
SSL_DLL = "SSLEAY32.dll"
+RESET_CRYPTO = yes
ADD_DEFINES = $(ADD_DEFINES) /D "SSL_DLL=\"$(SSL_DLL)\"" /D USE_SSL
!ELSE
ADD_DEFINES = $(ADD_DEFINES) /D NOT_USE_LIBPQ
MSDTC=no
!ELSE
!IF "$(USE_LIBPQ)" != "no"
-VC07_DELAY_LOAD="/DelayLoad:libpq.dll /DelayLoad:$(SSL_DLL)
+VC07_DELAY_LOAD=/DelayLoad:libpq.dll /DelayLoad:$(SSL_DLL)
+!IF "$(RESET_CRYPTO)" == "yes"
+VC07_DELAY_LOAD=$(VC07_DELAY_LOAD) /DelayLoad:libeay32.dll
+ADD_DEFINES=$(ADD_DEFINES) /D RESET_CRYPTO_CALLBACKS
+!ENDIF
!ENDIF
!IF "$(USE_SSPI)" == "yes"
VC07_DELAY_LOAD=$(VC07_DELAY_LOAD) /DelayLoad:secur32.dll /Delayload:crypt32.dll
!ENDIF
-VC07_DELAY_LOAD=$(VC07_DELAY_LOAD) /DelayLoad:$(DTCDLL) /DELAY:UNLOAD"
+VC07_DELAY_LOAD="$(VC07_DELAY_LOAD) /DelayLoad:$(DTCDLL) /DELAY:UNLOAD"
!ENDIF
ADD_DEFINES = $(ADD_DEFINES) /D "DYNAMIC_LOAD"