diff --git a/client/app/pages/queries/QuerySource.jsx b/client/app/pages/queries/QuerySource.jsx
index ae34192070..2aea634598 100644
--- a/client/app/pages/queries/QuerySource.jsx
+++ b/client/app/pages/queries/QuerySource.jsx
@@ -87,7 +87,15 @@ function QuerySource(props) {
const parameters = useMemo(() => query.getParametersDefs(), [query]);
const [dirtyParameters, setDirtyParameters] = useState(query.getParameters().hasPendingValues());
- const { queryResult, queryResultData, isQueryExecuting, executeQuery, executeAdhocQuery } = useQueryExecute(query);
+ const {
+ queryResult,
+ queryResultData,
+ isQueryExecuting,
+ isExecutionCancelling,
+ executeQuery,
+ executeAdhocQuery,
+ cancelExecution,
+ } = useQueryExecute(query);
const editorRef = useRef(null);
const autocompleteAvailable = useMemo(() => {
@@ -454,7 +462,8 @@ function QuerySource(props) {
status={queryResultData.status}
updatedAt={queryResultData.updatedAt}
error={queryResultData.error}
- onCancel={() => console.log("Query execution cancelled")}
+ isCancelling={isExecutionCancelling}
+ onCancel={cancelExecution}
/>
)}
diff --git a/client/app/pages/queries/components/QueryExecutionStatus.jsx b/client/app/pages/queries/components/QueryExecutionStatus.jsx
index 2ce42ab6c7..5a1eeeb4e5 100644
--- a/client/app/pages/queries/components/QueryExecutionStatus.jsx
+++ b/client/app/pages/queries/components/QueryExecutionStatus.jsx
@@ -5,18 +5,22 @@ import Alert from "antd/lib/alert";
import Button from "antd/lib/button";
import { Timer } from "@/components/Timer";
-export default function QueryExecutionStatus({ status, updatedAt, error, onCancel }) {
+export default function QueryExecutionStatus({ status, updatedAt, error, isCancelling, onCancel }) {
const alertType = status === "failed" ? "error" : "info";
const showTimer = status !== "failed" && updatedAt;
- const canCancel = includes(["waiting", "processing"], status);
- let message = null;
+ const isCancelButtonAvailable = includes(["waiting", "processing"], status);
+ let message = isCancelling ?