type logical_plan = | Scan of string (* Table name *) | Filter of logical_plan * condition | Join of logical_plan * Ast.join_type * logical_plan and condition = | Condition of string let rec generate_from_clause tables = match tables with | [Ast.Table(name)] -> Scan(name) | [Ast.Join(left, j_type, right, _)] -> Join( generate_from_clause [left], j_type, generate_from_clause [right] ) | _ -> failwith "Unsupported table structure" let generate_logical_plan ast = match ast with | Ast.Query(Select(_, Some(tables), _)) -> let base_plan = generate_from_clause tables in base_plan | Ast.Query(Select(_, None, _)) -> failwith "not supported" (*let evaluate_plan plan = match plan with | Scan(table) -> | _ -> failwith "Unsupported plan" *)