| 115 | } |
| 116 | |
| 117 | fn md5(args: &[ColumnarValue]) -> Result<ColumnarValue> { |
| 118 | let [data] = take_function_args("md5", args)?; |
| 119 | let value = digest_process(data, DigestAlgorithm::Md5)?; |
| 120 | |
| 121 | // md5 requires special handling because of its unique utf8view return type |
| 122 | Ok(match value { |
| 123 | ColumnarValue::Array(array) => { |
| 124 | let binary_array = as_binary_array(&array)?; |
| 125 | let string_array: StringViewArray = |
| 126 | binary_array.iter().map(|opt| opt.map(hex_encode)).collect(); |
| 127 | ColumnarValue::Array(Arc::new(string_array)) |
| 128 | } |
| 129 | ColumnarValue::Scalar(ScalarValue::Binary(opt)) => { |
| 130 | ColumnarValue::Scalar(ScalarValue::Utf8View(opt.map(hex_encode))) |
| 131 | } |
| 132 | _ => return internal_err!("Impossibly got invalid results from digest"), |
| 133 | }) |
| 134 | } |