From a65842e31fb1958fb5d263212b0991399c5d0e9e Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Fri, 28 Nov 2025 16:07:36 +0100 Subject: [PATCH] table backups --- .../web/src/appobj/DatabaseObjectAppObject.svelte | 14 ++++++++++++-- packages/web/src/icons/FontIcon.svelte | 1 + packages/web/src/widgets/SqlObjectList.svelte | 11 ++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 871e6da1d..6dfc28d17 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -1086,14 +1086,24 @@ } $: isPinned = !!$pinnedTables.find(x => testEqual(data, x)); + + $: backupParsed = + data.objectTypeField === 'tables' + ? data.pureName.match(/^_(.*)_(\d\d\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)-(\d\d)$/) + : null; + $: backupTitle = + backupParsed != null + ? `${backupParsed[1]} (${backupParsed[2]}-${backupParsed[3]}-${backupParsed[4]} ${backupParsed[5]}:${backupParsed[6]}:${backupParsed[7]})` + : null; pinnedTables.update(list => [...list, data])} diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 72fcd7c41..743461e0e 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -353,6 +353,7 @@ 'img data-deploy': 'mdi mdi-database-settings color-icon-green', 'img arrow-start-here': 'mdi mdi-arrow-down-bold-circle color-icon-green', 'img team-file': 'mdi mdi-account-file color-icon-red', + 'img table-backup': 'mdi mdi-cube color-icon-yellow', }; diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte index 1f9bc893b..fa24ff1d8 100644 --- a/packages/web/src/widgets/SqlObjectList.svelte +++ b/packages/web/src/widgets/SqlObjectList.svelte @@ -232,6 +232,15 @@ $focusedConnectionOrDatabase?.database != extractDbNameFromComposite(database))); // $: console.log('STATUS', $status); + + function getAppObjectGroup(data) { + if (data.objectTypeField == 'tables') { + if (data.pureName.match(/^_(.*)_\d\d\d\d-\d\d-\d\d-\d\d-\d\d-\d\d$/)) { + return _t('dbObject.tableBackups', { defaultMessage: 'Table Backups' }); + } + } + return getObjectTypeFieldLabel(data.objectTypeField, driver); + } {#if $status && $status.name == 'error'} @@ -371,7 +380,7 @@ .filter(x => x.schemaName == null || ($appliedCurrentSchema ? x.schemaName == $appliedCurrentSchema : true)) .map(x => ({ ...x, conid, database }))} module={databaseObjectAppObject} - groupFunc={data => getObjectTypeFieldLabel(data.objectTypeField, driver)} + groupFunc={getAppObjectGroup} subItemsComponent={(data, { isExpandedBySearch }) => data.objectTypeField == 'procedures' || data.objectTypeField == 'functions' ? isExpandedBySearch