diff --git a/src/interpreter/clickhouse.rs b/src/interpreter/clickhouse.rs index 8f874fc..07f4705 100644 --- a/src/interpreter/clickhouse.rs +++ b/src/interpreter/clickhouse.rs @@ -836,13 +836,7 @@ impl ClickHouse { {} AS start_time_, {} AS end_time_ SELECT - if(empty(symbols), - arrayStringConcat(arrayMap( - addr -> demangle(addressToSymbol(addr)), - arrayReverse(trace) - ), ';'), - arrayStringConcat(symbols, ';') - ) AS human_trace, + {} AS human_trace, {} weight FROM {} WHERE @@ -869,6 +863,24 @@ impl ClickHouse { ), None => "toDateTime64(now(), 6)".to_string(), }, + if self.quirks.has(ClickHouseAvailableQuirks::TraceLogHasSymbols) { + r#" + if(empty(symbols), + arrayStringConcat(arrayMap( + addr -> demangle(addressToSymbol(addr)), + arrayReverse(trace) + ), ';'), + arrayStringConcat(arrayReverse(symbols), ';') + ) + "# + } else { + r#" + arrayStringConcat(arrayMap( + addr -> demangle(addressToSymbol(addr)), + arrayReverse(trace) + ), ';') + "# + }, match trace_type { TraceType::Memory => "abs(sum(size))", _ => "count()", diff --git a/src/interpreter/clickhouse_quirks.rs b/src/interpreter/clickhouse_quirks.rs index 548aaa9..31a848f 100644 --- a/src/interpreter/clickhouse_quirks.rs +++ b/src/interpreter/clickhouse_quirks.rs @@ -5,9 +5,11 @@ pub enum ClickHouseAvailableQuirks { ProcessesElapsed, ProcessesCurrentDatabase, AsynchronousMetricsTotalIndexGranularityBytesInMemoryAllocated, + TraceLogHasSymbols, } -const QUIRKS: [(&str, ClickHouseAvailableQuirks); 3] = [ +// List of quirks (that requires workaround) or new features. +const QUIRKS: [(&str, ClickHouseAvailableQuirks); 4] = [ // https://github.com/ClickHouse/ClickHouse/pull/46047 // // NOTE: I use here 22.13 because I have such version in production, which is more or less the @@ -23,6 +25,7 @@ const QUIRKS: [(&str, ClickHouseAvailableQuirks); 3] = [ ">=24.11, <25.6", ClickHouseAvailableQuirks::AsynchronousMetricsTotalIndexGranularityBytesInMemoryAllocated, ), + (">=25.1", ClickHouseAvailableQuirks::TraceLogHasSymbols), ]; pub struct ClickHouseQuirks {