@@ -1607,34 +1607,46 @@ impl PlanResolver<'_> {
1607
1607
input,
1608
1608
lower_bound,
1609
1609
upper_bound,
1610
+ with_replacement,
1610
1611
..
1611
1612
} = sample;
1612
- let input: LogicalPlan = self
1613
- . resolve_query_plan_with_hidden_fields ( * input, state)
1614
- . await ?;
1615
1613
if lower_bound >= upper_bound {
1616
1614
return Err ( PlanError :: invalid ( format ! (
1617
1615
"invalid sample bounds: [{lower_bound}, {upper_bound})"
1618
1616
) ) ) ;
1619
1617
}
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
1620
1624
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) ;
1622
1631
1623
- let mut all_exprs : Vec < Expr > = input
1632
+ let init_exprs : Vec < Expr > = input
1624
1633
. schema ( )
1625
1634
. columns ( )
1626
1635
. iter ( )
1627
1636
. map ( |col| Expr :: Column ( col. clone ( ) ) )
1628
1637
. collect ( ) ;
1629
-
1638
+ let mut all_exprs : Vec < Expr > = init_exprs . clone ( ) ;
1630
1639
all_exprs. push ( rand_expr) ;
1631
1640
1632
- let plan_with_rand = LogicalPlanBuilder :: from ( input)
1641
+ let plan_with_rand: LogicalPlan = LogicalPlanBuilder :: from ( input)
1633
1642
. project ( all_exprs) ?
1634
1643
. 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) ?
1638
1650
. build ( ) ?;
1639
1651
1640
1652
Ok ( plan)
0 commit comments