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  }