Skip to content

Commit 9170b3c

Browse files
committed
Unwrap wrapped values in Like expressions.
1 parent e17df0b commit 9170b3c

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

memory/wrapper_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,22 @@ func TestWrapperCompare(t *testing.T) {
172172
filteredRows := getAllRows(t, ctx, filtered)
173173
require.Len(t, filteredRows, 2)
174174
require.ElementsMatch(t, filteredRows, []sql.Row{{int64(1), "BIG"}, {int64(2), upperUnknownLength}})
175+
176+
{
177+
// Filter using LIKE
178+
likeFilter := []sql.Expression{
179+
expression.NewLike(
180+
expression.NewGetFieldWithTable(1, 0, types.Text, "db", "test", "col1", false),
181+
expression.NewLiteral("l%", types.Text),
182+
nil),
183+
}
184+
185+
filtered := table.WithFilters(ctx, likeFilter)
186+
187+
filteredRows := getAllRows(t, ctx, filtered)
188+
require.Len(t, filteredRows, 2)
189+
require.ElementsMatch(t, filteredRows, []sql.Row{{int64(3), lowerUnknownLength}, {int64(4), "little"}})
190+
}
175191
}
176192

177193
// TestWrapperCompare tests that a wrapped value can be used in comparisons without being unwrapped.

sql/expression/like.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ func (l *Like) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
8181
if err != nil || left == nil {
8282
return nil, err
8383
}
84+
left, err = sql.UnwrapAny(ctx, left)
85+
if err != nil {
86+
return nil, err
87+
}
8488
if _, ok := left.(string); !ok {
8589
left, _, err = types.LongText.Convert(left)
8690
if err != nil {
@@ -132,6 +136,10 @@ func (l *Like) evalRight(ctx *sql.Context, row sql.Row) (right *string, escape r
132136
if err != nil || rightVal == nil {
133137
return nil, 0, err
134138
}
139+
rightVal, err = sql.UnwrapAny(ctx, rightVal)
140+
if err != nil {
141+
return nil, 0, err
142+
}
135143
if _, ok := rightVal.(string); !ok {
136144
rightVal, _, err = types.LongText.Convert(rightVal)
137145
if err != nil {

0 commit comments

Comments
 (0)