Skip to content

Commit

Permalink
feat(mysql): implement FindInSet
Browse files Browse the repository at this point in the history
  • Loading branch information
cpcloud committed May 27, 2022
1 parent 9411081 commit e55bbbf
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
12 changes: 12 additions & 0 deletions ibis/backends/mysql/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,24 @@ def _day_of_week_name(t, expr):
return sa.func.dayname(t.translate(arg))


def _find_in_set(t, expr):
op = expr.op()
return (
sa.func.find_in_set(
t.translate(op.needle),
sa.func.concat_ws(",", *map(t.translate, op.values)),
)
- 1
)


operation_registry.update(
{
ops.Literal: _literal,
ops.IfNull: fixed_arity(sa.func.ifnull, 2),
# strings
ops.StringFind: _gen_string_find(sa.func.locate),
ops.FindInSet: _find_in_set,
ops.Capitalize: _capitalize,
ops.RegexSearch: fixed_arity(lambda x, y: x.op('REGEXP')(y), 2),
# math
Expand Down
8 changes: 2 additions & 6 deletions ibis/backends/tests/test_string.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,17 +127,13 @@ def test_string_col_is_unicode(alltypes, df):
lambda t: t.string_col.find_in_set(['1']),
lambda t: t.string_col.str.find('1'),
id='find_in_set',
marks=pytest.mark.notimpl(
["datafusion", "mysql", "pyspark", "sqlite"]
),
marks=pytest.mark.notimpl(["datafusion", "pyspark", "sqlite"]),
),
param(
lambda t: t.string_col.find_in_set(['a']),
lambda t: t.string_col.str.find('a'),
id='find_in_set_all_missing',
marks=pytest.mark.notimpl(
["datafusion", "mysql", "pyspark", "sqlite"]
),
marks=pytest.mark.notimpl(["datafusion", "pyspark", "sqlite"]),
),
param(
lambda t: t.string_col.lower(),
Expand Down

0 comments on commit e55bbbf

Please sign in to comment.