diff --git a/packages/web/src/query/AceEditor.svelte b/packages/web/src/query/AceEditor.svelte index 66ca544f2..c056aa55b 100644 --- a/packages/web/src/query/AceEditor.svelte +++ b/packages/web/src/query/AceEditor.svelte @@ -75,6 +75,18 @@ return editor; } + export function getCurrentCommandText(): string { + if (currentPart != null) return currentPart.text; + if (!editor) return ''; + const selectedText = editor.getSelectedText(); + if (selectedText) return selectedText; + if (editor.getHighlightActiveLine()) { + const line = editor.getSelectionRange().start.row; + return editor.session.getLine(line); + } + return ''; + } + const requireEditorPlugins = () => {}; requireEditorPlugins(); @@ -155,7 +167,18 @@ function changedCurrentQueryPart() { if (queryParts.length <= 1) return; - const cursor = editor.getSelectionRange().start; + const selectionRange = editor.getSelectionRange(); + + if ( + selectionRange.start.row != selectionRange.end.row || + selectionRange.start.column != selectionRange.end.column + ) { + removeCurrentPartMarker(); + currentPart = null; + return; + } + + const cursor = selectionRange.start; const part = queryParts.find( x => ((cursor.row == x.startLine && cursor.column >= x.startColumn) || cursor.row > x.startLine) && diff --git a/packages/web/src/query/SqlEditor.svelte b/packages/web/src/query/SqlEditor.svelte index e80b0614c..85afd77d3 100644 --- a/packages/web/src/query/SqlEditor.svelte +++ b/packages/web/src/query/SqlEditor.svelte @@ -32,6 +32,10 @@ return domEditor.getEditor(); } + export function getCurrentCommandText(): string { + return domEditor.getCurrentCommandText(); + } + $: effect = useEffect(() => { const editor = domEditor?.getEditor(); if ($tabVisible && conid && database && !readOnly && editor) { diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte index e7e0e1830..6ab7114ea 100644 --- a/packages/web/src/tabs/QueryTab.svelte +++ b/packages/web/src/tabs/QueryTab.svelte @@ -30,6 +30,15 @@ findReplace: true, executeAdditionalCondition: () => getCurrentEditor()?.hasConnection(), }); + registerCommand({ + id: 'query.executeCurrent', + category: 'Query', + name: 'Execute current', + keyText: 'Ctrl+Shift+Enter', + testEnabled: () => + getCurrentEditor() != null && !getCurrentEditor()?.isBusy() && getCurrentEditor()?.hasConnection(), + onClick: () => getCurrentEditor().executeCurrent(), + });