diff --git a/packages/tools/src/structureTools.ts b/packages/tools/src/structureTools.ts index 5c1111d92..fc274295b 100644 --- a/packages/tools/src/structureTools.ts +++ b/packages/tools/src/structureTools.ts @@ -15,13 +15,62 @@ export function addTableDependencies(db: DatabaseInfo): DatabaseInfo { function fillTableExtendedInfo(db: DatabaseInfo) { return { ...db, - tables: db.tables.map(table => ({ - ...table, - columns: (table.columns || []).map(column => ({ - pureName: table.pureName, - schemaName: table.schemaName, + tables: (db.tables || []).map(obj => ({ + ...obj, + objectTypeField: 'tables', + columns: (obj.columns || []).map(column => ({ + pureName: obj.pureName, + schemaName: obj.schemaName, ...column, })), + primaryKey: obj.primaryKey + ? { + ...obj.primaryKey, + pureName: obj.pureName, + schemaName: obj.schemaName, + constraintType: 'primaryKey', + } + : undefined, + foreignKeys: (obj.foreignKeys || []).map(cnt => ({ + ...cnt, + pureName: obj.pureName, + schemaName: obj.schemaName, + constraintType: 'foreignKey', + })), + indexes: (obj.indexes || []).map(cnt => ({ + ...cnt, + pureName: obj.pureName, + schemaName: obj.schemaName, + constraintType: 'index', + })), + checks: (obj.checks || []).map(cnt => ({ + ...cnt, + pureName: obj.pureName, + schemaName: obj.schemaName, + constraintType: 'check', + })), + uniques: (obj.uniques || []).map(cnt => ({ + ...cnt, + pureName: obj.pureName, + schemaName: obj.schemaName, + constraintType: 'unique', + })), + })), + views: (db.views || []).map(obj => ({ + ...obj, + objectTypeField: 'views', + })), + procedures: (db.procedures || []).map(obj => ({ + ...obj, + objectTypeField: 'procedures', + })), + functions: (db.functions || []).map(obj => ({ + ...obj, + objectTypeField: 'functions', + })), + triggers: (db.triggers || []).map(obj => ({ + ...obj, + objectTypeField: 'triggers', })), }; } diff --git a/packages/types/dbinfo.d.ts b/packages/types/dbinfo.d.ts index 7c9c74cf2..5805ac534 100644 --- a/packages/types/dbinfo.d.ts +++ b/packages/types/dbinfo.d.ts @@ -70,6 +70,7 @@ export interface TableInfo extends DatabaseObjectInfo { foreignKeys: ForeignKeyInfo[]; dependencies?: ForeignKeyInfo[]; indexes?: IndexInfo[]; + uniques?: UniqueInfo[]; checks?: CheckInfo[]; } diff --git a/packages/web/public/global.css b/packages/web/public/global.css index 9e186f5d2..0c922ef9e 100644 --- a/packages/web/public/global.css +++ b/packages/web/public/global.css @@ -38,6 +38,10 @@ body { .flex { display: flex; } +.flexcol { + display: flex; + flex-direction: column; +} .nowrap { white-space: nowrap; } diff --git a/packages/web/src/appobj/AppObjectGroup.svelte b/packages/web/src/appobj/AppObjectGroup.svelte index 73f3a3127..134b8609b 100644 --- a/packages/web/src/appobj/AppObjectGroup.svelte +++ b/packages/web/src/appobj/AppObjectGroup.svelte @@ -1,4 +1,6 @@
(isExpanded = !isExpanded)}> @@ -26,6 +43,14 @@
{#if isExpanded} + {#if checkedObjectsStore} +
+ handleCheckAll(true)}>Check all + | + handleCheckAll(false)}>Uncheck all +
+ {/if} + {#each filtered as item (module.extractKey(item.data))} {/each} diff --git a/packages/web/src/appobj/AppObjectList.svelte b/packages/web/src/appobj/AppObjectList.svelte index 96cd10284..7958d4a8d 100644 --- a/packages/web/src/appobj/AppObjectList.svelte +++ b/packages/web/src/appobj/AppObjectList.svelte @@ -45,6 +45,7 @@ {isExpandable} {subItemsComponent} {checkedObjectsStore} + {groupFunc} /> {/each} {:else} diff --git a/packages/web/src/elements/Link.svelte b/packages/web/src/elements/Link.svelte index ec5a49053..a17920297 100644 --- a/packages/web/src/elements/Link.svelte +++ b/packages/web/src/elements/Link.svelte @@ -1,12 +1,17 @@ -{#if electron} +{#if onClick} + + + +{:else if electron} electron.shell.openExternal(href)}> diff --git a/packages/web/src/forms/FormFieldTemplateLarge.svelte b/packages/web/src/forms/FormFieldTemplateLarge.svelte index 4a5abb9b4..7186e88df 100644 --- a/packages/web/src/forms/FormFieldTemplateLarge.svelte +++ b/packages/web/src/forms/FormFieldTemplateLarge.svelte @@ -9,7 +9,7 @@
{#if type == 'checkbox'} - {label} + {label} {:else}
{label} @@ -23,6 +23,10 @@ margin-bottom: 3px; color: var(--theme-font-3); } + .checkLabel { + cursor: default; + user-select: none; + } .largeFormMarker:not(.noMargin) { margin: var(--dim-large-form-margin); } diff --git a/packages/web/src/forms/FormFieldTemplateTiny.svelte b/packages/web/src/forms/FormFieldTemplateTiny.svelte index dff6b6486..7614caa6d 100644 --- a/packages/web/src/forms/FormFieldTemplateTiny.svelte +++ b/packages/web/src/forms/FormFieldTemplateTiny.svelte @@ -9,7 +9,7 @@
{#if type == 'checkbox'} - {label} + {label} {:else}
@@ -30,6 +30,10 @@ margin-bottom: 3px; color: var(--theme-font-3); } + .checkLabel { + cursor: default; + user-select: none; + } .disabled { color: var(--theme-font-3); } diff --git a/packages/web/src/modals/AboutModal.svelte b/packages/web/src/modals/AboutModal.svelte index 5fa1612bd..1933bd618 100644 --- a/packages/web/src/modals/AboutModal.svelte +++ b/packages/web/src/modals/AboutModal.svelte @@ -15,7 +15,7 @@ About DbGate
- +
Version: {version} diff --git a/packages/web/src/modals/SqlGeneratorModal.svelte b/packages/web/src/modals/SqlGeneratorModal.svelte index a5a674f90..762ee10a8 100644 --- a/packages/web/src/modals/SqlGeneratorModal.svelte +++ b/packages/web/src/modals/SqlGeneratorModal.svelte @@ -32,28 +32,44 @@ export let conid; export let database; + export let initialConfig = { + checkIfTableExists: true, + disableConstraints: true, + createTables: true, + createForeignKeys: true, + createViews: true, + createProcedures: true, + createFunctions: true, + createTriggers: true, + }; + + export let initialObjects = null; + let busy = false; let managerSize; let objectsFilter = ''; let sqlPreview = ''; + let initialized = false; - const checkedObjectsStore = writable([]); - const valuesStore = writable({ - checkIfTableExists: true, - disableConstraints: true, - }); + $: dbinfo = useDatabaseInfo({ conid, database }); + + const checkedObjectsStore = writable(initialObjects || ($dbinfo && $dbinfo.tables) || []); + const valuesStore = writable(initialConfig); const loadRef = createRef(null); - $: console.log('checkedObjectsStore', $checkedObjectsStore); + // $: console.log('checkedObjectsStore', $checkedObjectsStore); - $: objects = useDatabaseInfo({ conid, database }); + $: if ($dbinfo && !initialized && !initialObjects) { + initialized = true; + $checkedObjectsStore = $dbinfo.tables; + } $: generatePreview($valuesStore, $checkedObjectsStore); $: objectList = _.flatten( ['tables', 'views', 'procedures', 'functions'].map(objectTypeField => _.sortBy( - (($objects || {})[objectTypeField] || []).map(obj => ({ ...obj, objectTypeField })), + (($dbinfo || {})[objectTypeField] || []).map(obj => ({ ...obj, objectTypeField })), ['schemaName', 'pureName'] ) ) @@ -91,7 +107,7 @@ -
+
Choose objects @@ -116,40 +132,54 @@ - - - - {#if values.dropTables} -
- -
- {/if} - +
+ Generator settings + + +
Tables
+ + {#if values.dropTables} +
+ +
+ {/if} + - - - - + + + + - - {#if values.insert} -
- - - -
- {/if} + + {#if values.insert} +
+ + + +
+ {/if} - + - -
-
+ + +
@@ -162,3 +192,11 @@ + +