Skip to content

Commit 7f41ece

Browse files
authored
GH-46576: [C++] Suppress codecvt_utf8 deprecation warning (#46622)
### Rationale for this change Resolve warnings that get treated as errors by suppressing the warning. ### What changes are included in this PR? 1. Add `ARROW_SUPPRESS_DEPRECATION_WARNING` to code that use `codecvt_utf8` 2. Add explicit conversions for integer values in `cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/attribute_utils.h` ### Are these changes tested? They are tested locally on my Windows environment. The build succeeds. ### Are there any user-facing changes? None * GitHub Issue: #46576 Authored-by: Alina (Xi) Li <alina.li@improving.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
1 parent 1d43680 commit 7f41ece

3 files changed

Lines changed: 16 additions & 4 deletions

File tree

cpp/cmake_modules/DefineOptions.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ macro(tsort_bool_option_dependencies)
107107
endmacro()
108108

109109
macro(resolve_option_dependencies)
110+
# Arrow Flight SQL ODBC is available only for Windows for now.
111+
if(NOT MSVC_TOOLCHAIN)
112+
set(ARROW_FLIGHT_SQL_ODBC OFF)
113+
endif()
110114
if(MSVC_TOOLCHAIN)
111115
set(ARROW_USE_GLOG OFF)
112116
endif()

cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/encoding.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <locale>
2424
#include <vector>
2525
#include "arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/exceptions.h"
26+
#include "arrow/util/macros.h"
2627

2728
#if defined(__APPLE__)
2829
# include <atomic>
@@ -77,18 +78,21 @@ inline size_t wcsstrlen(const void* wcs_string) {
7778
namespace driver {
7879
namespace odbcabstraction {
7980

81+
// GH-46576: suppress unicode warnings
82+
ARROW_SUPPRESS_DEPRECATION_WARNING
8083
template <typename CHAR_TYPE>
8184
inline void Utf8ToWcs(const char* utf8_string, size_t length,
8285
std::vector<uint8_t>* result) {
8386
thread_local std::wstring_convert<std::codecvt_utf8<CHAR_TYPE>, CHAR_TYPE> converter;
8487
auto string = converter.from_bytes(utf8_string, utf8_string + length);
8588

86-
uint32_t length_in_bytes = string.size() * GetSqlWCharSize();
89+
uint32_t length_in_bytes = static_cast<uint32_t>(string.size() * GetSqlWCharSize());
8790
const uint8_t* data = (uint8_t*)string.data();
8891

8992
result->reserve(length_in_bytes);
9093
result->assign(data, data + length_in_bytes);
9194
}
95+
ARROW_UNSUPPRESS_DEPRECATION_WARNING
9296

9397
inline void Utf8ToWcs(const char* utf8_string, size_t length,
9498
std::vector<uint8_t>* result) {
@@ -108,19 +112,22 @@ inline void Utf8ToWcs(const char* utf8_string, std::vector<uint8_t>* result) {
108112
return Utf8ToWcs(utf8_string, strlen(utf8_string), result);
109113
}
110114

115+
// GH-46576: suppress unicode warnings
116+
ARROW_SUPPRESS_DEPRECATION_WARNING
111117
template <typename CHAR_TYPE>
112118
inline void WcsToUtf8(const void* wcs_string, size_t length_in_code_units,
113119
std::vector<uint8_t>* result) {
114120
thread_local std::wstring_convert<std::codecvt_utf8<CHAR_TYPE>, CHAR_TYPE> converter;
115121
auto byte_string = converter.to_bytes((CHAR_TYPE*)wcs_string,
116122
(CHAR_TYPE*)wcs_string + length_in_code_units);
117123

118-
uint32_t length_in_bytes = byte_string.size();
124+
uint32_t length_in_bytes = static_cast<uint32_t>(byte_string.size());
119125
const uint8_t* data = (uint8_t*)byte_string.data();
120126

121127
result->reserve(length_in_bytes);
122128
result->assign(data, data + length_in_bytes);
123129
}
130+
ARROW_UNSUPPRESS_DEPRECATION_WARNING
124131

125132
inline void WcsToUtf8(const void* wcs_string, size_t length_in_code_units,
126133
std::vector<uint8_t>* result) {

cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/attribute_utils.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ inline SQLRETURN GetAttributeUTF8(const std::string& attributeValue, SQLPOINTER
5858
*outputLenPtr = static_cast<O>(attributeValue.size());
5959
}
6060

61-
if (output && outputSize < attributeValue.size() + 1) {
61+
if (output && outputSize < static_cast<O>(attributeValue.size() + 1)) {
6262
return SQL_SUCCESS_WITH_INFO;
6363
}
6464
return SQL_SUCCESS;
@@ -87,7 +87,8 @@ inline SQLRETURN GetAttributeSQLWCHAR(const std::string& attributeValue,
8787
*outputLenPtr = static_cast<O>(isLengthInBytes ? result : result / GetSqlWCharSize());
8888
}
8989

90-
if (output && outputSize < result + (isLengthInBytes ? GetSqlWCharSize() : 1)) {
90+
if (output &&
91+
outputSize < static_cast<O>(result + (isLengthInBytes ? GetSqlWCharSize() : 1))) {
9192
return SQL_SUCCESS_WITH_INFO;
9293
}
9394
return SQL_SUCCESS;

0 commit comments

Comments
 (0)