From 045799811a70f9812e00a457a5a228567946932e Mon Sep 17 00:00:00 2001 From: Nick Tobey Date: Thu, 10 Apr 2025 11:17:26 -0700 Subject: [PATCH 1/2] Add test for find_in_set with text column. --- enginetest/queries/script_queries.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/enginetest/queries/script_queries.go b/enginetest/queries/script_queries.go index e8debaa83b..c550578584 100644 --- a/enginetest/queries/script_queries.go +++ b/enginetest/queries/script_queries.go @@ -4694,6 +4694,16 @@ CREATE TABLE tab3 ( "insert into collate_tbl values (7, 'a,c');", "insert into collate_tbl values (8, 'a,b,c');", + "create table text_tbl (i int primary key, s text);", + "insert into text_tbl values (0, '');", + "insert into text_tbl values (1, 'a');", + "insert into text_tbl values (2, 'b');", + "insert into text_tbl values (3, 'c');", + "insert into text_tbl values (4, 'a,b');", + "insert into text_tbl values (6, 'b,c');", + "insert into text_tbl values (7, 'a,c');", + "insert into text_tbl values (8, 'a,b,c');", + "create table enum_tbl (i int primary key, s enum('a','b','c'));", "insert into enum_tbl values (0, 'a'), (1, 'b'), (2, 'c');", "select i, s, find_in_set('a', s) from enum_tbl;", @@ -4725,6 +4735,19 @@ CREATE TABLE tab3 ( {8, 1}, }, }, + { + Query: "select i, find_in_set('a', s) from text_tbl;", + Expected: []sql.Row{ + {0, 0}, + {1, 1}, + {2, 0}, + {3, 0}, + {4, 1}, + {6, 0}, + {7, 1}, + {8, 1}, + }, + }, { Query: "select i, find_in_set('a', s) from enum_tbl;", Expected: []sql.Row{ From 460ea842e56b2f31f93e7974a5adce274a6a7e81 Mon Sep 17 00:00:00 2001 From: Nick Tobey Date: Thu, 10 Apr 2025 11:17:38 -0700 Subject: [PATCH 2/2] Unwrap inputs to find_in_set --- sql/expression/function/find_in_set.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sql/expression/function/find_in_set.go b/sql/expression/function/find_in_set.go index 5d7b1a03da..f5612cf023 100644 --- a/sql/expression/function/find_in_set.go +++ b/sql/expression/function/find_in_set.go @@ -91,6 +91,10 @@ func (f *FindInSet) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) { return nil, nil } + left, err = sql.UnwrapAny(ctx, left) + if err != nil { + return nil, err + } lVal, _, err := types.LongText.Convert(ctx, left) if err != nil { return nil, err @@ -103,6 +107,10 @@ func (f *FindInSet) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) { } var r string + right, err = sql.UnwrapAny(ctx, right) + if err != nil { + return nil, err + } rType := f.RightChild.Type() if setType, ok := rType.(types.SetType); ok { // TODO: set type should take advantage of bit arithmetic