github.com/snowflakedb/gosnowflake@v1.9.0/driver.go (about)

     1  // Copyright (c) 2017-2022 Snowflake Computing Inc. All rights reserved.
     2  
     3  package gosnowflake
     4  
     5  import (
     6  	"context"
     7  	"database/sql"
     8  	"database/sql/driver"
     9  	"os"
    10  	"runtime"
    11  	"sync"
    12  )
    13  
    14  var paramsMutex *sync.Mutex
    15  
    16  // SnowflakeDriver is a context of Go Driver
    17  type SnowflakeDriver struct{}
    18  
    19  // Open creates a new connection.
    20  func (d SnowflakeDriver) Open(dsn string) (driver.Conn, error) {
    21  	logger.Info("Open")
    22  	ctx := context.Background()
    23  	cfg, err := ParseDSN(dsn)
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  	return d.OpenWithConfig(ctx, *cfg)
    28  }
    29  
    30  // OpenWithConfig creates a new connection with the given Config.
    31  func (d SnowflakeDriver) OpenWithConfig(ctx context.Context, config Config) (driver.Conn, error) {
    32  	if err := config.Validate(); err != nil {
    33  		return nil, err
    34  	}
    35  	if config.Tracing != "" {
    36  		logger.SetLogLevel(config.Tracing)
    37  	}
    38  	logger.Info("OpenWithConfig")
    39  	sc, err := buildSnowflakeConn(ctx, config)
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  
    44  	if err = authenticateWithConfig(sc); err != nil {
    45  		return nil, err
    46  	}
    47  	sc.connectionTelemetry(&config)
    48  
    49  	sc.startHeartBeat()
    50  	sc.internal = &httpClient{sr: sc.rest}
    51  	return sc, nil
    52  }
    53  
    54  func runningOnGithubAction() bool {
    55  	return os.Getenv("GITHUB_ACTIONS") != ""
    56  }
    57  
    58  var logger = CreateDefaultLogger()
    59  
    60  func init() {
    61  	if runtime.GOOS == "linux" {
    62  		// TODO: delete this once we replaced 99designs/keyring (SNOW-1017659) and/or keyring#103 is resolved
    63  		leak, logMsg := canDbusLeakProcesses()
    64  		if leak {
    65  			// 99designs/keyring#103 -> gosnowflake#773
    66  			logger.Warn(logMsg)
    67  		}
    68  	}
    69  	sql.Register("snowflake", &SnowflakeDriver{})
    70  	logger.SetLogLevel("error")
    71  	if runningOnGithubAction() {
    72  		logger.SetLogLevel("fatal")
    73  	}
    74  	paramsMutex = &sync.Mutex{}
    75  }