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  }