73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// AutoCodeMssql MSSQL适配器
|
|
type AutoCodeMssql struct {
|
|
db *gorm.DB
|
|
dbList map[string]*gorm.DB
|
|
}
|
|
|
|
// NewAutoCodeMssql 创建MSSQL适配器
|
|
func NewAutoCodeMssql(db *gorm.DB, dbList map[string]*gorm.DB) *AutoCodeMssql {
|
|
return &AutoCodeMssql{
|
|
db: db,
|
|
dbList: dbList,
|
|
}
|
|
}
|
|
|
|
// GetDB 获取数据库的所有数据库名
|
|
func (s *AutoCodeMssql) GetDB(ctx context.Context) ([]Db, error) {
|
|
var entities []Db
|
|
sql := "select name AS 'database' from sys.databases;"
|
|
err := s.db.WithContext(ctx).Raw(sql).Scan(&entities).Error
|
|
return entities, err
|
|
}
|
|
|
|
// GetTables 获取数据库的所有表名
|
|
func (s *AutoCodeMssql) GetTables(ctx context.Context, dbName string) ([]Table, error) {
|
|
var entities []Table
|
|
sql := fmt.Sprintf(`select name as 'table_name' from %s.DBO.sysobjects where xtype='U'`, dbName)
|
|
err := s.db.WithContext(ctx).Raw(sql).Scan(&entities).Error
|
|
return entities, err
|
|
}
|
|
|
|
// GetColumn 获取指定数据库和指定数据表的所有字段名,类型值等
|
|
func (s *AutoCodeMssql) GetColumn(ctx context.Context, tableName, dbName string) ([]Column, error) {
|
|
var entities []Column
|
|
sql := fmt.Sprintf(`
|
|
SELECT
|
|
sc.name AS column_name,
|
|
st.name AS data_type,
|
|
sc.max_length AS data_type_long,
|
|
CASE
|
|
WHEN pk.object_id IS NOT NULL THEN 1
|
|
ELSE 0
|
|
END AS primary_key,
|
|
sc.column_id
|
|
FROM
|
|
%s.sys.columns sc
|
|
JOIN
|
|
sys.types st ON sc.user_type_id=st.user_type_id
|
|
LEFT JOIN
|
|
%s.sys.objects so ON so.name='%s' AND so.type='U'
|
|
LEFT JOIN
|
|
%s.sys.indexes si ON si.object_id = so.object_id AND si.is_primary_key = 1
|
|
LEFT JOIN
|
|
%s.sys.index_columns sic ON sic.object_id = si.object_id AND sic.index_id = si.index_id AND sic.column_id = sc.column_id
|
|
LEFT JOIN
|
|
%s.sys.key_constraints pk ON pk.object_id = si.object_id
|
|
WHERE
|
|
st.is_user_defined=0 AND sc.object_id = so.object_id
|
|
ORDER BY
|
|
sc.column_id
|
|
`, dbName, dbName, tableName, dbName, dbName, dbName)
|
|
err := s.db.WithContext(ctx).Raw(sql).Scan(&entities).Error
|
|
return entities, err
|
|
}
|