github.com/snowflakedb/gosnowflake@v1.9.0/cmd/keepalive/keepalive.go (about) 1 // Example: client session keep alive 2 // By default, the token expires in 4 hours if the connection is idle. CLIENT_SESSION_KEEP_ALIVE parameter will 3 // have a heartbeat in the background to keep the connection alive by making explicit heartbeats 4 package main 5 6 import ( 7 "database/sql" 8 "flag" 9 "fmt" 10 "log" 11 "time" 12 13 sf "github.com/snowflakedb/gosnowflake" 14 ) 15 16 func runQuery(db *sql.DB, query string) { 17 rows, err := db.Query(query) // no cancel is allowed 18 if err != nil { 19 log.Fatalf("failed to run a query. %v, err: %v", query, err) 20 } 21 defer rows.Close() 22 var v int 23 for rows.Next() { 24 err := rows.Scan(&v) 25 if err != nil { 26 log.Fatalf("failed to get result. err: %v", err) 27 } 28 if v != 1 { 29 log.Fatalf("failed to get 1. got: %v", v) 30 } 31 } 32 if rows.Err() != nil { 33 fmt.Printf("ERROR: %v\n", rows.Err()) 34 return 35 } 36 37 } 38 39 func main() { 40 if !flag.Parsed() { 41 flag.Parse() 42 } 43 44 cfg, err := sf.GetConfigFromEnv([]*sf.ConfigParam{ 45 {Name: "Account", EnvName: "SNOWFLAKE_TEST_ACCOUNT", FailOnMissing: true}, 46 {Name: "User", EnvName: "SNOWFLAKE_TEST_USER", FailOnMissing: true}, 47 {Name: "Password", EnvName: "SNOWFLAKE_TEST_PASSWORD", FailOnMissing: true}, 48 {Name: "Host", EnvName: "SNOWFLAKE_TEST_HOST", FailOnMissing: false}, 49 {Name: "Port", EnvName: "SNOWFLAKE_TEST_PORT", FailOnMissing: false}, 50 {Name: "Protocol", EnvName: "SNOWFLAKE_TEST_PROTOCOL", FailOnMissing: false}, 51 }) 52 if err != nil { 53 log.Fatalf("failed to create Config, err: %v", err) 54 } 55 dsn, err := sf.DSN(cfg) 56 if err != nil { 57 log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err) 58 } 59 60 db, err := sql.Open("snowflake", dsn) 61 if err != nil { 62 log.Fatalf("failed to connect. %v, err: %v", dsn, err) 63 } 64 defer db.Close() 65 query := "SELECT 1" 66 runQuery(db, query) 67 68 time.Sleep(90 * time.Minute) 69 70 runQuery(db, query) 71 72 time.Sleep(4 * time.Hour) 73 74 runQuery(db, query) 75 76 time.Sleep(8 * time.Hour) 77 78 fmt.Printf("Congrats! You have successfully run %v with Snowflake DB!\n", query) 79 }