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 }