From e56d93ad53f43e75b5d25c3628fe3b112fde58f3 Mon Sep 17 00:00:00 2001 From: server Date: Tue, 14 Apr 2026 16:35:43 +0200 Subject: [PATCH] libsql: avoid redundant threaded locale resets --- src/libsql/AsyncSQL.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libsql/AsyncSQL.cpp b/src/libsql/AsyncSQL.cpp index 61b51b7..6dd28d1 100644 --- a/src/libsql/AsyncSQL.cpp +++ b/src/libsql/AsyncSQL.cpp @@ -46,10 +46,14 @@ bool CAsyncSQL::QueryLocaleSet() return true; } + const char* current_charset = mysql_character_set_name(&m_hDB); + if (current_charset && m_stLocale == current_charset) + return true; + if (mysql_set_character_set(&m_hDB, m_stLocale.c_str())) { - sys_err("cannot set locale %s by 'mysql_set_character_set', errno %u %s", - m_stLocale.c_str(), mysql_errno(&m_hDB), mysql_error(&m_hDB)); + sys_err("cannot set locale %s by 'mysql_set_character_set' (current=%s), errno %u %s", + m_stLocale.c_str(), current_charset ? current_charset : "", mysql_errno(&m_hDB), mysql_error(&m_hDB)); return false; } @@ -614,5 +618,7 @@ size_t CAsyncSQL::EscapeString(char* dst, size_t dstSize, const char* src, size_ void CAsyncSQL2::SetLocale(const std::string& stLocale) { m_stLocale = stLocale; - QueryLocaleSet(); + + if (!HasWorkerThread()) + QueryLocaleSet(); }