diff --git a/database/gdb/gdb.go b/database/gdb/gdb.go index c2c50144a..1c3344149 100644 --- a/database/gdb/gdb.go +++ b/database/gdb/gdb.go @@ -378,7 +378,7 @@ const ( ctxKeyInternalProducedSQL gctx.StrKey = `CtxKeyInternalProducedSQL` // type:[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] - linkPattern = `(\w+):([\w\-]*):(.*?)@(\w+?)\((.+?)\)/{0,1}([^\?]*)\?{0,1}(.*)` + linkPattern = `(\w+):([\w\-\$]*):(.*?)@(\w+?)\((.+?)\)/{0,1}([^\?]*)\?{0,1}(.*)` ) type queryType int diff --git a/database/gdb/gdb_z_mysql_internal_test.go b/database/gdb/gdb_z_mysql_internal_test.go index d29589626..538ab967d 100644 --- a/database/gdb/gdb_z_mysql_internal_test.go +++ b/database/gdb/gdb_z_mysql_internal_test.go @@ -222,6 +222,22 @@ func Test_parseConfigNodeLink_WithType(t *testing.T) { t.Assert(newNode.Charset, defaultCharset) t.Assert(newNode.Protocol, `file`) }) + // #3146 + gtest.C(t, func(t *gtest.T) { + node := &ConfigNode{ + Link: `pgsql:BASIC$xxxx:123456@tcp(xxxx.hologres.aliyuncs.com:80)/xxx`, + } + newNode := parseConfigNodeLink(node) + t.Assert(newNode.Type, `pgsql`) + t.Assert(newNode.User, `BASIC$xxxx`) + t.Assert(newNode.Pass, `123456`) + t.Assert(newNode.Host, `xxxx.hologres.aliyuncs.com`) + t.Assert(newNode.Port, `80`) + t.Assert(newNode.Name, `xxx`) + t.Assert(newNode.Extra, ``) + t.Assert(newNode.Charset, defaultCharset) + t.Assert(newNode.Protocol, `tcp`) + }) } func Test_Func_doQuoteWord(t *testing.T) {