Merge branch 'moveprem'

This commit is contained in:
SPRINX0\prochazka
2025-10-31 10:47:34 +01:00
12 changed files with 59 additions and 36 deletions

View File

@@ -39,7 +39,8 @@ export class TableGridDisplay extends GridDisplay {
public getDictionaryDescription: DictionaryDescriptionFunc = null, public getDictionaryDescription: DictionaryDescriptionFunc = null,
isReadOnly = false, isReadOnly = false,
public isRawMode = false, public isRawMode = false,
public currentSettings = null public currentSettings = null,
public areReferencesAllowed = true
) { ) {
super(config, setConfig, cache, setCache, driver, dbinfo, serverVersion, currentSettings); super(config, setConfig, cache, setCache, driver, dbinfo, serverVersion, currentSettings);
@@ -248,6 +249,7 @@ export class TableGridDisplay extends GridDisplay {
} }
processReferences(select: Select, displayedColumnInfo: DisplayedColumnInfo, options) { processReferences(select: Select, displayedColumnInfo: DisplayedColumnInfo, options) {
if (!this.areReferencesAllowed) return;
this.addJoinsFromExpandedColumns(select, this.columns, 'basetbl', displayedColumnInfo); this.addJoinsFromExpandedColumns(select, this.columns, 'basetbl', displayedColumnInfo);
if (!options.isExport && this.displayOptions.showHintColumns) { if (!options.isExport && this.displayOptions.showHintColumns) {
this.addHintsToSelect(select); this.addHintsToSelect(select);

View File

@@ -468,12 +468,14 @@ await dbgateApi.executeQuery(${JSON.stringify(
{ divider: true }, { divider: true },
isSqlOrDoc && isSqlOrDoc &&
isProApp() &&
!connection.isReadOnly && !connection.isReadOnly &&
hasPermission(`dbops/import`) && { hasPermission(`dbops/import`) && {
onClick: handleImport, onClick: handleImport,
text: _t('database.import', { defaultMessage: 'Import' }), text: _t('database.import', { defaultMessage: 'Import' }),
}, },
isSqlOrDoc && isSqlOrDoc &&
isProApp() &&
hasPermission(`dbops/export`) && { hasPermission(`dbops/export`) && {
onClick: handleExport, onClick: handleExport,
text: _t('database.export', { defaultMessage: 'Export' }), text: _t('database.export', { defaultMessage: 'Export' }),

View File

@@ -691,7 +691,7 @@ registerCommand({
name: 'Export database', name: 'Export database',
toolbar: true, toolbar: true,
icon: 'icon export', icon: 'icon export',
testEnabled: () => getCurrentDatabase() != null && hasPermission(`dbops/export`), testEnabled: () => getCurrentDatabase() != null && hasPermission(`dbops/export`) && isProApp(),
onClick: () => { onClick: () => {
openImportExportTab({ openImportExportTab({
targetStorageType: getDefaultFileFormat(getExtensions()).storageType, targetStorageType: getDefaultFileFormat(getExtensions()).storageType,

View File

@@ -12,6 +12,7 @@
import { showModal } from '../modals/modalTools'; import { showModal } from '../modals/modalTools';
import DefineDictionaryDescriptionModal from '../modals/DefineDictionaryDescriptionModal.svelte'; import DefineDictionaryDescriptionModal from '../modals/DefineDictionaryDescriptionModal.svelte';
import { sleep } from '../utility/common'; import { sleep } from '../utility/common';
import { isProApp } from '../utility/proTools';
export let column; export let column;
export let conid = undefined; export let conid = undefined;
@@ -72,29 +73,35 @@
column.foreignKey && [{ divider: true }, { onClick: openReferencedTable, text: column.foreignKey.refTableName }], column.foreignKey && [{ divider: true }, { onClick: openReferencedTable, text: column.foreignKey.refTableName }],
setGrouping && { divider: true }, isProApp() &&
setGrouping && { onClick: () => setGrouping('GROUP'), text: 'Group by' }, setGrouping && [
setGrouping && { onClick: () => setGrouping('MAX'), text: 'MAX' }, { divider: true },
setGrouping && { onClick: () => setGrouping('MIN'), text: 'MIN' }, { onClick: () => setGrouping('GROUP'), text: 'Group by' },
setGrouping && { onClick: () => setGrouping('SUM'), text: 'SUM' }, { onClick: () => setGrouping('MAX'), text: 'MAX' },
setGrouping && { onClick: () => setGrouping('AVG'), text: 'AVG' }, { onClick: () => setGrouping('MIN'), text: 'MIN' },
setGrouping && { onClick: () => setGrouping('COUNT'), text: 'COUNT' }, { onClick: () => setGrouping('SUM'), text: 'SUM' },
setGrouping && { onClick: () => setGrouping('COUNT DISTINCT'), text: 'COUNT DISTINCT' }, { onClick: () => setGrouping('AVG'), text: 'AVG' },
{ onClick: () => setGrouping('COUNT'), text: 'COUNT' },
{ onClick: () => setGrouping('COUNT DISTINCT'), text: 'COUNT DISTINCT' },
],
isTypeDateTime(column.dataType) && [ isProApp() &&
{ divider: true }, isTypeDateTime(column.dataType) && [
{ onClick: () => setGrouping('GROUP:YEAR'), text: 'Group by YEAR' }, { divider: true },
{ onClick: () => setGrouping('GROUP:MONTH'), text: 'Group by MONTH' }, { onClick: () => setGrouping('GROUP:YEAR'), text: 'Group by YEAR' },
{ onClick: () => setGrouping('GROUP:DAY'), text: 'Group by DAY' }, { onClick: () => setGrouping('GROUP:MONTH'), text: 'Group by MONTH' },
], { onClick: () => setGrouping('GROUP:DAY'), text: 'Group by DAY' },
],
{ divider: true }, { divider: true },
allowDefineVirtualReferences && { onClick: handleDefineVirtualForeignKey, text: 'Define virtual foreign key' }, isProApp() &&
column.foreignKey && { allowDefineVirtualReferences && { onClick: handleDefineVirtualForeignKey, text: 'Define virtual foreign key' },
onClick: handleCustomizeDescriptions, column.foreignKey &&
text: 'Customize description', isProApp() && {
}, onClick: handleCustomizeDescriptions,
text: 'Customize description',
},
]; ];
} }
</script> </script>

View File

@@ -7,6 +7,7 @@
import { showModal } from '../modals/modalTools'; import { showModal } from '../modals/modalTools';
import ColumnEditorModal from '../tableeditor/ColumnEditorModal.svelte'; import ColumnEditorModal from '../tableeditor/ColumnEditorModal.svelte';
import { editorDeleteColumn } from 'dbgate-tools'; import { editorDeleteColumn } from 'dbgate-tools';
import { isProApp } from '../utility/proTools';
export let column; export let column;
export let display; export let display;
@@ -59,13 +60,17 @@
on:mouseup on:mouseup
> >
<div> <div>
<span class="expandColumnIcon" style={`margin-right: ${5 + (column.uniquePath.length - 1) * 10}px`}> {#if isProApp()}
<FontIcon <span class="expandColumnIcon" style={`margin-right: ${5 + (column.uniquePath.length - 1) * 10}px`}>
icon={column.isExpandable ? plusExpandIcon(display.isExpandedColumn(column.uniqueName)) : 'icon invisible-box'} <FontIcon
on:click={() => display.toggleExpandedColumn(column.uniqueName)} icon={column.isExpandable
data-testid="ColumnManagerRow_expand_{column.uniqueName}" ? plusExpandIcon(display.isExpandedColumn(column.uniqueName))
/> : 'icon invisible-box'}
</span> on:click={() => display.toggleExpandedColumn(column.uniqueName)}
data-testid="ColumnManagerRow_expand_{column.uniqueName}"
/>
</span>
{/if}
{#if isJsonView} {#if isJsonView}
<FontIcon icon="img column" /> <FontIcon icon="img column" />
{:else} {:else}

View File

@@ -68,6 +68,7 @@
import registerCommand from '../commands/registerCommand'; import registerCommand from '../commands/registerCommand';
import { registerMenu } from '../utility/contextMenu'; import { registerMenu } from '../utility/contextMenu';
import { getLocalStorage, setLocalStorage } from '../utility/storageCache'; import { getLocalStorage, setLocalStorage } from '../utility/storageCache';
import { isProApp } from '../utility/proTools';
export let config; export let config;
export let setConfig; export let setConfig;
@@ -205,7 +206,7 @@
name="references" name="references"
height="30%" height="30%"
collapsed={isDetailView} collapsed={isDetailView}
skip={!(showReferences && display?.hasReferences)} skip={!(showReferences && display?.hasReferences && isProApp())}
data-testid="DataGrid_itemReferences" data-testid="DataGrid_itemReferences"
> >
<ReferenceManager {...$$props} {managerSize} /> <ReferenceManager {...$$props} {managerSize} />
@@ -214,7 +215,7 @@
<WidgetColumnBarItem <WidgetColumnBarItem
title="Macros" title="Macros"
name="macros" name="macros"
skip={!showMacros} skip={!(showMacros && isProApp())}
collapsed={!expandMacros} collapsed={!expandMacros}
data-testid="DataGrid_itemMacros" data-testid="DataGrid_itemMacros"
> >

View File

@@ -30,6 +30,7 @@
import SqlFormView from '../formview/SqlFormView.svelte'; import SqlFormView from '../formview/SqlFormView.svelte';
import { getBoolSettingsValue } from '../settings/settingsTools'; import { getBoolSettingsValue } from '../settings/settingsTools';
import { getDictionaryDescription } from '../utility/dictionaryDescriptionTools'; import { getDictionaryDescription } from '../utility/dictionaryDescriptionTools';
import { isProApp } from '../utility/proTools';
export let conid; export let conid;
export let database; export let database;
@@ -82,7 +83,8 @@
extendedDbInfo?.tables?.find(x => x.pureName == pureName && x.schemaName == schemaName) extendedDbInfo?.tables?.find(x => x.pureName == pureName && x.schemaName == schemaName)
?.tablePermissionRole == 'read', ?.tablePermissionRole == 'read',
isRawMode, isRawMode,
$settingsValue $settingsValue,
isProApp()
) )
: null; : null;

View File

@@ -94,6 +94,7 @@
title: 'Export database', title: 'Export database',
description: 'Export to file like CSV, JSON, Excel, or other DB', description: 'Export to file like CSV, JSON, Excel, or other DB',
command: 'database.export', command: 'database.export',
isProFeature: true,
testid: 'NewObjectModal_databaseExport', testid: 'NewObjectModal_databaseExport',
disabledMessage: 'Export is not available for current database', disabledMessage: 'Export is not available for current database',
}, },

View File

@@ -1,11 +1,12 @@
import type { QuickExportDefinition } from 'dbgate-types'; import type { QuickExportDefinition } from 'dbgate-types';
import { currentArchive, getCurrentArchive, getExtensions } from '../stores'; import { currentArchive, getCurrentArchive, getExtensions } from '../stores';
import hasPermission from './hasPermission'; import hasPermission from './hasPermission';
import { isProApp } from './proTools';
export function createQuickExportMenuItems(handler: (fmt: QuickExportDefinition) => Function, advancedExportMenuItem) { export function createQuickExportMenuItems(handler: (fmt: QuickExportDefinition) => Function, advancedExportMenuItem) {
const extensions = getExtensions(); const extensions = getExtensions();
return [ return [
{ isProApp() && {
text: 'Export advanced...', text: 'Export advanced...',
...advancedExportMenuItem, ...advancedExportMenuItem,
}, },
@@ -15,7 +16,7 @@ export function createQuickExportMenuItems(handler: (fmt: QuickExportDefinition)
onClick: handler(fmt), onClick: handler(fmt),
})), })),
{ divider: true }, { divider: true },
{ isProApp() && {
text: 'Current archive', text: 'Current archive',
onClick: handler({ onClick: handler({
extension: 'jsonl', extension: 'jsonl',

View File

@@ -27,6 +27,7 @@
import { useConnectionColor } from '../utility/useConnectionColor'; import { useConnectionColor } from '../utility/useConnectionColor';
import { apiCall } from '../utility/api'; import { apiCall } from '../utility/api';
import { statusBarTabInfo } from '../utility/statusBarStore'; import { statusBarTabInfo } from '../utility/statusBarStore';
import { isProApp } from '../utility/proTools';
$: databaseName = $currentDatabase && $currentDatabase.name; $: databaseName = $currentDatabase && $currentDatabase.name;
$: connection = $currentDatabase && $currentDatabase.connection; $: connection = $currentDatabase && $currentDatabase.connection;
@@ -155,7 +156,7 @@
</div> </div>
</div> </div>
{/if} {/if}
{#if $currentArchive && $currentArchive != 'default'} {#if isProApp() && $currentArchive && $currentArchive != 'default'}
<div <div
class="item flex clickable" class="item flex clickable"
title="Current archive" title="Current archive"

View File

@@ -11,6 +11,7 @@
import PublicCloudWidget from './PublicCloudWidget.svelte'; import PublicCloudWidget from './PublicCloudWidget.svelte';
import PrivateCloudWidget from './PrivateCloudWidget.svelte'; import PrivateCloudWidget from './PrivateCloudWidget.svelte';
import hasPermission from '../utility/hasPermission'; import hasPermission from '../utility/hasPermission';
import { isProApp } from '../utility/proTools';
</script> </script>
{#if hasPermission('widgets/database')} {#if hasPermission('widgets/database')}
@@ -22,7 +23,7 @@
{#if $visibleSelectedWidget == 'history' && hasPermission('widgets/history')} {#if $visibleSelectedWidget == 'history' && hasPermission('widgets/history')}
<HistoryWidget /> <HistoryWidget />
{/if} {/if}
{#if $visibleSelectedWidget == 'archive' && hasPermission('widgets/archive')} {#if $visibleSelectedWidget == 'archive' && hasPermission('widgets/archive') && isProApp()}
<ArchiveWidget /> <ArchiveWidget />
{/if} {/if}
{#if $visibleSelectedWidget == 'plugins' && hasPermission('widgets/plugins')} {#if $visibleSelectedWidget == 'plugins' && hasPermission('widgets/plugins')}

View File

@@ -61,7 +61,7 @@
name: 'history', name: 'history',
title: 'Query history & Closed tabs', title: 'Query history & Closed tabs',
}, },
{ isProApp() && {
icon: 'icon archive', icon: 'icon archive',
name: 'archive', name: 'archive',
title: 'Archive (saved tabular data)', title: 'Archive (saved tabular data)',