gitee.com/chunanyong/dm@v1.8.12/p.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 "sync" 12 13 "gitee.com/chunanyong/dm/i18n" 14 ) 15 16 // 发版标记 17 var version = "8.1.3.12" 18 var build_date = "2023.04.17" 19 var svn = "16532" 20 21 var globalDmDriver = newDmDriver() 22 23 func init() { 24 sql.Register("dm", globalDmDriver) 25 } 26 27 func driverInit(svcConfPath string) { 28 load(svcConfPath) 29 if GlobalProperties != nil && GlobalProperties.Len() > 0 { 30 setDriverAttributes(GlobalProperties) 31 } 32 globalDmDriver.createFilterChain(nil, GlobalProperties) 33 34 switch Locale { 35 case 0: 36 i18n.InitConfig(i18n.Messages_zh_CN) 37 case 1: 38 i18n.InitConfig(i18n.Messages_en_US) 39 case 2: 40 i18n.InitConfig(i18n.Messages_zh_TW) 41 } 42 } 43 44 type DmDriver struct { 45 filterable 46 mu sync.Mutex 47 //readPropMutex sync.Mutex 48 } 49 50 func newDmDriver() *DmDriver { 51 d := new(DmDriver) 52 d.idGenerator = dmDriverIDGenerator 53 return d 54 } 55 56 /************************************************************* 57 ** PUBLIC METHODS AND FUNCTIONS 58 *************************************************************/ 59 func (d *DmDriver) Open(dsn string) (driver.Conn, error) { 60 d.mu.Lock() 61 defer d.mu.Unlock() 62 return d.open(dsn) 63 } 64 65 func (d *DmDriver) OpenConnector(dsn string) (driver.Connector, error) { 66 d.mu.Lock() 67 defer d.mu.Unlock() 68 return d.openConnector(dsn) 69 } 70 71 func (d *DmDriver) open(dsn string) (*DmConnection, error) { 72 c, err := d.openConnector(dsn) 73 if err != nil { 74 return nil, err 75 } 76 return c.connect(context.Background()) 77 } 78 79 func (d *DmDriver) openConnector(dsn string) (*DmConnector, error) { 80 connector := new(DmConnector).init() 81 connector.url = dsn 82 connector.dmDriver = d 83 //d.readPropMutex.Lock() 84 err := connector.mergeConfigs(dsn) 85 //d.readPropMutex.Unlock() 86 if err != nil { 87 return nil, err 88 } 89 connector.createFilterChain(connector, nil) 90 return connector, nil 91 }