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  }