Explore: Fix running queries without a datasource property set (#40805) (#40881)

* Explore: Fix running queries without a datasource property set

* fix test

* adjust test

(cherry picked from commit 2ee54b7ffe)

Co-authored-by: Giordano Ricci <me@giordanoricci.com>
This commit is contained in:
Grot (@grafanabot)
2021-10-25 15:57:46 +02:00
committed by GitHub
co-authored by Giordano Ricci
parent a8ecdca826
commit 055405eb65
3 changed files with 11 additions and 4 deletions
+1 -1
View File
@@ -243,7 +243,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', () => {
+5 -2
View File
@@ -282,9 +282,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<TQuery extends DataQuery>(queries: TQuery[]): boolean {
return (
queries &&
+5 -1
View File
@@ -285,7 +285,6 @@ export const runQueries = (
const exploreItemState = getState().explore[exploreId]!;
const {
datasourceInstance,
queries,
containerWidth,
isLive: live,
range,
@@ -299,6 +298,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