1 Star 0 Fork 0

vizee/mybg

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
mysql.go 3.11 KB
一键复制 编辑 原始数据 按行查看 历史
vizee 提交于 2025-09-06 21:00 +08:00 . feat: db name
package main
import (
"context"
"database/sql"
"fmt"
"strings"
"time"
_ "github.com/go-sql-driver/mysql"
)
const (
queryTimeout = 3 * time.Second
)
var (
dbConn_ *sql.DB
)
func initMysql() {
mysqlConfig := getAppConfig().Mysql
dsn := fmt.Sprintf("%v:%v@tcp(%v)/%s?%s", mysqlConfig.Username, mysqlConfig.Password, mysqlConfig.Address, mysqlConfig.Database, mysqlConfig.Params)
db, err := sql.Open("mysql", dsn)
if err != nil {
fatalf("sql.Open: %v\n", err)
}
dbConn_ = db
}
func getDbConn() *sql.DB {
if dbConn_ == nil {
initMysql()
}
return dbConn_
}
func getTableComment(database string, tableName string) (string, error) {
const sqlQueryComment = `select TABLE_COMMENT from information_schema.TABLES where table_schema = ? and TABLE_NAME = ? limit 1`
ctx, cancel := context.WithTimeout(context.Background(), queryTimeout)
defer cancel()
row := getDbConn().QueryRowContext(ctx, sqlQueryComment, database, tableName)
if row.Err() != nil {
return "", row.Err()
}
var comment string
err := row.Scan(&comment)
if err != nil && err != sql.ErrNoRows {
return "", err
}
return comment, nil
}
type TableColumn struct {
columnName string
dataType string
columnComment string
columnDefault sql.NullString
isNullable bool
isPrimaryKey bool
isUniqueKey bool
hasAutoIncrement bool
hasOnUpdate bool
}
func getTableColumns(database string, tableName string) ([]*TableColumn, error) {
const sqlQueryColumns = `select COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT, COLUMN_KEY, COLUMN_DEFAULT, EXTRA from information_schema.COLUMNS where table_schema = ? and TABLE_NAME = ? order by ORDINAL_POSITION`
ctx, cancel := context.WithTimeout(context.Background(), queryTimeout)
defer cancel()
rows, err := getDbConn().QueryContext(ctx, sqlQueryColumns, database, tableName)
if err != nil {
return nil, err
}
defer rows.Close()
var columns []*TableColumn
for rows.Next() {
var (
isNullable string
columnKey string
extra string
)
c := &TableColumn{}
err := rows.Scan(&c.columnName, &c.dataType, &isNullable, &c.columnComment, &columnKey, &c.columnDefault, &extra)
if err != nil {
return nil, err
}
if isNullable == "YES" {
c.isNullable = true
}
switch columnKey {
case "PRI":
c.isPrimaryKey = true
case "UNI":
c.isUniqueKey = true
}
extra = strings.ToLower(extra)
if extra == "auto_increment" {
c.hasAutoIncrement = true
} else if strings.Contains(extra, "on update ") {
c.hasOnUpdate = true
}
columns = append(columns, c)
}
return columns, nil
}
func showTables(database string, prefix string) ([]string, error) {
const sqlShowTables = `select table_name from information_schema.tables where table_schema = ? and table_name like ?`
ctx, cancel := context.WithTimeout(context.Background(), queryTimeout)
defer cancel()
rows, err := getDbConn().QueryContext(ctx, sqlShowTables, database, prefix+"%")
if err != nil {
return nil, err
}
defer rows.Close()
var tbls []string
for rows.Next() {
var tbl string
err := rows.Scan(&tbl)
if err != nil {
return nil, err
}
tbls = append(tbls, tbl)
}
return tbls, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/viz/mybg.git
git@gitee.com:viz/mybg.git
viz
mybg
mybg
v0.1.9

搜索帮助