Files
mayfly-go/server/internal/db/dbm/mysql/dialect.go

62 lines
1.3 KiB
Go
Raw Normal View History

package mysql
2022-10-15 17:38:34 +08:00
import (
"fmt"
"mayfly-go/internal/db/dbm/dbi"
"mayfly-go/internal/db/dbm/sqlparser"
"mayfly-go/internal/db/dbm/sqlparser/mysql"
"time"
2022-10-15 17:38:34 +08:00
)
2024-12-08 13:04:23 +08:00
var (
mysqlQuoter = dbi.Quoter{
Prefix: '`',
Suffix: '`',
IsReserved: dbi.AlwaysReserve,
}
)
2024-11-20 22:43:53 +08:00
2023-11-26 21:21:35 +08:00
type MysqlDialect struct {
2024-03-18 12:25:40 +08:00
dbi.DefaultDialect
dc *dbi.DbConn
2022-10-15 17:38:34 +08:00
}
// 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
}
2024-12-08 13:04:23 +08:00
func (md *MysqlDialect) Quoter() dbi.Quoter {
return mysqlQuoter
}
func (pd *MysqlDialect) GetSQLParser() sqlparser.SqlParser {
return new(mysql.MysqlParser)
}
2024-12-08 13:04:23 +08:00
func (md *MysqlDialect) GetSQLGenerator() dbi.SQLGenerator {
return &SQLGenerator{Dialect: md}
}