-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into yuchen/initial-storage
- Loading branch information
Showing
23 changed files
with
188 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,15 @@ | ||
//! Types for logical and physical expressions in the optimizer. | ||
use crate::memo::GroupId; | ||
use crate::memo::{GroupId, ScalarGroupId}; | ||
use crate::operator::relational::logical::LogicalOperator; | ||
use crate::operator::relational::physical::PhysicalOperator; | ||
|
||
/// A logical expression in the memo table. | ||
/// | ||
/// References children using [`GroupId`]s for expression sharing | ||
/// and memoization. | ||
pub type LogicalExpression = LogicalOperator<GroupId, GroupId>; | ||
/// References children using [`GroupId`]s for expression sharing and memoization. | ||
pub type LogicalExpression = LogicalOperator<GroupId, ScalarGroupId>; | ||
|
||
/// A physical expression in the memo table. | ||
/// | ||
/// Like [`LogicalExpression`] but with specific implementation | ||
/// strategies. | ||
pub type PhysicalExpression = PhysicalOperator<GroupId, GroupId>; | ||
/// Like [`LogicalExpression`] but with specific implementation strategies. | ||
pub type PhysicalExpression = PhysicalOperator<GroupId, ScalarGroupId>; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,13 @@ | ||
use std::sync::Arc; | ||
//! TODO(everyone): Figure out what exactly a `ScalarPlan` is (tree? DAG? always materialized?) | ||
use crate::operator::scalar::ScalarOperator; | ||
use std::sync::Arc; | ||
|
||
/// A representation of a scalar query plan DAG (directed acyclic graph). | ||
#[derive(Clone)] | ||
pub struct ScalarPlan { | ||
/// Represents the current scalar operator that is the root of the current scalar subtree. | ||
/// | ||
/// TODO(connor): Figure out if scalar plans can be a DAG | ||
pub node: Arc<ScalarOperator<ScalarPlan>>, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,37 @@ | ||
//! The rule for implementing `Join` as a `HashJoin`. | ||
//! | ||
//! See [`HashJoinRule`] for more information. | ||
use super::*; | ||
use crate::operator::relational::{ | ||
logical::LogicalOperator, | ||
logical::{join::Join, LogicalOperator}, | ||
physical::{join::hash_join::HashJoin, PhysicalOperator}, | ||
}; | ||
|
||
/// Implementation rule that converts a logical join into a hash join physical operator | ||
/// A unit / marker struct for implementing `HashJoin`. | ||
/// | ||
/// This implementation rule converts a logical `Join` into a physical `HashJoin` operator. | ||
pub struct HashJoinRule; | ||
|
||
// TODO: rule may fail, need to check join condition | ||
// https://github.com/cmu-db/optd/issues/15 | ||
impl ImplementationRule for HashJoinRule { | ||
fn check_and_apply(&self, expr: LogicalExpression) -> Option<PhysicalExpression> { | ||
if let LogicalOperator::Join(join) = expr { | ||
return Some(PhysicalOperator::HashJoin(HashJoin { | ||
join_type: join.join_type, | ||
probe_side: join.left, | ||
build_side: join.right, | ||
condition: join.condition, | ||
})); | ||
} | ||
None | ||
let LogicalOperator::Join(Join { | ||
join_type, | ||
left, | ||
right, | ||
condition, | ||
}) = expr | ||
else { | ||
return None; | ||
}; | ||
|
||
Some(PhysicalOperator::HashJoin(HashJoin { | ||
join_type, | ||
probe_side: left, | ||
build_side: right, | ||
condition, | ||
})) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.