mirror of
https://gitee.com/dromara/mayfly-go
synced 2026-01-05 22:25:48 +08:00
* fix: 代码合并 * feat:支持数据库版本兼容,目前兼容了oracle11g部分特性 * fix: 修改数据同步bug,数据sql里指定修改字段别,导致未正确记录修改字段值 * feat: 数据库迁移支持定时迁移和迁移到sql文件
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package dm
|
||
|
||
import (
|
||
"database/sql"
|
||
"fmt"
|
||
"mayfly-go/internal/db/dbm/dbi"
|
||
"net/url"
|
||
"strings"
|
||
)
|
||
|
||
func init() {
|
||
dbi.Register(dbi.DbTypeDM, new(Meta))
|
||
}
|
||
|
||
type Meta struct {
|
||
}
|
||
|
||
func (dm *Meta) GetSqlDb(d *dbi.DbInfo) (*sql.DB, error) {
|
||
driverName := "dm"
|
||
db := d.Database
|
||
var dbParam string
|
||
if db != "" {
|
||
// dm database可以使用db/schema表示,方便连接指定schema, 若不存在schema则使用默认schema
|
||
ss := strings.Split(db, "/")
|
||
if len(ss) > 1 {
|
||
dbParam = fmt.Sprintf("%s?schema=\"%s\"&escapeProcess=true", ss[0], ss[len(ss)-1])
|
||
} else {
|
||
dbParam = db + "?escapeProcess=true"
|
||
}
|
||
} else {
|
||
dbParam = "?escapeProcess=true"
|
||
}
|
||
|
||
err := d.IfUseSshTunnelChangeIpPort()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
dsn := fmt.Sprintf("dm://%s:%s@%s:%d/%s", d.Username, url.PathEscape(d.Password), d.Host, d.Port, dbParam)
|
||
return sql.Open(driverName, dsn)
|
||
}
|
||
|
||
func (dm *Meta) GetDialect(conn *dbi.DbConn) dbi.Dialect {
|
||
return &DMDialect{dc: conn}
|
||
}
|
||
|
||
func (dm *Meta) GetMetaData(conn *dbi.DbConn) *dbi.MetaDataX {
|
||
return dbi.NewMetaDataX(&DMMetaData{
|
||
dc: conn,
|
||
})
|
||
}
|