@@ -1391,7 +1391,7 @@ mod test {
13911391
13921392 // A filter on "a" should not exclude any rows even if it matches the data
13931393 let expr = col ( "a" ) . eq ( lit ( 1 ) ) ;
1394- let predicate = logical2physical ( & expr, & schema) ;
1394+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
13951395 let opener = make_opener ( predicate) ;
13961396 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
13971397 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1400,7 +1400,7 @@ mod test {
14001400
14011401 // A filter on `b = 5.0` should exclude all rows
14021402 let expr = col ( "b" ) . eq ( lit ( ScalarValue :: Float32 ( Some ( 5.0 ) ) ) ) ;
1403- let predicate = logical2physical ( & expr, & schema) ;
1403+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
14041404 let opener = make_opener ( predicate) ;
14051405 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
14061406 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1446,7 +1446,8 @@ mod test {
14461446 let expr = col ( "part" ) . eq ( lit ( 1 ) ) ;
14471447 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14481448 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1449- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1449+ let predicate =
1450+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
14501451 let opener = make_opener ( predicate) ;
14511452 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14521453 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1457,7 +1458,7 @@ mod test {
14571458 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
14581459 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14591460 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1460- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1461+ let predicate = make_dynamic_expr ( logical2physical ( & expr, table_schema) ) ;
14611462 let opener = make_opener ( predicate) ;
14621463 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
14631464 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1513,7 +1514,7 @@ mod test {
15131514
15141515 // Filter should match the partition value and file statistics
15151516 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1516- let predicate = logical2physical ( & expr, & table_schema) ;
1517+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15171518 let opener = make_opener ( predicate) ;
15181519 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15191520 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1522,7 +1523,7 @@ mod test {
15221523
15231524 // Should prune based on partition value but not file statistics
15241525 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1525- let predicate = logical2physical ( & expr, & table_schema) ;
1526+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15261527 let opener = make_opener ( predicate) ;
15271528 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15281529 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1531,7 +1532,7 @@ mod test {
15311532
15321533 // Should prune based on file statistics but not partition value
15331534 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1534- let predicate = logical2physical ( & expr, & table_schema) ;
1535+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15351536 let opener = make_opener ( predicate) ;
15361537 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15371538 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1540,7 +1541,7 @@ mod test {
15401541
15411542 // Should prune based on both partition value and file statistics
15421543 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1543- let predicate = logical2physical ( & expr, & table_schema) ;
1544+ let predicate = logical2physical ( & expr, table_schema) ;
15441545 let opener = make_opener ( predicate) ;
15451546 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
15461547 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1586,7 +1587,7 @@ mod test {
15861587
15871588 // Filter should match the partition value and data value
15881589 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1589- let predicate = logical2physical ( & expr, & table_schema) ;
1590+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15901591 let opener = make_opener ( predicate) ;
15911592 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15921593 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1595,7 +1596,7 @@ mod test {
15951596
15961597 // Filter should match the partition value but not the data value
15971598 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1598- let predicate = logical2physical ( & expr, & table_schema) ;
1599+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15991600 let opener = make_opener ( predicate) ;
16001601 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16011602 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1604,7 +1605,7 @@ mod test {
16041605
16051606 // Filter should not match the partition value but match the data value
16061607 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1607- let predicate = logical2physical ( & expr, & table_schema) ;
1608+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16081609 let opener = make_opener ( predicate) ;
16091610 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16101611 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1613,7 +1614,7 @@ mod test {
16131614
16141615 // Filter should not match the partition value or the data value
16151616 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1616- let predicate = logical2physical ( & expr, & table_schema) ;
1617+ let predicate = logical2physical ( & expr, table_schema) ;
16171618 let opener = make_opener ( predicate) ;
16181619 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
16191620 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1666,7 +1667,7 @@ mod test {
16661667 // This filter could prune based on statistics, but since it's not dynamic it's not applied for pruning
16671668 // (the assumption is this happened already at planning time)
16681669 let expr = col ( "a" ) . eq ( lit ( 42 ) ) ;
1669- let predicate = logical2physical ( & expr, & table_schema) ;
1670+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16701671 let opener = make_opener ( predicate) ;
16711672 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16721673 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1675,7 +1676,8 @@ mod test {
16751676
16761677 // If we make the filter dynamic, it should prune.
16771678 // This allows dynamic filters to prune partitions/files even if they are populated late into execution.
1678- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1679+ let predicate =
1680+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16791681 let opener = make_opener ( predicate) ;
16801682 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16811683 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1685,7 +1687,8 @@ mod test {
16851687 // If we have a filter that touches partition columns only and is dynamic, it should prune even if there are no stats.
16861688 file. statistics = Some ( Arc :: new ( Statistics :: new_unknown ( & file_schema) ) ) ;
16871689 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
1688- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1690+ let predicate =
1691+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16891692 let opener = make_opener ( predicate) ;
16901693 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16911694 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1694,7 +1697,8 @@ mod test {
16941697
16951698 // Similarly a filter that combines partition and data columns should prune even if there are no stats.
16961699 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "a" ) . eq ( lit ( 42 ) ) ) ;
1697- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1700+ let predicate =
1701+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16981702 let opener = make_opener ( predicate) ;
16991703 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
17001704 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
0 commit comments