planner: add test for hash64 and equals for logical show and sort operator. (#57832)

ref pingcap/tidb#51664
This commit is contained in:
Arenatlx
2024-11-29 16:41:41 +08:00
committed by GitHub
parent aac206138a
commit 0e8c23fe82
2 changed files with 89 additions and 1 deletions

View File

@ -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",

View File

@ -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)