gitee.com/curryzheng/dm@v0.0.1/zzk.go (about) 1 /* 2 * Copyright (c) 2000-2018, 达梦数据库有限公司. 3 * All rights reserved. 4 */ 5 6 package dm 7 8 import "database/sql/driver" 9 10 var SQLName sqlName 11 12 type sqlName struct { 13 m_name string // 描述对象自身名称, 14 15 // 若为内置类型,则表示数据库端定义的名称,与dType相对应 16 m_pkgName string // 所在包的名称,适用于包中类型的定义 17 18 m_schName string // 描述对象所在模式名 19 20 m_fulName string // 描述对象完全限定名, 记录用户发送的名称信息; 21 22 // 以及接受服务器响应后,拼成的名称信息 23 24 m_schId int // 保存模式id,模式名无法传出,利用模式id查找 25 26 m_packId int // 保存包的id,包名无法传出,用于查找包名 27 28 m_conn *DmConnection 29 } 30 31 func (SqlName *sqlName) init() { 32 SqlName.m_name = "" 33 SqlName.m_pkgName = "" 34 SqlName.m_schName = "" 35 SqlName.m_fulName = "" 36 SqlName.m_schId = -1 37 SqlName.m_packId = -1 38 SqlName.m_conn = nil 39 } 40 41 func newSqlNameByFulName(fulName string) *sqlName { 42 o := new(sqlName) 43 o.init() 44 o.m_fulName = fulName 45 return o 46 } 47 48 func newSqlNameByConn(conn *DmConnection) *sqlName { 49 o := new(sqlName) 50 o.init() 51 o.m_conn = conn 52 return o 53 } 54 55 func (SqlName *sqlName) getFulName() (string, error) { 56 // 说明非内嵌式数据类型名称描述信息传入或已经获取过描述信息 57 if len(SqlName.m_fulName) > 0 { 58 return SqlName.m_fulName, nil 59 } 60 61 // 内嵌式数据类型无名称描述信息返回,直接返回null 62 if SqlName.m_name == "" { 63 // DBError.throwUnsupportedSQLException(); 64 return "", nil 65 } 66 67 // 其他数据名描述信息 68 if SqlName.m_packId != 0 || SqlName.m_schId != 0 { 69 sql := "SELECT NAME INTO ? FROM SYS.SYSOBJECTS WHERE ID=?" 70 71 params := make([]driver.Value, 2) 72 var v string 73 params[0] = &v 74 if SqlName.m_packId != 0 { 75 params[1] = SqlName.m_packId 76 } else { 77 params[1] = SqlName.m_schId 78 } 79 80 rs, err := SqlName.m_conn.query(sql, params) 81 if err != nil { 82 return "", err 83 } 84 rs.close() 85 86 // 说明是包中定义的对象 87 if SqlName.m_packId != 0 { 88 // pkg全名 89 SqlName.m_pkgName = v 90 SqlName.m_fulName = SqlName.m_pkgName + "." + SqlName.m_name 91 } else { 92 // 非包中定义的对象 93 // schema 名称 94 SqlName.m_schName = v 95 SqlName.m_fulName = SqlName.m_schName + "." + SqlName.m_name 96 } 97 } 98 // 将有效值返回 99 if len(SqlName.m_fulName) > 0 { 100 return SqlName.m_fulName, nil 101 } else { 102 return SqlName.m_name, nil 103 } 104 105 }