(
&self,
order_exprs: Vec<LexOrdering>,
schema: &DFSchemaRef,
planner_context: &mut PlannerContext,
)
| 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( |
no test coverage detected