Files
mayfly-go/server/internal/db/dbm/mysql/dialect.go
meilin.huang e56788af3e refactor: dbm
2024-12-08 13:04:23 +08:00

62 lines
1.3 KiB
Go

package mysql
import (
"fmt"
"mayfly-go/internal/db/dbm/dbi"
"mayfly-go/internal/db/dbm/sqlparser"
"mayfly-go/internal/db/dbm/sqlparser/mysql"
"time"
)
var (
mysqlQuoter = dbi.Quoter{
Prefix: '`',
Suffix: '`',
IsReserved: dbi.AlwaysReserve,
}
)
type MysqlDialect struct {
dbi.DefaultDialect
dc *dbi.DbConn
}
// GetDbProgram 获取数据库程序模块,用于数据库备份与恢复
func (md *MysqlDialect) GetDbProgram() (dbi.DbProgram, error) {
return NewDbProgramMysql(md.dc), nil
}
func (md *MysqlDialect) CopyTable(copy *dbi.DbCopyTable) error {
tableName := copy.TableName
// 生成新表名,为老表明+_copy_时间戳
newTableName := tableName + "_copy_" + time.Now().Format("20060102150405")
// 复制表结构创建表
_, err := md.dc.Exec(fmt.Sprintf("create table %s like %s", newTableName, tableName))
if err != nil {
return err
}
// 复制数据
if copy.CopyData {
go func() {
_, _ = md.dc.Exec(fmt.Sprintf("insert into %s select * from %s", newTableName, tableName))
}()
}
return err
}
func (md *MysqlDialect) Quoter() dbi.Quoter {
return mysqlQuoter
}
func (pd *MysqlDialect) GetSQLParser() sqlparser.SqlParser {
return new(mysql.MysqlParser)
}
func (md *MysqlDialect) GetSQLGenerator() dbi.SQLGenerator {
return &SQLGenerator{Dialect: md}
}