Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions cpp/cmake_modules/DefineOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ macro(tsort_bool_option_dependencies)
endmacro()

macro(resolve_option_dependencies)
# Arrow Flight SQL ODBC is available only for Windows for now.
if(NOT MSVC_TOOLCHAIN)
set(ARROW_FLIGHT_SQL_ODBC OFF)
endif()
if(MSVC_TOOLCHAIN)
set(ARROW_USE_GLOG OFF)
endif()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <locale>
#include <vector>
#include "arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/exceptions.h"
#include "arrow/util/macros.h"

#if defined(__APPLE__)
# include <atomic>
Expand Down Expand Up @@ -77,18 +78,21 @@ inline size_t wcsstrlen(const void* wcs_string) {
namespace driver {
namespace odbcabstraction {

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

uint32_t length_in_bytes = string.size() * GetSqlWCharSize();
uint32_t length_in_bytes = static_cast<uint32_t>(string.size() * GetSqlWCharSize());
const uint8_t* data = (uint8_t*)string.data();

result->reserve(length_in_bytes);
result->assign(data, data + length_in_bytes);
}
ARROW_UNSUPPRESS_DEPRECATION_WARNING

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

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

uint32_t length_in_bytes = byte_string.size();
uint32_t length_in_bytes = static_cast<uint32_t>(byte_string.size());
const uint8_t* data = (uint8_t*)byte_string.data();

result->reserve(length_in_bytes);
result->assign(data, data + length_in_bytes);
}
ARROW_UNSUPPRESS_DEPRECATION_WARNING

inline void WcsToUtf8(const void* wcs_string, size_t length_in_code_units,
std::vector<uint8_t>* result) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ inline SQLRETURN GetAttributeUTF8(const std::string& attributeValue, SQLPOINTER
*outputLenPtr = static_cast<O>(attributeValue.size());
}

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

if (output && outputSize < result + (isLengthInBytes ? GetSqlWCharSize() : 1)) {
if (output &&
outputSize < static_cast<O>(result + (isLengthInBytes ? GetSqlWCharSize() : 1))) {
return SQL_SUCCESS_WITH_INFO;
}
return SQL_SUCCESS;
Expand Down
Loading