Parses a struct(..) expression and plans it creation
(
&self,
schema: &DFSchema,
planner_context: &mut PlannerContext,
values: Vec<SQLExpr>,
fields: &[StructField],
)
| 686 | |
| 687 | /// Parses a struct(..) expression and plans it creation |
| 688 | fn parse_struct( |
| 689 | &self, |
| 690 | schema: &DFSchema, |
| 691 | planner_context: &mut PlannerContext, |
| 692 | values: Vec<SQLExpr>, |
| 693 | fields: &[StructField], |
| 694 | ) -> Result<Expr> { |
| 695 | if !fields.is_empty() { |
| 696 | return not_impl_err!("Struct fields are not supported yet"); |
| 697 | } |
| 698 | let is_named_struct = values |
| 699 | .iter() |
| 700 | .any(|value| matches!(value, SQLExpr::Named { .. })); |
| 701 | |
| 702 | let mut create_struct_args = if is_named_struct { |
| 703 | self.create_named_struct_expr(values, schema, planner_context)? |
| 704 | } else { |
| 705 | self.create_struct_expr(values, schema, planner_context)? |
| 706 | }; |
| 707 | |
| 708 | for planner in self.context_provider.get_expr_planners() { |
| 709 | match planner.plan_struct_literal(create_struct_args, is_named_struct)? { |
| 710 | PlannerResult::Planned(expr) => return Ok(expr), |
| 711 | PlannerResult::Original(args) => create_struct_args = args, |
| 712 | } |
| 713 | } |
| 714 | not_impl_err!("Struct not supported by ExprPlanner: {create_struct_args:?}") |
| 715 | } |
| 716 | |
| 717 | fn parse_tuple( |
| 718 | &self, |
no test coverage detected