From 5327b6d161f41a898b976512467b38f1f97678db Mon Sep 17 00:00:00 2001 From: lance6716 Date: Fri, 13 Dec 2024 10:13:21 +0800 Subject: [PATCH] executor: skip execution when build query for VIEW in I_S (#58203) (#58231) close pingcap/tidb#58184 --- executor/infoschema_reader.go | 2 +- executor/infoschema_reader_test.go | 3 +++ planner/core/logical_plan_builder.go | 1 + tools/check/check-bazel-prepare.sh | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/executor/infoschema_reader.go b/executor/infoschema_reader.go index 98424e50fb15a..ef11df6fb6870 100644 --- a/executor/infoschema_reader.go +++ b/executor/infoschema_reader.go @@ -842,7 +842,7 @@ func (e *hugeMemTableRetriever) dataForColumnsInTable(ctx context.Context, sctx // Build plan is not thread safe, there will be concurrency on sessionctx. if err := runWithSystemSession(internalCtx, sctx, func(s sessionctx.Context) error { is := sessiontxn.GetTxnManager(s).GetTxnInfoSchema() - planBuilder, _ := plannercore.NewPlanBuilder().Init(s, is, &hint.BlockHintProcessor{}) + planBuilder, _ := plannercore.NewPlanBuilder(plannercore.PlanBuilderOptNoExecution{}).Init(s, is, &hint.BlockHintProcessor{}) var err error viewLogicalPlan, err = planBuilder.BuildDataSourceFromView(ctx, schema.Name, tbl, nil, nil) return errors.Trace(err) diff --git a/executor/infoschema_reader_test.go b/executor/infoschema_reader_test.go index ed6eed4fb4607..d6be579c46eba 100644 --- a/executor/infoschema_reader_test.go +++ b/executor/infoschema_reader_test.go @@ -855,11 +855,14 @@ func TestShowColumnsWithSubQueryView(t *testing.T) { tk.MustExec("create view temp_view as (select * from `added` where id > (select max(id) from `incremental`));") // Show columns should not send coprocessor request to the storage. require.NoError(t, failpoint.Enable("tikvclient/tikvStoreSendReqResult", `return("timeout")`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/planner/core/BuildDataSourceFailed", "panic")) tk.MustQuery("show columns from temp_view;").Check(testkit.Rows( "id int(11) YES ", "name text YES ", "some_date timestamp YES ")) + tk.MustQuery("select COLUMN_NAME from information_schema.columns where table_name = 'temp_view';").Check(testkit.Rows("id", "name", "some_date")) require.NoError(t, failpoint.Disable("tikvclient/tikvStoreSendReqResult")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/planner/core/BuildDataSourceFailed")) } func TestNullColumns(t *testing.T) { diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 3c330c341d728..5c62614faa902 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -5324,6 +5324,7 @@ func (b *PlanBuilder) BuildDataSourceFromView(ctx context.Context, dbName model. terror.ErrorNotEqual(err, ErrNotSupportedYet) { err = ErrViewInvalid.GenWithStackByArgs(dbName.O, tableInfo.Name.O) } + failpoint.Inject("BuildDataSourceFailed", func() {}) return nil, err } pm := privilege.GetPrivilegeManager(b.ctx) diff --git a/tools/check/check-bazel-prepare.sh b/tools/check/check-bazel-prepare.sh index 2a8d97ebdc767..3a0d285f3a0f7 100755 --- a/tools/check/check-bazel-prepare.sh +++ b/tools/check/check-bazel-prepare.sh @@ -19,6 +19,7 @@ # -o pipefail: sets the exit code of a pipeline to that of the rightmost command to exit with a non-zero status, # or to zero if all commands of the pipeline exit successfully. set -euo pipefail +rm -rf /home/jenkins/.cache/bazel/_bazel_jenkins/install/a09dbb90c658248f08f9aa0eba11997d before_checksum=`find . -type f \( -name '*.bazel' -o -name '*.bzl' \) -exec md5sum {} \;| sort -k 2` make bazel_prepare