Rebase against dc34fef45d491516fa8eaee45b2ae40faa7b0bfe.

This commit is contained in:
Alistair Leslie-Hughes
2025-10-08 08:50:17 +11:00
parent 52f1f289f0
commit 672a2bae70
4 changed files with 33 additions and 93 deletions

View File

@@ -1,20 +1,21 @@
From 5171b6447da54618cf45fd367fcf4f5695ccc130 Mon Sep 17 00:00:00 2001
From 9996d4b09e7ffbce58f34424475c6fcf257e6476 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 17 Jul 2024 21:55:20 +1000
Subject: [PATCH] odbc32: SQLGetData support ODBC v2.0
---
dlls/odbc32/proxyodbc.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
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 3d4c58badfe..e1db8564f90 100644
index 46e7ffc1d95..c95603b7030 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -2525,7 +2525,21 @@ static SQLRETURN get_data_win32( struct statement *stmt, SQLUSMALLINT column, SQ
SQLLEN buflen, SQLLEN *retlen )
{
if (stmt->hdr.win32_funcs->SQLGetData)
@@ -2576,8 +2576,21 @@ static SQLRETURN get_data_win32( struct statement *stmt, SQLUSMALLINT column, SQ
free( data );
return ret;
}
+ else
+ {
+ struct environment *env = (struct environment *)find_object_type(SQL_HANDLE_ENV, stmt->hdr.parent);
+ if (env && env->driver_ver == SQL_OV_ODBC2)
@@ -26,13 +27,13 @@ index 3d4c58badfe..e1db8564f90 100644
+ else if (type == SQL_C_TYPE_TIMESTAMP)
+ type = SQL_C_TIMESTAMP;
+ }
+
return stmt->hdr.win32_funcs->SQLGetData( stmt->hdr.win32_handle, column, type, value, buflen, retlen );
- return stmt->hdr.win32_funcs->SQLGetData( stmt->hdr.win32_handle, column, type, value, buflen, retlen );
+ return stmt->hdr.win32_funcs->SQLGetData( stmt->hdr.win32_handle, column, type, value, buflen, retlen );
+ }
+
return SQL_ERROR;
}
/*************************************************************************
--
2.50.1
2.51.0

View File

@@ -1,60 +0,0 @@
From d2d82abfba3d43d4416f14ac5318acd4eab8528c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 5 May 2025 10:17:22 +1000
Subject: [PATCH] odbc32: SQLGetData handle ANSI driver
---
dlls/odbc32/proxyodbc.c | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index a94b31cc544..78ec2683e63 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -2592,8 +2592,11 @@ static SQLRETURN get_data_unix( struct statement *stmt, SQLUSMALLINT column, SQL
static SQLRETURN get_data_win32( struct statement *stmt, SQLUSMALLINT column, SQLSMALLINT type, SQLPOINTER value,
SQLLEN buflen, SQLLEN *retlen )
{
+ SQLRETURN ret = SQL_ERROR;
+
if (stmt->hdr.win32_funcs->SQLGetData)
{
+ BOOL wants_wchar = FALSE;
struct environment *env = (struct environment *)find_object_type(SQL_HANDLE_ENV, stmt->hdr.parent);
if (env && env->driver_ver == SQL_OV_ODBC2)
{
@@ -2605,10 +2608,29 @@ static SQLRETURN get_data_win32( struct statement *stmt, SQLUSMALLINT column, SQ
type = SQL_C_TIMESTAMP;
}
- return stmt->hdr.win32_funcs->SQLGetData( stmt->hdr.win32_handle, column, type, value, buflen, retlen );
+ if ( driver_ansi_only(stmt->hdr.win32_funcs) )
+ {
+ if (type == SQL_C_WCHAR)
+ {
+ type = SQL_CHAR;
+ wants_wchar = TRUE;
+ }
+ }
+
+ ret = stmt->hdr.win32_funcs->SQLGetData( stmt->hdr.win32_handle, column, type, value, buflen, retlen );
+
+ if (SUCCESS(ret) && wants_wchar )
+ {
+ WCHAR *str = strnAtoW(value, -1);
+ wcscpy(value, str);
+ free(str);
+
+ if (retlen)
+ *retlen = *retlen * sizeof(WCHAR);
+ }
}
- return SQL_ERROR;
+ return ret;
}
/*************************************************************************
--
2.50.1