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