Skip to content

Commit e55bbbf

Browse files
committed
feat(mysql): implement FindInSet
1 parent 9411081 commit e55bbbf

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

ibis/backends/mysql/registry.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,24 @@ def _day_of_week_name(t, expr):
152152
return sa.func.dayname(t.translate(arg))
153153

154154

155+
def _find_in_set(t, expr):
156+
op = expr.op()
157+
return (
158+
sa.func.find_in_set(
159+
t.translate(op.needle),
160+
sa.func.concat_ws(",", *map(t.translate, op.values)),
161+
)
162+
- 1
163+
)
164+
165+
155166
operation_registry.update(
156167
{
157168
ops.Literal: _literal,
158169
ops.IfNull: fixed_arity(sa.func.ifnull, 2),
159170
# strings
160171
ops.StringFind: _gen_string_find(sa.func.locate),
172+
ops.FindInSet: _find_in_set,
161173
ops.Capitalize: _capitalize,
162174
ops.RegexSearch: fixed_arity(lambda x, y: x.op('REGEXP')(y), 2),
163175
# math

ibis/backends/tests/test_string.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,17 +127,13 @@ def test_string_col_is_unicode(alltypes, df):
127127
lambda t: t.string_col.find_in_set(['1']),
128128
lambda t: t.string_col.str.find('1'),
129129
id='find_in_set',
130-
marks=pytest.mark.notimpl(
131-
["datafusion", "mysql", "pyspark", "sqlite"]
132-
),
130+
marks=pytest.mark.notimpl(["datafusion", "pyspark", "sqlite"]),
133131
),
134132
param(
135133
lambda t: t.string_col.find_in_set(['a']),
136134
lambda t: t.string_col.str.find('a'),
137135
id='find_in_set_all_missing',
138-
marks=pytest.mark.notimpl(
139-
["datafusion", "mysql", "pyspark", "sqlite"]
140-
),
136+
marks=pytest.mark.notimpl(["datafusion", "pyspark", "sqlite"]),
141137
),
142138
param(
143139
lambda t: t.string_col.lower(),

0 commit comments

Comments
 (0)