Skip to content

feat: support connection pool level client session #155

@hantmac

Description

@hantmac

re-produce code:

package main

import (
	"database/sql"
	"sync"

	_ "github.com/datafuselabs/databend-go"
)

func main() {
	conn, err := sql.Open("databend", "http://databend:databend@localhost:8009/default?sslmode=disable")
	if err != nil {
		panic(err)
	}

	conn.SetMaxIdleConns(3)
	conn.SetMaxOpenConns(3)

	_, err = conn.Exec("set enable_query_result_cache = 1;")
	if err != nil {
		panic(err)
	}

	var wg sync.WaitGroup
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(i int) {
			defer wg.Done()
			rows, err := conn.Query("select value, default from system.settings where name = 'enable_query_result_cache'")
			if err != nil {
				panic(err)
			}
			for rows.Next() {
				var value string
				var defaultValue string
				if err := rows.Scan(&value, &defaultValue); err != nil {
					panic(err)
				}
				println("loop", i, "  value -->", value, "default -->", defaultValue)
			}
		}(i)
	}
	wg.Wait()

}

In connection pool, the conn should use the same session state info.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions