mirror of https://github.com/Fabio286/antares.git
feat: display all keys in properties tab
This commit is contained in:
parent
dfb24c65f3
commit
27769f204f
|
@ -30,6 +30,17 @@ export default (connections) => {
|
|||
}
|
||||
});
|
||||
|
||||
ipcMain.handle('get-table-indexes', async (event, params) => {
|
||||
try {
|
||||
const result = await connections[params.uid].getTableIndexes(params);
|
||||
|
||||
return { status: 'success', response: result };
|
||||
}
|
||||
catch (err) {
|
||||
return { status: 'error', response: err.toString() };
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.handle('get-key-usage', async (event, params) => {
|
||||
try {
|
||||
const result = await connections[params.uid].getKeyUsage(params);
|
||||
|
|
|
@ -198,6 +198,30 @@ export class MySQLClient extends AntaresCore {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} params
|
||||
* @param {String} params.schema
|
||||
* @param {String} params.table
|
||||
* @returns {Object} table indexes
|
||||
* @memberof MySQLClient
|
||||
*/
|
||||
async getTableIndexes ({ schema, table }) {
|
||||
const { rows } = await this.raw(`SHOW INDEXES FROM \`${table}\` FROM \`${schema}\``);
|
||||
|
||||
return rows.map(row => {
|
||||
return {
|
||||
unique: !row.Non_unique,
|
||||
name: row.Key_name,
|
||||
column: row.Column_name,
|
||||
indexType: row.Index_type,
|
||||
type: row.Key_name === 'PRIMARY' ? 'PRIMARY' : !row.Non_unique ? 'UNIQUE' : row.Index_type === 'FULLTEXT' ? 'FULLTEXT' : 'INDEX',
|
||||
cardinality: row.Cardinality,
|
||||
comment: row.Comment,
|
||||
indexComment: row.Index_comment
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} params
|
||||
* @param {String} params.schema
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<span>{{ $t('word.add') }}</span>
|
||||
<i class="mdi mdi-24px mdi-playlist-plus ml-1" />
|
||||
</button>
|
||||
<button class="btn btn-dark btn-sm d-none">
|
||||
<button class="btn btn-dark btn-sm">
|
||||
<span>{{ $t('word.indexes') }}</span>
|
||||
<i class="mdi mdi-24px mdi-key mdi-rotate-45 ml-1" />
|
||||
</button>
|
||||
|
@ -52,6 +52,7 @@
|
|||
v-if="localFields"
|
||||
ref="queryTable"
|
||||
:fields="localFields"
|
||||
:indexes="localIndexes"
|
||||
:tab-uid="tabUid"
|
||||
:conn-uid="connection.uid"
|
||||
:table="table"
|
||||
|
@ -178,6 +179,8 @@ export default {
|
|||
localFields: [],
|
||||
originalKeyUsage: [],
|
||||
localKeyUsage: [],
|
||||
originalIndexes: [],
|
||||
localIndexes: [],
|
||||
localOptions: [],
|
||||
lastTable: null
|
||||
};
|
||||
|
@ -257,6 +260,20 @@ export default {
|
|||
this.addNotification({ status: 'error', message: err.stack });
|
||||
}
|
||||
|
||||
try { // Indexes
|
||||
const { status, response } = await Tables.getTableIndexes(params);
|
||||
|
||||
if (status === 'success') {
|
||||
this.originalIndexes = response;
|
||||
this.localIndexes = JSON.parse(JSON.stringify(response));
|
||||
}
|
||||
else
|
||||
this.addNotification({ status: 'error', message: response });
|
||||
}
|
||||
catch (err) {
|
||||
this.addNotification({ status: 'error', message: err.stack });
|
||||
}
|
||||
|
||||
try { // Key usage (foreign keys)
|
||||
const { status, response } = await Tables.getKeyUsage(params);
|
||||
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
v-for="row in fields"
|
||||
:key="row._id"
|
||||
:row="row"
|
||||
:indexes="getIndexes(row.name)"
|
||||
:data-types="dataTypes"
|
||||
@contextmenu="contextMenu"
|
||||
/>
|
||||
|
@ -122,6 +123,7 @@ export default {
|
|||
},
|
||||
props: {
|
||||
fields: Array,
|
||||
indexes: Array,
|
||||
tabUid: [String, Number],
|
||||
connUid: String,
|
||||
table: String,
|
||||
|
@ -195,6 +197,9 @@ export default {
|
|||
},
|
||||
removeField () {
|
||||
this.$emit('remove-field', this.selectedField);
|
||||
},
|
||||
getIndexes (field) {
|
||||
return this.indexes.filter(index => index.column === field);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -7,13 +7,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="td" tabindex="0">
|
||||
<div class="text-center">
|
||||
<i
|
||||
v-if="localRow.key"
|
||||
:title="keyName(localRow.key)"
|
||||
class="mdi mdi-key column-key c-help pl-1"
|
||||
:class="`key-${localRow.key}`"
|
||||
v-for="index in indexes"
|
||||
:key="index.name"
|
||||
:title="index.type"
|
||||
class="d-inline-block mdi mdi-key column-key c-help"
|
||||
:class="`key-${index.type}`"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="td">
|
||||
<span
|
||||
v-if="!isInlineEditor.name"
|
||||
|
@ -279,7 +282,8 @@ export default {
|
|||
},
|
||||
props: {
|
||||
row: Object,
|
||||
dataTypes: Array
|
||||
dataTypes: Array,
|
||||
indexes: Array
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
|
|
|
@ -10,6 +10,10 @@ export default class {
|
|||
return ipcRenderer.invoke('get-table-data', params);
|
||||
}
|
||||
|
||||
static getTableIndexes (params) {
|
||||
return ipcRenderer.invoke('get-table-indexes', params);
|
||||
}
|
||||
|
||||
static getKeyUsage (params) {
|
||||
return ipcRenderer.invoke('get-key-usage', params);
|
||||
}
|
||||
|
|
|
@ -4,15 +4,22 @@
|
|||
line-height: 1.5;
|
||||
margin-right: 0.2rem;
|
||||
|
||||
&.key-pri {
|
||||
&.key-pri,
|
||||
&.key-PRIMARY {
|
||||
color: goldenrod;
|
||||
}
|
||||
|
||||
&.key-uni {
|
||||
&.key-uni,
|
||||
&.key-UNIQUE {
|
||||
color: deepskyblue;
|
||||
}
|
||||
|
||||
&.key-mul {
|
||||
&.key-mul,
|
||||
&.key-INDEX {
|
||||
color: palegreen;
|
||||
}
|
||||
|
||||
&.key-FULLTEXT {
|
||||
color: mediumvioletred;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue