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  }