mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 16:00:25 +08:00
fix: 获取表主键逻辑完善
This commit is contained in:
@@ -566,7 +566,7 @@ const dump = (db: string) => {
|
|||||||
|
|
||||||
const onShowRollbackSql = async (sqlExecLog: any) => {
|
const onShowRollbackSql = async (sqlExecLog: any) => {
|
||||||
const columns = await dbApi.columnMetadata.request({ id: sqlExecLog.dbId, db: sqlExecLog.db, tableName: sqlExecLog.table });
|
const columns = await dbApi.columnMetadata.request({ id: sqlExecLog.dbId, db: sqlExecLog.db, tableName: sqlExecLog.table });
|
||||||
const primaryKey = columns[0].columnName;
|
const primaryKey = getPrimaryKey(columns);
|
||||||
const oldValue = JSON.parse(sqlExecLog.oldValue);
|
const oldValue = JSON.parse(sqlExecLog.oldValue);
|
||||||
|
|
||||||
const rollbackSqls = [];
|
const rollbackSqls = [];
|
||||||
@@ -596,6 +596,14 @@ const onShowRollbackSql = async (sqlExecLog: any) => {
|
|||||||
state.rollbackSqlDialog.visible = true;
|
state.rollbackSqlDialog.visible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getPrimaryKey = (columns: any) => {
|
||||||
|
const col = columns.find((c: any) => c.columnKey == 'PRI');
|
||||||
|
if (col) {
|
||||||
|
return col.columnName;
|
||||||
|
}
|
||||||
|
return columns[0].columnName;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 包装值,如果值类型为number则直接返回,其他则需要使用''包装
|
* 包装值,如果值类型为number则直接返回,其他则需要使用''包装
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ type DbMetadata interface {
|
|||||||
// 表名: tableName, 列名: columnName, 列类型: columnType, 备注: columnComment, 是否可为null: nullable, 其他信息: extra
|
// 表名: tableName, 列名: columnName, 列类型: columnType, 备注: columnComment, 是否可为null: nullable, 其他信息: extra
|
||||||
GetColumns(tableNames ...string) []map[string]interface{}
|
GetColumns(tableNames ...string) []map[string]interface{}
|
||||||
|
|
||||||
// 获取表主键字段名,目前默认第一个字段
|
// 获取表主键字段名,没有主键标识则默认第一个字段
|
||||||
GetPrimaryKey(tablename string) string
|
GetPrimaryKey(tablename string) string
|
||||||
|
|
||||||
// 获取表信息,比GetTables获取更详细的表信息
|
// 获取表信息,比GetTables获取更详细的表信息
|
||||||
|
|||||||
@@ -53,12 +53,18 @@ func (mm *MysqlMetadata) GetColumns(tableNames ...string) []map[string]interface
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取表主键字段名,默认第一个字段
|
// 获取表主键字段名,不存在主键标识则默认第一个字段
|
||||||
func (mm *MysqlMetadata) GetPrimaryKey(tablename string) string {
|
func (mm *MysqlMetadata) GetPrimaryKey(tablename string) string {
|
||||||
columns := mm.GetColumns(tablename)
|
columns := mm.GetColumns(tablename)
|
||||||
if len(columns) == 0 {
|
if len(columns) == 0 {
|
||||||
panic(biz.NewBizErr(fmt.Sprintf("[%s] 表不存在", tablename)))
|
panic(biz.NewBizErr(fmt.Sprintf("[%s] 表不存在", tablename)))
|
||||||
}
|
}
|
||||||
|
for _, v := range columns {
|
||||||
|
if v["columnKey"].(string) == "PRI" {
|
||||||
|
return v["columnName"].(string)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return columns[0]["columnName"].(string)
|
return columns[0]["columnName"].(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ const (
|
|||||||
A.attname AS "columnName",
|
A.attname AS "columnName",
|
||||||
tc.is_nullable AS "nullable",
|
tc.is_nullable AS "nullable",
|
||||||
concat_ws ( '', t.typname, SUBSTRING ( format_type ( a.atttypid, a.atttypmod ) FROM '\(.*\)' ) ) AS "columnType",
|
concat_ws ( '', t.typname, SUBSTRING ( format_type ( a.atttypid, a.atttypmod ) FROM '\(.*\)' ) ) AS "columnType",
|
||||||
|
(CASE WHEN ( SELECT COUNT(*) FROM pg_constraint WHERE conrelid = a.attrelid AND conkey[1]= attnum AND contype = 'p' ) > 0 THEN 'PRI' ELSE '' END ) AS columnKey,
|
||||||
d.description AS "columnComment"
|
d.description AS "columnComment"
|
||||||
FROM
|
FROM
|
||||||
pg_attribute a LEFT JOIN pg_description d ON d.objoid = a.attrelid
|
pg_attribute a LEFT JOIN pg_description d ON d.objoid = a.attrelid
|
||||||
@@ -65,12 +66,17 @@ func (pm *PgsqlMetadata) GetColumns(tableNames ...string) []map[string]interface
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取表主键字段名,默认第一个字段
|
|
||||||
func (pm *PgsqlMetadata) GetPrimaryKey(tablename string) string {
|
func (pm *PgsqlMetadata) GetPrimaryKey(tablename string) string {
|
||||||
columns := pm.GetColumns(tablename)
|
columns := pm.GetColumns(tablename)
|
||||||
if len(columns) == 0 {
|
if len(columns) == 0 {
|
||||||
panic(biz.NewBizErr(fmt.Sprintf("[%s] 表不存在", tablename)))
|
panic(biz.NewBizErr(fmt.Sprintf("[%s] 表不存在", tablename)))
|
||||||
}
|
}
|
||||||
|
for _, v := range columns {
|
||||||
|
if v["columnKey"].(string) == "PRI" {
|
||||||
|
return v["columnName"].(string)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return columns[0]["columnName"].(string)
|
return columns[0]["columnName"].(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user