Rebase against 01269452e0fbb1f081d506bd64996590a553e2b9.

This commit is contained in:
Elizabeth Figura
2025-10-03 16:39:15 -05:00
parent 9c06e8eab3
commit 38d4b8ca78
66 changed files with 39 additions and 7790 deletions

View File

@@ -1,64 +0,0 @@
From e6c3fae4360c375015e75165fc9a3c16af79ec4a Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 26 Apr 2025 12:33:23 +1000
Subject: [PATCH] odbc32: SQLDriverConnectW fallback to SQLDriverConnect when
required.
---
dlls/odbc32/proxyodbc.c | 37 +++++++++++++++++++++++++++++++++++--
1 file changed, 35 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 0893537aef9..6685b4306f5 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -6937,11 +6937,44 @@ static SQLRETURN driver_connect_win32_w( struct connection *con, SQLHWND window,
SQLSMALLINT len, SQLWCHAR *out_conn_str, SQLSMALLINT buflen, SQLSMALLINT *len2,
SQLUSMALLINT completion )
{
+ SQLRETURN ret = SQL_ERROR;
+
if (con->hdr.win32_funcs->SQLDriverConnectW)
return con->hdr.win32_funcs->SQLDriverConnectW( con->hdr.win32_handle, window, in_conn_str, len, out_conn_str,
buflen, len2, completion );
- if (con->hdr.win32_funcs->SQLDriverConnect) FIXME( "Unicode to ANSI conversion not handled\n" );
- return SQL_ERROR;
+ if (con->hdr.win32_funcs->SQLDriverConnect)
+ {
+ SQLCHAR *in = NULL, *out = NULL;
+ SQLSMALLINT in_len = 0, out_len = 0;
+
+ in_len = WideCharToMultiByte(CP_ACP, 0, in_conn_str, len, NULL, 0, NULL, NULL);
+ if (!(in = malloc(in_len + 1))) return SQL_ERROR;
+
+ WideCharToMultiByte(CP_ACP, 0, in_conn_str, len, (char *)in, in_len, NULL, NULL);
+ in[in_len] = 0;
+
+ if (out_conn_str && buflen > 0)
+ {
+ if (!(out = malloc(buflen)))
+ {
+ free(in);
+ return SQL_ERROR;
+ }
+ }
+
+ ret = con->hdr.win32_funcs->SQLDriverConnect( con->hdr.win32_handle, window, in, in_len, out, buflen, &out_len, completion );
+
+ if (SQL_SUCCEEDED(ret) && out_conn_str && out)
+ {
+ MultiByteToWideChar(CP_ACP, 0, (char *)out, out_len, out_conn_str, buflen);
+ if (len2) *len2 = out_len;
+ }
+
+ free(in);
+ free(out);
+ }
+
+ return ret;
}
static SQLRETURN driver_connect_unix_w( struct connection *con, SQLHWND window, SQLWCHAR *in_conn_str, SQLSMALLINT len,
--
2.50.1

View File

@@ -1,100 +0,0 @@
From f451eeaf15d825d8be8f5c661f5a9f249935674d Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 26 Apr 2025 16:27:58 +1000
Subject: [PATCH] odbc32: SQLGetInfoW support ANSI fallback.
---
dlls/odbc32/proxyodbc.c | 72 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 70 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 6685b4306f5..e18117d5ad8 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -7104,13 +7104,81 @@ static SQLRETURN get_info_unix_w( struct connection *con, SQLUSMALLINT type, SQL
return ODBC_CALL( SQLGetInfoW, &params );
}
+static BOOL typeinfo_is_string( SQLSMALLINT type )
+{
+ switch (type)
+ {
+ case SQL_ACCESSIBLE_PROCEDURES:
+ case SQL_ACCESSIBLE_TABLES:
+ case SQL_CATALOG_NAME:
+ case SQL_CATALOG_NAME_SEPARATOR:
+ case SQL_CATALOG_TERM:
+ case SQL_COLLATION_SEQ:
+ case SQL_COLUMN_ALIAS:
+ case SQL_DATA_SOURCE_NAME:
+ case SQL_DATA_SOURCE_READ_ONLY:
+ case SQL_DATABASE_NAME:
+ case SQL_DBMS_NAME:
+ case SQL_DBMS_VER:
+ case SQL_DESCRIBE_PARAMETER:
+ case SQL_DRIVER_NAME:
+ case SQL_DRIVER_ODBC_VER:
+ case SQL_DRIVER_VER:
+ case SQL_ODBC_VER:
+ case SQL_EXPRESSIONS_IN_ORDERBY:
+ case SQL_IDENTIFIER_QUOTE_CHAR:
+ case SQL_INTEGRITY:
+ case SQL_KEYWORDS:
+ case SQL_LIKE_ESCAPE_CLAUSE:
+ case SQL_MAX_ROW_SIZE_INCLUDES_LONG:
+ case SQL_MULT_RESULT_SETS:
+ case SQL_MULTIPLE_ACTIVE_TXN:
+ case SQL_NEED_LONG_DATA_LEN:
+ case SQL_ORDER_BY_COLUMNS_IN_SELECT:
+ case SQL_PROCEDURE_TERM:
+ case SQL_PROCEDURES:
+ case SQL_ROW_UPDATES:
+ case SQL_SCHEMA_TERM:
+ case SQL_SEARCH_PATTERN_ESCAPE:
+ case SQL_SERVER_NAME:
+ case SQL_SPECIAL_CHARACTERS:
+ case SQL_TABLE_TERM:
+ case SQL_USER_NAME:
+ case SQL_XOPEN_CLI_YEAR:
+ case SQL_OUTER_JOINS:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
static SQLRETURN get_info_win32_w( struct connection *con, SQLUSMALLINT type, SQLPOINTER value, SQLSMALLINT buflen,
SQLSMALLINT *retlen )
{
+ SQLRETURN ret = SQL_ERROR;
+
if (con->hdr.win32_funcs->SQLGetInfoW)
return con->hdr.win32_funcs->SQLGetInfoW( con->hdr.win32_handle, type, value, buflen, retlen );
- if (con->hdr.win32_funcs->SQLGetInfo) FIXME( "Unicode to ANSI conversion not handled\n" );
- return SQL_ERROR;
+ if (con->hdr.win32_funcs->SQLGetInfo)
+ {
+ ret = con->hdr.win32_funcs->SQLGetInfo( con->hdr.win32_handle, type, value, buflen, retlen );
+ if (SQL_SUCCEEDED(ret) && typeinfo_is_string(type))
+ {
+ if (value)
+ {
+ WCHAR *p = strnAtoW(value, -1);
+ wcscpy(value, p);
+ free(p);
+
+ if (retlen)
+ *retlen = wcslen(value) * sizeof(WCHAR);
+ }
+
+ if (retlen)
+ *retlen = *retlen * sizeof(WCHAR);
+ }
+ }
+ return ret;
}
/*************************************************************************
--
2.50.1

View File

@@ -1,57 +0,0 @@
From 8b2a6e19672b17ea61b2b4b5e141368a988ec9cf Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 26 Apr 2025 17:07:21 +1000
Subject: [PATCH] odbc32: SQLExecDirectW call fallback SQLExecDirect
---
dlls/odbc32/proxyodbc.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index e18117d5ad8..aace16cde55 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -1113,6 +1113,20 @@ static SQLWCHAR *strnAtoW( const SQLCHAR *str, int len )
return ret;
}
+static inline char *strdupWtoA(const WCHAR *str)
+{
+ char *ret = NULL;
+
+ if(str) {
+ DWORD size = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
+ ret = malloc(size);
+ if(ret)
+ WideCharToMultiByte(CP_ACP, 0, str, -1, ret, size, NULL, NULL);
+ }
+
+ return ret;
+}
+
static SQLRETURN columns_unix_a( struct statement *stmt, SQLCHAR *catalog, SQLSMALLINT len1, SQLCHAR *schema,
SQLSMALLINT len2, SQLCHAR *table, SQLSMALLINT len3, SQLCHAR *column,
SQLSMALLINT len4 )
@@ -6148,10 +6162,17 @@ static SQLRETURN exec_direct_unix_w( struct statement *stmt, SQLWCHAR *text, SQL
static SQLRETURN exec_direct_win32_w( struct statement *stmt, SQLWCHAR *text, SQLINTEGER len )
{
+ SQLRETURN ret = SQL_ERROR;
+
if (stmt->hdr.win32_funcs->SQLExecDirectW)
return stmt->hdr.win32_funcs->SQLExecDirectW( stmt->hdr.win32_handle, text, len );
- if (stmt->hdr.win32_funcs->SQLExecDirect) FIXME( "Unicode to ANSI conversion not handled\n" );
- return SQL_ERROR;
+ if (stmt->hdr.win32_funcs->SQLExecDirect)
+ {
+ SQLCHAR *textA = (SQLCHAR*)strdupWtoA( text );
+ ret = stmt->hdr.win32_funcs->SQLExecDirect( stmt->hdr.win32_handle, textA, len );
+ free(textA);
+ }
+ return ret;
}
/*************************************************************************
--
2.50.1

View File

@@ -1,4 +1,4 @@
From e482d2dec06bdbefa1aafff913cb34aeaa7c854e Mon Sep 17 00:00:00 2001
From 1afac79a78e568ed8fa6e2f2aa5b9eef986188b8 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 26 Apr 2025 17:32:49 +1000
Subject: [PATCH] odbc32: SQLDescribeColW add ANSI fallback
@@ -8,10 +8,10 @@ Subject: [PATCH] odbc32: SQLDescribeColW add ANSI fallback
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index aace16cde55..00d25d06ec2 100644
index 0beeafd27cd..7a0d5e46cda 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -6050,11 +6050,21 @@ static SQLRETURN describe_col_win32_w( struct statement *stmt, SQLUSMALLINT col_
@@ -6059,11 +6059,21 @@ static SQLRETURN describe_col_win32_w( struct statement *stmt, SQLUSMALLINT col_
SQLSMALLINT buf_len, SQLSMALLINT *name_len, SQLSMALLINT *data_type,
SQLULEN *col_size, SQLSMALLINT *decimal_digits, SQLSMALLINT *nullable )
{
@@ -24,7 +24,7 @@ index aace16cde55..00d25d06ec2 100644
- return SQL_ERROR;
+ if (stmt->hdr.win32_funcs->SQLDescribeCol)
+ {
+ SQLCHAR *name = (SQLCHAR*)strdupWtoA( (WCHAR*)col_name );
+ SQLCHAR *name = (SQLCHAR*)strdupWA( (WCHAR*)col_name );
+
+ ret = stmt->hdr.win32_funcs->SQLDescribeCol( stmt->hdr.win32_handle, col_number, name, buf_len, name_len,
+ data_type, col_size, decimal_digits, nullable);
@@ -36,5 +36,5 @@ index aace16cde55..00d25d06ec2 100644
/*************************************************************************
--
2.50.1
2.51.0

View File

@@ -1,4 +1,4 @@
From 472c0a3a3962a82dc17fc3c0aa2dc6ed5ade8b22 Mon Sep 17 00:00:00 2001
From 0affa8ade82076038f5c5ccfc9bb295401be7f95 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 1 May 2025 08:05:31 +1000
Subject: [PATCH] odbc32: SQLNativeSqlW add ANSI fallback
@@ -8,10 +8,10 @@ Subject: [PATCH] odbc32: SQLNativeSqlW add ANSI fallback
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 4ff20236cce..416d5aa77fa 100644
index e39964d3489..cbd769fff44 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -7895,11 +7895,33 @@ static SQLRETURN native_sql_unix_w( struct connection *con, SQLWCHAR *in_stateme
@@ -7888,11 +7888,33 @@ static SQLRETURN native_sql_unix_w( struct connection *con, SQLWCHAR *in_stateme
static SQLRETURN native_sql_win32_w( struct connection *con, SQLWCHAR *in_statement, SQLINTEGER len,
SQLWCHAR *out_statement, SQLINTEGER buflen, SQLINTEGER *retlen )
{
@@ -24,7 +24,7 @@ index 4ff20236cce..416d5aa77fa 100644
- return SQL_ERROR;
+ if (con->hdr.win32_funcs->SQLNativeSql)
+ {
+ SQLCHAR *statement = (SQLCHAR*)strdupWtoA( (WCHAR*)in_statement );
+ SQLCHAR *statement = (SQLCHAR *)strdupWA( (WCHAR *)in_statement );
+ SQLCHAR *out = NULL;
+ if (buflen)
+ out = malloc( buflen );
@@ -48,5 +48,5 @@ index 4ff20236cce..416d5aa77fa 100644
/*************************************************************************
--
2.50.1
2.51.0

View File

@@ -1,4 +1,4 @@
From 52ea953c3395206435d5bd9eb9f3dbbebde47993 Mon Sep 17 00:00:00 2001
From b9c01073dd390b5b241b1e87afefb5e61dbd1635 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 1 May 2025 08:10:04 +1000
Subject: [PATCH] odbc32: SQLPrepareW add ANSI fallback
@@ -8,10 +8,10 @@ Subject: [PATCH] odbc32: SQLPrepareW add ANSI fallback
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index 416d5aa77fa..138ccb0f112 100644
index cbd769fff44..b20ccaf5e55 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -6274,10 +6274,17 @@ static SQLRETURN prepare_unix_w( struct statement *stmt, SQLWCHAR *statement, SQ
@@ -6307,10 +6307,17 @@ static SQLRETURN prepare_unix_w( struct statement *stmt, SQLWCHAR *statement, SQ
static SQLRETURN prepare_win32_w( struct statement *stmt, SQLWCHAR *statement, SQLINTEGER len )
{
@@ -23,7 +23,7 @@ index 416d5aa77fa..138ccb0f112 100644
- return SQL_ERROR;
+ if (stmt->hdr.win32_funcs->SQLPrepare)
+ {
+ SQLCHAR *statementA = (SQLCHAR*)strdupWtoA( statement );
+ SQLCHAR *statementA = (SQLCHAR *)strdupWA( statement );
+ ret = stmt->hdr.win32_funcs->SQLPrepare( stmt->hdr.win32_handle, statementA, len );
+ free(statementA);
+ }
@@ -32,5 +32,5 @@ index 416d5aa77fa..138ccb0f112 100644
/*************************************************************************
--
2.50.1
2.51.0