# HG changeset patch # User Sebastien Jodogne # Date 1628659733 -7200 # Node ID 674bbb9d1c83d2557e01d630402df1da05134580 # Parent 8f17f23c9af7a051975da5f743a0b985ba593636 added OdbcEnvironment::GlobalInitialization() diff -r 8f17f23c9af7 -r 674bbb9d1c83 Framework/Odbc/OdbcEnvironment.cpp --- a/Framework/Odbc/OdbcEnvironment.cpp Tue Aug 10 20:52:16 2021 +0200 +++ b/Framework/Odbc/OdbcEnvironment.cpp Wed Aug 11 07:28:53 2021 +0200 @@ -94,4 +94,17 @@ } } } + + + void OdbcEnvironment::GlobalInitialization() + { + /** + * Explicitly inform the ODBC driver that the application is using + * UTF-8, by making sure that default "C" locale is used. We are + * in the scenario "ANSI application with a Unicode driver". + * https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/programming-guidelines + * https://www.progress.com/tutorials/odbc/unicode + **/ + setlocale(LC_ALL, "C"); + } } diff -r 8f17f23c9af7 -r 674bbb9d1c83 Framework/Odbc/OdbcEnvironment.h --- a/Framework/Odbc/OdbcEnvironment.h Tue Aug 10 20:52:16 2021 +0200 +++ b/Framework/Odbc/OdbcEnvironment.h Wed Aug 11 07:28:53 2021 +0200 @@ -49,5 +49,7 @@ static std::string FormatError(SQLHANDLE handle, SQLSMALLINT type); + + static void GlobalInitialization(); }; } diff -r 8f17f23c9af7 -r 674bbb9d1c83 Odbc/Plugins/IndexPlugin.cpp --- a/Odbc/Plugins/IndexPlugin.cpp Tue Aug 10 20:52:16 2021 +0200 +++ b/Odbc/Plugins/IndexPlugin.cpp Wed Aug 11 07:28:53 2021 +0200 @@ -21,6 +21,7 @@ #include "OdbcIndex.h" +#include "../../Framework/Odbc/OdbcEnvironment.h" #include "../../Framework/Plugins/PluginInitialization.h" #include "../../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" @@ -84,6 +85,8 @@ return 0; } + OrthancDatabases::OdbcEnvironment::GlobalInitialization(); + try { const std::string connectionString = odbc.GetStringValue("IndexConnectionString", ""); diff -r 8f17f23c9af7 -r 674bbb9d1c83 Odbc/Plugins/StoragePlugin.cpp --- a/Odbc/Plugins/StoragePlugin.cpp Tue Aug 10 20:52:16 2021 +0200 +++ b/Odbc/Plugins/StoragePlugin.cpp Wed Aug 11 07:28:53 2021 +0200 @@ -148,6 +148,8 @@ return 0; } + OrthancDatabases::OdbcEnvironment::GlobalInitialization(); + try { const std::string connectionString = odbc.GetStringValue("StorageConnectionString", ""); diff -r 8f17f23c9af7 -r 674bbb9d1c83 Odbc/UnitTests/UnitTestsMain.cpp --- a/Odbc/UnitTests/UnitTestsMain.cpp Tue Aug 10 20:52:16 2021 +0200 +++ b/Odbc/UnitTests/UnitTestsMain.cpp Wed Aug 11 07:28:53 2021 +0200 @@ -23,6 +23,7 @@ static std::string connectionString_; +#include "../../Framework/Odbc/OdbcEnvironment.h" #include "../../Framework/Plugins/IndexUnitTests.h" #include @@ -85,6 +86,8 @@ Orthanc::Logging::EnableInfoLevel(true); //Orthanc::Logging::EnableTraceLevel(true); + OrthancDatabases::OdbcEnvironment::GlobalInitialization(); + int result = RUN_ALL_TESTS(); Orthanc::Logging::Finalize(); diff -r 8f17f23c9af7 -r 674bbb9d1c83 Resources/CMake/DatabasesFrameworkConfiguration.cmake --- a/Resources/CMake/DatabasesFrameworkConfiguration.cmake Tue Aug 10 20:52:16 2021 +0200 +++ b/Resources/CMake/DatabasesFrameworkConfiguration.cmake Wed Aug 11 07:28:53 2021 +0200 @@ -183,7 +183,10 @@ ##################################################################### if (ENABLE_ODBC_BACKEND) - include(${CMAKE_CURRENT_LIST_DIR}/UnixOdbcConfiguration.cmake) + if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") + include(${CMAKE_CURRENT_LIST_DIR}/UnixOdbcConfiguration.cmake) + endif() + add_definitions(-DORTHANC_ENABLE_ODBC=1) list(APPEND DATABASES_SOURCES ${ORTHANC_DATABASES_ROOT}/Framework/Odbc/OdbcDatabase.cpp