From a3d8e65bbd98e56963ba7c21097256bf15157037 Mon Sep 17 00:00:00 2001 From: Artyom Abakumov Date: Sat, 20 Sep 2025 16:49:04 +0300 Subject: [PATCH 1/2] Pass SQL with zero length in trace correctly --- src/jrd/trace/TraceDSQLHelpers.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/jrd/trace/TraceDSQLHelpers.h b/src/jrd/trace/TraceDSQLHelpers.h index e42a9f1226f..c8c2a230bf9 100644 --- a/src/jrd/trace/TraceDSQLHelpers.h +++ b/src/jrd/trace/TraceDSQLHelpers.h @@ -31,6 +31,8 @@ #include "../../jrd/trace/TraceManager.h" #include "../../jrd/trace/TraceObjects.h" +#include + namespace Jrd { using Firebird::ITracePlugin; @@ -53,14 +55,12 @@ class TraceDSQLPrepare m_start_clock = fb_utils::query_performance_counter(); - static const char empty_string[] = ""; - if (!string) + static constexpr std::string_view empty_string = ""; + if (m_string == nullptr || (m_string_len == 0 && (m_string_len = fb_strlen(m_string)) == 0)) { - m_string = empty_string; - m_string_len = 0; + m_string = empty_string.data(); + m_string_len = empty_string.length(); } - else if (m_string_len == 0) - m_string_len = fb_strlen(m_string); } ~TraceDSQLPrepare() From b2fd8b835c0f8f0f446a3569d10a961ffe292417 Mon Sep 17 00:00:00 2001 From: Artyom Abakumov Date: Tue, 7 Oct 2025 09:18:48 +0300 Subject: [PATCH 2/2] Use explicit way to update calculate SQL length --- src/jrd/trace/TraceDSQLHelpers.h | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/jrd/trace/TraceDSQLHelpers.h b/src/jrd/trace/TraceDSQLHelpers.h index c8c2a230bf9..3d3f0cd78cf 100644 --- a/src/jrd/trace/TraceDSQLHelpers.h +++ b/src/jrd/trace/TraceDSQLHelpers.h @@ -55,11 +55,13 @@ class TraceDSQLPrepare m_start_clock = fb_utils::query_performance_counter(); - static constexpr std::string_view empty_string = ""; - if (m_string == nullptr || (m_string_len == 0 && (m_string_len = fb_strlen(m_string)) == 0)) + if (m_string == nullptr) + traceEmptyStatement(); + else if (m_string_len == 0) { - m_string = empty_string.data(); - m_string_len = empty_string.length(); + m_string_len = fb_strlen(m_string); + if (m_string_len == 0) + traceEmptyStatement(); } } @@ -105,6 +107,13 @@ class TraceDSQLPrepare } private: + void traceEmptyStatement() + { + static constexpr std::string_view empty_string = ""; + m_string = empty_string.data(); + m_string_len = empty_string.length(); + } + bool m_need_trace; Attachment* m_attachment; jrd_tra* const m_transaction;