You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
31 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
92374493ee | ||
|
a713da9181 | ||
|
75f3eede59 | ||
|
a7f29f1236 | ||
|
1143543d4a | ||
|
4cfe8f056a | ||
|
c23ee1bf3b | ||
|
d2636c432f | ||
|
7624463e7c | ||
|
06d80381a4 | ||
|
a59a98678f | ||
|
db14a7bed3 | ||
|
6883402dec | ||
|
b98458cadc | ||
|
37551c99a2 | ||
|
bdc041f704 | ||
|
d4f4b330b8 | ||
|
9b107c62cb | ||
|
9eb00790f0 | ||
|
82ccf59f15 | ||
|
2c482721e3 | ||
|
215e6efd27 | ||
|
05d08d31c0 | ||
|
73441d6d9b | ||
|
39ad9d8625 | ||
|
fe62b910f5 | ||
|
1d529ee294 | ||
|
67a860f344 | ||
|
6bab3a7617 | ||
|
3c0f797ca6 | ||
|
577974c563 |
2
.github/workflows/macOS.yml
vendored
2
.github/workflows/macOS.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
||||
mkdir $GITHUB_WORKSPACE/wine
|
||||
cd wine
|
||||
git init
|
||||
git fetch git://source.winehq.org/git/wine.git $($GITHUB_WORKSPACE/staging/patchinstall.py --upstream-commit) --depth=1
|
||||
git fetch https://gitlab.winehq.org/wine/wine.git $($GITHUB_WORKSPACE/staging/patchinstall.py --upstream-commit) --depth=1
|
||||
git checkout $($GITHUB_WORKSPACE/staging/patchinstall.py --upstream-commit)
|
||||
|
||||
- name: Run patchinstall.py --all
|
||||
|
@@ -1 +1,2 @@
|
||||
Fixes: [26898] Support for DDS file format in D3DXSaveTextureToFileInMemory
|
||||
Disabled: True
|
||||
|
@@ -0,0 +1,29 @@
|
||||
From 434df65f9023ec64c175825e5b38cd9daf744565 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Aida=20Jonikien=C4=97?= <aidas957@gmail.com>
|
||||
Date: Sat, 10 Aug 2024 22:20:30 +0300
|
||||
Subject: [PATCH] dinput: Use the correct array index in
|
||||
keyboard_create_device().
|
||||
|
||||
This fixes a segfault when launching NFS Underground.
|
||||
|
||||
Fixes: f434ea12b83 ("dinput: Implement DIPROP_SCANCODE.")
|
||||
---
|
||||
dlls/dinput/keyboard.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
|
||||
index a83f825e97d..aee1d996dde 100644
|
||||
--- a/dlls/dinput/keyboard.c
|
||||
+++ b/dlls/dinput/keyboard.c
|
||||
@@ -211,7 +211,7 @@ HRESULT keyboard_create_device( struct dinput *dinput, const GUID *guid, IDirect
|
||||
|
||||
if (FAILED(hr = dinput_device_init_device_format( &impl->base.IDirectInputDevice8W_iface ))) goto failed;
|
||||
|
||||
- for (i = 0, index = 0; i < 512; ++i)
|
||||
+ for (i = 0, index = 0; i < impl->base.device_format.dwNumObjs; ++i)
|
||||
{
|
||||
if (!GetKeyNameTextW( i << 16, instance.tszName, ARRAY_SIZE(instance.tszName) )) continue;
|
||||
if (!(dik = map_dik_code( i, 0, subtype, impl->base.dinput->dwVersion ))) continue;
|
||||
--
|
||||
2.43.0
|
||||
|
5
patches/dinput-regression-fix/definition
Normal file
5
patches/dinput-regression-fix/definition
Normal file
@@ -0,0 +1,5 @@
|
||||
Fixes: Fix crash in NFS Underground
|
||||
#Depends: dinput-joy-mappings
|
||||
Depends: dinput-scancode
|
||||
|
||||
# PR 6249
|
@@ -0,0 +1,125 @@
|
||||
From e31146d5dd91ef05298ae98f7db4868e73011865 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Thu, 23 May 2024 14:25:57 +1000
|
||||
Subject: [PATCH] dxgi: Semi-stub IDXGISwapChain::GetFrameStatistics.
|
||||
|
||||
Not completely correct but does allow improved framerates. Mileage will vary.
|
||||
---
|
||||
dlls/dxgi/swapchain.c | 89 +++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 85 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
|
||||
index 4797fcecd8d..4111a488407 100644
|
||||
--- a/dlls/dxgi/swapchain.c
|
||||
+++ b/dlls/dxgi/swapchain.c
|
||||
@@ -587,12 +587,66 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetContainingOutput(IDXGISwapCh
|
||||
return dxgi_get_output_from_window(swapchain->factory, window, output);
|
||||
}
|
||||
|
||||
+static int get_display_frequency(void)
|
||||
+{
|
||||
+ DEVMODEW mode;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ memset(&mode, 0, sizeof(mode));
|
||||
+ mode.dmSize = sizeof(mode);
|
||||
+ ret = EnumDisplaySettingsExW(NULL, ENUM_CURRENT_SETTINGS, &mode, 0);
|
||||
+ if (ret && mode.dmFields & DM_DISPLAYFREQUENCY && mode.dmDisplayFrequency)
|
||||
+ {
|
||||
+ return mode.dmDisplayFrequency;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ WARN("Failed to query display frequency, returning a fallback value.\n");
|
||||
+ return 60;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static LARGE_INTEGER get_perf_req(void)
|
||||
+{
|
||||
+ LARGE_INTEGER performance_frequency;
|
||||
+
|
||||
+ QueryPerformanceFrequency(&performance_frequency);
|
||||
+ return performance_frequency;
|
||||
+}
|
||||
+
|
||||
static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetFrameStatistics(IDXGISwapChain4 *iface,
|
||||
DXGI_FRAME_STATISTICS *stats)
|
||||
{
|
||||
- FIXME("iface %p, stats %p stub!\n", iface, stats);
|
||||
+ struct d3d11_swapchain *swapchain = d3d11_swapchain_from_IDXGISwapChain4(iface);
|
||||
+ HRESULT hr = S_OK;
|
||||
+ static BOOL once = 0;
|
||||
+ const LARGE_INTEGER performance_frequency = get_perf_req();
|
||||
+ int display_frequency = get_display_frequency();
|
||||
|
||||
- return E_NOTIMPL;
|
||||
+ LARGE_INTEGER count;
|
||||
+ TRACE("iface %p, stats %p Semi-stub\n", iface, stats);
|
||||
+
|
||||
+ if (!stats)
|
||||
+ return E_INVALIDARG;
|
||||
+
|
||||
+ QueryPerformanceCounter(&count);
|
||||
+
|
||||
+ stats->PresentCount = swapchain->present_count;
|
||||
+ stats->PresentRefreshCount = 0;
|
||||
+ stats->SyncRefreshCount = 0;
|
||||
+ stats->SyncQPCTime.QuadPart = count.QuadPart;
|
||||
+ stats->SyncGPUTime.QuadPart = 0;
|
||||
+
|
||||
+ stats->PresentRefreshCount = performance_frequency.QuadPart / display_frequency;
|
||||
+ stats->SyncRefreshCount = display_frequency;
|
||||
+
|
||||
+ if(!once)
|
||||
+ {
|
||||
+ once++;
|
||||
+ hr = DXGI_ERROR_FRAME_STATISTICS_DISJOINT;
|
||||
+ }
|
||||
+
|
||||
+ return hr;
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetLastPresentCount(IDXGISwapChain4 *iface,
|
||||
@@ -2704,9 +2758,36 @@ static HRESULT STDMETHODCALLTYPE d3d12_swapchain_GetContainingOutput(IDXGISwapCh
|
||||
static HRESULT STDMETHODCALLTYPE d3d12_swapchain_GetFrameStatistics(IDXGISwapChain4 *iface,
|
||||
DXGI_FRAME_STATISTICS *stats)
|
||||
{
|
||||
- FIXME("iface %p, stats %p stub!\n", iface, stats);
|
||||
+ struct d3d12_swapchain *swapchain = d3d12_swapchain_from_IDXGISwapChain4(iface);
|
||||
+ HRESULT hr = S_OK;
|
||||
+ static BOOL once = 0;
|
||||
+ const LARGE_INTEGER performance_frequency = get_perf_req();
|
||||
+ int display_frequency = get_display_frequency();
|
||||
|
||||
- return E_NOTIMPL;
|
||||
+ LARGE_INTEGER count;
|
||||
+ TRACE("iface %p, stats %p Semi-stub\n", iface, stats);
|
||||
+
|
||||
+ if (!stats)
|
||||
+ return E_INVALIDARG;
|
||||
+
|
||||
+ QueryPerformanceCounter(&count);
|
||||
+
|
||||
+ stats->PresentCount = swapchain->frame_number;
|
||||
+ stats->PresentRefreshCount = 0;
|
||||
+ stats->SyncRefreshCount = 0;
|
||||
+ stats->SyncQPCTime.QuadPart = count.QuadPart;
|
||||
+ stats->SyncGPUTime.QuadPart = 0;
|
||||
+
|
||||
+ stats->PresentRefreshCount = performance_frequency.QuadPart / display_frequency;
|
||||
+ stats->SyncRefreshCount = display_frequency;
|
||||
+
|
||||
+ if(!once)
|
||||
+ {
|
||||
+ once++;
|
||||
+ hr = DXGI_ERROR_FRAME_STATISTICS_DISJOINT;
|
||||
+ }
|
||||
+
|
||||
+ return hr;
|
||||
}
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE d3d12_swapchain_GetLastPresentCount(IDXGISwapChain4 *iface,
|
||||
--
|
||||
2.43.0
|
||||
|
1
patches/dxgi_getFrameStatistics/definition
Normal file
1
patches/dxgi_getFrameStatistics/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [53696] d3d11: Semi-stub IDXGISwapChain::GetFrameStatistics.
|
@@ -1,4 +1,4 @@
|
||||
From f0ff0cdc5472deafb8c75f3d0d6456ddb4164878 Mon Sep 17 00:00:00 2001
|
||||
From 4865ed639a87ee06ffcf6a7a74b6c97ef448e7ab Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 6 Jul 2020 12:34:42 -0500
|
||||
Subject: [PATCH] ntdll: Implement NtWaitForMultipleObjects().
|
||||
@@ -10,20 +10,20 @@ Subject: [PATCH] ntdll: Implement NtWaitForMultipleObjects().
|
||||
3 files changed, 182 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
|
||||
index e031e9cb94f..f383221194c 100644
|
||||
index e031e9cb94f..85db837f16b 100644
|
||||
--- a/dlls/ntdll/unix/esync.c
|
||||
+++ b/dlls/ntdll/unix/esync.c
|
||||
@@ -22,6 +22,10 @@
|
||||
#pragma makedep unix
|
||||
#endif
|
||||
@@ -24,6 +24,10 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
+#ifndef _GNU_SOURCE
|
||||
+#define _GNU_SOURCE
|
||||
+#endif
|
||||
+
|
||||
#include "config.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
@@ -34,6 +38,12 @@
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
# include <sys/stat.h>
|
||||
@@ -221,10 +221,10 @@ index c63491dcaad..92b609ebd27 100644
|
||||
/* We have to synchronize on the fd cache mutex so that our calls to receive_fd
|
||||
* don't race with theirs. It looks weird, I know.
|
||||
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
|
||||
index 76da038649f..1c60cd11f77 100644
|
||||
index dd938c95873..4361813e628 100644
|
||||
--- a/dlls/ntdll/unix/sync.c
|
||||
+++ b/dlls/ntdll/unix/sync.c
|
||||
@@ -1524,6 +1524,13 @@ NTSTATUS WINAPI NtWaitForMultipleObjects( DWORD count, const HANDLE *handles, BO
|
||||
@@ -1588,6 +1588,13 @@ NTSTATUS WINAPI NtWaitForMultipleObjects( DWORD count, const HANDLE *handles, BO
|
||||
|
||||
if (!count || count > MAXIMUM_WAIT_OBJECTS) return STATUS_INVALID_PARAMETER_1;
|
||||
|
||||
|
@@ -0,0 +1,30 @@
|
||||
From d455916aec7649a816deb36c303341a6c7732a97 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Aida=20Jonikien=C4=97?= <aidas957@gmail.com>
|
||||
Date: Fri, 26 Jul 2024 20:33:57 +0300
|
||||
Subject: [PATCH] kernelbase: Handle NULL old_prot parameter in
|
||||
VirtualProtect().
|
||||
|
||||
This fixes a segfault when launching any game with the EA Desktop application.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56694
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56711
|
||||
---
|
||||
dlls/kernelbase/memory.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c
|
||||
index 2b0e674bb9b..d1408cf4c0e 100644
|
||||
--- a/dlls/kernelbase/memory.c
|
||||
+++ b/dlls/kernelbase/memory.c
|
||||
@@ -548,7 +548,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH VirtualLock( void *addr, SIZE_T size )
|
||||
BOOL WINAPI DECLSPEC_HOTPATCH VirtualProtect( void *addr, SIZE_T size, DWORD new_prot, DWORD *old_prot )
|
||||
{
|
||||
BOOL ret = VirtualProtectEx( GetCurrentProcess(), addr, size, new_prot, old_prot );
|
||||
- if (*old_prot == PAGE_WRITECOPY) *old_prot = PAGE_READWRITE;
|
||||
+ if (old_prot && *old_prot == PAGE_WRITECOPY) *old_prot = PAGE_READWRITE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,54 +0,0 @@
|
||||
From 54841f013e3f88c885ad4bc252083e6aa5958472 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sun, 23 Jun 2024 16:45:43 +1000
|
||||
Subject: [PATCH] wineodbc: Register as Driver
|
||||
|
||||
---
|
||||
dlls/wineodbc/rsrc.rc | 3 +++
|
||||
dlls/wineodbc/wineodbc.rgs | 23 +++++++++++++++++++++++
|
||||
2 files changed, 26 insertions(+)
|
||||
create mode 100644 dlls/wineodbc/wineodbc.rgs
|
||||
|
||||
diff --git a/dlls/wineodbc/rsrc.rc b/dlls/wineodbc/rsrc.rc
|
||||
index b8fad8fe35b..9bc9d2934ab 100644
|
||||
--- a/dlls/wineodbc/rsrc.rc
|
||||
+++ b/dlls/wineodbc/rsrc.rc
|
||||
@@ -24,3 +24,6 @@
|
||||
#define WINE_PRODUCTVERSION_STR "3.520.6301.0"
|
||||
|
||||
#include "wine/wine_common_ver.rc"
|
||||
+
|
||||
+/* @makedep: wineodbc.rgs */
|
||||
+1 WINE_REGISTRY wineodbc.rgs
|
||||
diff --git a/dlls/wineodbc/wineodbc.rgs b/dlls/wineodbc/wineodbc.rgs
|
||||
new file mode 100644
|
||||
index 00000000000..c83d37976d7
|
||||
--- /dev/null
|
||||
+++ b/dlls/wineodbc/wineodbc.rgs
|
||||
@@ -0,0 +1,23 @@
|
||||
+HKLM
|
||||
+{
|
||||
+ NoRemove Software
|
||||
+ {
|
||||
+ NoRemove ODBC
|
||||
+ {
|
||||
+ NoRemove ODBCINST.INI
|
||||
+ {
|
||||
+ 'Wine ODBC Driver'
|
||||
+ {
|
||||
+ val 'Driver' = s '%MODULE%'
|
||||
+ val 'DriverODBCVer' = s '03.50'
|
||||
+ val 'Setup' = s '%MODULE%'
|
||||
+ }
|
||||
+
|
||||
+ NoRemove ODBC Drivers
|
||||
+ {
|
||||
+ val 'Wine ODBC Driver' = s 'Installed'
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,74 +0,0 @@
|
||||
From 4f4f45e8aad723b7372d422f01df15e2320d23d6 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 3 Feb 2023 11:44:19 +1100
|
||||
Subject: [PATCH] odbc32: Implement SQLAllocEnv/SQLFreeEnv
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 31 +++++++++++++++++++++++++------
|
||||
1 file changed, 25 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 89e4545f068..48ba33bb0f5 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -43,6 +43,11 @@
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(odbc);
|
||||
|
||||
+struct SQLHENV_data
|
||||
+{
|
||||
+ int type;
|
||||
+};
|
||||
+
|
||||
|
||||
/*************************************************************************
|
||||
* SQLAllocConnect [ODBC32.001]
|
||||
@@ -61,13 +66,23 @@ SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionH
|
||||
*/
|
||||
SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHENV_data *henv;
|
||||
|
||||
- FIXME("(EnvironmentHandle %p)\n", EnvironmentHandle);
|
||||
+ TRACE("(EnvironmentHandle %p)\n", EnvironmentHandle);
|
||||
+
|
||||
+ if (!EnvironmentHandle)
|
||||
+ return SQL_ERROR;
|
||||
|
||||
*EnvironmentHandle = SQL_NULL_HENV;
|
||||
+ henv = calloc(1, sizeof(*henv));
|
||||
+ if (!henv)
|
||||
+ return SQL_ERROR;
|
||||
|
||||
- return ret;
|
||||
+ henv->type = SQL_HANDLE_ENV;
|
||||
+
|
||||
+ *EnvironmentHandle = henv;
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -399,11 +414,15 @@ SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
|
||||
*/
|
||||
SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHENV_data *data = EnvironmentHandle;
|
||||
+ TRACE("(EnvironmentHandle %p)\n", EnvironmentHandle);
|
||||
|
||||
- FIXME("(EnvironmentHandle %p)\n", EnvironmentHandle);
|
||||
+ if (data && data->type != SQL_HANDLE_ENV)
|
||||
+ WARN("EnvironmentHandle isn't of type SQL_HANDLE_ENV\n");
|
||||
+ else
|
||||
+ free(data);
|
||||
|
||||
- return ret;
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,114 +0,0 @@
|
||||
From 35c784055b2af9d8d19f69f1d46bb257d9a70de3 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 3 Feb 2023 13:41:20 +1100
|
||||
Subject: [PATCH] odbc32: Support SQL_ATTR_CONNECTION_POOLING in
|
||||
SQLGetEnvAttr/SQLSetEnvAttr
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 63 +++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 57 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 48ba33bb0f5..89b8663d888 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -46,6 +46,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(odbc);
|
||||
struct SQLHENV_data
|
||||
{
|
||||
int type;
|
||||
+ SQLUINTEGER pooling;
|
||||
};
|
||||
|
||||
|
||||
@@ -79,6 +80,7 @@ SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle)
|
||||
return SQL_ERROR;
|
||||
|
||||
henv->type = SQL_HANDLE_ENV;
|
||||
+ henv->pooling = SQL_CP_OFF;
|
||||
|
||||
*EnvironmentHandle = henv;
|
||||
|
||||
@@ -571,12 +573,42 @@ SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMAL
|
||||
SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value,
|
||||
SQLINTEGER BufferLength, SQLINTEGER *StringLength)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHENV_data *data = EnvironmentHandle;
|
||||
|
||||
- FIXME("(EnvironmentHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n",
|
||||
+ TRACE("(EnvironmentHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n",
|
||||
EnvironmentHandle, Attribute, Value, BufferLength, StringLength);
|
||||
|
||||
- return ret;
|
||||
+ if (EnvironmentHandle == SQL_NULL_HENV)
|
||||
+ {
|
||||
+ if (StringLength)
|
||||
+ *StringLength = 0;
|
||||
+ if (Value)
|
||||
+ *(SQLINTEGER*)Value = 0;
|
||||
+ return SQL_SUCCESS;
|
||||
+ }
|
||||
+
|
||||
+ if (data->type != SQL_HANDLE_ENV)
|
||||
+ {
|
||||
+ WARN("Wrong handle type %d\n", data->type);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ switch (Attribute)
|
||||
+ {
|
||||
+ case SQL_ATTR_CONNECTION_POOLING:
|
||||
+ if (BufferLength != sizeof(data->pooling))
|
||||
+ {
|
||||
+ WARN("Invalid buffer size\n");
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+ *(SQLUINTEGER*)Value = data->pooling;
|
||||
+ break;
|
||||
+ default:
|
||||
+ FIXME("Unhandle attribute %d\n", Attribute);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -785,12 +817,31 @@ SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber,
|
||||
SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value,
|
||||
SQLINTEGER StringLength)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHENV_data *data = EnvironmentHandle;
|
||||
|
||||
- FIXME("(EnvironmentHandle %p, Attribute %d, Value %p, StringLength %d)\n", EnvironmentHandle, Attribute, Value,
|
||||
+ TRACE("(EnvironmentHandle %p, Attribute %d, Value %p, StringLength %d)\n", EnvironmentHandle, Attribute, Value,
|
||||
StringLength);
|
||||
|
||||
- return ret;
|
||||
+ if(!data || data->type != SQL_HANDLE_ENV)
|
||||
+ {
|
||||
+ WARN("Wrong handle type %d\n", data->type);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ switch(Attribute)
|
||||
+ {
|
||||
+ case SQL_ATTR_CONNECTION_POOLING:
|
||||
+ if (Value)
|
||||
+ data->pooling = (uintptr_t)Value;
|
||||
+ else
|
||||
+ data->pooling = SQL_CP_OFF;
|
||||
+ break;
|
||||
+ default:
|
||||
+ FIXME("Unhandle attribute %d\n", Attribute);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,101 +0,0 @@
|
||||
From 4e1a78cfdba25f67e93f40ce9d4881cd15abf180 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 3 Feb 2023 14:16:21 +1100
|
||||
Subject: [PATCH] odbc32: Add initial tests
|
||||
|
||||
---
|
||||
dlls/odbc32/tests/odbc32.c | 52 +++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 51 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/odbc32/tests/odbc32.c b/dlls/odbc32/tests/odbc32.c
|
||||
index 57bb17ef617..fa877c295d1 100644
|
||||
--- a/dlls/odbc32/tests/odbc32.c
|
||||
+++ b/dlls/odbc32/tests/odbc32.c
|
||||
@@ -28,7 +28,7 @@
|
||||
static void test_SQLAllocHandle( void )
|
||||
{
|
||||
SQLHANDLE handle;
|
||||
- SQLHENV env;
|
||||
+ SQLHENV env, env2;
|
||||
SQLHDBC con;
|
||||
SQLRETURN ret;
|
||||
|
||||
@@ -46,6 +46,12 @@ static void test_SQLAllocHandle( void )
|
||||
ok( ret == SQL_SUCCESS, "got %d\n", ret );
|
||||
ok( env != (void *)0xdeadbeef, "env not set\n" );
|
||||
|
||||
+ env2 = (void *)0xdeadbeef;
|
||||
+ ret = SQLAllocEnv( &env2 );
|
||||
+ ok( ret == SQL_SUCCESS, "got %d\n", ret );
|
||||
+ ok( env2 != (void *)0xdeadbeef, "env2 not set\n" );
|
||||
+ ok( env2 != env, "environment is the same\n" );
|
||||
+
|
||||
con = (void *)0xdeadbeef;
|
||||
ret = SQLAllocConnect( env, &con );
|
||||
ok( ret == SQL_SUCCESS, "got %d\n", ret );
|
||||
@@ -57,6 +63,8 @@ static void test_SQLAllocHandle( void )
|
||||
ok( ret == SQL_INVALID_HANDLE, "got %d\n", ret );
|
||||
ret = SQLFreeEnv( env );
|
||||
ok( ret == SQL_SUCCESS, "got %d\n", ret );
|
||||
+ ret = SQLFreeEnv( env2 );
|
||||
+ ok( ret == SQL_SUCCESS, "got %d\n", ret );
|
||||
ret = SQLFreeEnv( 0 );
|
||||
ok( ret == SQL_INVALID_HANDLE, "got %d\n", ret );
|
||||
}
|
||||
@@ -393,6 +401,47 @@ static void test_SQLExecDirect( void )
|
||||
ok( ret == SQL_SUCCESS, "got %d\n", ret );
|
||||
}
|
||||
|
||||
+void test_SQLGetEnvAttr(void)
|
||||
+{
|
||||
+ SQLRETURN ret;
|
||||
+ SQLHENV sqlenv;
|
||||
+ SQLINTEGER value, length;
|
||||
+
|
||||
+ ret = SQLAllocEnv(&sqlenv);
|
||||
+ ok(ret == SQL_SUCCESS, "got %d\n", ret);
|
||||
+
|
||||
+ value = 5;
|
||||
+ length = 12;
|
||||
+ ret = SQLGetEnvAttr(SQL_NULL_HENV, SQL_ATTR_CONNECTION_POOLING, &value, sizeof(SQLINTEGER), &length);
|
||||
+ ok(ret == SQL_SUCCESS, "got %d\n", ret);
|
||||
+ ok(value == 0, "got %d\n", value);
|
||||
+ todo_wine ok(length == 12, "got %d\n", length);
|
||||
+
|
||||
+ value = 5;
|
||||
+ length = 13;
|
||||
+ ret = SQLGetEnvAttr(SQL_NULL_HENV, SQL_ATTR_CONNECTION_POOLING, &value, 0, &length);
|
||||
+ ok(ret == SQL_SUCCESS, "got %d\n", ret);
|
||||
+ ok(value == 0, "got %d\n", value);
|
||||
+ todo_wine ok(length == 13, "got %d\n", length);
|
||||
+
|
||||
+ value = 5;
|
||||
+ length = 12;
|
||||
+ ret = SQLGetEnvAttr(sqlenv, SQL_ATTR_CONNECTION_POOLING, &value, sizeof(SQLINTEGER), &length);
|
||||
+ ok(ret == SQL_SUCCESS, "got %d\n", ret);
|
||||
+ ok(value == 0, "got %d\n", value);
|
||||
+ ok(length == 12, "got %d\n", length);
|
||||
+
|
||||
+ value = 5;
|
||||
+ length = 12;
|
||||
+ ret = SQLGetEnvAttr(sqlenv, SQL_ATTR_CONNECTION_POOLING, &value, 2, &length);
|
||||
+ todo_wine ok(ret == SQL_SUCCESS, "got %d\n", ret);
|
||||
+ todo_wine ok(value == 0, "got %d\n", value);
|
||||
+ ok(length == 12, "got %d\n", length);
|
||||
+
|
||||
+ ret = SQLFreeEnv(sqlenv);
|
||||
+ ok(ret == SQL_SUCCESS, "got %d\n", ret);
|
||||
+}
|
||||
+
|
||||
START_TEST(odbc32)
|
||||
{
|
||||
test_SQLAllocHandle();
|
||||
@@ -400,4 +449,5 @@ START_TEST(odbc32)
|
||||
test_SQLDataSources();
|
||||
test_SQLDrivers();
|
||||
test_SQLExecDirect();
|
||||
+ test_SQLGetEnvAttr();
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,81 +0,0 @@
|
||||
From 0f67768bd11cc1c58d9ad84640260e2ea66ea8ff Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 3 Feb 2023 14:40:03 +1100
|
||||
Subject: [PATCH] odbc32: Implement SQLAllocConnect
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 41 +++++++++++++++++++++++++++++++++++------
|
||||
1 file changed, 35 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 89b8663d888..8cc89f2c7ba 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -49,17 +49,35 @@ struct SQLHENV_data
|
||||
SQLUINTEGER pooling;
|
||||
};
|
||||
|
||||
+struct SQLHDBC_data
|
||||
+{
|
||||
+ int type;
|
||||
+ struct SQLHENV_data *environment;
|
||||
+};
|
||||
|
||||
/*************************************************************************
|
||||
* SQLAllocConnect [ODBC32.001]
|
||||
*/
|
||||
SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHDBC_data *hdbc;
|
||||
+
|
||||
+ TRACE("(EnvironmentHandle %p, ConnectionHandle %p)\n", EnvironmentHandle, ConnectionHandle);
|
||||
|
||||
- FIXME("(EnvironmentHandle %p, ConnectionHandle %p)\n", EnvironmentHandle, ConnectionHandle);
|
||||
+ if(!ConnectionHandle)
|
||||
+ return SQL_ERROR;
|
||||
*ConnectionHandle = SQL_NULL_HDBC;
|
||||
- return ret;
|
||||
+
|
||||
+ hdbc = calloc(1, sizeof(*hdbc));
|
||||
+ if (!hdbc)
|
||||
+ return SQL_ERROR;
|
||||
+
|
||||
+ hdbc->type = SQL_HANDLE_DBC;
|
||||
+ hdbc->environment = EnvironmentHandle;
|
||||
+
|
||||
+ *ConnectionHandle = hdbc;
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -404,11 +422,22 @@ SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrien
|
||||
*/
|
||||
SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHDBC_data *hdbc = ConnectionHandle;
|
||||
|
||||
- FIXME("(ConnectionHandle %p)\n", ConnectionHandle);
|
||||
+ TRACE("(ConnectionHandle %p)\n", ConnectionHandle);
|
||||
|
||||
- return ret;
|
||||
+ if (!hdbc)
|
||||
+ return SQL_ERROR;
|
||||
+
|
||||
+ if (hdbc->type != SQL_HANDLE_DBC)
|
||||
+ {
|
||||
+ WARN("Wrong handle type %d\n", hdbc->type);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ free(hdbc);
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,72 +0,0 @@
|
||||
From cb3c9bd4e9eae60f11dc97f3a1fd2cd76e430ed7 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 3 Feb 2023 14:46:44 +1100
|
||||
Subject: [PATCH] odbc32: SQLGetInfo/W support InfoType SQL_ODBC_VER
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 36 ++++++++++++++++++++++++++++++------
|
||||
1 file changed, 30 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 8cc89f2c7ba..7d654f1131b 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -658,12 +658,24 @@ SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT Function
|
||||
SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
|
||||
SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ char *ptr = InfoValue;
|
||||
|
||||
- FIXME("(ConnectionHandle, %p, InfoType %d, InfoValue %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
|
||||
+ TRACE("(ConnectionHandle, %p, InfoType %d, InfoValue %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
|
||||
InfoType, InfoValue, BufferLength, StringLength);
|
||||
|
||||
- return ret;
|
||||
+ switch(InfoType)
|
||||
+ {
|
||||
+ case SQL_ODBC_VER:
|
||||
+ lstrcpynA(ptr, "03.80.0000", BufferLength);
|
||||
+ if (StringLength)
|
||||
+ *StringLength = strlen(ptr);
|
||||
+ break;
|
||||
+ default:
|
||||
+ FIXME("Unsupported type %d\n", InfoType);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -1597,12 +1609,24 @@ SQLRETURN WINAPI SQLGetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Opt
|
||||
SQLRETURN WINAPI SQLGetInfoW(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
|
||||
SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ WCHAR *ptr = InfoValue;
|
||||
|
||||
- FIXME("(ConnectionHandle, %p, InfoType %d, InfoValue %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
|
||||
+ TRACE("(ConnectionHandle, %p, InfoType %d, InfoValue %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
|
||||
InfoType, InfoValue, BufferLength, StringLength);
|
||||
|
||||
- return ret;
|
||||
+ switch(InfoType)
|
||||
+ {
|
||||
+ case SQL_ODBC_VER:
|
||||
+ lstrcpynW(ptr, L"03.80.0000", BufferLength);
|
||||
+ if (StringLength)
|
||||
+ *StringLength = wcslen(ptr);
|
||||
+ break;
|
||||
+ default:
|
||||
+ FIXME("Unsupported type %d\n", InfoType);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,68 +0,0 @@
|
||||
From 7f9ebc7aec32bd0a6a53c94dbf96b39fe4cdd2ce Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 3 Feb 2023 15:18:21 +1100
|
||||
Subject: [PATCH] odbc32: Support SQL_ATTR_LOGIN_TIMEOUT in SQLSetConnectAttrW
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 28 +++++++++++++++++++++++++---
|
||||
1 file changed, 25 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 7d654f1131b..070f0197742 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -53,6 +53,8 @@ struct SQLHDBC_data
|
||||
{
|
||||
int type;
|
||||
struct SQLHENV_data *environment;
|
||||
+
|
||||
+ SQLUINTEGER login_timeout;
|
||||
};
|
||||
|
||||
/*************************************************************************
|
||||
@@ -74,6 +76,7 @@ SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionH
|
||||
|
||||
hdbc->type = SQL_HANDLE_DBC;
|
||||
hdbc->environment = EnvironmentHandle;
|
||||
+ hdbc->login_timeout = 0;
|
||||
|
||||
*ConnectionHandle = hdbc;
|
||||
|
||||
@@ -1548,12 +1551,31 @@ SQLRETURN WINAPI SQLGetStmtAttrW(SQLHSTMT StatementHandle, SQLINTEGER Attribute,
|
||||
SQLRETURN WINAPI SQLSetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value,
|
||||
SQLINTEGER StringLength)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHDBC_data *hdbc = ConnectionHandle;
|
||||
|
||||
- FIXME("(ConnectionHandle %p, Attribute %d, Value %p, StringLength %d)\n", ConnectionHandle, Attribute, Value,
|
||||
+ TRACE("(ConnectionHandle %p, Attribute %d, Value %p, StringLength %d)\n", ConnectionHandle, Attribute, Value,
|
||||
StringLength);
|
||||
|
||||
- return ret;
|
||||
+ if (hdbc->type != SQL_HANDLE_DBC)
|
||||
+ {
|
||||
+ WARN("Wrong handle type %d\n", hdbc->type);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ switch(Attribute)
|
||||
+ {
|
||||
+ case SQL_ATTR_LOGIN_TIMEOUT:
|
||||
+ if (Value)
|
||||
+ hdbc->login_timeout = (intptr_t)Value;
|
||||
+ else
|
||||
+ hdbc->login_timeout = 0;
|
||||
+ break;
|
||||
+ default:
|
||||
+ FIXME("Unhandle attribute %d\n", Attribute);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ return SQL_SUCCESS;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,427 +0,0 @@
|
||||
From 63629981578a8ed97d1498b8c2e69484f3d85828 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sat, 4 Feb 2023 09:16:29 +1100
|
||||
Subject: [PATCH] odbc32: Implement SQLDriverConnectW
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 367 +++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 365 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 070f0197742..30baf1866a4 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -53,10 +53,248 @@ struct SQLHDBC_data
|
||||
{
|
||||
int type;
|
||||
struct SQLHENV_data *environment;
|
||||
+ HMODULE module;
|
||||
+ SQLHENV driver_env;
|
||||
+ SQLINTEGER driver_ver; /* ODBC version supported by driver */
|
||||
+ SQLHDBC driver_hdbc;
|
||||
+
|
||||
+ SQLRETURN (WINAPI *pSQLAllocConnect)(SQLHENV,SQLHDBC*);
|
||||
+ SQLRETURN (WINAPI *pSQLAllocEnv)(SQLHENV*);
|
||||
+ SQLRETURN (WINAPI *pSQLAllocHandle)(SQLSMALLINT,SQLHANDLE,SQLHANDLE*);
|
||||
+ SQLRETURN (WINAPI *pSQLAllocHandleStd)(SQLSMALLINT,SQLHANDLE,SQLHANDLE*);
|
||||
+ SQLRETURN (WINAPI *pSQLAllocStmt)(SQLHDBC,SQLHSTMT*);
|
||||
+ SQLRETURN (WINAPI *pSQLBindCol)(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLPOINTER,SQLLEN,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLBindParam)(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLULEN,SQLSMALLINT,SQLPOINTER,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLBindParameter)(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLULEN,SQLSMALLINT,SQLPOINTER,SQLLEN,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLBrowseConnect)(SQLHDBC,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLBrowseConnectW)(SQLHDBC,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLBulkOperations)(SQLHSTMT,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLCancel)(SQLHSTMT);
|
||||
+ SQLRETURN (WINAPI *pSQLCloseCursor)(SQLHSTMT);
|
||||
+ SQLRETURN (WINAPI *pSQLColAttribute)(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLColAttributeW)(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLColAttributes)(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLColAttributesW)(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLColumnPrivileges)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLColumnPrivilegesW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLColumns)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLColumnsW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLConnect)(SQLHDBC,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLConnectW)(SQLHDBC,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLCopyDesc)(SQLHDESC,SQLHDESC);
|
||||
+ SQLRETURN (WINAPI *pSQLDescribeCol)(SQLHSTMT,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLDescribeColW)(SQLHSTMT,SQLUSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLDescribeParam)(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLDisconnect)(SQLHDBC);
|
||||
+ SQLRETURN (WINAPI *pSQLDriverConnect)(SQLHDBC,SQLHWND,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLDriverConnectW)(SQLHDBC,SQLHWND,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLEndTran)(SQLSMALLINT,SQLHANDLE,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLError)(SQLHENV,SQLHDBC,SQLHSTMT,SQLCHAR*,SQLINTEGER*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLErrorW)(SQLHENV,SQLHDBC,SQLHSTMT,SQLWCHAR*,SQLINTEGER*,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLExecDirect)(SQLHSTMT,SQLCHAR*,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLExecDirectW)(SQLHSTMT,SQLWCHAR*,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLExecute)(SQLHSTMT);
|
||||
+ SQLRETURN (WINAPI *pSQLExtendedFetch)(SQLHSTMT,SQLUSMALLINT,SQLLEN,SQLULEN*,SQLUSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLFetch)(SQLHSTMT);
|
||||
+ SQLRETURN (WINAPI *pSQLFetchScroll)(SQLHSTMT,SQLSMALLINT,SQLLEN);
|
||||
+ SQLRETURN (WINAPI *pSQLForeignKeys)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLForeignKeysW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLFreeConnect)(SQLHDBC);
|
||||
+ SQLRETURN (WINAPI *pSQLFreeEnv)(SQLHENV);
|
||||
+ SQLRETURN (WINAPI *pSQLFreeHandle)(SQLSMALLINT,SQLHANDLE);
|
||||
+ SQLRETURN (WINAPI *pSQLFreeStmt)(SQLHSTMT,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLGetConnectAttr)(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetConnectAttrW)(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetConnectOption)(SQLHDBC,SQLUSMALLINT,SQLPOINTER);
|
||||
+ SQLRETURN (WINAPI *pSQLGetConnectOptionW)(SQLHDBC,SQLUSMALLINT,SQLPOINTER);
|
||||
+ SQLRETURN (WINAPI *pSQLGetCursorName)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetCursorNameW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetData)(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLPOINTER,SQLLEN,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDescField)(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDescFieldW)(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDescRec)(SQLHDESC,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*,SQLLEN*,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDescRecW)(SQLHDESC,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*,SQLLEN*,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDiagField)(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDiagFieldW)(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDiagRec)(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLCHAR*,SQLINTEGER*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDiagRecA)(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLCHAR*,SQLINTEGER*, SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetDiagRecW)(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLWCHAR*,SQLINTEGER*,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetEnvAttr)(SQLHENV,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetFunctions)(SQLHDBC,SQLUSMALLINT,SQLUSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetInfo)(SQLHDBC,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetInfoW)(SQLHDBC,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetStmtAttr)(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetStmtAttrW)(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLGetStmtOption)(SQLHSTMT,SQLUSMALLINT,SQLPOINTER);
|
||||
+ SQLRETURN (WINAPI *pSQLGetTypeInfo)(SQLHSTMT,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLGetTypeInfoW)(SQLHSTMT,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLMoreResults)(SQLHSTMT);
|
||||
+ SQLRETURN (WINAPI *pSQLNativeSql)(SQLHDBC,SQLCHAR*,SQLINTEGER,SQLCHAR*,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLNativeSqlW)(SQLHDBC,SQLWCHAR*,SQLINTEGER,SQLWCHAR*,SQLINTEGER,SQLINTEGER*);
|
||||
+ SQLRETURN (WINAPI *pSQLNumParams)(SQLHSTMT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLNumResultCols)(SQLHSTMT,SQLSMALLINT*);
|
||||
+ SQLRETURN (WINAPI *pSQLParamData)(SQLHSTMT,SQLPOINTER*);
|
||||
+ SQLRETURN (WINAPI *pSQLParamOptions)(SQLHSTMT,SQLULEN,SQLULEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLPrepare)(SQLHSTMT,SQLCHAR*,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLPrepareW)(SQLHSTMT,SQLWCHAR*,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLPrimaryKeys)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLPrimaryKeysW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLProcedureColumns)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLProcedureColumnsW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLProcedures)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLProceduresW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLPutData)(SQLHSTMT,SQLPOINTER,SQLLEN);
|
||||
+ SQLRETURN (WINAPI *pSQLRowCount)(SQLHSTMT,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLSetConnectAttr)(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLSetConnectAttrW)(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLSetConnectOption)(SQLHDBC,SQLUSMALLINT,SQLULEN);
|
||||
+ SQLRETURN (WINAPI *pSQLSetConnectOptionW)(SQLHDBC,SQLUSMALLINT,SQLULEN);
|
||||
+ SQLRETURN (WINAPI *pSQLSetCursorName)(SQLHSTMT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLSetCursorNameW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLSetDescField)(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLSetDescFieldW)(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLSetDescRec)(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLLEN,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLLEN*,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLSetEnvAttr)(SQLHENV,SQLINTEGER,SQLPOINTER,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLSetParam)(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLULEN,SQLSMALLINT,SQLPOINTER,SQLLEN*);
|
||||
+ SQLRETURN (WINAPI *pSQLSetPos)(SQLHSTMT,SQLSETPOSIROW,SQLUSMALLINT,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLSetScrollOptions)(SQLHSTMT,SQLUSMALLINT,SQLLEN,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLSetStmtAttr)(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLSetStmtAttrW)(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER);
|
||||
+ SQLRETURN (WINAPI *pSQLSetStmtOption)(SQLHSTMT,SQLUSMALLINT,SQLULEN);
|
||||
+ SQLRETURN (WINAPI *pSQLSpecialColumns)(SQLHSTMT,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLUSMALLINT,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLSpecialColumnsW)(SQLHSTMT,SQLUSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLUSMALLINT,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLStatistics)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLUSMALLINT,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLStatisticsW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLUSMALLINT,SQLUSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLTablePrivileges)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLTablePrivilegesW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLTables)(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLTablesW)(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
|
||||
+ SQLRETURN (WINAPI *pSQLTransact)(SQLHENV,SQLHDBC,SQLUSMALLINT);
|
||||
|
||||
SQLUINTEGER login_timeout;
|
||||
};
|
||||
|
||||
+static void connection_bind_sql_funcs(struct SQLHDBC_data *connection)
|
||||
+{
|
||||
+#define LOAD_FUNCPTR(f) if((connection->p##f = (void*)GetProcAddress(connection->module, #f)) == NULL) \
|
||||
+ { \
|
||||
+ WARN( "function '%s' not found in driver.\n", #f ); \
|
||||
+ }
|
||||
+
|
||||
+ LOAD_FUNCPTR(SQLAllocConnect);
|
||||
+ LOAD_FUNCPTR(SQLAllocEnv);
|
||||
+ LOAD_FUNCPTR(SQLAllocHandle);
|
||||
+ LOAD_FUNCPTR(SQLAllocHandleStd)
|
||||
+ LOAD_FUNCPTR(SQLAllocStmt);
|
||||
+ LOAD_FUNCPTR(SQLBindCol);
|
||||
+ LOAD_FUNCPTR(SQLBindParam);
|
||||
+ LOAD_FUNCPTR(SQLBindParameter);
|
||||
+ LOAD_FUNCPTR(SQLBrowseConnect);
|
||||
+ LOAD_FUNCPTR(SQLBrowseConnectW);
|
||||
+ LOAD_FUNCPTR(SQLBulkOperations);
|
||||
+ LOAD_FUNCPTR(SQLCancel);
|
||||
+ LOAD_FUNCPTR(SQLCloseCursor);
|
||||
+ LOAD_FUNCPTR(SQLColAttribute);
|
||||
+ LOAD_FUNCPTR(SQLColAttributeW);
|
||||
+ LOAD_FUNCPTR(SQLColAttributes);
|
||||
+ LOAD_FUNCPTR(SQLColAttributesW);
|
||||
+ LOAD_FUNCPTR(SQLColumnPrivileges);
|
||||
+ LOAD_FUNCPTR(SQLColumnPrivilegesW)
|
||||
+ LOAD_FUNCPTR(SQLColumns);
|
||||
+ LOAD_FUNCPTR(SQLColumnsW);
|
||||
+ LOAD_FUNCPTR(SQLConnect);
|
||||
+ LOAD_FUNCPTR(SQLConnectW);
|
||||
+ LOAD_FUNCPTR(SQLCopyDesc);
|
||||
+ LOAD_FUNCPTR(SQLDescribeCol);
|
||||
+ LOAD_FUNCPTR(SQLDescribeColW);
|
||||
+ LOAD_FUNCPTR(SQLDescribeParam);
|
||||
+ LOAD_FUNCPTR(SQLDisconnect);
|
||||
+ LOAD_FUNCPTR(SQLDriverConnect);
|
||||
+ LOAD_FUNCPTR(SQLDriverConnectW);
|
||||
+ LOAD_FUNCPTR(SQLEndTran);
|
||||
+ LOAD_FUNCPTR(SQLError);
|
||||
+ LOAD_FUNCPTR(SQLErrorW);
|
||||
+ LOAD_FUNCPTR(SQLExecDirect);
|
||||
+ LOAD_FUNCPTR(SQLExecDirectW);
|
||||
+ LOAD_FUNCPTR(SQLExecute);
|
||||
+ LOAD_FUNCPTR(SQLExtendedFetch);
|
||||
+ LOAD_FUNCPTR(SQLFetch);
|
||||
+ LOAD_FUNCPTR(SQLFetchScroll);
|
||||
+ LOAD_FUNCPTR(SQLForeignKeys);
|
||||
+ LOAD_FUNCPTR(SQLForeignKeysW);
|
||||
+ LOAD_FUNCPTR(SQLFreeConnect);
|
||||
+ LOAD_FUNCPTR(SQLFreeEnv);
|
||||
+ LOAD_FUNCPTR(SQLFreeHandle);
|
||||
+ LOAD_FUNCPTR(SQLFreeStmt);
|
||||
+ LOAD_FUNCPTR(SQLGetConnectAttr);
|
||||
+ LOAD_FUNCPTR(SQLGetConnectAttrW);
|
||||
+ LOAD_FUNCPTR(SQLGetConnectOption);
|
||||
+ LOAD_FUNCPTR(SQLGetConnectOptionW);
|
||||
+ LOAD_FUNCPTR(SQLGetCursorName);
|
||||
+ LOAD_FUNCPTR(SQLGetCursorNameW);
|
||||
+ LOAD_FUNCPTR(SQLGetData);
|
||||
+ LOAD_FUNCPTR(SQLGetDescField);
|
||||
+ LOAD_FUNCPTR(SQLGetDescFieldW);
|
||||
+ LOAD_FUNCPTR(SQLGetDescRec);
|
||||
+ LOAD_FUNCPTR(SQLGetDescRecW);
|
||||
+ LOAD_FUNCPTR(SQLGetDiagField);
|
||||
+ LOAD_FUNCPTR(SQLGetDiagFieldW);
|
||||
+ LOAD_FUNCPTR(SQLGetDiagRec);
|
||||
+ LOAD_FUNCPTR(SQLGetDiagRecA);
|
||||
+ LOAD_FUNCPTR(SQLGetDiagRecW);
|
||||
+ LOAD_FUNCPTR(SQLGetEnvAttr);
|
||||
+ LOAD_FUNCPTR(SQLGetFunctions);
|
||||
+ LOAD_FUNCPTR(SQLGetInfo);
|
||||
+ LOAD_FUNCPTR(SQLGetInfoW);
|
||||
+ LOAD_FUNCPTR(SQLGetStmtAttr);
|
||||
+ LOAD_FUNCPTR(SQLGetStmtAttrW);
|
||||
+ LOAD_FUNCPTR(SQLGetStmtOption);
|
||||
+ LOAD_FUNCPTR(SQLGetTypeInfo);
|
||||
+ LOAD_FUNCPTR(SQLGetTypeInfoW);
|
||||
+ LOAD_FUNCPTR(SQLMoreResults);
|
||||
+ LOAD_FUNCPTR(SQLNativeSql);
|
||||
+ LOAD_FUNCPTR(SQLNativeSqlW);
|
||||
+ LOAD_FUNCPTR(SQLNumParams);
|
||||
+ LOAD_FUNCPTR(SQLNumResultCols);
|
||||
+ LOAD_FUNCPTR(SQLParamData);
|
||||
+ LOAD_FUNCPTR(SQLParamOptions);
|
||||
+ LOAD_FUNCPTR(SQLPrepare);
|
||||
+ LOAD_FUNCPTR(SQLPrepareW);
|
||||
+ LOAD_FUNCPTR(SQLPrimaryKeys);
|
||||
+ LOAD_FUNCPTR(SQLPrimaryKeysW);
|
||||
+ LOAD_FUNCPTR(SQLProcedureColumns);
|
||||
+ LOAD_FUNCPTR(SQLProcedureColumnsW);
|
||||
+ LOAD_FUNCPTR(SQLProcedures);
|
||||
+ LOAD_FUNCPTR(SQLProceduresW);
|
||||
+ LOAD_FUNCPTR(SQLPutData);
|
||||
+ LOAD_FUNCPTR(SQLRowCount);
|
||||
+ LOAD_FUNCPTR(SQLSetConnectAttr);
|
||||
+ LOAD_FUNCPTR(SQLSetConnectAttrW);
|
||||
+ LOAD_FUNCPTR(SQLSetConnectOption);
|
||||
+ LOAD_FUNCPTR(SQLSetConnectOptionW);
|
||||
+ LOAD_FUNCPTR(SQLSetCursorName);
|
||||
+ LOAD_FUNCPTR(SQLSetCursorNameW);
|
||||
+ LOAD_FUNCPTR(SQLSetDescField);
|
||||
+ LOAD_FUNCPTR(SQLSetDescFieldW);
|
||||
+ LOAD_FUNCPTR(SQLSetDescRec);
|
||||
+ LOAD_FUNCPTR(SQLSetEnvAttr);
|
||||
+ LOAD_FUNCPTR(SQLSetParam);
|
||||
+ LOAD_FUNCPTR(SQLSetPos);
|
||||
+ LOAD_FUNCPTR(SQLSetScrollOptions);
|
||||
+ LOAD_FUNCPTR(SQLSetStmtAttr);
|
||||
+ LOAD_FUNCPTR(SQLSetStmtAttrW);
|
||||
+ LOAD_FUNCPTR(SQLSetStmtOption);
|
||||
+ LOAD_FUNCPTR(SQLSpecialColumns);
|
||||
+ LOAD_FUNCPTR(SQLSpecialColumnsW);
|
||||
+ LOAD_FUNCPTR(SQLStatistics);
|
||||
+ LOAD_FUNCPTR(SQLStatisticsW);
|
||||
+ LOAD_FUNCPTR(SQLTablePrivileges);
|
||||
+ LOAD_FUNCPTR(SQLTablePrivilegesW);
|
||||
+ LOAD_FUNCPTR(SQLTables);
|
||||
+ LOAD_FUNCPTR(SQLTablesW);
|
||||
+ LOAD_FUNCPTR(SQLTransact);
|
||||
+}
|
||||
+
|
||||
/*************************************************************************
|
||||
* SQLAllocConnect [ODBC32.001]
|
||||
*/
|
||||
@@ -77,6 +315,7 @@ SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionH
|
||||
hdbc->type = SQL_HANDLE_DBC;
|
||||
hdbc->environment = EnvironmentHandle;
|
||||
hdbc->login_timeout = 0;
|
||||
+ hdbc->module = NULL;
|
||||
|
||||
*ConnectionHandle = hdbc;
|
||||
|
||||
@@ -438,6 +677,8 @@ SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle)
|
||||
return SQL_ERROR;
|
||||
}
|
||||
|
||||
+ FreeLibrary(hdbc->module);
|
||||
+
|
||||
free(hdbc);
|
||||
|
||||
return SQL_SUCCESS;
|
||||
@@ -1596,6 +1837,65 @@ SQLRETURN WINAPI SQLColumnsW(SQLHSTMT StatementHandle, WCHAR *CatalogName, SQLSM
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static HMODULE load_odbc_driver(const WCHAR *driver, BOOL use_dsn)
|
||||
+{
|
||||
+ long ret;
|
||||
+ HMODULE hmod;
|
||||
+ WCHAR *filename = NULL;
|
||||
+ HKEY hkey;
|
||||
+ WCHAR regpath[256];
|
||||
+
|
||||
+ if (use_dsn)
|
||||
+ wcscpy(regpath, L"Software\\ODBC\\ODBC.INI\\");
|
||||
+ else
|
||||
+ wcscpy(regpath, L"Software\\ODBC\\ODBCINST.INI\\");
|
||||
+ wcscat(regpath, driver);
|
||||
+
|
||||
+ if ((ret = RegOpenKeyW(HKEY_CURRENT_USER, regpath, &hkey)) != ERROR_SUCCESS)
|
||||
+ {
|
||||
+ ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, regpath, &hkey);
|
||||
+ }
|
||||
+
|
||||
+ if (ret == ERROR_SUCCESS)
|
||||
+ {
|
||||
+ DWORD size = 0, type;
|
||||
+ ret = RegGetValueW(hkey, NULL, L"Driver", RRF_RT_REG_SZ, &type, NULL, &size);
|
||||
+ if(ret != ERROR_SUCCESS || type != REG_SZ)
|
||||
+ {
|
||||
+ RegCloseKey(hkey);
|
||||
+ WARN("Invalid DSN %s\n", debugstr_w(driver));
|
||||
+
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ filename = malloc(size);
|
||||
+ if(!filename)
|
||||
+ {
|
||||
+ RegCloseKey(hkey);
|
||||
+ ERR("Out of memory\n");
|
||||
+
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ ret = RegGetValueW(hkey, NULL, L"Driver", RRF_RT_REG_SZ, &type, filename, &size);
|
||||
+
|
||||
+ RegCloseKey(hkey);
|
||||
+ }
|
||||
+
|
||||
+ if(ret != ERROR_SUCCESS)
|
||||
+ {
|
||||
+ free(filename);
|
||||
+ ERR("Failed to open Registry Key\n");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ hmod = LoadLibraryExW(filename, NULL, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
|
||||
+ free(filename);
|
||||
+
|
||||
+ if(!hmod)
|
||||
+ ERR("Failed to load driver\n");
|
||||
+
|
||||
+ return hmod;
|
||||
+}
|
||||
/*************************************************************************
|
||||
* SQLDriverConnectW [ODBC32.141]
|
||||
*/
|
||||
@@ -1603,13 +1903,76 @@ SQLRETURN WINAPI SQLDriverConnectW(SQLHDBC ConnectionHandle, SQLHWND WindowHandl
|
||||
SQLSMALLINT Length, WCHAR *OutConnectionString, SQLSMALLINT BufferLength,
|
||||
SQLSMALLINT *Length2, SQLUSMALLINT DriverCompletion)
|
||||
{
|
||||
+ struct SQLHDBC_data *connection = ConnectionHandle;
|
||||
+ HMODULE driver;
|
||||
SQLRETURN ret = SQL_ERROR;
|
||||
+ WCHAR dsn[128];
|
||||
+ WCHAR *p;
|
||||
+ BOOL is_dsn = TRUE;
|
||||
|
||||
- FIXME("(ConnectionHandle %p, WindowHandle %p, InConnectionString %s, Length %d, OutConnectionString %p,"
|
||||
+ TRACE("(ConnectionHandle %p, WindowHandle %p, InConnectionString %s, Length %d, OutConnectionString %p,"
|
||||
" BufferLength %d, Length2 %p, DriverCompletion %d)\n", ConnectionHandle, WindowHandle,
|
||||
- debugstr_wn(InConnectionString, Length), Length, OutConnectionString, BufferLength, Length2,
|
||||
+ Length == SQL_NTS ? debugstr_w(InConnectionString) : debugstr_wn(InConnectionString, Length), Length, OutConnectionString, BufferLength, Length2,
|
||||
DriverCompletion);
|
||||
|
||||
+ p = wcsstr(InConnectionString, L"DSN=");
|
||||
+ if (p)
|
||||
+ {
|
||||
+ WCHAR *end = wcsstr(p, L";");
|
||||
+
|
||||
+ lstrcpynW(dsn, p+4, end - (p + 3));
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ p = wcsstr(InConnectionString, L"Driver=");
|
||||
+ if (p)
|
||||
+ {
|
||||
+ WCHAR *end = wcsstr(p, L";");
|
||||
+
|
||||
+ lstrcpynW(dsn, p+7, end - (p + 6));
|
||||
+ is_dsn = FALSE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ driver = load_odbc_driver(dsn, is_dsn);
|
||||
+ if (!driver)
|
||||
+ return SQL_ERROR;
|
||||
+
|
||||
+ connection->module = driver;
|
||||
+ connection->driver_ver = SQL_OV_ODBC2;
|
||||
+ connection_bind_sql_funcs(connection);
|
||||
+
|
||||
+ /* ODBC 3.x */
|
||||
+ if (connection->pSQLAllocHandle)
|
||||
+ {
|
||||
+ connection->pSQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &connection->driver_env);
|
||||
+ connection->pSQLAllocHandle(SQL_HANDLE_DBC, connection->driver_env, &connection->driver_hdbc);
|
||||
+
|
||||
+ if (connection->pSQLGetEnvAttr)
|
||||
+ connection->pSQLGetEnvAttr(connection->driver_env, SQL_ATTR_ODBC_VERSION, &connection->driver_ver, 0, NULL);
|
||||
+
|
||||
+ }
|
||||
+ /* ODBC 2.x */
|
||||
+ else if(connection->pSQLAllocConnect && connection->pSQLAllocEnv)
|
||||
+ {
|
||||
+ connection->pSQLAllocEnv(&connection->driver_env);
|
||||
+
|
||||
+ connection->pSQLAllocConnect(connection->driver_env, &connection->driver_hdbc);
|
||||
+ }
|
||||
+ else
|
||||
+ ERR("No functions to allocated Environment handles found.\n");
|
||||
+
|
||||
+ if(!connection->pSQLDriverConnectW)
|
||||
+ {
|
||||
+ ERR("Failed to find pSQLDriverConnectW\n");
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ ret = connection->pSQLDriverConnectW(connection->driver_hdbc, WindowHandle, InConnectionString, Length,
|
||||
+ OutConnectionString, BufferLength, Length2, DriverCompletion);
|
||||
+
|
||||
+ TRACE("Driver returned %d\n", ret);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,82 +0,0 @@
|
||||
From 55674ad31123cfdcf664d8f1c28710185aa0388d Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Mon, 6 Feb 2023 08:47:46 +1100
|
||||
Subject: [PATCH] odbc32: Foward SQLGetInfo/W requests onto the driver
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 32 ++++++++++++++++++++++++++------
|
||||
1 file changed, 26 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 30baf1866a4..50083a23e25 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -902,7 +902,9 @@ SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT Function
|
||||
SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
|
||||
SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
|
||||
{
|
||||
+ struct SQLHDBC_data *connection = ConnectionHandle;
|
||||
char *ptr = InfoValue;
|
||||
+ SQLRETURN ret = SQL_SUCCESS;
|
||||
|
||||
TRACE("(ConnectionHandle, %p, InfoType %d, InfoValue %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
|
||||
InfoType, InfoValue, BufferLength, StringLength);
|
||||
@@ -915,11 +917,19 @@ SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQL
|
||||
*StringLength = strlen(ptr);
|
||||
break;
|
||||
default:
|
||||
- FIXME("Unsupported type %d\n", InfoType);
|
||||
- return SQL_ERROR;
|
||||
+ if (connection->pSQLGetInfo)
|
||||
+ ret = connection->pSQLGetInfo(connection->driver_hdbc, InfoType, InfoValue,
|
||||
+ BufferLength, StringLength);
|
||||
+ else
|
||||
+ {
|
||||
+ FIXME("Unsupported type %d\n", InfoType);
|
||||
+ ret = SQL_ERROR;
|
||||
+ }
|
||||
}
|
||||
|
||||
- return SQL_SUCCESS;
|
||||
+ TRACE("ret %d\n", ret);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -1994,7 +2004,9 @@ SQLRETURN WINAPI SQLGetConnectOptionW(SQLHDBC ConnectionHandle, SQLUSMALLINT Opt
|
||||
SQLRETURN WINAPI SQLGetInfoW(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
|
||||
SQLSMALLINT BufferLength, SQLSMALLINT *StringLength)
|
||||
{
|
||||
+ struct SQLHDBC_data *connection = ConnectionHandle;
|
||||
WCHAR *ptr = InfoValue;
|
||||
+ SQLRETURN ret = SQL_SUCCESS;
|
||||
|
||||
TRACE("(ConnectionHandle, %p, InfoType %d, InfoValue %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
|
||||
InfoType, InfoValue, BufferLength, StringLength);
|
||||
@@ -2007,11 +2019,19 @@ SQLRETURN WINAPI SQLGetInfoW(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQ
|
||||
*StringLength = wcslen(ptr);
|
||||
break;
|
||||
default:
|
||||
- FIXME("Unsupported type %d\n", InfoType);
|
||||
- return SQL_ERROR;
|
||||
+ if (connection->pSQLGetInfoW)
|
||||
+ ret = connection->pSQLGetInfoW(connection->driver_hdbc, InfoType, InfoValue,
|
||||
+ BufferLength, StringLength);
|
||||
+ else
|
||||
+ {
|
||||
+ FIXME("Unsupported type %d\n", InfoType);
|
||||
+ ret = SQL_ERROR;
|
||||
+ }
|
||||
}
|
||||
|
||||
- return SQL_SUCCESS;
|
||||
+ TRACE("ret %d\n", ret);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,91 +0,0 @@
|
||||
From 7db07cc12c6e62ab86b429d0c0b0f88426ddb681 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Mon, 6 Feb 2023 08:55:12 +1100
|
||||
Subject: [PATCH] odbc32: Foward SQLSetConnectAttr requets onto the driver
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 49 ++++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 44 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index 50083a23e25..f817b3b524c 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -1043,11 +1043,40 @@ SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLLEN *RowCount)
|
||||
SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value,
|
||||
SQLINTEGER StringLength)
|
||||
{
|
||||
- SQLRETURN ret = SQL_ERROR;
|
||||
+ struct SQLHDBC_data *hdbc = ConnectionHandle;
|
||||
+ SQLRETURN ret = SQL_SUCCESS;
|
||||
|
||||
- FIXME("(ConnectionHandle %p, Attribute %d, Value %p, StringLength %d)\n", ConnectionHandle, Attribute, Value,
|
||||
+ TRACE("(ConnectionHandle %p, Attribute %d, Value %p, StringLength %d)\n", ConnectionHandle, Attribute, Value,
|
||||
StringLength);
|
||||
|
||||
+ if (hdbc->type != SQL_HANDLE_DBC)
|
||||
+ {
|
||||
+ WARN("Wrong handle type %d\n", hdbc->type);
|
||||
+ return SQL_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ switch(Attribute)
|
||||
+ {
|
||||
+ case SQL_ATTR_LOGIN_TIMEOUT:
|
||||
+ if (Value)
|
||||
+ hdbc->login_timeout = (intptr_t)Value;
|
||||
+ else
|
||||
+ hdbc->login_timeout = 0;
|
||||
+ break;
|
||||
+ default:
|
||||
+ if (hdbc->pSQLSetConnectAttr)
|
||||
+ ret = hdbc->pSQLSetConnectAttr(hdbc->driver_hdbc, Attribute, Value, StringLength);
|
||||
+ else if(hdbc->pSQLSetConnectOption)
|
||||
+ ret = hdbc->pSQLSetConnectOption(hdbc->driver_hdbc, Attribute, (SQLULEN)Value);
|
||||
+ else
|
||||
+ {
|
||||
+ FIXME("Unsupported Attribute %d\n", Attribute);
|
||||
+ ret = SQL_ERROR;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ TRACE("ret %d\n", ret);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1803,6 +1832,7 @@ SQLRETURN WINAPI SQLSetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribu
|
||||
SQLINTEGER StringLength)
|
||||
{
|
||||
struct SQLHDBC_data *hdbc = ConnectionHandle;
|
||||
+ SQLRETURN ret = SQL_SUCCESS;
|
||||
|
||||
TRACE("(ConnectionHandle %p, Attribute %d, Value %p, StringLength %d)\n", ConnectionHandle, Attribute, Value,
|
||||
StringLength);
|
||||
@@ -1822,11 +1852,20 @@ SQLRETURN WINAPI SQLSetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribu
|
||||
hdbc->login_timeout = 0;
|
||||
break;
|
||||
default:
|
||||
- FIXME("Unhandle attribute %d\n", Attribute);
|
||||
- return SQL_ERROR;
|
||||
+ if (hdbc->pSQLSetConnectAttrW)
|
||||
+ ret = hdbc->pSQLSetConnectAttrW(hdbc->driver_hdbc, Attribute, Value, StringLength);
|
||||
+ else if(hdbc->pSQLSetConnectOptionW)
|
||||
+ ret = hdbc->pSQLSetConnectOptionW(hdbc->driver_hdbc, Attribute, (SQLULEN)Value);
|
||||
+ else
|
||||
+ {
|
||||
+ FIXME("Unsupported Attribute %d\n", Attribute);
|
||||
+ ret = SQL_ERROR;
|
||||
+ }
|
||||
}
|
||||
|
||||
- return SQL_SUCCESS;
|
||||
+ TRACE("ret %d\n", ret);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -1,33 +0,0 @@
|
||||
From 25b167b0027c64be079c7203b994dac1b5627446 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Mon, 6 Feb 2023 09:02:34 +1100
|
||||
Subject: [PATCH] odbc32: Forward SQLGetFunctions requets onto the driver
|
||||
|
||||
---
|
||||
dlls/odbc32/proxyodbc.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
|
||||
index f817b3b524c..3ed0a484972 100644
|
||||
--- a/dlls/odbc32/proxyodbc.c
|
||||
+++ b/dlls/odbc32/proxyodbc.c
|
||||
@@ -889,9 +889,15 @@ SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute,
|
||||
*/
|
||||
SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported)
|
||||
{
|
||||
+ struct SQLHDBC_data *connection = ConnectionHandle;
|
||||
SQLRETURN ret = SQL_ERROR;
|
||||
|
||||
- FIXME("(ConnectionHandle %p, FunctionId %d, Supported %p)\n", ConnectionHandle, FunctionId, Supported);
|
||||
+ TRACE("(ConnectionHandle %p, FunctionId %d, Supported %p)\n", ConnectionHandle, FunctionId, Supported);
|
||||
+
|
||||
+ if (connection->pSQLGetFunctions)
|
||||
+ {
|
||||
+ ret = connection->pSQLGetFunctions(connection->driver_hdbc, FunctionId, Supported);
|
||||
+ }
|
||||
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user