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

Method build_order_by

datafusion/sql/src/statement.rs:1734–1788  ·  view source on GitHub ↗
(
        &self,
        order_exprs: Vec<LexOrdering>,
        schema: &DFSchemaRef,
        planner_context: &mut PlannerContext,
    )

Source from the content-addressed store, hash-verified

1732 }
1733
1734 fn build_order_by(
1735 &self,
1736 order_exprs: Vec<LexOrdering>,
1737 schema: &DFSchemaRef,
1738 planner_context: &mut PlannerContext,
1739 ) -> Result<Vec<Vec<SortExpr>>> {
1740 if !order_exprs.is_empty() && schema.fields().is_empty() {
1741 let results = order_exprs
1742 .iter()
1743 .map(|lex_order| {
1744 let result = lex_order
1745 .iter()
1746 .map(|order_by_expr| {
1747 let ordered_expr = &order_by_expr.expr;
1748 let ordered_expr = ordered_expr.to_owned();
1749 let ordered_expr = self.sql_expr_to_logical_expr(
1750 ordered_expr,
1751 schema,
1752 planner_context,
1753 )?;
1754 let asc = order_by_expr.options.asc.unwrap_or(true);
1755 let nulls_first =
1756 order_by_expr.options.nulls_first.unwrap_or_else(|| {
1757 self.options.default_null_ordering.nulls_first(asc)
1758 });
1759
1760 Ok(SortExpr::new(ordered_expr, asc, nulls_first))
1761 })
1762 .collect::<Result<Vec<SortExpr>>>()?;
1763 Ok(result)
1764 })
1765 .collect::<Result<Vec<Vec<SortExpr>>>>()?;
1766
1767 return Ok(results);
1768 }
1769
1770 let mut all_results = vec![];
1771 for expr in order_exprs {
1772 // Convert each OrderByExpr to a SortExpr:
1773 let expr_vec =
1774 self.order_by_to_sort_expr(expr, schema, planner_context, true, None)?;
1775 // Verify that columns of all SortExprs exist in the schema:
1776 for sort in expr_vec.iter() {
1777 for column in sort.expr.column_refs().iter() {
1778 if !schema.has_column(column) {
1779 // Return an error if any column is not in the schema:
1780 return plan_err!("Column {column} is not in schema");
1781 }
1782 }
1783 }
1784 // If all SortExprs are valid, return them as an expression vector
1785 all_results.push(expr_vec)
1786 }
1787 Ok(all_results)
1788 }
1789
1790 /// Generate a logical plan from a CREATE EXTERNAL TABLE statement
1791 fn external_table_to_plan(

Callers 1

Calls 11

newFunction · 0.85
order_by_to_sort_exprMethod · 0.80
column_refsMethod · 0.80
has_columnMethod · 0.80
is_emptyMethod · 0.45
fieldsMethod · 0.45
mapMethod · 0.45
iterMethod · 0.45
nulls_firstMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected