diff --git a/superset-frontend/src/SqlLab/reducers/sqlLab.js b/superset-frontend/src/SqlLab/reducers/sqlLab.js index 84f82602b8b17..278109564f96a 100644 --- a/superset-frontend/src/SqlLab/reducers/sqlLab.js +++ b/superset-frontend/src/SqlLab/reducers/sqlLab.js @@ -667,16 +667,27 @@ export default function sqlLabReducer(state = {}, action) { [actions.CLEAR_INACTIVE_QUERIES]() { const { queries } = state; const cleanedQueries = Object.fromEntries( - Object.entries(queries).filter(([, query]) => { - if ( - ['running', 'pending'].includes(query.state) && - Date.now() - query.startDttm > action.interval && - query.progress === 0 - ) { - return false; - } - return true; - }), + Object.entries(queries) + .filter(([, query]) => { + if ( + ['running', 'pending'].includes(query.state) && + Date.now() - query.startDttm > action.interval && + query.progress === 0 + ) { + return false; + } + return true; + }) + .map(([id, query]) => [ + id, + { + ...query, + state: + query.resultsKey && query.results?.status + ? query.results.status + : query.state, + }, + ]), ); return { ...state, queries: cleanedQueries }; }, diff --git a/superset-frontend/src/SqlLab/reducers/sqlLab.test.js b/superset-frontend/src/SqlLab/reducers/sqlLab.test.js index 89ddc61f8c8a6..e1a234734bca6 100644 --- a/superset-frontend/src/SqlLab/reducers/sqlLab.test.js +++ b/superset-frontend/src/SqlLab/reducers/sqlLab.test.js @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +import { QueryState } from '@superset-ui/core'; import sqlLabReducer from 'src/SqlLab/reducers/sqlLab'; import * as actions from 'src/SqlLab/actions/sqlLab'; import { table, initialState as mockState } from '../fixtures'; @@ -388,4 +389,38 @@ describe('sqlLabReducer', () => { newState = sqlLabReducer(newState, actions.refreshQueries({})); }); }); + describe('CLEAR_INACTIVE_QUERIES', () => { + let newState; + let query; + beforeEach(() => { + query = { + id: 'abcd', + changed_on: Date.now(), + startDttm: Date.now(), + state: QueryState.FETCHING, + progress: 100, + resultsKey: 'fa3dccc4-c549-4fbf-93c8-b4fb5a6fb8b7', + cached: false, + }; + }); + it('updates queries that have already been completed', () => { + newState = sqlLabReducer( + { + ...newState, + queries: { + abcd: { + ...query, + results: { + query_id: 1234, + status: QueryState.SUCCESS, + data: [], + }, + }, + }, + }, + actions.clearInactiveQueries(Date.now()), + ); + expect(newState.queries.abcd.state).toBe(QueryState.SUCCESS); + }); + }); });