From 2ee54b7ffec6ce5384268a9591d74b8a4da9ce8a Mon Sep 17 00:00:00 2001 From: Giordano Ricci Date: Mon, 25 Oct 2021 14:25:17 +0100 Subject: [PATCH] Explore: Fix running queries without a datasource property set (#40805) * Explore: Fix running queries without a datasource property set * fix test * adjust test --- public/app/core/utils/explore.test.ts | 2 +- public/app/core/utils/explore.ts | 7 +++++-- public/app/features/explore/state/query.ts | 6 +++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/public/app/core/utils/explore.test.ts b/public/app/core/utils/explore.test.ts index b5a3d73c58f..280ae6c0b09 100644 --- a/public/app/core/utils/explore.test.ts +++ b/public/app/core/utils/explore.test.ts @@ -239,7 +239,7 @@ describe('hasNonEmptyQuery', () => { }); test('should return false if query is empty', () => { - expect(hasNonEmptyQuery([{ refId: '1', key: '2', context: 'panel' }])).toBeFalsy(); + expect(hasNonEmptyQuery([{ refId: '1', key: '2', context: 'panel', datasource: 'some-ds' }])).toBeFalsy(); }); test('should return false if no queries exist', () => { diff --git a/public/app/core/utils/explore.ts b/public/app/core/utils/explore.ts index 647611a23c0..ce4e1d59318 100644 --- a/public/app/core/utils/explore.ts +++ b/public/app/core/utils/explore.ts @@ -277,9 +277,12 @@ export function ensureQueries(queries?: DataQuery[]): DataQuery[] { } /** - * A target is non-empty when it has keys (with non-empty values) other than refId, key and context. + * A target is non-empty when it has keys (with non-empty values) other than refId, key, context and datasource. + * FIXME: While this is reasonable for practical use cases, a query without any propery might still be "non-empty" + * in its own scope, for instance when there's no user input needed. This might be the case for an hypothetic datasource in + * which query options are only set in its config and the query object itself, as generated from its query editor it's always "empty" */ -const validKeys = ['refId', 'key', 'context']; +const validKeys = ['refId', 'key', 'context', 'datasource']; export function hasNonEmptyQuery(queries: TQuery[]): boolean { return ( queries && diff --git a/public/app/features/explore/state/query.ts b/public/app/features/explore/state/query.ts index d6028ece374..33ec8339099 100644 --- a/public/app/features/explore/state/query.ts +++ b/public/app/features/explore/state/query.ts @@ -326,7 +326,6 @@ export const runQueries = ( const exploreItemState = getState().explore[exploreId]!; const { datasourceInstance, - queries, containerWidth, isLive: live, range, @@ -341,6 +340,11 @@ export const runQueries = ( } = exploreItemState; let newQuerySub; + const queries = exploreItemState.queries.map((query) => ({ + ...query, + datasource: query.datasource || datasourceInstance?.name, + })); + const cachedValue = getResultsFromCache(cache, absoluteRange); // If we have results saved in cache, we are going to use those results instead of running queries