Ted-Jiang commented on code in PR #3146: URL: https://github.com/apache/arrow-datafusion/pull/3146#discussion_r945645035
########## datafusion/physical-expr/src/aggregate/approx_percentile_cont.rs: ########## @@ -113,6 +116,64 @@ impl ApproxPercentileCont { } } +fn validate_input_percentile_expr(expr: &Arc<dyn PhysicalExpr>) -> Result<f64> { + // Extract the desired percentile literal + let lit = expr + .as_any() + .downcast_ref::<Literal>() + .ok_or_else(|| { + DataFusionError::Internal( + "desired percentile argument must be float literal".to_string(), + ) + })? + .value(); + let percentile = match lit { + ScalarValue::Float32(Some(q)) => *q as f64, + ScalarValue::Float64(Some(q)) => *q as f64, + got => return Err(DataFusionError::NotImplemented(format!( + "Percentile value for 'APPROX_PERCENTILE_CONT' must be Float32 or Float64 literal (got data type {})", + got.get_datatype() + ))) + }; + + // Ensure the percentile is between 0 and 1. + if !(0.0..=1.0).contains(&percentile) { + return Err(DataFusionError::Plan(format!( + "Percentile value must be between 0.0 and 1.0 inclusive, {} is invalid", + percentile + ))); + } + Ok(percentile) +} + +fn validate_input_max_size_expr(expr: &Arc<dyn PhysicalExpr>) -> Result<usize> { + // Extract the desired percentile literal + let lit = expr + .as_any() + .downcast_ref::<Literal>() + .ok_or_else(|| { + DataFusionError::Internal( + "desired percentile argument must be float literal".to_string(), + ) + })? + .value(); + let max_size = match lit { + ScalarValue::UInt8(Some(q)) => *q as usize, Review Comment: For now i think ew can not input unsigned int from sql 🤔 So need these Uint. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org