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