diff --git a/pkg/executor/test/tiflashtest/BUILD.bazel b/pkg/executor/test/tiflashtest/BUILD.bazel index b60b56f408a9e..6f1da72d25ce1 100644 --- a/pkg/executor/test/tiflashtest/BUILD.bazel +++ b/pkg/executor/test/tiflashtest/BUILD.bazel @@ -9,7 +9,7 @@ go_test( ], flaky = True, race = "on", - shard_count = 42, + shard_count = 43, deps = [ "//pkg/config", "//pkg/domain", diff --git a/pkg/executor/test/tiflashtest/tiflash_test.go b/pkg/executor/test/tiflashtest/tiflash_test.go index a58847cfebbed..da0bc8df5fcf6 100644 --- a/pkg/executor/test/tiflashtest/tiflash_test.go +++ b/pkg/executor/test/tiflashtest/tiflash_test.go @@ -1988,3 +1988,47 @@ func TestIssue50358(t *testing.T) { tk.MustQuery("select 8 from t join t1").Check(testkit.Rows("8", "8")) } } + +func TestMppAggShouldAlignFinalMode(t *testing.T) { + store := testkit.CreateMockStore(t, withMockTiFlash(1)) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (" + + " d date," + + " v int," + + " primary key(d, v)" + + ") partition by range columns (d) (" + + " partition p1 values less than ('2023-07-02')," + + " partition p2 values less than ('2023-07-03')" + + ");") + tk.MustExec("alter table t set tiflash replica 1") + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) + tk.MustExec(`set tidb_partition_prune_mode='static';`) + err = failpoint.Enable("github.com/pingcap/tidb/pkg/expression/aggregation/show-agg-mode", "return(true)") + require.Nil(t, err) + + tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") + tk.MustQuery("explain format='brief' select 1 from (" + + " select /*+ read_from_storage(tiflash[t]) */ sum(1)" + + " from t where d BETWEEN '2023-07-01' and '2023-07-03' group by d" + + ") total;").Check(testkit.Rows("Projection 400.00 root 1->Column#4", + "└─HashAgg 400.00 root group by:test.t.d, funcs:count(complete,1)->Column#8", + " └─PartitionUnion 400.00 root ", + " ├─Projection 200.00 root test.t.d", + " │ └─HashAgg 200.00 root group by:test.t.d, funcs:firstrow(partial2,test.t.d)->test.t.d, funcs:count(final,Column#12)->Column#9", + " │ └─TableReader 200.00 root MppVersion: 2, data:ExchangeSender", + " │ └─ExchangeSender 200.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─HashAgg 200.00 mpp[tiflash] group by:test.t.d, funcs:count(partial1,1)->Column#12", + " │ └─TableRangeScan 250.00 mpp[tiflash] table:t, partition:p1 range:[2023-07-01,2023-07-03], keep order:false, stats:pseudo", + " └─Projection 200.00 root test.t.d", + " └─HashAgg 200.00 root group by:test.t.d, funcs:firstrow(partial2,test.t.d)->test.t.d, funcs:count(final,Column#14)->Column#10", + " └─TableReader 200.00 root MppVersion: 2, data:ExchangeSender", + " └─ExchangeSender 200.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 200.00 mpp[tiflash] group by:test.t.d, funcs:count(partial1,1)->Column#14", + " └─TableRangeScan 250.00 mpp[tiflash] table:t, partition:p2 range:[2023-07-01,2023-07-03], keep order:false, stats:pseudo")) + + err = failpoint.Disable("github.com/pingcap/tidb/pkg/expression/aggregation/show-agg-mode") + require.Nil(t, err) +} diff --git a/pkg/planner/core/enforce_mpp_test.go b/pkg/planner/core/enforce_mpp_test.go index 6b52dc6059abb..f161f7b7bd7b0 100644 --- a/pkg/planner/core/enforce_mpp_test.go +++ b/pkg/planner/core/enforce_mpp_test.go @@ -19,65 +19,12 @@ import ( "strconv" "testing" - "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" "github.com/stretchr/testify/require" ) -func TestMppAggShouldAlignFinalMode(t *testing.T) { - store := testkit.CreateMockStore(t) - tk := testkit.NewTestKit(t, store) - tk.MustExec("use test") - tk.MustExec("create table t (" + - " d date," + - " v int," + - " primary key(d, v)" + - ") partition by range columns (d) (" + - " partition p1 values less than ('2023-07-02')," + - " partition p2 values less than ('2023-07-03')" + - ");") - // Create virtual tiflash replica info. - dom := domain.GetDomain(tk.Session()) - is := dom.InfoSchema() - db, exists := is.SchemaByName(model.NewCIStr("test")) - require.True(t, exists) - for _, tblInfo := range db.Tables { - if tblInfo.Name.L == "t" { - tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ - Count: 1, - Available: true, - } - } - } - tk.MustExec(`set tidb_partition_prune_mode='static';`) - err := failpoint.Enable("github.com/pingcap/tidb/pkg/expression/aggregation/show-agg-mode", "return(true)") - require.Nil(t, err) - - tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") - tk.MustQuery("explain format='brief' select 1 from (" + - " select /*+ read_from_storage(tiflash[t]) */ sum(1)" + - " from t where d BETWEEN '2023-07-01' and '2023-07-03' group by d" + - ") total;").Check(testkit.Rows("Projection 400.00 root 1->Column#4", - "└─HashAgg 400.00 root group by:test.t.d, funcs:count(complete,1)->Column#8", - " └─PartitionUnion 400.00 root ", - " ├─Projection 200.00 root test.t.d", - " │ └─HashAgg 200.00 root group by:test.t.d, funcs:firstrow(partial2,test.t.d)->test.t.d, funcs:count(final,Column#12)->Column#9", - " │ └─TableReader 200.00 root MppVersion: 2, data:ExchangeSender", - " │ └─ExchangeSender 200.00 mpp[tiflash] ExchangeType: PassThrough", - " │ └─HashAgg 200.00 mpp[tiflash] group by:test.t.d, funcs:count(partial1,1)->Column#12", - " │ └─TableRangeScan 250.00 mpp[tiflash] table:t, partition:p1 range:[2023-07-01,2023-07-03], keep order:false, stats:pseudo", - " └─Projection 200.00 root test.t.d", - " └─HashAgg 200.00 root group by:test.t.d, funcs:firstrow(partial2,test.t.d)->test.t.d, funcs:count(final,Column#14)->Column#10", - " └─TableReader 200.00 root MppVersion: 2, data:ExchangeSender", - " └─ExchangeSender 200.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashAgg 200.00 mpp[tiflash] group by:test.t.d, funcs:count(partial1,1)->Column#14", - " └─TableRangeScan 250.00 mpp[tiflash] table:t, partition:p2 range:[2023-07-01,2023-07-03], keep order:false, stats:pseudo")) - - err = failpoint.Disable("github.com/pingcap/tidb/pkg/expression/aggregation/show-agg-mode") - require.Nil(t, err) -} func TestRowSizeInMPP(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store)