diff --git a/ibis/backends/tests/test_string.py b/ibis/backends/tests/test_string.py index e3e240dad210..cda694054248 100644 --- a/ibis/backends/tests/test_string.py +++ b/ibis/backends/tests/test_string.py @@ -310,7 +310,7 @@ def test_string_col_is_unicode(alltypes, df): lambda t: t.date_string_col.right(2), lambda t: t.date_string_col.str[-2:], id="right", - marks=pytest.mark.notimpl(["datafusion", "trino"]), + marks=pytest.mark.notimpl(["datafusion"]), ), param( lambda t: t.date_string_col[1:3], diff --git a/ibis/backends/trino/registry.py b/ibis/backends/trino/registry.py index 3259845a6039..148507ef3353 100644 --- a/ibis/backends/trino/registry.py +++ b/ibis/backends/trino/registry.py @@ -58,6 +58,13 @@ def _capitalize(t, op): ) +def _string_right(t, op): + sa_arg = t.translate(op.arg) + sa_length = t.translate(op.nchars) + + return sa.func.substr(sa_arg, -sa_length) + + operation_registry.update( { # conditional expressions @@ -93,6 +100,7 @@ def _capitalize(t, op): ops.JSONGetItem: _json_get_item, ops.Translate: fixed_arity(sa.func.translate, 3), ops.Capitalize: _capitalize, + ops.StrRight: _string_right, ops.Repeat: fixed_arity( lambda value, count: sa.func.array_join(sa.func.repeat(value, count), ''), 2 ),