/
mysql.go
83 lines (70 loc) · 1.8 KB
/
mysql.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package mysql
import (
"github.com/go-sql-driver/mysql"
gromSql "gorm.io/driver/mysql"
"gorm.io/gorm"
"github.com/cocoup/go-smart/tools/gocli/cmd/model/common"
)
type sqlModel struct {
db *gorm.DB
dbName string
}
func NewSqlModel(dsn string) (common.SchemaModel, error) {
sqlConf := gromSql.Config{DSN: DSN}
db, err := gorm.Open(gromSql.New(sqlConf))
if nil != err {
return nil, err
}
dsnConf, err := mysql.ParseDSN(dsn)
if nil != err {
return nil, err
}
return &sqlModel{
db: db,
dbName: dsnConf.DBName,
}, nil
}
func (s *sqlModel) GetAllTables() ([]string, error) {
query := `select table_name from information_schema.tables where table_schema = ?`
var tables []string
err := s.db.Raw(query, s.dbName).Scan(&tables).Error
if err != nil {
return nil, err
}
return tables, nil
}
func (s *sqlModel) GetColumns(table string) (*common.Table, error) {
query := `SELECT
COLUMN_NAME,
DATA_TYPE,EXTRA,
COLUMN_COMMENT,
COLUMN_DEFAULT,
IS_NULLABLE,
ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ? and TABLE_NAME = ?
ORDER BY ORDINAL_POSITION
`
var columns []common.Column
err := s.db.Raw(query, s.dbName, table).Scan(&columns).Error
if err != nil {
return nil, err
}
return &common.Table{
Db: s.dbName,
Table: table,
Columns: columns,
}, nil
}
// TODO:: 查询索引,添加缓存相关逻辑
func (s *sqlModel) GetIndex(table, column string) ([]*common.Index, error) {
//querySql := `SELECT s.INDEX_NAME,s.NON_UNIQUE,s.SEQ_IN_INDEX from STATISTICS s WHERE s.TABLE_SCHEMA = ? and s.TABLE_NAME = ? and s.COLUMN_NAME = ?`
//var reply []*DbIndex
//err := s.conn.QueryRowsPartial(&reply, querySql, db, table, column)
//if err != nil {
// return nil, err
//}
//
//return reply, nil
return nil, nil
}