1 Star 0 Fork 0

xx/private-mysql-schema-sync

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
db.go 2.01 KB
一键复制 编辑 原始数据 按行查看 历史
package dbsync
import (
"database/sql"
"fmt"
)
// MyDb db struct
type MyDb struct {
Db *sql.DB
dbType string
config *Config
}
// NewMyDb parse dsn
func NewMyDb(dsn string, dbType string) *MyDb {
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(fmt.Sprintf("connected to db [%s] failed,err=%s", dsn, err))
}
pingErr := db.Ping()
if pingErr != nil {
panic(fmt.Sprint("ping db [", dsn, "] failed, error = ", pingErr))
}
db.SetMaxOpenConns(1000)
db.SetMaxIdleConns(1000)
return &MyDb{
Db: db,
dbType: dbType,
}
}
// GetTableNames table names
func (mydb *MyDb) GetTableNames() []string {
rs, err := mydb.Query("show table status")
if err != nil {
panic("show tables failed:" + err.Error())
}
defer rs.Close()
var tables []string
columns, _ := rs.Columns()
for rs.Next() {
var values = make([]interface{}, len(columns))
valuePtrs := make([]interface{}, len(columns))
for i := range columns {
valuePtrs[i] = &values[i]
}
if err := rs.Scan(valuePtrs...); err != nil {
panic("show tables failed when scan," + err.Error())
}
var valObj = make(map[string]interface{})
for i, col := range columns {
var v interface{}
val := values[i]
b, ok := val.([]byte)
if ok {
v = string(b)
} else {
v = val
}
valObj[col] = v
}
if valObj["Engine"] != nil {
tables = append(tables, valObj["Name"].(string))
}
}
return tables
}
// GetTableSchema table schema
func (mydb *MyDb) GetTableSchema(name string) (schema string) {
rs, err := mydb.Query(fmt.Sprintf("show create table `%s`", name))
if err != nil {
mydb.config.Logger.Println(err)
return
}
defer rs.Close()
for rs.Next() {
var vname string
if err := rs.Scan(&vname, &schema); err != nil {
panic(fmt.Sprintf("get table %s 's schema failed, %s", name, err))
}
}
return
}
// Query execute sql query
func (mydb *MyDb) Query(query string, args ...interface{}) (*sql.Rows, error) {
mydb.config.Logger.Println("[SQL]", "["+mydb.dbType+"]", query, args)
return mydb.Db.Query(query, args...)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ankisme/private-mysql-schema-sync.git
git@gitee.com:ankisme/private-mysql-schema-sync.git
ankisme
private-mysql-schema-sync
private-mysql-schema-sync
v0.0.6

搜索帮助