Struct datafusion_sql::planner::SqlToRel
source · pub struct SqlToRel<'a, S: ContextProvider> { /* private fields */ }
Expand description
SQL query planner
Implementations§
source§impl<'a, S: ContextProvider> SqlToRel<'a, S>
impl<'a, S: ContextProvider> SqlToRel<'a, S>
sourcepub fn sql_to_expr(
&self,
sql: SQLExpr,
schema: &DFSchema,
planner_context: &mut PlannerContext
) -> Result<Expr>
pub fn sql_to_expr(
&self,
sql: SQLExpr,
schema: &DFSchema,
planner_context: &mut PlannerContext
) -> Result<Expr>
Generate a relational expression from a SQL expression
source§impl<'a, S: ContextProvider> SqlToRel<'a, S>
impl<'a, S: ContextProvider> SqlToRel<'a, S>
sourcepub fn new(schema_provider: &'a S) -> Self
pub fn new(schema_provider: &'a S) -> Self
Create a new query planner
Examples found in repository?
examples/sql.rs (line 52)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
fn main() {
let sql = "SELECT \
c.id, c.first_name, c.last_name, \
COUNT(*) as num_orders, \
SUM(o.price) AS total_price, \
SUM(o.price * s.sales_tax) AS state_tax \
FROM customer c \
JOIN state s ON c.state = s.id \
JOIN orders o ON c.id = o.customer_id \
WHERE o.price > 0 \
AND c.last_name LIKE 'G%' \
GROUP BY 1, 2, 3 \
ORDER BY state_tax DESC";
// parse the SQL
let dialect = GenericDialect {}; // or AnsiDialect, or your own dialect ...
let ast = Parser::parse_sql(&dialect, sql).unwrap();
let statement = &ast[0];
// create a logical query plan
let schema_provider = MySchemaProvider::new();
let sql_to_rel = SqlToRel::new(&schema_provider);
let plan = sql_to_rel.sql_statement_to_plan(statement.clone()).unwrap();
// show the plan
println!("{plan:?}");
}
sourcepub fn new_with_options(schema_provider: &'a S, options: ParserOptions) -> Self
pub fn new_with_options(schema_provider: &'a S, options: ParserOptions) -> Self
Create a new query planner
source§impl<'a, S: ContextProvider> SqlToRel<'a, S>
impl<'a, S: ContextProvider> SqlToRel<'a, S>
sourcepub fn statement_to_plan(&self, statement: DFStatement) -> Result<LogicalPlan>
pub fn statement_to_plan(&self, statement: DFStatement) -> Result<LogicalPlan>
Generate a logical plan from an DataFusion SQL statement
sourcepub fn sql_statement_to_plan(&self, statement: Statement) -> Result<LogicalPlan>
pub fn sql_statement_to_plan(&self, statement: Statement) -> Result<LogicalPlan>
Generate a logical plan from an SQL statement
Examples found in repository?
examples/sql.rs (line 53)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
fn main() {
let sql = "SELECT \
c.id, c.first_name, c.last_name, \
COUNT(*) as num_orders, \
SUM(o.price) AS total_price, \
SUM(o.price * s.sales_tax) AS state_tax \
FROM customer c \
JOIN state s ON c.state = s.id \
JOIN orders o ON c.id = o.customer_id \
WHERE o.price > 0 \
AND c.last_name LIKE 'G%' \
GROUP BY 1, 2, 3 \
ORDER BY state_tax DESC";
// parse the SQL
let dialect = GenericDialect {}; // or AnsiDialect, or your own dialect ...
let ast = Parser::parse_sql(&dialect, sql).unwrap();
let statement = &ast[0];
// create a logical query plan
let schema_provider = MySchemaProvider::new();
let sql_to_rel = SqlToRel::new(&schema_provider);
let plan = sql_to_rel.sql_statement_to_plan(statement.clone()).unwrap();
// show the plan
println!("{plan:?}");
}