From 8c6dbedb300afeca24b1e656cd950c7fd702bfb9 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Mon, 28 Jul 2025 20:20:27 +0800 Subject: [PATCH] filter: no need to always convert dbname to lowercase in IsSystemSchema (#62657) close pingcap/tidb#62658 --- pkg/planner/core/plan_cacheable_checker.go | 2 +- pkg/util/filter/BUILD.bazel | 6 +++++- pkg/util/filter/schema.go | 5 ++++- pkg/util/filter/schema_test.go | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pkg/planner/core/plan_cacheable_checker.go b/pkg/planner/core/plan_cacheable_checker.go index 9f8de75978..fcf8188e92 100644 --- a/pkg/planner/core/plan_cacheable_checker.go +++ b/pkg/planner/core/plan_cacheable_checker.go @@ -495,7 +495,7 @@ func (checker *nonPreparedPlanCacheableChecker) Enter(in ast.Node) (out ast.Node } return in, !checker.cacheable case *ast.TableName: - if filter.IsSystemSchema(node.Schema.O) { + if filter.IsSystemSchema(node.Schema.L) { checker.cacheable = false checker.reason = "access tables in system schema" return in, !checker.cacheable diff --git a/pkg/util/filter/BUILD.bazel b/pkg/util/filter/BUILD.bazel index bb65332ea4..dca1528bf2 100644 --- a/pkg/util/filter/BUILD.bazel +++ b/pkg/util/filter/BUILD.bazel @@ -10,6 +10,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/meta/metadef", + "//pkg/util/intest", "//pkg/util/table-filter", "//pkg/util/table-rule-selector", "@com_github_pingcap_errors//:errors", @@ -25,5 +26,8 @@ go_test( ], embed = [":filter"], flaky = True, - deps = ["@com_github_stretchr_testify//require"], + deps = [ + "//pkg/parser/ast", + "@com_github_stretchr_testify//require", + ], ) diff --git a/pkg/util/filter/schema.go b/pkg/util/filter/schema.go index 04106b6d3c..0503af2972 100644 --- a/pkg/util/filter/schema.go +++ b/pkg/util/filter/schema.go @@ -18,6 +18,7 @@ import ( "strings" "github.com/pingcap/tidb/pkg/meta/metadef" + "github.com/pingcap/tidb/pkg/util/intest" ) var ( @@ -30,7 +31,9 @@ var ( // IsSystemSchema checks whether schema is system schema or not. // case insensitive func IsSystemSchema(schema string) bool { - schema = strings.ToLower(schema) + intest.AssertFunc(func() bool { + return schema == strings.ToLower(schema) + }) return schema == DMHeartbeatSchema || schema == InspectionSchemaName || metadef.IsMemOrSysDB(schema) } diff --git a/pkg/util/filter/schema_test.go b/pkg/util/filter/schema_test.go index 2ee873f358..d9c44ccf51 100644 --- a/pkg/util/filter/schema_test.go +++ b/pkg/util/filter/schema_test.go @@ -17,6 +17,7 @@ package filter import ( "testing" + "github.com/pingcap/tidb/pkg/parser/ast" "github.com/stretchr/testify/require" ) @@ -39,6 +40,7 @@ func TestIsSystemSchema(t *testing.T) { } for _, tt := range cases { - require.Equalf(t, tt.expected, IsSystemSchema(tt.name), "schema name = %s", tt.name) + name := ast.NewCIStr(tt.name) + require.Equalf(t, tt.expected, IsSystemSchema(name.L), "schema name = %s", tt.name) } }