75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// AutoCodeMysql MySQL适配器
|
|
type AutoCodeMysql struct {
|
|
db *gorm.DB
|
|
dbList map[string]*gorm.DB
|
|
}
|
|
|
|
// NewAutoCodeMysql 创建MySQL适配器
|
|
func NewAutoCodeMysql(db *gorm.DB, dbList map[string]*gorm.DB) *AutoCodeMysql {
|
|
return &AutoCodeMysql{
|
|
db: db,
|
|
dbList: dbList,
|
|
}
|
|
}
|
|
|
|
// GetDB 获取数据库的所有数据库名
|
|
func (s *AutoCodeMysql) GetDB(ctx context.Context) ([]Db, error) {
|
|
var entities []Db
|
|
sql := "SELECT SCHEMA_NAME AS `database` FROM INFORMATION_SCHEMA.SCHEMATA;"
|
|
err := s.db.WithContext(ctx).Raw(sql).Scan(&entities).Error
|
|
return entities, err
|
|
}
|
|
|
|
// GetTables 获取数据库的所有表名
|
|
func (s *AutoCodeMysql) GetTables(ctx context.Context, dbName string) ([]Table, error) {
|
|
var entities []Table
|
|
sql := `select table_name as table_name from information_schema.tables where table_schema = ?`
|
|
err := s.db.WithContext(ctx).Raw(sql, dbName).Scan(&entities).Error
|
|
return entities, err
|
|
}
|
|
|
|
// GetColumn 获取指定数据库和指定数据表的所有字段名,类型值等
|
|
func (s *AutoCodeMysql) GetColumn(ctx context.Context, tableName, dbName string) ([]Column, error) {
|
|
var entities []Column
|
|
sql := `
|
|
SELECT
|
|
c.COLUMN_NAME column_name,
|
|
c.DATA_TYPE data_type,
|
|
CASE c.DATA_TYPE
|
|
WHEN 'longtext' THEN c.CHARACTER_MAXIMUM_LENGTH
|
|
WHEN 'varchar' THEN c.CHARACTER_MAXIMUM_LENGTH
|
|
WHEN 'double' THEN CONCAT_WS(',', c.NUMERIC_PRECISION, c.NUMERIC_SCALE)
|
|
WHEN 'decimal' THEN CONCAT_WS(',', c.NUMERIC_PRECISION, c.NUMERIC_SCALE)
|
|
WHEN 'int' THEN c.NUMERIC_PRECISION
|
|
WHEN 'bigint' THEN c.NUMERIC_PRECISION
|
|
ELSE ''
|
|
END AS data_type_long,
|
|
c.COLUMN_COMMENT column_comment,
|
|
CASE WHEN kcu.COLUMN_NAME IS NOT NULL THEN 1 ELSE 0 END AS primary_key,
|
|
c.ORDINAL_POSITION
|
|
FROM
|
|
INFORMATION_SCHEMA.COLUMNS c
|
|
LEFT JOIN
|
|
INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
ON
|
|
c.TABLE_SCHEMA = kcu.TABLE_SCHEMA
|
|
AND c.TABLE_NAME = kcu.TABLE_NAME
|
|
AND c.COLUMN_NAME = kcu.COLUMN_NAME
|
|
AND kcu.CONSTRAINT_NAME = 'PRIMARY'
|
|
WHERE
|
|
c.TABLE_NAME = ?
|
|
AND c.TABLE_SCHEMA = ?
|
|
ORDER BY
|
|
c.ORDINAL_POSITION;`
|
|
err := s.db.WithContext(ctx).Raw(sql, tableName, dbName).Scan(&entities).Error
|
|
return entities, err
|
|
}
|