(args: &[ColumnarValue])
| 150 | } |
| 151 | |
| 152 | fn spark_unhex(args: &[ColumnarValue]) -> Result<ColumnarValue, DataFusionError> { |
| 153 | let [args] = take_function_args("unhex", args)?; |
| 154 | |
| 155 | match args { |
| 156 | ColumnarValue::Array(array) => match array.data_type() { |
| 157 | DataType::Utf8 => { |
| 158 | let array = as_string_array(array)?; |
| 159 | let capacity = array.values().len().div_ceil(2); |
| 160 | Ok(ColumnarValue::Array(unhex_array( |
| 161 | array.iter(), |
| 162 | array.len(), |
| 163 | capacity, |
| 164 | )?)) |
| 165 | } |
| 166 | DataType::Utf8View => { |
| 167 | let array = as_string_view_array(array)?; |
| 168 | // Estimate capacity since StringViewArray data can be scattered or inlined. |
| 169 | let capacity = array.len() * 32; |
| 170 | Ok(ColumnarValue::Array(unhex_array( |
| 171 | array.iter(), |
| 172 | array.len(), |
| 173 | capacity, |
| 174 | )?)) |
| 175 | } |
| 176 | DataType::LargeUtf8 => { |
| 177 | let array = as_large_string_array(array)?; |
| 178 | let capacity = array.values().len().div_ceil(2); |
| 179 | Ok(ColumnarValue::Array(unhex_array( |
| 180 | array.iter(), |
| 181 | array.len(), |
| 182 | capacity, |
| 183 | )?)) |
| 184 | } |
| 185 | _ => exec_err!( |
| 186 | "unhex only supports string argument, but got: {}", |
| 187 | array.data_type() |
| 188 | ), |
| 189 | }, |
| 190 | ColumnarValue::Scalar(sv) => match sv { |
| 191 | ScalarValue::Utf8(None) |
| 192 | | ScalarValue::Utf8View(None) |
| 193 | | ScalarValue::LargeUtf8(None) => { |
| 194 | Ok(ColumnarValue::Scalar(ScalarValue::Binary(None))) |
| 195 | } |
| 196 | ScalarValue::Utf8(Some(s)) |
| 197 | | ScalarValue::Utf8View(Some(s)) |
| 198 | | ScalarValue::LargeUtf8(Some(s)) => { |
| 199 | Ok(ColumnarValue::Scalar(ScalarValue::Binary(unhex_scalar(s)))) |
| 200 | } |
| 201 | _ => { |
| 202 | exec_err!( |
| 203 | "unhex only supports string argument, but got: {}", |
| 204 | sv.data_type() |
| 205 | ) |
| 206 | } |
| 207 | }, |
| 208 | } |
| 209 | } |
no test coverage detected
searching dependent graphs…