Skip to content

Commit

Permalink
Merge pull request #36 from lykia-rs/feature/planner
Browse files Browse the repository at this point in the history
feature/planner updates
  • Loading branch information
can-keklik authored Sep 3, 2024
2 parents 34137fe + d63e1ef commit c22c8a3
Show file tree
Hide file tree
Showing 10 changed files with 305 additions and 211 deletions.
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ Lykia is a toy multi-model database basically written for educational purposes.
- [ ] MVCC for transaction management (based on [mini-lsm](https://github.com/lykia-rs/mini-lsm))
- [ ] Plan optimization
-----------------------------------------
- [ ] B-Tree implementation for indexing
- [ ] LSM storage engine (based on [mini-lsm](https://github.com/lykia-rs/mini-lsm))
- [ ] Basic replication with Raft

Expand Down
40 changes: 40 additions & 0 deletions lykiadb-lang/src/ast/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,19 @@ pub enum Operation {
And,
Or,
Not,
Is,
IsNot,
In,
NotIn,
Like,
NotLike,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(tag = "@type")]
pub enum RangeKind {
Between,
NotBetween,
}

#[derive(Debug, Eq, PartialEq, Serialize, Deserialize, Clone)]
Expand Down Expand Up @@ -99,6 +112,17 @@ pub enum Expr {
#[serde(skip)]
id: usize,
},
#[serde(rename = "Expr::Between")]
Between {
lower: Box<Expr>,
upper: Box<Expr>,
subject: Box<Expr>,
kind: RangeKind,
#[serde(skip)]
span: Span,
#[serde(skip)]
id: usize,
},
#[serde(rename = "Expr::Binary")]
Binary {
left: Box<Expr>,
Expand Down Expand Up @@ -213,6 +237,14 @@ impl Spanned for Expr {
span,
id: _,
}
| Expr::Between {
lower: _,
upper: _,
subject: _,
kind: _,
span,
id: _,
}
| Expr::Binary {
left: _,
operation: _,
Expand Down Expand Up @@ -308,6 +340,14 @@ impl AstNode for Expr {
span: _,
id,
}
| Expr::Between {
lower: _,
upper: _,
subject: _,
kind: _,
span: _,
id,
}
| Expr::Binary {
left: _,
operation: _,
Expand Down
73 changes: 12 additions & 61 deletions lykiadb-lang/src/ast/sql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,78 +60,29 @@ pub struct SqlCollectionIdentifier {
pub alias: Option<Identifier>,
}

#[derive(Debug, Eq, PartialEq, Serialize, Deserialize, Clone)]
#[serde(tag = "@type")]
pub enum SqlExpr {
#[serde(rename = "SqlExpr::Default")]
Default(Box<Expr>),
#[serde(rename = "SqlExpr::Is")]
Is {
left: Box<SqlExpr>,
right: Box<SqlExpr>,
},
#[serde(rename = "SqlExpr::IsNot")]
IsNot {
left: Box<SqlExpr>,
right: Box<SqlExpr>,
},
#[serde(rename = "SqlExpr::In")]
In {
left: Box<SqlExpr>,
right: Box<SqlExpr>,
},
#[serde(rename = "SqlExpr::NotIn")]
NotIn {
left: Box<SqlExpr>,
right: Box<SqlExpr>,
},
#[serde(rename = "SqlExpr::Like")]
Like {
left: Box<SqlExpr>,
right: Box<SqlExpr>,
},
#[serde(rename = "SqlExpr::NotLike")]
NotLike {
left: Box<SqlExpr>,
right: Box<SqlExpr>,
},
#[serde(rename = "SqlExpr::Between")]
Between {
expr: Box<SqlExpr>,
lower: Box<SqlExpr>,
upper: Box<SqlExpr>,
},
#[serde(rename = "SqlExpr::NotBetween")]
NotBetween {
expr: Box<SqlExpr>,
lower: Box<SqlExpr>,
upper: Box<SqlExpr>,
},
}

#[derive(Debug, Eq, PartialEq, Serialize, Deserialize, Clone)]
#[serde(tag = "@type")]
pub enum SqlProjection {
#[serde(rename = "SqlProjection::All")]
All { collection: Option<Identifier> },
#[serde(rename = "SqlProjection::Expr")]
Expr {
expr: Box<SqlExpr>,
expr: Box<Expr>,
alias: Option<Identifier>,
},
}

#[derive(Debug, Eq, PartialEq, Serialize, Deserialize, Clone)]
#[serde(tag = "@type")]
pub struct SqlLimitClause {
pub count: Box<SqlExpr>,
pub offset: Option<Box<SqlExpr>>,
pub count: Box<Expr>,
pub offset: Option<Box<Expr>>,
}

#[derive(Debug, Eq, PartialEq, Serialize, Deserialize, Clone)]
#[serde(tag = "@type")]
pub struct SqlOrderByClause {
pub expr: Box<SqlExpr>,
pub expr: Box<Expr>,
pub ordering: SqlOrdering,
}

Expand Down Expand Up @@ -159,7 +110,7 @@ pub enum SqlFrom {
left: Box<SqlFrom>,
join_type: SqlJoinType,
right: Box<SqlFrom>,
constraint: Option<Box<SqlExpr>>,
constraint: Option<Box<Expr>>,
},
}

Expand All @@ -169,9 +120,9 @@ pub struct SqlSelectCore {
pub distinct: SqlDistinct,
pub projection: Vec<SqlProjection>,
pub from: Option<SqlFrom>,
pub r#where: Option<Box<SqlExpr>>,
pub group_by: Option<Vec<SqlExpr>>,
pub having: Option<Box<SqlExpr>>,
pub r#where: Option<Box<Expr>>,
pub group_by: Option<Vec<Expr>>,
pub having: Option<Box<Expr>>,
pub compound: Option<Box<SqlSelectCompound>>,
}

Expand All @@ -187,7 +138,7 @@ pub struct SqlSelect {
#[serde(tag = "@type")]
pub enum SqlValues {
#[serde(rename = "SqlValues::Values")]
Values { values: Vec<SqlExpr> },
Values { values: Vec<Expr> },
#[serde(rename = "SqlValues::Select")]
Select(SqlSelect),
}
Expand All @@ -203,13 +154,13 @@ pub struct SqlInsert {
#[serde(tag = "@type")]
pub struct SqlUpdate {
pub collection: SqlCollectionIdentifier,
pub assignments: Vec<SqlExpr>,
pub r#where: Option<Box<SqlExpr>>,
pub assignments: Vec<Expr>,
pub r#where: Option<Box<Expr>>,
}

#[derive(Debug, Eq, PartialEq, Serialize, Deserialize, Clone)]
#[serde(tag = "@type")]
pub struct SqlDelete {
pub collection: SqlCollectionIdentifier,
pub r#where: Option<Box<SqlExpr>>,
pub r#where: Option<Box<Expr>>,
}
Loading

0 comments on commit c22c8a3

Please sign in to comment.