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  }