diff --git a/datafusion/tests/test_functions.py b/datafusion/tests/test_functions.py index 1727e7e5b..75f9c8396 100644 --- a/datafusion/tests/test_functions.py +++ b/datafusion/tests/test_functions.py @@ -467,3 +467,17 @@ def test_case(df): assert result.column(0) == pa.array([10, 8, 8]) assert result.column(1) == pa.array(["Hola", "Mundo", "!!"]) assert result.column(2) == pa.array(["Hola", "Mundo", None]) + + +def test_binary_string_functions(df): + df = df.select( + f.encode(column("a"), literal("base64")), + f.decode(f.encode(column("a"), literal("base64")), literal("base64")), + ) + result = df.collect() + assert len(result) == 1 + result = result[0] + assert result.column(0) == pa.array(["SGVsbG8", "V29ybGQ", "IQ"]) + assert pa.array(result.column(1)).cast(pa.string()) == pa.array( + ["Hello", "World", "!"] + ) diff --git a/src/functions.rs b/src/functions.rs index 6037ce196..75001a179 100644 --- a/src/functions.rs +++ b/src/functions.rs @@ -330,6 +330,9 @@ scalar_function!(r#struct, Struct); // Use raw identifier since struct is a keyw scalar_function!(from_unixtime, FromUnixtime); scalar_function!(arrow_typeof, ArrowTypeof); scalar_function!(random, Random); +//Binary String Functions +scalar_function!(encode, Encode); +scalar_function!(decode, Decode); aggregate_function!(approx_distinct, ApproxDistinct); aggregate_function!(approx_median, ApproxMedian); @@ -482,5 +485,9 @@ pub(crate) fn init_module(m: &PyModule) -> PyResult<()> { m.add_wrapped(wrap_pyfunction!(var_pop))?; m.add_wrapped(wrap_pyfunction!(var_samp))?; m.add_wrapped(wrap_pyfunction!(window))?; + + //Binary String Functions + m.add_wrapped(wrap_pyfunction!(encode))?; + m.add_wrapped(wrap_pyfunction!(decode))?; Ok(()) }