diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte
index 084ef9b7b..32ce58356 100644
--- a/packages/web/src/icons/FontIcon.svelte
+++ b/packages/web/src/icons/FontIcon.svelte
@@ -210,6 +210,10 @@
'icon expand-all': 'mdi mdi-expand-all',
'icon collapse-all': 'mdi mdi-collapse-all',
+ 'icon transaction': 'mdi mdi-code-json',
+ 'icon commit': 'mdi mdi-check-circle',
+ 'icon rollback': 'mdi mdi-close-circle',
+
'img ok': 'mdi mdi-check-circle color-icon-green',
'img ok-inv': 'mdi mdi-check-circle color-icon-inv-green',
'img alert': 'mdi mdi-alert-circle color-icon-blue',
diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte
index 5f9a61940..44fbc568c 100644
--- a/packages/web/src/tabs/QueryTab.svelte
+++ b/packages/web/src/tabs/QueryTab.svelte
@@ -60,6 +60,32 @@
getCurrentEditor() != null && !getCurrentEditor()?.isBusy() && getCurrentEditor()?.hasConnection(),
onClick: () => getCurrentEditor().executeCurrent(),
});
+ registerCommand({
+ id: 'query.beginTransaction',
+ category: 'Query',
+ name: 'Begin transaction',
+ icon: 'icon transaction',
+ testEnabled: () => !!getCurrentEditor(),
+ onClick: () => getCurrentEditor().beginTransaction(),
+ });
+ registerCommand({
+ id: 'query.commitTransaction',
+ category: 'Query',
+ name: 'Commit transaction',
+ toolbarName: 'Commit',
+ icon: 'icon commit',
+ testEnabled: () => !!getCurrentEditor(),
+ onClick: () => getCurrentEditor().commitTransaction(),
+ });
+ registerCommand({
+ id: 'query.rollbackTransaction',
+ category: 'Query',
+ name: 'Rollback transaction',
+ toolbarName: 'Rollback',
+ icon: 'icon rollback',
+ testEnabled: () => !!getCurrentEditor(),
+ onClick: () => getCurrentEditor().rollbackTransaction(),
+ });
export const allowSwitchDatabase = props => true;
@@ -602,6 +628,9 @@
>
AI Assistant
+
+
+
diff --git a/packages/web/src/tabs/TableDataTab.svelte b/packages/web/src/tabs/TableDataTab.svelte
index 2f0177e27..3502356fb 100644
--- a/packages/web/src/tabs/TableDataTab.svelte
+++ b/packages/web/src/tabs/TableDataTab.svelte
@@ -322,11 +322,13 @@
buttonLabel={autoRefreshStarted ? `Refresh (every ${autoRefreshInterval}s)` : null}
commands={['dataGrid.refresh', ...createAutoRefreshMenu()]}
hideDisabled
+ data-testid="TableDataTab_refreshGrid"
/>