Skip to content

Commit

Permalink
cherry pick #23989 to release-5.0
Browse files Browse the repository at this point in the history
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>
  • Loading branch information
wshwsh12 authored and ti-srebot committed Apr 14, 2021
1 parent f9a6c56 commit 0df73e2
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
6 changes: 3 additions & 3 deletions expression/constant_propagation.go
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,9 @@ func (s *propOuterJoinConstSolver) deriveConds(outerCol, innerCol *Column, schem
// 'expression(..., outerCol, ...)' does not reference columns outside children schemas of join node.
// Derived new expressions must be appended into join condition, not filter condition.
func (s *propOuterJoinConstSolver) propagateColumnEQ() {
if s.nullSensitive {
return
}
visited := make([]bool, 2*len(s.joinConds)+len(s.filterConds))
s.unionSet = disjointset.NewIntSet(len(s.columns))
var outerCol, innerCol *Column
Expand All @@ -552,9 +555,6 @@ func (s *propOuterJoinConstSolver) propagateColumnEQ() {
// `select *, t1.a in (select t2.b from t t2) from t t1`
// rows with t2.b is null would impact whether LeftOuterSemiJoin should output 0 or null if there
// is no row satisfying t2.b = t1.a
if s.nullSensitive {
continue
}
childCol := s.innerSchema.RetrieveColumn(innerCol)
if !mysql.HasNotNullFlag(childCol.RetType.Flag) {
notNullExpr := BuildNotNullExpr(s.ctx, childCol)
Expand Down
33 changes: 33 additions & 0 deletions expression/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9070,3 +9070,36 @@ func (s *testIntegrationSuite) TestVitessHashMatchesVitessShards(c *C) {
tk.MustQuery("select customer_id, id, hex(expected_shard), hex(computed_shard) from t where expected_shard <> computed_shard").
Check(testkit.Rows())
}
<<<<<<< HEAD
=======

func (s *testIntegrationSuite) TestIssue23925(c *C) {
defer s.cleanEnv(c)
tk := testkit.NewTestKit(c, s.store)

tk.MustExec("use test;")
tk.MustExec("drop table if exists t;")
tk.MustExec("create table t(a int primary key, b set('Alice','Bob') DEFAULT NULL);")
tk.MustExec("insert into t value(1,'Bob');")
tk.MustQuery("select max(b) + 0 from t group by a;").Check(testkit.Rows("2"))

tk.MustExec("drop table if exists t;")
tk.MustExec("create table t(a int, b set('Alice','Bob') DEFAULT NULL);")
tk.MustExec("insert into t value(1,'Bob');")
tk.MustQuery("select max(b) + 0 from t group by a;").Check(testkit.Rows("2"))
}

func (s *testIntegrationSuite) TestIssue23889(c *C) {
defer s.cleanEnv(c)
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("use test")
tk.MustExec("drop table if exists test_decimal,test_t;")
tk.MustExec("create table test_decimal(col_decimal decimal(10,0));")
tk.MustExec("insert into test_decimal values(null),(8);")
tk.MustExec("create table test_t(a int(11), b decimal(32,0));")
tk.MustExec("insert into test_t values(1,4),(2,4),(5,4),(7,4),(9,4);")

tk.MustQuery("SELECT ( test_decimal . `col_decimal` , test_decimal . `col_decimal` ) IN ( select * from test_t ) as field1 FROM test_decimal;").Check(
testkit.Rows("<nil>", "0"))
}
>>>>>>> 07d2b840d... expression: don't propagateColumnEQ joinCondition when nullSensitive (#23989)

0 comments on commit 0df73e2

Please sign in to comment.