github.com/snowflakedb/gosnowflake@v1.9.0/cmd/noconnpool/noconnpool.go (about) 1 // Example: No connection pool 2 // 3 // Setting the pool size to 1, a single session is used at all times. This guarantees USE <object type> <object name> 4 // changes the current working object and subsequent commands can have the access. 5 package main 6 7 import ( 8 "database/sql" 9 "flag" 10 "fmt" 11 "log" 12 "sync" 13 14 sf "github.com/snowflakedb/gosnowflake" 15 ) 16 17 func main() { 18 if !flag.Parsed() { 19 flag.Parse() 20 } 21 22 cfg, err := sf.GetConfigFromEnv([]*sf.ConfigParam{ 23 {Name: "Account", EnvName: "SNOWFLAKE_TEST_ACCOUNT", FailOnMissing: true}, 24 {Name: "User", EnvName: "SNOWFLAKE_TEST_USER", FailOnMissing: true}, 25 {Name: "Password", EnvName: "SNOWFLAKE_TEST_PASSWORD", FailOnMissing: true}, 26 {Name: "Host", EnvName: "SNOWFLAKE_TEST_HOST", FailOnMissing: false}, 27 {Name: "Port", EnvName: "SNOWFLAKE_TEST_PORT", FailOnMissing: false}, 28 {Name: "Protocol", EnvName: "SNOWFLAKE_TEST_PROTOCOL", FailOnMissing: false}, 29 }) 30 if err != nil { 31 log.Fatalf("failed to create Config, err: %v", err) 32 } 33 dsn, err := sf.DSN(cfg) 34 if err != nil { 35 log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err) 36 } 37 38 db, err := sql.Open("snowflake", dsn) 39 if err != nil { 40 log.Fatalf("failed to connect. err: %v", err) 41 } 42 // single session 43 db.SetMaxIdleConns(1) 44 db.SetMaxOpenConns(1) 45 defer db.Close() 46 47 var wg sync.WaitGroup 48 n := 10 49 wg.Add(n) 50 for i := 0; i < n; i++ { 51 go func() { 52 defer wg.Done() 53 query := "select current_session()" 54 rows, err := db.Query(query) // no cancel is allowed 55 if err != nil { 56 log.Fatalf("failed to run a query. %v, err: %v", query, err) 57 } 58 defer rows.Close() 59 var v int 60 for rows.Next() { 61 err := rows.Scan(&v) 62 if err != nil { 63 log.Fatalf("failed to get result. err: %v", err) 64 } 65 fmt.Printf("Session: %v\n", v) 66 } 67 if rows.Err() != nil { 68 fmt.Printf("ERROR: %v\n", rows.Err()) 69 return 70 } 71 }() 72 } 73 fmt.Println("Waiting to finish...") 74 wg.Wait() 75 fmt.Printf("Congrats! You have successfully!\n") 76 }