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)