p.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (c) 2000-2018, 达梦数据库有限公司.
  3. * All rights reserved.
  4. */
  5. package dm
  6. import (
  7. "context"
  8. "database/sql"
  9. "database/sql/driver"
  10. "sync"
  11. "gitee.com/chunanyong/dm/i18n"
  12. )
  13. // 发版标记
  14. var version = "8.1.2.192"
  15. var build_date = "2023.01.05"
  16. var svn = "14827"
  17. var globalDmDriver = newDmDriver()
  18. func init() {
  19. sql.Register("dm", globalDmDriver)
  20. }
  21. func driverInit(svcConfPath string) {
  22. load(svcConfPath)
  23. if GlobalProperties != nil && GlobalProperties.Len() > 0 {
  24. setDriverAttributes(GlobalProperties)
  25. }
  26. globalDmDriver.createFilterChain(nil, GlobalProperties)
  27. switch Locale {
  28. case 0:
  29. i18n.InitConfig(i18n.Messages_zh_CN)
  30. case 1:
  31. i18n.InitConfig(i18n.Messages_en_US)
  32. case 2:
  33. i18n.InitConfig(i18n.Messages_zh_TW)
  34. }
  35. }
  36. type DmDriver struct {
  37. filterable
  38. readPropMutex sync.Mutex
  39. }
  40. func newDmDriver() *DmDriver {
  41. d := new(DmDriver)
  42. d.idGenerator = dmDriverIDGenerator
  43. return d
  44. }
  45. /*************************************************************
  46. ** PUBLIC METHODS AND FUNCTIONS
  47. *************************************************************/
  48. func (d *DmDriver) Open(dsn string) (driver.Conn, error) {
  49. return d.open(dsn)
  50. }
  51. func (d *DmDriver) OpenConnector(dsn string) (driver.Connector, error) {
  52. return d.openConnector(dsn)
  53. }
  54. func (d *DmDriver) open(dsn string) (*DmConnection, error) {
  55. c, err := d.openConnector(dsn)
  56. if err != nil {
  57. return nil, err
  58. }
  59. return c.connect(context.Background())
  60. }
  61. func (d *DmDriver) openConnector(dsn string) (*DmConnector, error) {
  62. connector := new(DmConnector).init()
  63. connector.url = dsn
  64. connector.dmDriver = d
  65. d.readPropMutex.Lock()
  66. err := connector.mergeConfigs(dsn)
  67. d.readPropMutex.Unlock()
  68. if err != nil {
  69. return nil, err
  70. }
  71. connector.createFilterChain(connector, nil)
  72. return connector, nil
  73. }