From 8142279502a0b0650a3942450be1e28eb9f9d6e9 Mon Sep 17 00:00:00 2001 From: Vadim Ogievetsky Date: Tue, 3 Jun 2025 13:07:12 -0700 Subject: [PATCH] init fixes --- .../src/druid-models/dart/dart-query-entry.mock.ts | 3 +++ .../src/druid-models/dart/dart-query-entry.ts | 1 + .../druid-models/workbench-query/workbench-query.ts | 1 + web-console/src/helpers/capabilities.ts | 7 +++++-- web-console/src/utils/druid-query.ts | 13 ------------- .../current-dart-panel/current-dart-panel.tsx | 7 +++++-- .../explain-dialog/explain-dialog.tsx | 6 +----- .../views/workbench-view/query-tab/query-tab.tsx | 4 ++-- 8 files changed, 18 insertions(+), 24 deletions(-) diff --git a/web-console/src/druid-models/dart/dart-query-entry.mock.ts b/web-console/src/druid-models/dart/dart-query-entry.mock.ts index f2409abb0cb1..fb2e098d7bc8 100644 --- a/web-console/src/druid-models/dart/dart-query-entry.mock.ts +++ b/web-console/src/druid-models/dart/dart-query-entry.mock.ts @@ -20,6 +20,7 @@ import type { DartQueryEntry } from './dart-query-entry'; export const DART_QUERIES: DartQueryEntry[] = [ { + engine: 'msq-dart', sqlQueryId: '77b2344c-0a1f-4aa0-b127-de6fbc0c2b57', dartQueryId: '99cdba0d-ed77-433d-9adc-0562d816e105', sql: 'SELECT\n "URL",\n COUNT(*)\nFROM "c"\nGROUP BY 1\nORDER BY 2 DESC\nLIMIT 50\n', @@ -29,6 +30,7 @@ export const DART_QUERIES: DartQueryEntry[] = [ state: 'RUNNING', }, { + engine: 'msq-dart', sqlQueryId: '45441cf5-d8b7-46cb-b6d8-682334f056ef', dartQueryId: '25af9bff-004d-494e-b562-2752dc3779c8', sql: 'SELECT\n "URL",\n COUNT(*)\nFROM "c"\nGROUP BY 1\nORDER BY 2 DESC\nLIMIT 50\n', @@ -38,6 +40,7 @@ export const DART_QUERIES: DartQueryEntry[] = [ state: 'CANCELED', }, { + engine: 'msq-dart', sqlQueryId: 'f7257c78-6bbe-439d-99ba-f4998b300770', dartQueryId: 'f7c2d644-9c40-4d61-9fdb-7b0e15219886', sql: 'SELECT\n "URL",\n COUNT(*)\nFROM "c"\nGROUP BY 1\nORDER BY 2 DESC\nLIMIT 50\n', diff --git a/web-console/src/druid-models/dart/dart-query-entry.ts b/web-console/src/druid-models/dart/dart-query-entry.ts index 472248b881e9..5396f7bc1544 100644 --- a/web-console/src/druid-models/dart/dart-query-entry.ts +++ b/web-console/src/druid-models/dart/dart-query-entry.ts @@ -17,6 +17,7 @@ */ export interface DartQueryEntry { + engine: 'msq-dart'; sqlQueryId: string; dartQueryId: string; sql: string; diff --git a/web-console/src/druid-models/workbench-query/workbench-query.ts b/web-console/src/druid-models/workbench-query/workbench-query.ts index 53b1b60634a0..c71d95d90746 100644 --- a/web-console/src/druid-models/workbench-query/workbench-query.ts +++ b/web-console/src/druid-models/workbench-query/workbench-query.ts @@ -566,6 +566,7 @@ export class WorkbenchQuery { } if (engine === 'sql-msq-dart') { + apiQuery.context.engine = 'msq-dart'; apiQuery.context.fullReport ??= true; } diff --git a/web-console/src/helpers/capabilities.ts b/web-console/src/helpers/capabilities.ts index 3255ec93be73..22e840b2745e 100644 --- a/web-console/src/helpers/capabilities.ts +++ b/web-console/src/helpers/capabilities.ts @@ -143,8 +143,11 @@ export class Capabilities { static async detectMultiStageQueryDart(): Promise { try { - const resp = await Api.instance.get(`/druid/v2/sql/dart/enabled?capabilities`); - return Boolean(resp.data.enabled); + const resp = (await Api.instance.get(`/druid/v2/sql/engines?capabilities`)).data; + return ( + Array.isArray(resp.engines) && + resp.engines.some(({ name }: { name: string }) => name === 'msq-dart') + ); } catch { return false; } diff --git a/web-console/src/utils/druid-query.ts b/web-console/src/utils/druid-query.ts index 728138890349..c596abeefa6a 100644 --- a/web-console/src/utils/druid-query.ts +++ b/web-console/src/utils/druid-query.ts @@ -348,19 +348,6 @@ export async function queryDruidSql( return sqlResultResp.data; } -export async function queryDruidSqlDart( - sqlQueryPayload: Record, - cancelToken?: CancelToken, -): Promise { - let sqlResultResp: AxiosResponse; - try { - sqlResultResp = await Api.instance.post('/druid/v2/sql/dart', sqlQueryPayload, { cancelToken }); - } catch (e) { - throw new Error(getDruidErrorMessage(e)); - } - return sqlResultResp.data; -} - export async function getApiArray(url: string, cancelToken?: CancelToken): Promise { const result = (await Api.instance.get(url, { cancelToken })).data; if (!Array.isArray(result)) throw new Error('unexpected result'); diff --git a/web-console/src/views/workbench-view/current-dart-panel/current-dart-panel.tsx b/web-console/src/views/workbench-view/current-dart-panel/current-dart-panel.tsx index 5f104b75f2df..51ea233ab0b9 100644 --- a/web-console/src/views/workbench-view/current-dart-panel/current-dart-panel.tsx +++ b/web-console/src/views/workbench-view/current-dart-panel/current-dart-panel.tsx @@ -62,7 +62,10 @@ export const CurrentDartPanel = React.memo(function CurrentViberPanel( const [dartQueryEntriesState, queryManager] = useQueryManager({ query: useStore(WORK_STATE_STORE, getMsqDartVersion), processQuery: async (_, cancelToken) => { - return (await Api.instance.get('/druid/v2/sql/dart', { cancelToken })).data.queries; + return ( + (await Api.instance.get('/druid/v2/sql/queries', { cancelToken })).data + .queries as DartQueryEntry[] + ).filter(q => q.engine === 'msq-dart'); }, }); @@ -167,7 +170,7 @@ export const CurrentDartPanel = React.memo(function CurrentViberPanel( onCancel={async () => { if (!confirmCancelId) return; try { - await Api.instance.delete(`/druid/v2/sql/dart/${Api.encodePath(confirmCancelId)}`); + await Api.instance.delete(`/druid/v2/sql/${Api.encodePath(confirmCancelId)}`); AppToaster.show({ message: 'Query canceled', diff --git a/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx b/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx index d6eed657d096..52d098e913ed 100644 --- a/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx +++ b/web-console/src/views/workbench-view/explain-dialog/explain-dialog.tsx @@ -45,7 +45,6 @@ import { getDruidErrorMessage, nonEmptyArray, queryDruidSql, - queryDruidSqlDart, wrapInExplainIfNeeded, } from '../../../utils'; @@ -91,6 +90,7 @@ export const ExplainDialog = React.memo(function ExplainDialog(props: ExplainDia let result: any[]; switch (engine) { case 'sql-native': + case 'sql-msq-dart': result = await queryDruidSql(payload, cancelToken); break; @@ -102,10 +102,6 @@ export const ExplainDialog = React.memo(function ExplainDialog(props: ExplainDia } break; - case 'sql-msq-dart': - result = await queryDruidSqlDart(payload, cancelToken); - break; - default: throw new Error(`Explain not supported for engine ${engine}`); } diff --git a/web-console/src/views/workbench-view/query-tab/query-tab.tsx b/web-console/src/views/workbench-view/query-tab/query-tab.tsx index 1ff438308591..bd3a13e671e0 100644 --- a/web-console/src/views/workbench-view/query-tab/query-tab.tsx +++ b/web-console/src/views/workbench-view/query-tab/query-tab.tsx @@ -278,7 +278,7 @@ export const QueryTab = React.memo(function QueryTab(props: QueryTabProps) { void cancelToken.promise .then(cancel => { if (cancel.message === QueryManager.TERMINATION_MESSAGE) return; - return Api.instance.delete(`/druid/v2/sql/dart/${Api.encodePath(cancelQueryId)}`); + return Api.instance.delete(`/druid/v2/sql/${Api.encodePath(cancelQueryId)}`); }) .catch(() => {}); } @@ -286,7 +286,7 @@ export const QueryTab = React.memo(function QueryTab(props: QueryTabProps) { onQueryChange(props.query.changeLastExecution(undefined)); const executionPromise = Api.instance - .post(`/druid/v2/sql/dart`, query, { + .post(`/druid/v2/sql`, query, { cancelToken: new axios.CancelToken(cancelFn => { nativeQueryCancelFnRef.current = cancelFn; }),