MCPcopy Create free account
hub / github.com/apache/datafusion / case_transform

Function case_transform

datafusion/physical-expr/src/expressions/case.rs:2236–2299  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

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();

Callers

nothing calls this directly

Calls 8

newFunction · 0.85
transform_downMethod · 0.80
litFunction · 0.70
colFunction · 0.70
dataMethod · 0.45
transformMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…