diff --git a/lib/logical_plan.ml b/lib/logical_plan.ml index ef831e0..3b485f4 100644 --- a/lib/logical_plan.ml +++ b/lib/logical_plan.ml @@ -1,5 +1,5 @@ type logical_plan = - | Project of logical_plan * string list + | Project of logical_plan option * string list | Scan of string (* Table name *) | Filter of logical_plan | Join of logical_plan * Ast.join_type * logical_plan @@ -7,9 +7,14 @@ type logical_plan = let rec ast_to_logical ast = match ast with - | Ast.Select(cols, _) -> Project(Scan("table"), (columns_to_logical cols)) + | Ast.Select(cols, table_exp) -> Project((table_expression_to_logical table_exp), (columns_to_logical cols)) | _ -> failwith "Query not supported yet" +and table_expression_to_logical table_exp = + match table_exp with + | Ast.TableExpression(Some(tables), None, None) -> tables_to_logical tables + | _ -> failwith "Table expression not supported yet" + and columns_to_logical columns = let rec aux cols acc = match cols with @@ -26,9 +31,19 @@ and expression_to_logical exp = | Ast.Ref(s) -> s | _ -> failwith "Expression not supported yet" +and tables_to_logical tables = + let rec aux t = + match t with + | [] -> None + | [Ast.Table(table_name)] -> Some(Scan(table_name)) + | _ -> failwith "tables not supported" + in + match tables with + | None -> None + | Some(t) -> aux t + let rec pp_logical_plan plan = match plan with | Project(plan2, name) -> pp_logical_plan plan2 ^ (String.concat ";" name) | _ -> "Not supported" -