修改xorm框架代码以正常获取DBVersion
问题
连接VastbaseV2.2.10版本时,使用xorm框架调用engine.DBVersion()无法获取数据库版本信息。
影响范围
engine.DBVersion()方法
原因
xorm框架目前只适配了Mysql、Postgres、Tidb、Oracle 等数据库,没有适配Vastbase。连接Vastbase数据库时,调用的是连接Postgres时的函数。xorm框架查询版本号用了select version()命令,期待返回的版本为pg的版本,Vastbase2.2.10版本select version()返回的是Vastbase的版本,与其无法匹配,故无法识别到数据库版本信息。
解决办法
在xorm/dialects/postgres.go文件的func (db *postgres) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error)函数中修改判断版本号的代码。
需要在获取到version后面的判断版本的代码最后加上:
else if strings.HasPrefix(version,"(Vastbase ") {
versions := strings.Split(version, "on ")
return &schemas.Version{
Number: versions[0],
Level: versions[1],
}, nil
}
具体修改代码位置如下图所示:
修改后效果如下所示: