type logical_plan =
  | Project of logical_plan * string
  | Scan of string (* Table name *)
  | Filter of logical_plan 
  | Join of logical_plan * Ast.join_type * logical_plan 
  | Group of logical_plan * string list

let ast_to_logical ast =
  match ast with 
  | Ast.Select(_, _) -> Project(Scan("table"), "ok")
  | _ -> failwith "Query not supported yet"

let rec pp_logical_plan plan =
  match plan with 
  | Project(plan2, name) -> pp_logical_plan plan2 ^ name
  | _ -> "Not supported"