diff --git a/src/main/ipc-handlers/tables.js b/src/main/ipc-handlers/tables.js
index a153452a..3e97a200 100644
--- a/src/main/ipc-handlers/tables.js
+++ b/src/main/ipc-handlers/tables.js
@@ -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);
diff --git a/src/main/libs/clients/MySQLClient.js b/src/main/libs/clients/MySQLClient.js
index 59a387fc..64b6b9fb 100644
--- a/src/main/libs/clients/MySQLClient.js
+++ b/src/main/libs/clients/MySQLClient.js
@@ -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
diff --git a/src/renderer/components/WorkspacePropsTab.vue b/src/renderer/components/WorkspacePropsTab.vue
index 39af2933..cc0d79c1 100644
--- a/src/renderer/components/WorkspacePropsTab.vue
+++ b/src/renderer/components/WorkspacePropsTab.vue
@@ -32,7 +32,7 @@
{{ $t('word.add') }}
-