diff --git a/src/main/ipc-handlers/tables.js b/src/main/ipc-handlers/tables.js index 56705fb0..8c9799c2 100644 --- a/src/main/ipc-handlers/tables.js +++ b/src/main/ipc-handlers/tables.js @@ -29,7 +29,7 @@ export default (connections) => { if (sortParams && sortParams.field && sortParams.dir) query.orderBy({ [sortParams.field]: sortParams.dir.toUpperCase() }); - const result = await query.run({ details: true }); + const result = await query.run({ details: true, schema }); return { status: 'success', response: result }; } diff --git a/src/main/libs/clients/MySQLClient.js b/src/main/libs/clients/MySQLClient.js index 8402145e..ff22a255 100644 --- a/src/main/libs/clients/MySQLClient.js +++ b/src/main/libs/clients/MySQLClient.js @@ -1419,7 +1419,7 @@ export class MySQLClient extends AntaresCore { name: field.orgName, alias: field.name, orgName: field.orgName, - schema: field.schema, + schema: field.schema || args.schema, table: field.table, tableAlias: field.table, orgTable: field.orgTable, diff --git a/src/renderer/components/Workspace.vue b/src/renderer/components/Workspace.vue index 271a9e61..b1e0561f 100644 --- a/src/renderer/components/Workspace.vue +++ b/src/renderer/components/Workspace.vue @@ -91,7 +91,11 @@ - + {{ tab.table }} @@ -102,6 +106,18 @@ /> + + + + + {{ tab.table }} + + +
  • { - if (e.deltaY > 0) this.$refs.tabWrap.scrollLeft += 50; - else this.$refs.tabWrap.scrollLeft -= 50; - }); - this.hasWheelEvent = true; - } + this.addWheelEvent(); + }, + openAsDataTab (tab) { + this.newTab({ uid: this.connection.uid, schema: tab.schema, table: tab.table, type: 'data' }); + this.addWheelEvent(); }, closeTab (tab) { if (tab.type === 'query' && this.queryTabs.length === 1) return; @@ -328,6 +341,15 @@ export default { }, hideProcessesModal () { this.isProcessesModal = false; + }, + addWheelEvent () { + if (!this.hasWheelEvent) { + this.$refs.tabWrap.addEventListener('wheel', e => { + if (e.deltaY > 0) this.$refs.tabWrap.scrollLeft += 50; + else this.$refs.tabWrap.scrollLeft -= 50; + }); + this.hasWheelEvent = true; + } } } }; diff --git a/src/renderer/components/WorkspaceExploreBarSchema.vue b/src/renderer/components/WorkspaceExploreBarSchema.vue index 00065bd7..8aec5de8 100644 --- a/src/renderer/components/WorkspaceExploreBarSchema.vue +++ b/src/renderer/components/WorkspaceExploreBarSchema.vue @@ -20,6 +20,7 @@ class="menu-item" :class="{'text-bold': breadcrumbs.schema === database.name && [breadcrumbs.table, breadcrumbs.view].includes(table.name)}" @click="selectTable({schema: database.name, table})" + @dblclick="openDataTab({schema: database.name, table})" @contextmenu.prevent="showTableContext($event, table)" > @@ -281,8 +282,12 @@ export default { this.changeBreadcrumbs({ schema, table: null }); }, selectTable ({ schema, table }) { - this.setBreadcrumbs({ schema, [table.type]: table.name }); this.newTab({ uid: this.connection.uid, table: table.name, schema: this.database.name, type: 'temp-data' }); + this.setBreadcrumbs({ schema, [table.type]: table.name }); + }, + openDataTab ({ schema, table }) { + this.newTab({ uid: this.connection.uid, table: table.name, schema: this.database.name, type: 'data' }); + this.setBreadcrumbs({ schema, [table.type]: table.name }); }, showSchemaContext (event, schema) { this.selectSchema(schema); diff --git a/src/renderer/components/WorkspaceTableTab.vue b/src/renderer/components/WorkspaceTableTab.vue index c9c8e5d4..bc6d0812 100644 --- a/src/renderer/components/WorkspaceTableTab.vue +++ b/src/renderer/components/WorkspaceTableTab.vue @@ -187,7 +187,7 @@ export default { }, data () { return { - tabUid: 'data', + tabUid: 'data', // ??? isQuering: false, isPageMenu: false, results: [], diff --git a/src/renderer/store/modules/workspaces.store.js b/src/renderer/store/modules/workspaces.store.js index 731dc5a6..7c66644a 100644 --- a/src/renderer/store/modules/workspaces.store.js +++ b/src/renderer/store/modules/workspaces.store.js @@ -493,14 +493,44 @@ export default { }, newTab ({ state, commit }, { uid, content, type, autorun, schema, table }) { let tabUid; + const workspaceTabs = state.workspaces.find(workspace => workspace.uid === uid); + if (type === 'temp-data') { - const workspaceTabs = state.workspaces.find(workspace => workspace.uid === uid); - const tempTabs = workspaceTabs ? workspaceTabs.tabs.filter(tab => tab.type === 'temp-data') : false; - if (tempTabs && tempTabs.length) { // id temp table already opened - for (const tab of tempTabs) { - commit('REPLACE_TAB', { uid, tab: tab.uid, type, schema, table }); - tabUid = tab.uid; + const existentTab = workspaceTabs + ? workspaceTabs.tabs.find(tab => + tab.schema === schema && + tab.table === table && + ['temp-data', 'data'].includes(tab.type)) + : false; + + if (existentTab) { // if data tab exists + tabUid = existentTab.uid; + } + else { + const tempTabs = workspaceTabs ? workspaceTabs.tabs.filter(tab => tab.type === 'temp-data') : false; + if (tempTabs && tempTabs.length) { // if temp table already opened + for (const tab of tempTabs) { + commit('REPLACE_TAB', { uid, tab: tab.uid, type, schema, table }); + tabUid = tab.uid; + } } + else { + tabUid = uidGen('T'); + commit('NEW_TAB', { uid, tab: tabUid, content, type, autorun, schema, table }); + } + } + } + else if (type === 'data') { + const existentTab = workspaceTabs + ? workspaceTabs.tabs.find(tab => + tab.schema === schema && + tab.table === table && + ['temp-data', 'data'].includes(tab.type)) + : false; + + if (existentTab) { + commit('REPLACE_TAB', { uid, tab: existentTab.uid, type, schema, table }); + tabUid = existentTab.uid; } else { tabUid = uidGen('T');