From 05b11acf0bcf3d0d440f6a1e6e97ddfac72f148e Mon Sep 17 00:00:00 2001 From: James Cor Date: Mon, 18 Dec 2023 00:49:15 -0800 Subject: [PATCH] guard ctx.Span again --- enginetest/queries/queries.go | 8 ++++++++ sql/session.go | 4 ++++ sql/types/decimal.go | 6 ++++++ sql/types/decimal_test.go | 2 ++ 4 files changed, 20 insertions(+) diff --git a/enginetest/queries/queries.go b/enginetest/queries/queries.go index 868f1f6e35..8ec8c0de9a 100644 --- a/enginetest/queries/queries.go +++ b/enginetest/queries/queries.go @@ -8647,6 +8647,14 @@ from typestable`, Query: "select * from mytable where (i in (null, 0.8, 1.5, 2.999))", Expected: []sql.Row{}, }, + { + Query: "select * from mytable where (i BETWEEN (CASE 1 WHEN 2 THEN 1.0 ELSE (1||2) END) AND i)", + Expected: []sql.Row{ + {1, "first row"}, + {2, "second row"}, + {3, "third row"}, + }, + }, } var KeylessQueries = []QueryTest{ diff --git a/sql/session.go b/sql/session.go index 773dab8d82..a0eaa44fac 100644 --- a/sql/session.go +++ b/sql/session.go @@ -373,6 +373,10 @@ func (c *Context) Span( opName string, opts ...trace.SpanStartOption, ) (trace.Span, *Context) { + if c == nil { + return noopSpan, nil + } + if c.tracer == NoopTracer { return noopSpan, c } diff --git a/sql/types/decimal.go b/sql/types/decimal.go index f254b6e5b9..7e2c09115f 100644 --- a/sql/types/decimal.go +++ b/sql/types/decimal.go @@ -168,6 +168,12 @@ func (t DecimalType_) ConvertToNullDecimal(v interface{}) (decimal.NullDecimal, var res decimal.Decimal switch value := v.(type) { + case bool: + if value { + return t.ConvertToNullDecimal(decimal.NewFromInt(1)) + } else { + return t.ConvertToNullDecimal(decimal.NewFromInt(0)) + } case int: return t.ConvertToNullDecimal(int64(value)) case uint: diff --git a/sql/types/decimal_test.go b/sql/types/decimal_test.go index 473361be67..a9d57ff4cd 100644 --- a/sql/types/decimal_test.go +++ b/sql/types/decimal_test.go @@ -284,6 +284,8 @@ func TestDecimalConvert(t *testing.T) { expectedErr bool }{ {1, 0, nil, nil, false}, + {1, 0, true, "1", false}, + {1, 0, false, "0", false}, {1, 0, byte(0), "0", false}, {1, 0, int8(3), "3", false}, {1, 0, "-3.7e0", "-4", false},