proof_of_sql/sql/logical_plans/
plan.rs1use super::Expr;
2use crate::base::database::{ColumnField, TableRef};
3use alloc::{boxed::Box, vec::Vec};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
8pub enum LogicalPlan {
9 Empty(Empty),
11 TableScan(TableScan),
13 Projection(Projection),
15 Filter(Filter),
17 Aggregate(Aggregate),
19 Sort(Sort),
21 Slice(Slice),
23 Join(Join),
25 Union(Union),
27}
28
29#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
32pub struct Empty {}
33
34#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
38pub struct TableScan {
39 pub table_ref: TableRef,
41}
42
43#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
46pub struct Projection {
47 pub input: Box<LogicalPlan>,
49 pub expr: Vec<Expr>,
51}
52
53#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
56pub struct Filter {
57 pub input: Box<LogicalPlan>,
59 pub filter: Expr,
61}
62
63#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
66pub struct Aggregate {
67 pub input: Box<LogicalPlan>,
69 pub group_by: Vec<Expr>,
71 pub aggr_expr: Vec<Expr>,
73 pub schema: Vec<ColumnField>,
75}
76
77#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
80pub struct Sort {
81 pub input: Box<LogicalPlan>,
83 pub expr: Vec<SortExpr>,
85}
86
87#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
89pub struct SortExpr {
90 pub expr: Expr,
92 pub asc: bool,
94}
95
96#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
99pub struct Slice {
100 pub input: Box<LogicalPlan>,
102 pub limit: Option<u64>,
104 pub offset: i64,
106}
107
108#[allow(clippy::struct_field_names)]
112#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
113pub struct Join {
114 pub left: Box<LogicalPlan>,
116 pub right: Box<LogicalPlan>,
118 pub on: Vec<(Expr, Expr)>,
120 pub schema: Vec<ColumnField>,
122}
123
124#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
127pub struct Union {
128 pub inputs: Vec<LogicalPlan>,
130}