Skip to content

Commit e79ea11

Browse files
committed
Filter and drop auxiliar col
1 parent e1415eb commit e79ea11

File tree

1 file changed

+22
-10
lines changed
  • crates/sail-plan/src/resolver

1 file changed

+22
-10
lines changed

crates/sail-plan/src/resolver/plan.rs

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1607,34 +1607,46 @@ impl PlanResolver<'_> {
16071607
input,
16081608
lower_bound,
16091609
upper_bound,
1610+
with_replacement,
16101611
..
16111612
} = sample;
1612-
let input: LogicalPlan = self
1613-
.resolve_query_plan_with_hidden_fields(*input, state)
1614-
.await?;
16151613
if lower_bound >= upper_bound {
16161614
return Err(PlanError::invalid(format!(
16171615
"invalid sample bounds: [{lower_bound}, {upper_bound})"
16181616
)));
16191617
}
1618+
if with_replacement {
1619+
return Err(PlanError::todo(
1620+
"sampling with replacement is not supported yet",
1621+
));
1622+
}
1623+
// if defined seed use these values otherwise use random seed
16201624

1621-
let rand_expr: Expr = random().alias(state.register_field_name("rand_value"));
1625+
let input: LogicalPlan = self
1626+
.resolve_query_plan_with_hidden_fields(*input, state)
1627+
.await?;
1628+
1629+
let rand_column_name: String = state.register_field_name("rand_value");
1630+
let rand_expr: Expr = random().alias(&rand_column_name);
16221631

1623-
let mut all_exprs: Vec<Expr> = input
1632+
let init_exprs: Vec<Expr> = input
16241633
.schema()
16251634
.columns()
16261635
.iter()
16271636
.map(|col| Expr::Column(col.clone()))
16281637
.collect();
1629-
1638+
let mut all_exprs: Vec<Expr> = init_exprs.clone();
16301639
all_exprs.push(rand_expr);
16311640

1632-
let plan_with_rand = LogicalPlanBuilder::from(input)
1641+
let plan_with_rand: LogicalPlan = LogicalPlanBuilder::from(input)
16331642
.project(all_exprs)?
16341643
.build()?;
1635-
let plan = LogicalPlanBuilder::from(plan_with_rand)
1636-
.filter(col("#1").gt_eq(lit(lower_bound)))?
1637-
.filter(col("#1").lt_eq(lit(upper_bound)))?
1644+
let plan: LogicalPlan = LogicalPlanBuilder::from(plan_with_rand)
1645+
.filter(col(&rand_column_name).lt_eq(lit(upper_bound)))?
1646+
.filter(col(&rand_column_name).gt_eq(lit(lower_bound)))?
1647+
.build()?;
1648+
let plan: LogicalPlan = LogicalPlanBuilder::from(plan)
1649+
.project(init_exprs)?
16381650
.build()?;
16391651

16401652
Ok(plan)

0 commit comments

Comments
 (0)