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  }