mingmwang commented on code in PR #4170:
URL: https://github.com/apache/arrow-datafusion/pull/4170#discussion_r1021040695
##########
datafusion/core/src/datasource/listing/table.rs:
##########
@@ -361,6 +377,46 @@ impl ListingTable {
pub fn options(&self) -> &ListingOptions {
&self.options
}
+
+ /// If file_sort_order is specified, creates the appropriate physical
expressions
+ fn try_create_output_ordering(&self) ->
Result<Option<Vec<PhysicalSortExpr>>> {
+ let file_sort_order =
+ if let Some(file_sort_order) =
self.options.file_sort_order.as_ref() {
+ file_sort_order
+ } else {
+ return Ok(None);
+ };
+
+ // convert each expr to a physical sort expr
+ let sort_exprs = file_sort_order
+ .iter()
+ .map(|expr| {
+ if let Expr::Sort { expr, asc, nulls_first } = expr {
+ if let Expr::Column(col) = expr.as_ref() {
+ let expr = physical_plan::expressions::col(&col.name,
self.table_schema.as_ref())?;
+ Ok(PhysicalSortExpr {
+ expr,
+ options: SortOptions {
+ descending: !asc,
+ nulls_first: *nulls_first,
+ },
+ })
+ }
+ else {
+ Err(DataFusionError::Plan(
+ format!("Only support single column references in
output_ordering, got {:?}", expr)
+ ))
+ }
+ } else {
+ Err(DataFusionError::Plan(
+ format!("Expected Expr::Sort in output_ordering, but
got {:?}", expr)
+ ))
+ }
+ })
Review Comment:
Should we return Error to make the plan failed or just log some error info
and return Ok(None) ?
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]