From 0e8c23fe82f6289ff37edffdcb9b54b7ecfd90b0 Mon Sep 17 00:00:00 2001 From: Arenatlx <314806019@qq.com> Date: Fri, 29 Nov 2024 16:41:41 +0800 Subject: [PATCH] planner: add test for hash64 and equals for logical show and sort operator. (#57832) ref pingcap/tidb#51664 --- .../logicalop/logicalop_test/BUILD.bazel | 2 +- .../logicalop_test/hash64_equals_test.go | 88 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/pkg/planner/core/operator/logicalop/logicalop_test/BUILD.bazel b/pkg/planner/core/operator/logicalop/logicalop_test/BUILD.bazel index d2ffdc9066..cddf021915 100644 --- a/pkg/planner/core/operator/logicalop/logicalop_test/BUILD.bazel +++ b/pkg/planner/core/operator/logicalop/logicalop_test/BUILD.bazel @@ -8,7 +8,7 @@ go_test( "logical_mem_table_predicate_extractor_test.go", ], flaky = True, - shard_count = 28, + shard_count = 31, deps = [ "//pkg/domain", "//pkg/expression", diff --git a/pkg/planner/core/operator/logicalop/logicalop_test/hash64_equals_test.go b/pkg/planner/core/operator/logicalop/logicalop_test/hash64_equals_test.go index dfd4e81244..a3fdc90452 100644 --- a/pkg/planner/core/operator/logicalop/logicalop_test/hash64_equals_test.go +++ b/pkg/planner/core/operator/logicalop/logicalop_test/hash64_equals_test.go @@ -33,6 +33,94 @@ import ( "github.com/stretchr/testify/require" ) +func TestLogicalSortHash64Equals(t *testing.T) { + col1 := &expression.Column{ + ID: 1, + Index: 0, + RetType: types.NewFieldType(mysql.TypeLonglong), + } + ctx := mock.NewContext() + s1 := logicalop.LogicalSort{}.Init(ctx, 1) + s2 := logicalop.LogicalSort{}.Init(ctx, 1) + hasher1 := base.NewHashEqualer() + hasher2 := base.NewHashEqualer() + s1.Hash64(hasher1) + s2.Hash64(hasher2) + require.Equal(t, hasher1.Sum64(), hasher2.Sum64()) + require.True(t, s1.Equals(s2)) + + s2.ByItems = []*util.ByItems{} + hasher2.Reset() + s2.Hash64(hasher2) + require.NotEqual(t, hasher1.Sum64(), hasher2.Sum64()) + require.False(t, s1.Equals(s2)) + + s2.ByItems = []*util.ByItems{{Expr: col1, Desc: true}} + hasher2.Reset() + s2.Hash64(hasher2) + require.NotEqual(t, hasher1.Sum64(), hasher2.Sum64()) + require.False(t, s1.Equals(s2)) + + s1.ByItems = []*util.ByItems{{Expr: col1, Desc: false}} + hasher1.Reset() + s1.Hash64(hasher1) + require.NotEqual(t, hasher1.Sum64(), hasher2.Sum64()) + require.False(t, s1.Equals(s2)) + + s1.ByItems = []*util.ByItems{{Expr: col1, Desc: true}} + hasher1.Reset() + s1.Hash64(hasher1) + require.Equal(t, hasher1.Sum64(), hasher2.Sum64()) + require.True(t, s1.Equals(s2)) +} + +func TestLogicalShowDDLJobs(t *testing.T) { + col1 := &expression.Column{ + ID: 1, + Index: 0, + RetType: types.NewFieldType(mysql.TypeLonglong), + } + ctx := mock.NewContext() + s1 := logicalop.LogicalShowDDLJobs{}.Init(ctx) + s2 := logicalop.LogicalShowDDLJobs{}.Init(ctx) + hasher1 := base.NewHashEqualer() + hasher2 := base.NewHashEqualer() + s1.Hash64(hasher1) + s2.Hash64(hasher2) + require.Equal(t, hasher1.Sum64(), hasher2.Sum64()) + require.True(t, s1.Equals(s2)) + + s2.LogicalSchemaProducer.SetSchema(expression.NewSchema(col1)) + hasher2.Reset() + s2.Hash64(hasher2) + require.NotEqual(t, hasher1.Sum64(), hasher2.Sum64()) + require.False(t, s1.Equals(s2)) +} + +func TestLogicalShowHash64Equals(t *testing.T) { + col1 := &expression.Column{ + ID: 1, + Index: 0, + RetType: types.NewFieldType(mysql.TypeLonglong), + } + + ctx := mock.NewContext() + s1 := logicalop.LogicalShow{}.Init(ctx) + s2 := logicalop.LogicalShow{}.Init(ctx) + hasher1 := base.NewHashEqualer() + hasher2 := base.NewHashEqualer() + s1.Hash64(hasher1) + s2.Hash64(hasher2) + require.Equal(t, hasher1.Sum64(), hasher2.Sum64()) + require.True(t, s1.Equals(s2)) + + s2.LogicalSchemaProducer.SetSchema(expression.NewSchema(col1)) + hasher2.Reset() + s2.Hash64(hasher2) + require.NotEqual(t, hasher1.Sum64(), hasher2.Sum64()) + require.False(t, s1.Equals(s2)) +} + func TestLogicalSequence(t *testing.T) { ctx := mock.NewContext() m1 := logicalop.LogicalSequence{}.Init(ctx, 1)