()
| 2234 | |
| 2235 | #[test] |
| 2236 | fn case_transform() -> Result<()> { |
| 2237 | let schema = Schema::new(vec![Field::new("a", DataType::Int32, true)]); |
| 2238 | |
| 2239 | let when1 = lit("foo"); |
| 2240 | let then1 = lit(123i32); |
| 2241 | let when2 = lit("bar"); |
| 2242 | let then2 = lit(456i32); |
| 2243 | let else_value = lit(999i32); |
| 2244 | |
| 2245 | let expr = generate_case_when_with_type_coercion( |
| 2246 | Some(col("a", &schema)?), |
| 2247 | vec![ |
| 2248 | (Arc::clone(&when1), Arc::clone(&then1)), |
| 2249 | (Arc::clone(&when2), Arc::clone(&then2)), |
| 2250 | ], |
| 2251 | Some(Arc::clone(&else_value)), |
| 2252 | &schema, |
| 2253 | )?; |
| 2254 | |
| 2255 | let expr2 = Arc::clone(&expr) |
| 2256 | .transform(|e| { |
| 2257 | let transformed = match e.downcast_ref::<Literal>() { |
| 2258 | Some(lit_value) => match lit_value.value() { |
| 2259 | ScalarValue::Utf8(Some(str_value)) => { |
| 2260 | Some(lit(str_value.to_uppercase())) |
| 2261 | } |
| 2262 | _ => None, |
| 2263 | }, |
| 2264 | _ => None, |
| 2265 | }; |
| 2266 | Ok(if let Some(transformed) = transformed { |
| 2267 | Transformed::yes(transformed) |
| 2268 | } else { |
| 2269 | Transformed::no(e) |
| 2270 | }) |
| 2271 | }) |
| 2272 | .data() |
| 2273 | .unwrap(); |
| 2274 | |
| 2275 | let expr3 = Arc::clone(&expr) |
| 2276 | .transform_down(|e| { |
| 2277 | let transformed = match e.downcast_ref::<Literal>() { |
| 2278 | Some(lit_value) => match lit_value.value() { |
| 2279 | ScalarValue::Utf8(Some(str_value)) => { |
| 2280 | Some(lit(str_value.to_uppercase())) |
| 2281 | } |
| 2282 | _ => None, |
| 2283 | }, |
| 2284 | _ => None, |
| 2285 | }; |
| 2286 | Ok(if let Some(transformed) = transformed { |
| 2287 | Transformed::yes(transformed) |
| 2288 | } else { |
| 2289 | Transformed::no(e) |
| 2290 | }) |
| 2291 | }) |
| 2292 | .data() |
| 2293 | .unwrap(); |
nothing calls this directly
no test coverage detected
searching dependent graphs…