Remove odbc-remove-unixodbc patchset

odbc32-fixes has all the changes required to make ODBC v2 drivers work.
This commit is contained in:
Alistair Leslie-Hughes
2024-07-29 07:43:06 +10:00
parent 6883402dec
commit db14a7bed3
50 changed files with 0 additions and 11528 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,80 +0,0 @@
From 53e0846f51522be5a2f7574f12ff35d16c44d1de Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 09:08:27 +1100
Subject: [PATCH] odbc32: Forward SQLGetConnectAttr/W requets onto the driver
---
dlls/odbc32/proxyodbc.c | 42 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 3ed0a484972..886fe07efb9 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -730,11 +730,30 @@ SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option)
SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value,
SQLINTEGER BufferLength, SQLINTEGER *StringLength)
{
+ struct SQLHDBC_data *connection = ConnectionHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(ConnectionHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
+ TRACE("(ConnectionHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
Attribute, Value, BufferLength, StringLength);
+ if (connection->type != SQL_HANDLE_DBC)
+ {
+ WARN("Wrong handle type %d\n", connection->type);
+ return SQL_ERROR;
+ }
+
+ if (connection->pSQLGetConnectAttr)
+ {
+ ret = connection->pSQLGetConnectAttr(connection->driver_hdbc, Attribute, Value,
+ BufferLength, StringLength);
+ }
+ else if (connection->pSQLGetConnectOption)
+ {
+ ret = connection->pSQLGetConnectOption(connection->driver_hdbc, Attribute, Value);
+ }
+
+ TRACE("ret %d\n", ret);
+
return ret;
}
@@ -1741,11 +1760,30 @@ SQLRETURN WINAPI SQLColAttributeW(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnN
SQLRETURN WINAPI SQLGetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value,
SQLINTEGER BufferLength, SQLINTEGER *StringLength)
{
+ struct SQLHDBC_data *connection = ConnectionHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(ConnectionHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
+ TRACE("(ConnectionHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", ConnectionHandle,
Attribute, Value, BufferLength, StringLength);
+ if (connection->type != SQL_HANDLE_DBC)
+ {
+ WARN("Wrong handle type %d\n", connection->type);
+ return SQL_ERROR;
+ }
+
+ if (connection->pSQLGetConnectAttrW)
+ {
+ ret = connection->pSQLGetConnectAttrW(connection->driver_hdbc, Attribute, Value,
+ BufferLength, StringLength);
+ }
+ else if (connection->pSQLGetConnectOptionW)
+ {
+ ret = connection->pSQLGetConnectOptionW(connection->driver_hdbc, Attribute, Value);
+ }
+
+ TRACE("ret %d\n", ret);
+
return ret;
}
--
2.43.0

View File

@ -1,41 +0,0 @@
From fc34342d52977928717c0b9f45bff99613461201 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 09:26:57 +1100
Subject: [PATCH] odbc32: Foward SQLDisconnect request onto driver
---
dlls/odbc32/proxyodbc.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 886fe07efb9..eb274c5da5b 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -574,9 +574,23 @@ SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNum
*/
SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle)
{
+ struct SQLHDBC_data *connection = ConnectionHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(ConnectionHandle %p)\n", ConnectionHandle);
+ TRACE("(ConnectionHandle %p)\n", ConnectionHandle);
+
+ if (connection->type != SQL_HANDLE_DBC)
+ {
+ WARN("Wrong handle type %d\n", connection->type);
+ return SQL_ERROR;
+ }
+
+ if (connection->pSQLDisconnect)
+ {
+ ret = connection->pSQLDisconnect(connection->driver_hdbc);
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
--
2.43.0

View File

@ -1,73 +0,0 @@
From a09926caf2fd91460ab75d75c3aba98a153f97fa Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 09:53:34 +1100
Subject: [PATCH] odbc32: Implement SQLAllocStmt
---
dlls/odbc32/proxyodbc.c | 39 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index eb274c5da5b..1e6ee80c03d 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -174,6 +174,13 @@ struct SQLHDBC_data
SQLUINTEGER login_timeout;
};
+struct SQLHSTMT_data
+{
+ int type;
+ struct SQLHDBC_data *connection;
+ SQLHSTMT driver_stmt;
+};
+
static void connection_bind_sql_funcs(struct SQLHDBC_data *connection)
{
#define LOAD_FUNCPTR(f) if((connection->p##f = (void*)GetProcAddress(connection->module, #f)) == NULL) \
@@ -365,11 +372,41 @@ SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, S
*/
SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle)
{
+ struct SQLHDBC_data *connection = ConnectionHandle;
+ struct SQLHSTMT_data *stmt;
SQLRETURN ret = SQL_ERROR;
- FIXME("(ConnectionHandle %p, StatementHandle %p)\n", ConnectionHandle, StatementHandle);
+ TRACE("(ConnectionHandle %p, StatementHandle %p)\n", ConnectionHandle, StatementHandle);
*StatementHandle = SQL_NULL_HSTMT;
+ if (connection->type != SQL_HANDLE_DBC)
+ {
+ WARN("Wrong handle type %d\n", connection->type);
+ return SQL_ERROR;
+ }
+
+ stmt = malloc(sizeof(*stmt));
+ if (!stmt)
+ {
+ return SQL_ERROR;
+ }
+
+ stmt->type = SQL_HANDLE_STMT;
+ stmt->connection = connection;
+
+ /* Default to ODBC v3 function */
+ if(connection->pSQLAllocHandle)
+ {
+ ret = connection->pSQLAllocHandle(SQL_HANDLE_STMT, connection->driver_hdbc, &stmt->driver_stmt);
+ }
+ else if (connection->pSQLAllocStmt)
+ {
+ ret = connection->pSQLAllocStmt(connection->driver_hdbc, &stmt->driver_stmt);
+ }
+
+ *StatementHandle = stmt;
+
+ TRACE("ret %d\n", ret);
return ret;
}
--
2.43.0

View File

@ -1,76 +0,0 @@
From 2f3d8481978439bdc657f5f020e255c9c2c634d1 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 09:59:14 +1100
Subject: [PATCH] odbc32: Forward SQLSetStmtAttr/W request to driver
---
dlls/odbc32/proxyodbc.c | 38 ++++++++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 1e6ee80c03d..999d1e64916 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -1266,11 +1266,28 @@ SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNum
SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value,
SQLINTEGER StringLength)
{
+ struct SQLHSTMT_data *statement = StatementHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(StatementHandle %p, Attribute %d, Value %p, StringLength %d)\n", StatementHandle, Attribute, Value,
+ TRACE("(StatementHandle %p, Attribute %d, Value %p, StringLength %d)\n", StatementHandle, Attribute, Value,
StringLength);
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+
+ if (statement->connection->pSQLSetStmtAttr)
+ {
+ ret = statement->connection->pSQLSetStmtAttr(statement->driver_stmt, Attribute, Value, StringLength);
+ }
+ else if (statement->connection->pSQLSetStmtOption)
+ {
+ ret = statement->connection->pSQLSetStmtOption( statement->driver_stmt, Attribute, (SQLULEN) Value );
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
@@ -2438,11 +2455,28 @@ SQLRETURN WINAPI SQLSetDescFieldW(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumb
SQLRETURN WINAPI SQLSetStmtAttrW(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value,
SQLINTEGER StringLength)
{
+ struct SQLHSTMT_data *statement = StatementHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(StatementHandle %p, Attribute %d, Value %p, StringLength %d)\n", StatementHandle, Attribute, Value,
+ TRACE("(StatementHandle %p, Attribute %d, Value %p, StringLength %d)\n", StatementHandle, Attribute, Value,
StringLength);
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+
+ if (statement->connection->pSQLSetStmtAttrW)
+ {
+ ret = statement->connection->pSQLSetStmtAttrW(statement->driver_stmt, Attribute, Value, StringLength);
+ }
+ else if (statement->connection->pSQLSetStmtOption)
+ {
+ ret = statement->connection->pSQLSetStmtOption( statement->driver_stmt, Attribute, (SQLULEN) Value );
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
--
2.43.0

View File

@ -1,41 +0,0 @@
From e2dcd4d6536d1ad99549920cdda96b4ce23b7b05 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 10:50:26 +1100
Subject: [PATCH] odbc32: Forward SQLParamOptions request onto driver
---
dlls/odbc32/proxyodbc.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 999d1e64916..2b1db217467 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -1529,10 +1529,23 @@ SQLRETURN WINAPI SQLNumParams(SQLHSTMT hstmt, SQLSMALLINT *pcpar)
*/
SQLRETURN WINAPI SQLParamOptions(SQLHSTMT hstmt, SQLULEN crow, SQLULEN *pirow)
{
+ struct SQLHSTMT_data *statement = hstmt;
SQLRETURN ret = SQL_ERROR;
- FIXME("(hstmt %p, crow %s, pirow %p)\n", hstmt, debugstr_sqlulen(crow), pirow);
+ TRACE("(hstmt %p, crow %s, pirow %p)\n", hstmt, debugstr_sqlulen(crow), pirow);
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+
+ if (statement->connection->pSQLParamOptions)
+ {
+ ret = statement->connection->pSQLParamOptions(statement->driver_stmt, crow, pirow);
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
--
2.43.0

View File

@ -1,72 +0,0 @@
From c7285c3ce19b3e5ff0d6a90ff84fa3c497776511 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 10:53:29 +1100
Subject: [PATCH] odbc32: Forward SQLExecDirect/W request onto driver
---
dlls/odbc32/proxyodbc.c | 36 ++++++++++++++++++++++++++++++++----
1 file changed, 32 insertions(+), 4 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 2b1db217467..6508c9b1d73 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -665,11 +665,25 @@ SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, S
*/
SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength)
{
+ struct SQLHSTMT_data *statement = StatementHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(StatementHandle %p, StatementText %s, TextLength %d)\n", StatementHandle,
- debugstr_an((const char *)StatementText, TextLength), TextLength);
+ TRACE("(StatementHandle %p, StatementText %s, TextLength %d)\n", StatementHandle,
+ TextLength > 0 ? debugstr_an((char*)StatementText, TextLength) : debugstr_a((char*)StatementText),
+ TextLength);
+
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+ if (statement->connection->pSQLExecDirect)
+ {
+ ret = statement->connection->pSQLExecDirect(statement->driver_stmt, StatementText, TextLength);
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
@@ -1770,11 +1784,25 @@ SQLRETURN WINAPI SQLErrorW(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle,
*/
SQLRETURN WINAPI SQLExecDirectW(SQLHSTMT StatementHandle, WCHAR *StatementText, SQLINTEGER TextLength)
{
+ struct SQLHSTMT_data *statement = StatementHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(StatementHandle %p, StatementText %s, TextLength %d)\n", StatementHandle,
- debugstr_wn(StatementText, TextLength), TextLength);
+ TRACE("(StatementHandle %p, StatementText %s, TextLength %d)\n", StatementHandle,
+ TextLength > 0 ? debugstr_wn(StatementText, TextLength) : debugstr_w(StatementText),
+ TextLength);
+
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+ if (statement->connection->pSQLExecDirectW)
+ {
+ ret = statement->connection->pSQLExecDirectW(statement->driver_stmt, StatementText, TextLength);
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
--
2.43.0

View File

@ -1,82 +0,0 @@
From 2f915fc78edc974c6ef926ec3b3b4da81b64b72a Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 11:04:32 +1100
Subject: [PATCH] odbc32: Forward SQLGetStmtAttr/W onto driver
---
dlls/odbc32/proxyodbc.c | 32 ++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 6508c9b1d73..ecc208ac21b 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -1028,17 +1028,31 @@ SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQL
SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value,
SQLINTEGER BufferLength, SQLINTEGER *StringLength)
{
+ struct SQLHSTMT_data *statement = StatementHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(StatementHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", StatementHandle,
+ TRACE("(StatementHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", StatementHandle,
Attribute, Value, BufferLength, StringLength);
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+
if (!Value)
{
WARN("Unexpected NULL Value return address\n");
return SQL_ERROR;
}
+ if (statement->connection->pSQLGetStmtAttr)
+ {
+ ret = statement->connection->pSQLGetStmtAttr(statement->driver_stmt, Attribute, Value,
+ BufferLength, StringLength);
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
@@ -1964,17 +1978,31 @@ SQLRETURN WINAPI SQLGetDiagRecW(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMA
SQLRETURN WINAPI SQLGetStmtAttrW(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value,
SQLINTEGER BufferLength, SQLINTEGER *StringLength)
{
+ struct SQLHSTMT_data *statement = StatementHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(StatementHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", StatementHandle,
+ TRACE("(StatementHandle %p, Attribute %d, Value %p, BufferLength %d, StringLength %p)\n", StatementHandle,
Attribute, Value, BufferLength, StringLength);
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+
if (!Value)
{
WARN("Unexpected NULL Value return address\n");
return SQL_ERROR;
}
+ if (statement->connection->pSQLGetStmtAttrW)
+ {
+ ret = statement->connection->pSQLGetStmtAttrW(statement->driver_stmt, Attribute, Value,
+ BufferLength, StringLength);
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
--
2.43.0

View File

@ -1,41 +0,0 @@
From 711377cb7cad345eda0432fdf035b6f5466ef1c4 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 6 Feb 2023 11:08:41 +1100
Subject: [PATCH] odbc32: Forward SQLRowCount onto driver
---
dlls/odbc32/proxyodbc.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index ecc208ac21b..c76b8ff3c2a 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -1134,10 +1134,23 @@ SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLLEN St
*/
SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLLEN *RowCount)
{
+ struct SQLHSTMT_data *statement = StatementHandle;
SQLRETURN ret = SQL_ERROR;
- FIXME("(StatementHandle %p, RowCount %p)\n", StatementHandle, RowCount);
+ TRACE("(StatementHandle %p, RowCount %p)\n", StatementHandle, RowCount);
+ if (statement->type != SQL_HANDLE_STMT)
+ {
+ WARN("Wrong handle type %d\n", statement->type);
+ return SQL_ERROR;
+ }
+
+ if (statement->connection->pSQLRowCount)
+ {
+ ret = statement->connection->pSQLRowCount(statement->driver_stmt, RowCount);
+ }
+
+ TRACE("ret %d\n", ret);
return ret;
}
--
2.43.0

Some files were not shown because too many files have changed in this diff Show More