VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

修改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
    }

具体修改代码位置如下图所示:

修改后效果如下所示: