github.com/wanlay/gorm-dm8@v1.0.5/dmr/p.go (about) 1 /* 2 * Copyright (c) 2000-2018, 达梦数据库有限公司. 3 * All rights reserved. 4 */ 5 package dmr 6 7 import ( 8 "context" 9 "database/sql" 10 "database/sql/driver" 11 "sync" 12 13 "github.com/wanlay/gorm-dm8/dmr/i18n" 14 ) 15 16 // 发版标记 17 var version = "8.1.2.94" 18 var build_date = "2021.11.11" 19 var svn = "8453" 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 readPropMutex sync.Mutex 47 } 48 49 func newDmDriver() *DmDriver { 50 d := new(DmDriver) 51 d.idGenerator = dmDriverIDGenerator 52 return d 53 } 54 55 /************************************************************* 56 ** PUBLIC METHODS AND FUNCTIONS 57 *************************************************************/ 58 func (d *DmDriver) Open(dsn string) (driver.Conn, error) { 59 return d.open(dsn) 60 } 61 62 func (d *DmDriver) OpenConnector(dsn string) (driver.Connector, error) { 63 return d.openConnector(dsn) 64 } 65 66 func (d *DmDriver) open(dsn string) (*DmConnection, error) { 67 c, err := d.openConnector(dsn) 68 if err != nil { 69 return nil, err 70 } 71 return c.connect(context.Background()) 72 } 73 74 func (d *DmDriver) openConnector(dsn string) (*DmConnector, error) { 75 connector := new(DmConnector).init() 76 connector.url = dsn 77 connector.dmDriver = d 78 d.readPropMutex.Lock() 79 err := connector.mergeConfigs(dsn) 80 d.readPropMutex.Unlock() 81 if err != nil { 82 return nil, err 83 } 84 connector.createFilterChain(connector, nil) 85 return connector, nil 86 }