From 9ff5d2a1abe98ead1409e9c66172f52ac5a07f5b Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Wed, 16 Aug 2023 19:14:35 -0500
Subject: [PATCH] session pool ok

---
 lib/bouncer/backends/v0/query.go      | 5 +++++
 lib/gat/pools/session/pool.go         | 2 +-
 lib/middleware/middlewares/ps/sync.go | 2 +-
 pgbouncer.ini                         | 2 +-
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/bouncer/backends/v0/query.go b/lib/bouncer/backends/v0/query.go
index 73afaeb8..7abcdc5f 100644
--- a/lib/bouncer/backends/v0/query.go
+++ b/lib/bouncer/backends/v0/query.go
@@ -1,6 +1,7 @@
 package backends
 
 import (
+	"pggat2/lib/util/strutil"
 	"pggat2/lib/zap"
 	packets "pggat2/lib/zap/packets/v3.0"
 )
@@ -127,6 +128,10 @@ func QueryString(ctx *Context, server zap.ReadWriter, query string) error {
 	return Query(ctx, server, packet)
 }
 
+func SetParameter(ctx *Context, server zap.ReadWriter, name strutil.CIString, value string) error {
+	return QueryString(ctx, server, `SET `+strutil.Escape(name.String(), `"`)+` = `+strutil.Escape(value, `'`))
+}
+
 func FunctionCall(ctx *Context, server zap.ReadWriter, packet *zap.Packet) error {
 	if err := server.Write(packet); err != nil {
 		return err
diff --git a/lib/gat/pools/session/pool.go b/lib/gat/pools/session/pool.go
index 732247ca..ba1f32b6 100644
--- a/lib/gat/pools/session/pool.go
+++ b/lib/gat/pools/session/pool.go
@@ -133,7 +133,7 @@ func (T *Pool) Serve(ctx *gat.Context, client zap.ReadWriter, ps map[strutil.CIS
 			packets.WriteParameterStatus(pkt, key.String(), value)
 			pkts.Append(pkt)
 
-			if err := backends.QueryString(&backends.Context{}, conn.rw, `SET `+strutil.Escape(key.String(), `"`)+` = `+strutil.Escape(value, `'`)); err != nil {
+			if err := backends.SetParameter(&backends.Context{}, conn.rw, key, value); err != nil {
 				connOk = false
 				return true
 			}
diff --git a/lib/middleware/middlewares/ps/sync.go b/lib/middleware/middlewares/ps/sync.go
index aa752f54..e4547aec 100644
--- a/lib/middleware/middlewares/ps/sync.go
+++ b/lib/middleware/middlewares/ps/sync.go
@@ -23,7 +23,7 @@ func sync(tracking []strutil.CIString, clientPackets *zap.Packets, c *Client, se
 	}
 
 	if slices.Contains(tracking, name) {
-		if err := backends.QueryString(&backends.Context{}, server, `SET `+strutil.Escape(name.String(), `"`)+` = `+strutil.Escape(value, `'`)); err != nil {
+		if err := backends.SetParameter(&backends.Context{}, server, name, value); err != nil {
 			panic(err) // TODO(garet)
 		}
 		if s.parameters == nil {
diff --git a/pgbouncer.ini b/pgbouncer.ini
index 6dc48900..118c7214 100644
--- a/pgbouncer.ini
+++ b/pgbouncer.ini
@@ -1,5 +1,5 @@
 [pgbouncer]
-pool_mode = transaction
+pool_mode = session
 auth_file = userlist.txt
 listen_addr = *
 
-- 
GitLab