feat(db): 添加对达梦数据库的支持
- 在应用程序中新增对达梦数据库(DM)的配置和连接支持 - 实现 SetDmDB 函数以配置达梦数据库连接 - 更新数据库操作逻辑,支持达梦特有的 SQL 语法和功能 - 在相关文件中添加达梦数据库的处理逻辑,包括表创建、数据插入和查询 - 更新 go.mod 和 go.sum 文件以引入达梦数据库驱动 - 增强文档,详细说明达梦数据库的配置和使用方法
This commit is contained in:
+108
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2018, 达梦数据库有限公司.
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
package dm
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"database/sql/driver"
|
||||
)
|
||||
|
||||
var SQLName sqlName
|
||||
|
||||
type sqlName struct {
|
||||
m_name string // 描述对象自身名称,
|
||||
|
||||
// 若为内置类型,则表示数据库端定义的名称,与dType相对应
|
||||
m_pkgName string // 所在包的名称,适用于包中类型的定义
|
||||
|
||||
m_schName string // 描述对象所在模式名
|
||||
|
||||
m_fulName string // 描述对象完全限定名, 记录用户发送的名称信息;
|
||||
|
||||
// 以及接受服务器响应后,拼成的名称信息
|
||||
|
||||
m_schId int // 保存模式id,模式名无法传出,利用模式id查找
|
||||
|
||||
m_packId int // 保存包的id,包名无法传出,用于查找包名
|
||||
|
||||
m_conn *DmConnection
|
||||
}
|
||||
|
||||
func (SqlName *sqlName) init() {
|
||||
SqlName.m_name = ""
|
||||
SqlName.m_pkgName = ""
|
||||
SqlName.m_schName = ""
|
||||
SqlName.m_fulName = ""
|
||||
SqlName.m_schId = -1
|
||||
SqlName.m_packId = -1
|
||||
SqlName.m_conn = nil
|
||||
}
|
||||
|
||||
func newSqlNameByFulName(fulName string) *sqlName {
|
||||
o := new(sqlName)
|
||||
o.init()
|
||||
o.m_fulName = fulName
|
||||
return o
|
||||
}
|
||||
|
||||
func newSqlNameByConn(conn *DmConnection) *sqlName {
|
||||
o := new(sqlName)
|
||||
o.init()
|
||||
o.m_conn = conn
|
||||
return o
|
||||
}
|
||||
|
||||
func (SqlName *sqlName) getFulName() (string, error) {
|
||||
// 说明非内嵌式数据类型名称描述信息传入或已经获取过描述信息
|
||||
if len(SqlName.m_fulName) > 0 {
|
||||
return SqlName.m_fulName, nil
|
||||
}
|
||||
|
||||
// 内嵌式数据类型无名称描述信息返回,直接返回null
|
||||
if SqlName.m_name == "" {
|
||||
// DBError.throwUnsupportedSQLException();
|
||||
return "", nil
|
||||
}
|
||||
|
||||
// 其他数据名描述信息
|
||||
if SqlName.m_packId != 0 || SqlName.m_schId != 0 {
|
||||
query := "SELECT NAME INTO ? FROM SYS.SYSOBJECTS WHERE ID=?"
|
||||
|
||||
params := make([]driver.Value, 2)
|
||||
var v string
|
||||
params[0] = sql.Out{Dest: &v}
|
||||
if SqlName.m_packId != 0 {
|
||||
params[1] = SqlName.m_packId
|
||||
} else {
|
||||
params[1] = SqlName.m_schId
|
||||
}
|
||||
|
||||
rs, err := SqlName.m_conn.query(query, params)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
rs.close()
|
||||
|
||||
// 说明是包中定义的对象
|
||||
if SqlName.m_packId != 0 {
|
||||
// pkg全名
|
||||
SqlName.m_pkgName = v
|
||||
SqlName.m_fulName = SqlName.m_pkgName + "." + SqlName.m_name
|
||||
} else {
|
||||
// 非包中定义的对象
|
||||
// schema 名称
|
||||
SqlName.m_schName = v
|
||||
SqlName.m_fulName = SqlName.m_schName + "." + SqlName.m_name
|
||||
}
|
||||
}
|
||||
// 将有效值返回
|
||||
if len(SqlName.m_fulName) > 0 {
|
||||
return SqlName.m_fulName, nil
|
||||
} else {
|
||||
return SqlName.m_name, nil
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user