mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 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 nil, nil
 | 
						|
	// 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 (md *MysqlDialect) GetSQLParser() sqlparser.SqlParser {
 | 
						|
	return new(mysql.MysqlParser)
 | 
						|
}
 | 
						|
 | 
						|
func (md *MysqlDialect) GetSQLGenerator() dbi.SQLGenerator {
 | 
						|
	return &SQLGenerator{Dialect: md}
 | 
						|
}
 |