Skip to content
This repository has been archived by the owner on Jul 27, 2022. It is now read-only.

liurenjie1024/rust-opt-framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This project has been donated to datafusion-contrib/datafusion-dolomite, and this repo will not be maintained.

An extensible query optimization framework written in rust. For detail design notes, please refer to src/lib.rs.

Example

To define a logical plan:

let plan = {
    let mut builder = LogicalPlanBuilder::new();
    let right = builder.scan(None, "t2").build().root();
    builder
        .scan(None, "t1")
        .join(
            JoinType::Inner,
            binary_expr(col("t1.c1"), Eq, col("t2.c2")),
            right,
        )
        .build()
};

Use cascades optimizer to find best plan:

let optimizer = CascadesOptimizer::new(
    PhysicalPropertySet::default(),
    vec![
        CommutateJoinRule::new().into(),
        Join2HashJoinRule::new().into(),
        Scan2TableScanRule::new().into(),
    ],
    plan,
    OptimizerContext {},
);
optimizer.find_best_plan().unwrap()

Current status

  • Heuristic optimizer framework.
  • Cascades style optimizer framework.
  • Cost model.
  • Statistics model.
  • Optimization rules. Implemented some simple rules to verify optimizer framework.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages