zzj.go 2.4 KB

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