diff --git a/datafusion/functions/src/core/nvl.rs b/datafusion/functions/src/core/nvl.rs index 16438e1b6254f..24b6f5fc14fef 100644 --- a/datafusion/functions/src/core/nvl.rs +++ b/datafusion/functions/src/core/nvl.rs @@ -47,6 +47,7 @@ static SUPPORTED_NVL_TYPES: &[DataType] = &[ DataType::Int64, DataType::Float32, DataType::Float64, + DataType::Utf8View, DataType::Utf8, DataType::LargeUtf8, ]; diff --git a/datafusion/sqllogictest/test_files/nvl.slt b/datafusion/sqllogictest/test_files/nvl.slt index 81e79e1eb5b06..daab54307cc20 100644 --- a/datafusion/sqllogictest/test_files/nvl.slt +++ b/datafusion/sqllogictest/test_files/nvl.slt @@ -118,3 +118,33 @@ query I SELECT NVL(NULL, NULL); ---- NULL + +query T +SELECT NVL(arrow_cast(text_field, 'Utf8View'), 'zxb') FROM test; +---- +abc +def +ghij +zxb +zxc +zxb + +query T +SELECT NVL(arrow_cast('a', 'Utf8View'), 'zxb'); +---- +a + +query T +SELECT NVL('zxb', arrow_cast('a', 'Utf8View')); +---- +zxb + +query T +SELECT NVL(NULL, arrow_cast('a', 'Utf8View')); +---- +a + +query T +SELECT NVL(arrow_cast('a', 'Utf8View'), NULL); +---- +a diff --git a/datafusion/sqllogictest/test_files/string/string_view.slt b/datafusion/sqllogictest/test_files/string/string_view.slt index 2b44c86f52d83..12295a01a9f1e 100644 --- a/datafusion/sqllogictest/test_files/string/string_view.slt +++ b/datafusion/sqllogictest/test_files/string/string_view.slt @@ -935,6 +935,14 @@ logical_plan 01)Projection: to_timestamp(test.column1_utf8view, Utf8("a,b,c,d")) AS c 02)--TableScan: test projection=[column1_utf8view] +## Ensure no casts for NVL +query TT +EXPLAIN SELECT NVL(column1_utf8view, 'a') as c2 FROM test; +---- +logical_plan +01)Projection: nvl(test.column1_utf8view, Utf8View("a")) AS c2 +02)--TableScan: test projection=[column1_utf8view] + ## Ensure no casts for nullif query TT EXPLAIN SELECT