From a6d9a4b5ae0ded9ab79f8c4f41f11dd929729a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=AE=97=E6=B4=8B?= Date: Sat, 29 Oct 2022 17:11:44 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=201.=E4=BF=AE=E6=94=B9=E8=A1=A8?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=88=B7=E6=96=B0=E8=A1=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=9B2.=E4=B8=BA=E4=BA=86=E6=96=B9=E4=BE=BFsqlmode=EF=BC=8C?= =?UTF-8?q?sql=E9=80=BB=E8=BE=91=E6=94=B9=E4=B8=BA=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=203.=E4=BF=AE=E6=94=B9=E7=B4=A2=E5=BC=95sql?= =?UTF-8?q?=E6=8B=BC=E6=8E=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/ops/db/CreateTable.vue | 5 +++- mayfly_go_web/src/views/ops/db/DbList.vue | 5 ++++ server/internal/db/application/mysql_meta.go | 26 ++++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/mayfly_go_web/src/views/ops/db/CreateTable.vue b/mayfly_go_web/src/views/ops/db/CreateTable.vue index 27b5b70b..c5819436 100644 --- a/mayfly_go_web/src/views/ops/db/CreateTable.vue +++ b/mayfly_go_web/src/views/ops/db/CreateTable.vue @@ -305,6 +305,7 @@ export default defineComponent({ db: props.db, runSuccessCallback: () => { proxy.$parent.openEditTable({ tableName: state.tableData.tableName }); + proxy.$parent.refreshTableInfo(); // cancel(); }, }); @@ -472,7 +473,9 @@ export default defineComponent({ } if(addIndexs.length > 0){ - sql +=',' + if(dropIndexNames.length > 0){ + sql +=',' + } addIndexs.forEach(a=>{ sql += ` ADD ${a.unique?'UNIQUE':''} INDEX ${a.indexName}(${a.columnNames.join(',')}) USING ${a.indexType} COMMENT '${a.indexComment}',`; }) diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue index 6297f3f4..aedbf682 100644 --- a/mayfly_go_web/src/views/ops/db/DbList.vue +++ b/mayfly_go_web/src/views/ops/db/DbList.vue @@ -573,6 +573,10 @@ export default defineComponent({ state.tableInfoDialog.loading = false; } }; + + const refreshTableInfo = async () => { + state.tableInfoDialog.infos = await dbApi.tableInfos.request({ id: state.dbId, db: state.db }); + } const closeTableInfo = () => { state.showDumpInfo = false; @@ -712,6 +716,7 @@ export default defineComponent({ searchSqlExecLog, onShowRollbackSql, showTableInfo, + refreshTableInfo, closeTableInfo, showColumns, showTableIndex, diff --git a/server/internal/db/application/mysql_meta.go b/server/internal/db/application/mysql_meta.go index 9e5858f8..b6df585c 100644 --- a/server/internal/db/application/mysql_meta.go +++ b/server/internal/db/application/mysql_meta.go @@ -17,10 +17,10 @@ const ( WHERE table_schema = (SELECT database())` // mysql 索引信息 - MYSQL_INDEX_INFO = `SELECT index_name indexName, group_concat(column_name) columnName, index_type indexType, non_unique nonUnique, + MYSQL_INDEX_INFO = `SELECT INDEX_NAME indexName, COLUMN_NAME columnName, INDEX_TYPE indexType, NON_UNIQUE nonUnique, SEQ_IN_INDEX seqInIndex, INDEX_COMMENT indexComment FROM information_schema.STATISTICS - WHERE table_schema = (SELECT database()) AND table_name = '%s' GROUP by index_name` + WHERE table_schema = (SELECT database()) AND table_name = '%s' ORDER BY index_name asc , SEQ_IN_INDEX asc` // mysql 列信息元数据 MYSQL_COLUMN_MA = `SELECT table_name tableName, column_name columnName, column_type columnType, column_default columnDefault, @@ -73,7 +73,27 @@ func (mm *MysqlMetadata) GetTableInfos() []map[string]interface{} { func (mm *MysqlMetadata) GetTableIndex(tableName string) []map[string]interface{} { res, err := mm.di.innerSelect(fmt.Sprintf(MYSQL_INDEX_INFO, tableName)) biz.ErrIsNilAppendErr(err, "获取表索引信息失败: %s") - return res + + // 把查询结果以索引名分组,索引字段以逗号连接 + result := make([]map[string]interface{}, 0) + key := "" + i := 0 + for k, v := range res { + // 当前的索引名 + in := fmt.Sprintf("%v", v["indexName"]) + cl := fmt.Sprintf("%v", v["columnName"]) + + if key == in { + // 同索引字段以逗号连接 + cl1 := fmt.Sprintf("%v", result[i]["columnName"]) + result[i]["columnName"] = cl1 + "," + cl + } else { + i = k + key = in + result = append(result, v) + } + } + return result } // 获取建表ddl