From 536e3b216abcbc14feadd3a7730793e7e369cff5 Mon Sep 17 00:00:00 2001 From: robotism Date: Thu, 19 Dec 2024 15:54:14 +0800 Subject: [PATCH] fix(database/gdb): regular expression pattern for link configuration to be compitable with tidbcloud --- database/gdb/gdb.go | 2 +- database/gdb/gdb_z_mysql_internal_test.go | 34 +++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/database/gdb/gdb.go b/database/gdb/gdb.go index de3cdf3d369..558ca92c957 100644 --- a/database/gdb/gdb.go +++ b/database/gdb/gdb.go @@ -708,7 +708,7 @@ const ( ctxKeyCatchSQL gctx.StrKey = `CtxKeyCatchSQL` ctxKeyInternalProducedSQL gctx.StrKey = `CtxKeyInternalProducedSQL` - linkPattern = `(\w+):([\w\-\$]*):(.*?)@(\w+?)\((.+?)\)/{0,1}([^\?]*)\?{0,1}(.*)` + linkPattern = `^(\w+):(.*?):(.*?)@(\w+?)\((.+?)\)/{0,1}([^\?]*)\?{0,1}(.*?)$` linkPatternDescription = `type:username:password@protocol(host:port)/dbname?param1=value1&...¶mN=valueN` ) diff --git a/database/gdb/gdb_z_mysql_internal_test.go b/database/gdb/gdb_z_mysql_internal_test.go index ec70000b907..8539c2c9481 100644 --- a/database/gdb/gdb_z_mysql_internal_test.go +++ b/database/gdb/gdb_z_mysql_internal_test.go @@ -295,6 +295,40 @@ func Test_parseConfigNodeLink_WithType(t *testing.T) { t.Assert(newNode.Charset, `utf8`) t.Assert(newNode.Protocol, `unix`) }) + // https://github.com/gogf/gf/issues/4059 + gtest.C(t, func(t *gtest.T) { + node := &ConfigNode{ + Link: "tidb:2hcmRccccxxx9Fizz.root:wP3xxxxPIDc@tcp(xxxx.tidbcloud.com:4000)/db_name?tls=true", + } + newNode, err := parseConfigNodeLink(node) + t.AssertNil(err) + t.Assert(newNode.Type, `tidb`) + t.Assert(newNode.User, `2hcmRccccxxx9Fizz.root`) + t.Assert(newNode.Pass, `wP3xxxxPIDc`) + t.Assert(newNode.Host, `xxxx.tidbcloud.com`) + t.Assert(newNode.Port, `4000`) + t.Assert(newNode.Name, `db_name`) + t.Assert(newNode.Extra, `tls=true`) + t.Assert(newNode.Charset, `utf8`) + t.Assert(newNode.Protocol, `tcp`) + }) + gtest.C(t, func(t *gtest.T) { + node := &ConfigNode{ + Type: "tidb", + Link: "2hcmRccccxxx9Fizz.root:wP3xxxxPIDc@tcp(xxxx.tidbcloud.com:4000)/db_name?tls=true", + } + newNode, err := parseConfigNodeLink(node) + t.AssertNil(err) + t.Assert(newNode.Type, `tidb`) + t.Assert(newNode.User, `2hcmRccccxxx9Fizz.root`) + t.Assert(newNode.Pass, `wP3xxxxPIDc`) + t.Assert(newNode.Host, `xxxx.tidbcloud.com`) + t.Assert(newNode.Port, `4000`) + t.Assert(newNode.Name, `db_name`) + t.Assert(newNode.Extra, `tls=true`) + t.Assert(newNode.Charset, `utf8`) + t.Assert(newNode.Protocol, `tcp`) + }) } func Test_Func_doQuoteWord(t *testing.T) {