@@ -1712,9 +1712,11 @@ func (c *indexCoster) transformForIndexCosting(ctx *sql.Context, expr sql.Expres
17121712 var ok bool
17131713 switch e := e .(type ) {
17141714 case * expression.InTuple , * expression.HashInTuple :
1715- newExpr , ok = c .transformInTupleForIndexCosting (leftTuple , rightTuple )
1715+ newExpr , ok = c .transformInTupleForIndexCosting (leftTuple , rightTuple , false )
17161716 case * expression.Equals :
1717- newExpr , ok = c .transformInTupleForIndexCosting (leftTuple , expression .NewTuple (rightTuple ))
1717+ newExpr , ok = c .transformInTupleForIndexCosting (leftTuple , expression .NewTuple (rightTuple ), false )
1718+ case * expression.NullSafeEquals :
1719+ newExpr , ok = c .transformInTupleForIndexCosting (leftTuple , expression .NewTuple (rightTuple ), true )
17181720 case * expression.LessThan :
17191721 newExpr , ok = c .transformLessThanTupleForIndexCosting (leftTuple , rightTuple )
17201722 case * expression.LessThanOrEqual :
@@ -1734,7 +1736,7 @@ func (c *indexCoster) transformForIndexCosting(ctx *sql.Context, expr sql.Expres
17341736 return transformedExpr
17351737}
17361738
1737- func (c * indexCoster ) transformInTupleForIndexCosting (leftTuple , rightTuples expression.Tuple ) (sql.Expression , bool ) {
1739+ func (c * indexCoster ) transformInTupleForIndexCosting (leftTuple , rightTuples expression.Tuple , nullSafe bool ) (sql.Expression , bool ) {
17381740 n := len (leftTuple )
17391741 if len (rightTuples ) == 0 && n > 0 {
17401742 return expression .NewLiteral (false , types .Boolean ), true
@@ -1748,7 +1750,11 @@ func (c *indexCoster) transformInTupleForIndexCosting(leftTuple, rightTuples exp
17481750 // Build AND of equals: col1 = v1 AND col2 = v2 AND ...
17491751 andExprs := make ([]sql.Expression , n )
17501752 for j := 0 ; j < n ; j ++ {
1751- andExprs [j ] = expression .NewEquals (leftTuple [j ], rightTuple [j ])
1753+ if nullSafe {
1754+ andExprs [j ] = expression .NewNullSafeEquals (leftTuple [j ], rightTuple [j ])
1755+ } else {
1756+ andExprs [j ] = expression .NewEquals (leftTuple [j ], rightTuple [j ])
1757+ }
17521758 }
17531759 orExprs [i ] = expression .JoinAnd (andExprs ... )
17541760 }
0 commit comments