diff --git a/src/main/ipc-handlers/connection.js b/src/main/ipc-handlers/connection.js
index 429626d5..558e2d6d 100644
--- a/src/main/ipc-handlers/connection.js
+++ b/src/main/ipc-handlers/connection.js
@@ -7,16 +7,22 @@ const connections = {};
export default () => {
ipcMain.handle('testConnection', async (event, conn) => {
+ const connection = knex({
+ client: conn.client,
+ connection: {
+ host: conn.host,
+ port: +conn.port,
+ user: conn.user,
+ password: conn.password
+ },
+ pool: {
+ min: 1,
+ max: 3
+ }
+ });
+
try {
- await knex({
- client: conn.client,
- connection: {
- host: conn.host,
- port: +conn.port,
- user: conn.user,
- password: conn.password
- }
- }).raw('SELECT 1+1 AS result');
+ await InformationSchema.testConnection(connection);
return { status: 'success' };
}
diff --git a/src/main/models/InformationSchema.js b/src/main/models/InformationSchema.js
index a64d0f79..720a1eeb 100644
--- a/src/main/models/InformationSchema.js
+++ b/src/main/models/InformationSchema.js
@@ -1,11 +1,16 @@
'use strict';
export default class {
+ static testConnection (connection) {
+ return connection('TABLES')
+ .select({ result: 1 })
+ .withSchema('information_schema');
+ }
+
static getStructure (connection) {
- return connection()
+ return connection('TABLES')
.select('*')
.withSchema('information_schema')
- .from('TABLES')
.orderBy(['TABLE_SCHEMA', 'TABLE_NAME'], 'asc');
}
}
diff --git a/src/renderer/App.vue b/src/renderer/App.vue
index e88c8d8d..6970b3a4 100644
--- a/src/renderer/App.vue
+++ b/src/renderer/App.vue
@@ -82,6 +82,7 @@ export default {
#window-content{
display: flex;
position: relative;
+ overflow: hidden;
}
#main-content {
diff --git a/src/renderer/components/QueryEditor.vue b/src/renderer/components/QueryEditor.vue
index f5812505..3fcfe317 100644
--- a/src/renderer/components/QueryEditor.vue
+++ b/src/renderer/components/QueryEditor.vue
@@ -68,8 +68,22 @@ export default {
};
-
diff --git a/src/renderer/components/TheSettingBar.vue b/src/renderer/components/TheSettingBar.vue
index 464cc2b6..d07c0eb1 100644
--- a/src/renderer/components/TheSettingBar.vue
+++ b/src/renderer/components/TheSettingBar.vue
@@ -13,33 +13,32 @@
v-for="connection in connections"
:key="connection.uid"
draggable="true"
- class="settingbar-element btn btn-link tooltip tooltip-right"
+ class="settingbar-element btn btn-link ex-tooltip"
:class="{'selected': connection.uid === selectedWorkspace}"
- :data-tooltip="`${getConnectionName(connection.uid)}`"
@click="selectWorkspace(connection.uid)"
@contextmenu.prevent="contextMenu($event, connection)"
+ @mouseover.self="tooltipPosition"
>
+ {{ getConnectionName(connection.uid) }}
add
+ {{ $t('message.addConnection') }}
- -
+
-
settings
+ {{ $t('word.settings') }}
@@ -62,7 +61,8 @@ export default {
dragElement: null,
isContext: false,
contextEvent: null,
- contextConnection: {}
+ contextConnection: {},
+ scale: 0
};
},
computed: {
@@ -95,6 +95,11 @@ export default {
},
workspaceName (connection) {
return connection.ask ? '' : `${connection.user + '@'}${connection.host}:${connection.port}`;
+ },
+ tooltipPosition (e) {
+ const el = e.target;
+ const fromTop = window.pageYOffset + el.getBoundingClientRect().top - (el.offsetHeight / 4);
+ el.querySelector('.ex-tooltip-content').style.top = `${fromTop}px`;
}
}
};
@@ -113,6 +118,22 @@ export default {
box-shadow: 0 0 1px 0px #000;
z-index: 9;
+ .settingbar-top-elements{
+ overflow-x: hidden;
+ overflow-y: overlay;
+ max-height: calc((100vh - 3.5rem) - #{$excluding-size});
+
+ &::-webkit-scrollbar {
+ width: 3px;
+ }
+ }
+
+ .settingbar-bottom-elements{
+ padding-top: .5rem;
+ background: $bg-color-light;
+ z-index: 1;
+ }
+
.settingbar-elements{
list-style: none;
text-align: center;
@@ -121,14 +142,16 @@ export default {
margin: 0;
.settingbar-element{
- height: initial;
+ height: $settingbar-width;
width: 100%;
- padding: 0;
- padding: .3rem 0 0;
margin: 0;
border-left: 3px solid transparent;
opacity: .5;
transition: opacity .2s;
+ display: flex;
+ align-content: center;
+ justify-content: center;
+ flex-direction: column;
&:hover{
opacity: 1;
@@ -140,7 +163,6 @@ export default {
}
.settingbar-element-icon{
- margin-left: -3px;
&.badge::after{
bottom: -10px;
@@ -153,4 +175,32 @@ export default {
}
}
+
+ .ex-tooltip{// Because both overflow-x: visible and overflow-y:auto are evil!!!
+ .ex-tooltip-content{
+ z-index: 999;
+ visibility: hidden;
+ opacity: 0;
+ display:block;
+ position:absolute;
+ background-color:#feffe1;
+ text-align: center;
+ margin:.0 0 0 calc(#{$settingbar-width} - 5px);
+ left: 0;
+ padding: .2rem .4rem;
+ font-size: .7rem;
+ background: rgba(48,55,66,.95);
+ border-radius: .1rem;
+ color: #fff;
+ max-width: 320px;
+ pointer-events: none;
+ text-overflow: ellipsis;
+ transition: opacity .2s;
+ }
+
+ &:hover .ex-tooltip-content{
+ visibility: visible;
+ opacity: 1;
+ }
+ }
diff --git a/src/renderer/components/Workspace.vue b/src/renderer/components/Workspace.vue
index 9a4878b3..6b20e653 100644
--- a/src/renderer/components/Workspace.vue
+++ b/src/renderer/components/Workspace.vue
@@ -1,8 +1,18 @@
-
-
{{ JSON.stringify(workspace.structure, null, 3) }}
+
@@ -11,15 +21,22 @@
import { mapGetters, mapActions } from 'vuex';
import Connection from '@/ipc-api/Connection';
import WorkspaceExploreBar from '@/components/WorkspaceExploreBar';
+import QueryEditor from '@/components/QueryEditor';
export default {
name: 'Workspace',
components: {
- WorkspaceExploreBar
+ WorkspaceExploreBar,
+ QueryEditor
},
props: {
connection: Object
},
+ data () {
+ return {
+ query: ''
+ };
+ },
computed: {
...mapGetters({
selectedWorkspace: 'workspaces/getSelected',
@@ -30,10 +47,13 @@ export default {
},
isSelected () {
return this.selectedWorkspace === this.connection.uid;
+ },
+ selectedTab () {
+ return this.workspace.tabs.filter(tab => tab.selected).uid || this.workspace.tabs[0].uid;
}
},
async created () {
- this.addWorkspace(this.connection.uid);
+ await this.addWorkspace(this.connection.uid);
const isInitiated = await Connection.checkConnection(this.connection.uid);
if (isInitiated)
this.connectWorkspace(this.connection);
@@ -50,13 +70,22 @@ export default {
diff --git a/src/renderer/components/WorkspaceConnectPanel.vue b/src/renderer/components/WorkspaceConnectPanel.vue
index 7b3591e7..116fad75 100644
--- a/src/renderer/components/WorkspaceConnectPanel.vue
+++ b/src/renderer/components/WorkspaceConnectPanel.vue
@@ -79,6 +79,5 @@ export default {
background: transparent;
display: flex;
flex-direction: column;
- justify-content: center;
}
diff --git a/src/renderer/components/WorkspaceExploreBar.vue b/src/renderer/components/WorkspaceExploreBar.vue
index d5905716..928a6788 100644
--- a/src/renderer/components/WorkspaceExploreBar.vue
+++ b/src/renderer/components/WorkspaceExploreBar.vue
@@ -22,12 +22,17 @@
>exit_to_app
-
-
@@ -178,7 +183,7 @@ export default {
.workspace-explorebar-body{
width: 100%;
height: calc((100vh - 30px) - #{$excluding-size});
- overflow: auto;
+ overflow: overlay;
padding: 0 .1rem;
}
}
diff --git a/src/renderer/components/WorkspaceExploreBarDatabase.vue b/src/renderer/components/WorkspaceExploreBarDatabase.vue
index 9b822703..bffca12c 100644
--- a/src/renderer/components/WorkspaceExploreBarDatabase.vue
+++ b/src/renderer/components/WorkspaceExploreBarDatabase.vue
@@ -1,9 +1,13 @@
-