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,