mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 16:00:25 +08:00
* fix: 代码合并 * feat:支持数据库版本兼容,目前兼容了oracle11g部分特性 * fix: 修改数据同步bug,数据sql里指定修改字段别,导致未正确记录修改字段值 * feat: 数据库迁移支持定时迁移和迁移到sql文件
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package mysql
|
||
|
||
import (
|
||
"context"
|
||
"database/sql"
|
||
"fmt"
|
||
"mayfly-go/internal/db/dbm/dbi"
|
||
"net"
|
||
|
||
"github.com/go-sql-driver/mysql"
|
||
)
|
||
|
||
func init() {
|
||
meta := new(Meta)
|
||
dbi.Register(dbi.DbTypeMysql, meta)
|
||
dbi.Register(dbi.DbTypeMariadb, meta)
|
||
}
|
||
|
||
type Meta struct {
|
||
}
|
||
|
||
func (mm *Meta) GetSqlDb(d *dbi.DbInfo) (*sql.DB, error) {
|
||
// SSH Conect
|
||
if d.SshTunnelMachineId > 0 {
|
||
sshTunnelMachine, err := dbi.GetSshTunnel(d.SshTunnelMachineId)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
mysql.RegisterDialContext(d.Network, func(ctx context.Context, addr string) (net.Conn, error) {
|
||
return sshTunnelMachine.GetDialConn("tcp", addr)
|
||
})
|
||
}
|
||
// 设置dataSourceName -> 更多参数参考:https://github.com/go-sql-driver/mysql#dsn-data-source-name
|
||
dsn := fmt.Sprintf("%s:%s@%s(%s:%d)/%s?timeout=8s", d.Username, d.Password, d.Network, d.Host, d.Port, d.Database)
|
||
if d.Params != "" {
|
||
dsn = fmt.Sprintf("%s&%s", dsn, d.Params)
|
||
}
|
||
const driverName = "mysql"
|
||
return sql.Open(driverName, dsn)
|
||
}
|
||
|
||
func (mm *Meta) GetDialect(conn *dbi.DbConn) dbi.Dialect {
|
||
return &MysqlDialect{dc: conn}
|
||
}
|
||
|
||
func (mm *Meta) GetMetaData(conn *dbi.DbConn) *dbi.MetaDataX {
|
||
return dbi.NewMetaDataX(&MysqlMetaData{dc: conn})
|
||
}
|