Skip to content

Commit cded849

Browse files
authored
expression: split isTrue and isFalse expression sig (#16542) (#16630)
1 parent ae54dd3 commit cded849

File tree

5 files changed

+56
-9
lines changed

5 files changed

+56
-9
lines changed

executor/executor_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -5385,6 +5385,17 @@ func (s *testSuite1) TestIssue15718(c *C) {
53855385
tk.MustExec("create table tt(a decimal(10, 0), b varchar(1), c time);")
53865386
tk.MustExec("insert into tt values(0, '2', null), (7, null, '1122'), (NULL, 'w', null), (NULL, '2', '3344'), (NULL, NULL, '0'), (7, 'f', '33');")
53875387
tk.MustQuery("select a and b as d, a or c as e from tt;").Check(testkit.Rows("0 <nil>", "<nil> 1", "0 <nil>", "<nil> 1", "<nil> <nil>", "0 1"))
5388+
5389+
tk.MustExec("drop table if exists tt;")
5390+
tk.MustExec("create table tt(a decimal(10, 0), b varchar(1), c time);")
5391+
tk.MustExec("insert into tt values(0, '2', '123'), (7, null, '1122'), (null, 'w', null);")
5392+
tk.MustQuery("select a and b as d, a, b from tt order by d limit 1;").Check(testkit.Rows("<nil> 7 <nil>"))
5393+
tk.MustQuery("select b or c as d, b, c from tt order by d limit 1;").Check(testkit.Rows("<nil> w <nil>"))
5394+
5395+
tk.MustExec("drop table if exists t0;")
5396+
tk.MustExec("CREATE TABLE t0(c0 FLOAT);")
5397+
tk.MustExec("INSERT INTO t0(c0) VALUES (NULL);")
5398+
tk.MustQuery("SELECT * FROM t0 WHERE NOT(0 OR t0.c0);").Check(testkit.Rows())
53885399
}
53895400

53905401
func (s *testSuite1) TestIssue15767(c *C) {

expression/builtin_op.go

+30-6
Original file line numberDiff line numberDiff line change
@@ -427,27 +427,51 @@ func (c *isTrueOrFalseFunctionClass) getFunction(ctx sessionctx.Context, args []
427427
switch argTp {
428428
case types.ETReal:
429429
sig = &builtinRealIsTrueSig{bf, c.keepNull}
430-
sig.setPbCode(tipb.ScalarFuncSig_RealIsTrue)
430+
if c.keepNull {
431+
sig.setPbCode(tipb.ScalarFuncSig_RealIsTrueWithNull)
432+
} else {
433+
sig.setPbCode(tipb.ScalarFuncSig_RealIsTrue)
434+
}
431435
case types.ETDecimal:
432436
sig = &builtinDecimalIsTrueSig{bf, c.keepNull}
433-
sig.setPbCode(tipb.ScalarFuncSig_DecimalIsTrue)
437+
if c.keepNull {
438+
sig.setPbCode(tipb.ScalarFuncSig_DecimalIsTrueWithNull)
439+
} else {
440+
sig.setPbCode(tipb.ScalarFuncSig_DecimalIsTrue)
441+
}
434442
case types.ETInt:
435443
sig = &builtinIntIsTrueSig{bf, c.keepNull}
436-
sig.setPbCode(tipb.ScalarFuncSig_IntIsTrue)
444+
if c.keepNull {
445+
sig.setPbCode(tipb.ScalarFuncSig_IntIsTrueWithNull)
446+
} else {
447+
sig.setPbCode(tipb.ScalarFuncSig_IntIsTrue)
448+
}
437449
default:
438450
return nil, errors.Errorf("unexpected types.EvalType %v", argTp)
439451
}
440452
case opcode.IsFalsity:
441453
switch argTp {
442454
case types.ETReal:
443455
sig = &builtinRealIsFalseSig{bf, c.keepNull}
444-
sig.setPbCode(tipb.ScalarFuncSig_RealIsFalse)
456+
if c.keepNull {
457+
sig.setPbCode(tipb.ScalarFuncSig_RealIsFalseWithNull)
458+
} else {
459+
sig.setPbCode(tipb.ScalarFuncSig_RealIsFalse)
460+
}
445461
case types.ETDecimal:
446462
sig = &builtinDecimalIsFalseSig{bf, c.keepNull}
447-
sig.setPbCode(tipb.ScalarFuncSig_DecimalIsFalse)
463+
if c.keepNull {
464+
sig.setPbCode(tipb.ScalarFuncSig_DecimalIsFalseWithNull)
465+
} else {
466+
sig.setPbCode(tipb.ScalarFuncSig_DecimalIsFalse)
467+
}
448468
case types.ETInt:
449469
sig = &builtinIntIsFalseSig{bf, c.keepNull}
450-
sig.setPbCode(tipb.ScalarFuncSig_IntIsFalse)
470+
if c.keepNull {
471+
sig.setPbCode(tipb.ScalarFuncSig_IntIsFalseWithNull)
472+
} else {
473+
sig.setPbCode(tipb.ScalarFuncSig_IntIsFalse)
474+
}
451475
default:
452476
return nil, errors.Errorf("unexpected types.EvalType %v", argTp)
453477
}

expression/distsql_builtin.go

+12
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,18 @@ func getSignatureByPB(ctx sessionctx.Context, sigCode tipb.ScalarFuncSig, tp *ti
456456
f = &builtinRealIsFalseSig{base, false}
457457
case tipb.ScalarFuncSig_DecimalIsFalse:
458458
f = &builtinDecimalIsFalseSig{base, false}
459+
case tipb.ScalarFuncSig_IntIsTrueWithNull:
460+
f = &builtinIntIsTrueSig{base, true}
461+
case tipb.ScalarFuncSig_RealIsTrueWithNull:
462+
f = &builtinRealIsTrueSig{base, true}
463+
case tipb.ScalarFuncSig_DecimalIsTrueWithNull:
464+
f = &builtinDecimalIsTrueSig{base, true}
465+
case tipb.ScalarFuncSig_IntIsFalseWithNull:
466+
f = &builtinIntIsFalseSig{base, true}
467+
case tipb.ScalarFuncSig_RealIsFalseWithNull:
468+
f = &builtinRealIsFalseSig{base, true}
469+
case tipb.ScalarFuncSig_DecimalIsFalseWithNull:
470+
f = &builtinDecimalIsFalseSig{base, true}
459471
case tipb.ScalarFuncSig_LeftShift:
460472
f = &builtinLeftShiftSig{base}
461473
case tipb.ScalarFuncSig_RightShift:

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ require (
4141
github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2
4242
github.com/pingcap/sysutil v0.0.0-20200408114249-ed3bd6f7fdb1
4343
github.com/pingcap/tidb-tools v4.0.0-beta.1.0.20200306084441-875bd09aa3d5+incompatible
44-
github.com/pingcap/tipb v0.0.0-20200212061130-c4d518eb1d60
44+
github.com/pingcap/tipb v0.0.0-20200417094153-7316d94df1ee
4545
github.com/prometheus/client_golang v1.0.0
4646
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4
4747
github.com/prometheus/common v0.4.1

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,8 @@ github.com/pingcap/sysutil v0.0.0-20200408114249-ed3bd6f7fdb1/go.mod h1:EB/852NM
292292
github.com/pingcap/tidb-tools v4.0.0-beta.1.0.20200306084441-875bd09aa3d5+incompatible h1:84F7MFMfdAYObrznvRslmVu43aoihrlL+7mMyMlOi0o=
293293
github.com/pingcap/tidb-tools v4.0.0-beta.1.0.20200306084441-875bd09aa3d5+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM=
294294
github.com/pingcap/tipb v0.0.0-20190428032612-535e1abaa330/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI=
295-
github.com/pingcap/tipb v0.0.0-20200212061130-c4d518eb1d60 h1:aJPXrT1u4VfUSGFA2oQVwl4pOXzqe+YI6wed01cjDH4=
296-
github.com/pingcap/tipb v0.0.0-20200212061130-c4d518eb1d60/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI=
295+
github.com/pingcap/tipb v0.0.0-20200417094153-7316d94df1ee h1:XJQ6/LGzOSc/jo33AD8t7jtc4GohxcyODsYnb+kZXJM=
296+
github.com/pingcap/tipb v0.0.0-20200417094153-7316d94df1ee/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI=
297297
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
298298
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
299299
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=

0 commit comments

Comments
 (0)