diff --git a/common/config.go b/common/config.go index c6410dd7905ee75b02890d97033a924f0c0dfd3e..c9272d9a206143b0848006a152a8aa92c65ef6bc 100644 --- a/common/config.go +++ b/common/config.go @@ -294,9 +294,10 @@ func parseDSN(odbc string, d *Dsn) *Dsn { userInfo = res[1] hostInfo = res[2] query = res[4] - } else { + } else if res := regexp.MustCompile(`^(.*?)($|\?)(.*)`).FindStringSubmatch(odbc); len(res) > 3 { // hostInfo - hostInfo = odbc + hostInfo = res[1] + query = res[3] } // 解析用户信息 diff --git a/common/config_test.go b/common/config_test.go index 9a18cafb2aeeaa6c7742ea3f8278f31e1c25c25f..291e94dcb7f487b0154fadc4f5445773977f437a 100644 --- a/common/config_test.go +++ b/common/config_test.go @@ -60,8 +60,8 @@ func TestParseDSN(t *testing.T) { "user:password@hostname:3307", "user:password@hostname:/database", "user:password@:3307/database", - "user@hostname/dbname", - "user:pwd:pwd@pwd/pwd@hostname/dbname", + "user@hostname/database", + "user:pwd:pwd@pwd/pwd@hostname/database", "user:password@", "hostname:3307/database", "@hostname:3307/database", diff --git a/common/testdata/TestParseDSN.golden b/common/testdata/TestParseDSN.golden index 4d2b98666d318fe73bc5ddd771782b4c123b5d8d..e558b46e0fa0cea408945d7a084400f6675edc38 100644 --- a/common/testdata/TestParseDSN.golden +++ b/common/testdata/TestParseDSN.golden @@ -3,8 +3,8 @@ &common.Dsn{Net:"", Addr:"hostname:3307", Schema:"information_schema", User:"user", Password:"password", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} &common.Dsn{Net:"", Addr:"hostname:3306", Schema:"database", User:"user", Password:"password", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} &common.Dsn{Net:"", Addr:"127.0.0.1:3307", Schema:"database", User:"user", Password:"password", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} -&common.Dsn{Net:"", Addr:"hostname:3306", Schema:"dbname", User:"user", Password:"", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} -&common.Dsn{Net:"", Addr:"hostname:3306", Schema:"dbname", User:"user", Password:"pwd:pwd@pwd/pwd", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} +&common.Dsn{Net:"", Addr:"hostname:3306", Schema:"database", User:"user", Password:"", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} +&common.Dsn{Net:"", Addr:"hostname:3306", Schema:"database", User:"user", Password:"pwd:pwd@pwd/pwd", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} &common.Dsn{Net:"", Addr:"127.0.0.1:3306", Schema:"information_schema", User:"user", Password:"password", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} &common.Dsn{Net:"", Addr:"hostname:3307", Schema:"database", User:"", Password:"", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999} &common.Dsn{Net:"", Addr:"hostname:3307", Schema:"database", User:"", Password:"", Charset:"utf8mb4", Disable:false, Timeout:0, ReadTimeout:0, WriteTimeout:0, Version:999}