mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-02 23:40:24 +08:00
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package dm
|
|
|
|
import (
|
|
"fmt"
|
|
"mayfly-go/internal/db/dbm/dbi"
|
|
"mayfly-go/pkg/utils/stringx"
|
|
"strings"
|
|
"time"
|
|
|
|
_ "gitee.com/chunanyong/dm"
|
|
)
|
|
|
|
type DMDialect struct {
|
|
dbi.DefaultDialect
|
|
|
|
dc *dbi.DbConn
|
|
}
|
|
|
|
func (dd *DMDialect) CopyTable(copy *dbi.DbCopyTable) error {
|
|
tableName := copy.TableName
|
|
metadata := dd.dc.GetMetadata()
|
|
ddl, err := metadata.GetTableDDL(tableName, false)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// 生成新表名,为老表明+_copy_时间戳
|
|
newTableName := tableName + "_copy_" + time.Now().Format("20060102150405")
|
|
|
|
// 替换新表名
|
|
ddl = strings.ReplaceAll(ddl, fmt.Sprintf("\"%s\"", strings.ToUpper(tableName)), fmt.Sprintf("\"%s\"", strings.ToUpper(newTableName)))
|
|
// 去除空格换行
|
|
ddl = stringx.TrimSpaceAndBr(ddl)
|
|
// sqls, err := sqlparser.SplitStatementToPieces(ddl, sqlparser.WithDialect(dd.dc.GetMetaData().GetSqlParserDialect()))
|
|
sqls := strings.Split(ddl, ";")
|
|
for _, sql := range sqls {
|
|
_, _ = dd.dc.Exec(sql)
|
|
}
|
|
|
|
// 复制数据
|
|
if copy.CopyData {
|
|
go func() {
|
|
// 设置允许填充自增列之后,显示指定列名可以插入自增列\
|
|
identityInsert := fmt.Sprintf("set identity_insert \"%s\" on", newTableName)
|
|
// 获取列名
|
|
columns, _ := metadata.GetColumns(tableName)
|
|
columnArr := make([]string, 0)
|
|
for _, column := range columns {
|
|
columnArr = append(columnArr, fmt.Sprintf("\"%s\"", column.ColumnName))
|
|
}
|
|
columnStr := strings.Join(columnArr, ",")
|
|
// 插入新数据并显示指定列
|
|
_, _ = dd.dc.Exec(fmt.Sprintf("%s insert into \"%s\" (%s) select %s from \"%s\"", identityInsert, newTableName, columnStr, columnStr, tableName))
|
|
|
|
}()
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (dd *DMDialect) GetDumpHelper() dbi.DumpHelper {
|
|
return new(DumpHelper)
|
|
}
|
|
|
|
func (sd *DMDialect) GetSQLGenerator() dbi.SQLGenerator {
|
|
return &SQLGenerator{
|
|
Dialect: sd,
|
|
Metadata: sd.dc.GetMetadata(),
|
|
}
|
|
}
|