1- import React , { useEffect , useRef } from 'react' ;
1+ import React , { useEffect , useMemo , useRef } from 'react' ;
22import { QueryEditorProps } from '@grafana/data' ;
33import { Datasource } from 'data/CHDatasource' ;
44import { EditorTypeSwitcher } from 'components/queryBuilder/EditorTypeSwitcher' ;
@@ -10,9 +10,11 @@ import { QueryBuilder } from 'components/queryBuilder/QueryBuilder';
1010import { generateSql } from 'data/sqlGenerator' ;
1111import { SqlEditor } from 'components/SqlEditor' ;
1212import { isBuilderOptionsRunnable , mapQueryBuilderOptionsToGrafanaFormat } from 'data/utils' ;
13- import { setAllOptions , useBuilderOptionsState } from 'hooks/useBuilderOptionsState' ;
13+ import { setAllOptions , setOptions , useBuilderOptionsState } from 'hooks/useBuilderOptionsState' ;
1414import { pluginVersion } from 'utils/version' ;
1515import { migrateCHQuery } from 'data/migration' ;
16+ import useTables from 'hooks/useTables' ;
17+ import otel from 'otel' ;
1618
1719export type CHQueryEditorProps = QueryEditorProps < Datasource , CHQuery , CHConfig > ;
1820
@@ -65,6 +67,31 @@ const CHEditorByType = (props: CHQueryEditorProps) => {
6567 shouldSkipChanges . current = false ;
6668 }
6769
70+ // Resolve hasTraceTimestampTable for OTel trace ID queries.
71+ // This runs at the CHEditorByType level (not inside TraceQueryBuilder)
72+ // so it works even when the builder is minimized via deep-links.
73+ const needsTraceTableCheck = Boolean ( builderOptions . meta ?. isTraceIdMode && builderOptions . meta ?. otelEnabled ) ;
74+ const traceDb = needsTraceTableCheck ? builderOptions . database : '' ;
75+ const traceTables = useTables ( props . datasource , traceDb ) ;
76+ const hasTraceTimestampTable = useMemo (
77+ ( ) => traceTables . some ( ( t ) => t === builderOptions . table + otel . traceTimestampTableSuffix ) ,
78+ [ builderOptions . table , traceTables ]
79+ ) ;
80+
81+ useEffect ( ( ) => {
82+ if ( ! needsTraceTableCheck || traceTables . length === 0 ) {
83+ return ;
84+ }
85+
86+ if ( hasTraceTimestampTable !== builderOptions . meta ?. hasTraceTimestampTable ) {
87+ builderOptionsDispatch (
88+ setOptions ( {
89+ meta : { hasTraceTimestampTable } ,
90+ } )
91+ ) ;
92+ }
93+ } , [ needsTraceTableCheck , traceTables , hasTraceTimestampTable , builderOptions . meta ?. hasTraceTimestampTable , builderOptionsDispatch ] ) ;
94+
6895 useEffect ( ( ) => {
6996 if ( shouldSkipChanges . current || query . editorType === EditorType . SQL ) {
7097 return ;
0 commit comments