From 32a54ed153ba8779f6b03ba700e61ea6c3b0e6fd Mon Sep 17 00:00:00 2001 From: Bogdan Constantinescu Date: Fri, 2 Aug 2024 10:49:12 +0300 Subject: [PATCH 1/2] Fix FormatDSN missing ConnectionAttributes --- AUTHORS | 1 + dsn.go | 4 ++++ dsn_test.go | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index bab66a3b2..6539e817c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -21,6 +21,7 @@ Animesh Ray Arne Hormann Ariel Mashraki Asta Xie +Bogdan Constantinescu Brian Hendriks Bulat Gaifullin Caine Jette diff --git a/dsn.go b/dsn.go index 65f5a0242..8fe9484d5 100644 --- a/dsn.go +++ b/dsn.go @@ -290,6 +290,10 @@ func (cfg *Config) FormatDSN() string { writeDSNParam(&buf, &hasParam, "columnsWithAlias", "true") } + if cfg.ConnectionAttributes != "" { + writeDSNParam(&buf, &hasParam, "connectionAttributes", url.QueryEscape(cfg.ConnectionAttributes)) + } + if cfg.InterpolateParams { writeDSNParam(&buf, &hasParam, "interpolateParams", "true") } diff --git a/dsn_test.go b/dsn_test.go index dd8cd935c..c1a9afa3f 100644 --- a/dsn_test.go +++ b/dsn_test.go @@ -77,6 +77,9 @@ var testDSNs = []struct { }, { "user:password@/dbname?loc=UTC&timeout=30s&parseTime=true&timeTruncate=1h", &Config{User: "user", Passwd: "password", Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", Loc: time.UTC, Timeout: 30 * time.Second, ParseTime: true, MaxAllowedPacket: defaultMaxAllowedPacket, Logger: defaultLogger, AllowNativePasswords: true, CheckConnLiveness: true, timeTruncate: time.Hour}, +}, { + "foo:bar@tcp(192.168.1.50:3307)/baz?timeout=10s&connectionAttributes=program_name:MySQLGoDriver%2FTest,program_version:1.2.3", + &Config{User: "foo", Passwd: "bar", Net: "tcp", Addr: "192.168.1.50:3307", DBName: "baz", Loc: time.UTC, Timeout: 10 * time.Second, MaxAllowedPacket: defaultMaxAllowedPacket, Logger: defaultLogger, AllowNativePasswords: true, CheckConnLiveness: true, ConnectionAttributes: "program_name:MySQLGoDriver/Test,program_version:1.2.3"}, }, } @@ -109,7 +112,8 @@ func TestDSNParserInvalid(t *testing.T) { "User:pass@tcp(1.2.3.4:3306)", // no trailing slash "net()/", // unknown default addr "user:pass@tcp(127.0.0.1:3306)/db/name", // invalid dbname - "user:password@/dbname?allowFallbackToPlaintext=PREFERRED", // wrong bool flag + "user:password@/dbname?allowFallbackToPlaintext=PREFERRED", // wrong bool flag + "user:password@/dbname?connectionAttributes=attr1:/unescaped/value", // unescaped //"/dbname?arg=/some/unescaped/path", } From 92fe4418d2f7541b8df3ea5b0ce8f21173829bef Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Sat, 8 Mar 2025 17:18:41 +0900 Subject: [PATCH 2/2] Fix missing closing brace in dsn.go --- dsn.go | 1 + 1 file changed, 1 insertion(+) diff --git a/dsn.go b/dsn.go index d3ba3e59c..ec1e06e7a 100644 --- a/dsn.go +++ b/dsn.go @@ -309,6 +309,7 @@ func (cfg *Config) FormatDSN() string { if cfg.ConnectionAttributes != "" { writeDSNParam(&buf, &hasParam, "connectionAttributes", url.QueryEscape(cfg.ConnectionAttributes)) + } if cfg.compress { writeDSNParam(&buf, &hasParam, "compress", "true")