From 691b39c0e13078fd9d07bf1d2beec19486268cef Mon Sep 17 00:00:00 2001 From: Krzysztof Witt <120908425+krzysztof-kwitt@users.noreply.github.com> Date: Sat, 24 Dec 2022 00:20:26 +0000 Subject: [PATCH] feat(trino): implement ops.StrRight --- ibis/backends/tests/test_string.py | 2 +- ibis/backends/trino/registry.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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 ),