diff --git a/CHANGELOG.md b/CHANGELOG.md
index 35db938ff..14a4f3559 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,7 +8,7 @@ Builds:
- linux - application for linux
- win - application for Windows
-## 6.3.3 - not released
+## 6.3.3
- CHANGED: New administration UI, redesigned administration of users, connections and roles
- ADDED: Encrypting passwords in team-premium edition
- ADDED: Show scale bar on map #1090
diff --git a/packages/web/src/datagrid/CellValue.svelte b/packages/web/src/datagrid/CellValue.svelte
index 7b6bcb7a1..013a5ff99 100644
--- a/packages/web/src/datagrid/CellValue.svelte
+++ b/packages/web/src/datagrid/CellValue.svelte
@@ -7,6 +7,7 @@
export let value;
export let jsonParsedValue = undefined;
export let editorTypes;
+ export let rightMargin = false;
$: stringified = stringifyCellValue(
value,
@@ -20,7 +21,7 @@
{#if rowData == null}
(No row)
{:else}
- {stringified.value}
+ {stringified.value}
{/if}
diff --git a/packages/web/src/datagrid/DataGridCell.svelte b/packages/web/src/datagrid/DataGridCell.svelte
index 27fd6d3ac..3ed072aeb 100644
--- a/packages/web/src/datagrid/DataGridCell.svelte
+++ b/packages/web/src/datagrid/DataGridCell.svelte
@@ -73,7 +73,13 @@
class:alignRight={_.isNumber(value) && !showHint}
{style}
>
-
+
{#if showHint}
{
- values.update(x => ({
- ...x,
- [storageTypeField]: 'archive',
- [archiveFolderField]: `import-${moment().format('YYYY-MM-DD-hh-mm-ss')}`,
- }));
+ showModal(InputTextModal, {
+ header: 'Archive',
+ label: 'Name of new archive folder',
+ value: `import-${moment().format('YYYY-MM-DD-hh-mm-ss')}`,
+ onConfirm: value => {
+ values.update(x => ({
+ ...x,
+ [storageTypeField]: 'archive',
+ [archiveFolderField]: value,
+ }));
+ },
+ });
}}
/>
{/if}
diff --git a/packages/web/src/settings/SettingsModal.svelte b/packages/web/src/settings/SettingsModal.svelte
index 2dba84f96..0cec20629 100644
--- a/packages/web/src/settings/SettingsModal.svelte
+++ b/packages/web/src/settings/SettingsModal.svelte
@@ -433,7 +433,7 @@ ORDER BY
diff --git a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js
index 391e8b8b7..d73a13298 100644
--- a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js
+++ b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js
@@ -240,6 +240,19 @@ const mysqlDriverBase = {
if (options.force) {
args.push('--force');
}
+ if (options.lockTables) {
+ args.push('--lock-tables');
+ }
+ if (options.skipLockTables) {
+ args.push('--skip-lock-tables');
+ }
+ if (options.singleTransaction) {
+ args.push('--single-transaction');
+ }
+ if (options.customArgs?.trim()) {
+ const customArgs = options.customArgs.split(/\s+/).filter(arg => arg.trim() != '');
+ args.push(...customArgs);
+ }
args.push(database);
return { command, args };
},
@@ -312,6 +325,32 @@ const mysqlDriverBase = {
default: true,
disabledFn: values => values.noStructure,
},
+ {
+ type: 'checkbox',
+ label: 'Lock tables',
+ name: 'lockTables',
+ default: false,
+ disabledFn: values => values.skipLockTables || values.singleTransaction,
+ },
+ {
+ type: 'checkbox',
+ label: 'Skip lock tables',
+ name: 'skipLockTables',
+ default: false,
+ disabledFn: values => values.lockTables || values.singleTransaction,
+ },
+ {
+ type: 'checkbox',
+ label: 'Single transaction',
+ name: 'singleTransaction',
+ default: false,
+ disabledFn: values => values.lockTables || values.skipLockTables,
+ },
+ {
+ type: 'text',
+ label: 'Custom arguments',
+ name: 'customArgs',
+ },
];
}
return null;
diff --git a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js
index fdba28f3a..e44bf8b6f 100644
--- a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js
+++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js
@@ -267,6 +267,11 @@ EXECUTE FUNCTION function_name();`,
name: 'noOwner',
default: false,
},
+ {
+ type: 'text',
+ label: 'Custom arguments',
+ name: 'customArgs',
+ },
];
}
return null;
@@ -304,6 +309,10 @@ EXECUTE FUNCTION function_name();`,
);
}
}
+ if (options.customArgs?.trim()) {
+ const customArgs = options.customArgs.split(/\s+/).filter(arg => arg.trim() != '');
+ args.push(...customArgs);
+ }
return {
command,