expression: implement shiftLeft function pushdown (#36677)
close pingcap/tidb#36733
This commit is contained in:
committed by
GitHub
parent
5e00a1540f
commit
ac91c75121
@ -1147,6 +1147,11 @@ func TestExprPushDownToFlash(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
exprs = append(exprs, function)
|
||||
|
||||
// ScalarFuncSig_LeftShift
|
||||
function, err = NewFunction(mock.NewContext(), ast.LeftShift, types.NewFieldType(mysql.TypeLonglong), intColumn, intColumn)
|
||||
require.NoError(t, err)
|
||||
exprs = append(exprs, function)
|
||||
|
||||
// ReverseUTF8 test
|
||||
function, err = NewFunction(mock.NewContext(), ast.Reverse, types.NewFieldType(mysql.TypeString), stringColumn)
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -1043,7 +1043,7 @@ func scalarExprSupportedByFlash(function *ScalarFunction) bool {
|
||||
return true
|
||||
}
|
||||
case
|
||||
ast.LogicOr, ast.LogicAnd, ast.UnaryNot, ast.BitNeg, ast.Xor, ast.And, ast.Or, ast.RightShift,
|
||||
ast.LogicOr, ast.LogicAnd, ast.UnaryNot, ast.BitNeg, ast.Xor, ast.And, ast.Or, ast.RightShift, ast.LeftShift,
|
||||
ast.GE, ast.LE, ast.EQ, ast.NE, ast.LT, ast.GT, ast.In, ast.IsNull, ast.Like, ast.Strcmp,
|
||||
ast.Plus, ast.Minus, ast.Div, ast.Mul, ast.Abs, ast.Mod,
|
||||
ast.If, ast.Ifnull, ast.Case,
|
||||
|
||||
@ -6978,6 +6978,39 @@ func TestAggWithJsonPushDownToTiFlash(t *testing.T) {
|
||||
tk.MustQuery("explain select /*+ hash_agg() */ group_concat(a) from t;").CheckAt([]int{0, 2, 4}, rows)
|
||||
}
|
||||
|
||||
func TestLeftShiftPushDownToTiFlash(t *testing.T) {
|
||||
store, dom := testkit.CreateMockStoreAndDomain(t)
|
||||
tk := testkit.NewTestKit(t, store)
|
||||
tk.MustExec("use test")
|
||||
tk.MustExec("drop table if exists t")
|
||||
tk.MustExec("create table t(a int, b int)")
|
||||
tk.MustExec("insert into t values(2147483647, 32)")
|
||||
tk.MustExec("insert into t values(12, 2)")
|
||||
tk.MustExec("set @@tidb_allow_mpp=1; set @@tidb_enforce_mpp=1")
|
||||
tk.MustExec("set @@tidb_isolation_read_engines = 'tiflash'")
|
||||
|
||||
// Create virtual tiflash replica info.
|
||||
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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rows := [][]interface{}{
|
||||
{"TableReader_9", "root", "data:ExchangeSender_8"},
|
||||
{"└─ExchangeSender_8", "mpp[tiflash]", "ExchangeType: PassThrough"},
|
||||
{" └─Projection_4", "mpp[tiflash]", "leftshift(test.t.a, test.t.b)->Column#4"},
|
||||
{" └─TableFullScan_7", "mpp[tiflash]", "keep order:false, stats:pseudo"},
|
||||
}
|
||||
tk.MustQuery("explain select a << b from t;").CheckAt([]int{0, 2, 4}, rows)
|
||||
}
|
||||
|
||||
func TestIssue36609(t *testing.T) {
|
||||
store := testkit.CreateMockStore(t)
|
||||
tk := testkit.NewTestKit(t, store)
|
||||
|
||||
Reference in New Issue
Block a user