go-sql-driver / mysql

Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package
https://pkg.go.dev/github.com/go-sql-driver/mysql
Mozilla Public License 2.0
14.45k stars 2.3k forks source link

ConnectionAttributes is skipped in FormatDSN #1618

Open bogcon opened 1 month ago

bogcon commented 1 month ago

Issue description

Config.FormatDSN does not take into account ConnectionAttributes property.

Example code

package main

import (
    "log"

    "github.com/go-sql-driver/mysql"
)

func main() {
    testDSN := "usr/pwd@tcp(127.0.0.1:3306)/dbname?connectionAttributes=foo:bar"
    cfg, err := mysql.ParseDSN(testDSN)
    if err != nil {
        log.Fatal("something went really wrong")
    }

    if cfg.ConnectionAttributes == "foo:bar" {
        reformattedDSN := cfg.FormatDSN()
        if reformattedDSN != testDSN {
            log.Fatalf("Ooops, that's buggy\noriginalDSN = %q\nreformattedDSN = %q", testDSN, reformattedDSN)
        }
    } else {
        log.Fatal("I wasn't expecting this")
    }
}

Error log

Running code from above will produce something like

2024/08/02 10:23:24 Ooops, that's buggy
originalDSN = "usr/pwd@tcp(127.0.0.1:3306)/dbname?connectionAttributes=foo:bar"
reformattedDSN = "usr/pwd@tcp(127.0.0.1:3306)/dbname"

Configuration

Not relevant in this particular case, but still:

Driver version (or git SHA): 1.8.1

Go version: go1.22.4 darwin/arm64

Server version: mysql Ver 8.4.0 for Linux on aarch64 (MySQL Community Server - GPL)

Server OS: linux c44dcabf32be 6.6.32-linuxkit #1 SMP Thu Jun 13 14:13:01 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux