@@ -1350,7 +1350,7 @@ mod test {
13501350
13511351 // A filter on "a" should not exclude any rows even if it matches the data
13521352 let expr = col ( "a" ) . eq ( lit ( 1 ) ) ;
1353- let predicate = logical2physical ( & expr, & schema) ;
1353+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
13541354 let opener = make_opener ( predicate) ;
13551355 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
13561356 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1359,7 +1359,7 @@ mod test {
13591359
13601360 // A filter on `b = 5.0` should exclude all rows
13611361 let expr = col ( "b" ) . eq ( lit ( ScalarValue :: Float32 ( Some ( 5.0 ) ) ) ) ;
1362- let predicate = logical2physical ( & expr, & schema) ;
1362+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
13631363 let opener = make_opener ( predicate) ;
13641364 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
13651365 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1405,7 +1405,8 @@ mod test {
14051405 let expr = col ( "part" ) . eq ( lit ( 1 ) ) ;
14061406 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14071407 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1408- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1408+ let predicate =
1409+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
14091410 let opener = make_opener ( predicate) ;
14101411 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14111412 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1416,7 +1417,7 @@ mod test {
14161417 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
14171418 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14181419 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1419- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1420+ let predicate = make_dynamic_expr ( logical2physical ( & expr, table_schema) ) ;
14201421 let opener = make_opener ( predicate) ;
14211422 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
14221423 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1472,7 +1473,7 @@ mod test {
14721473
14731474 // Filter should match the partition value and file statistics
14741475 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1475- let predicate = logical2physical ( & expr, & table_schema) ;
1476+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
14761477 let opener = make_opener ( predicate) ;
14771478 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14781479 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1481,7 +1482,7 @@ mod test {
14811482
14821483 // Should prune based on partition value but not file statistics
14831484 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1484- let predicate = logical2physical ( & expr, & table_schema) ;
1485+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
14851486 let opener = make_opener ( predicate) ;
14861487 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14871488 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1490,7 +1491,7 @@ mod test {
14901491
14911492 // Should prune based on file statistics but not partition value
14921493 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1493- let predicate = logical2physical ( & expr, & table_schema) ;
1494+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
14941495 let opener = make_opener ( predicate) ;
14951496 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14961497 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1499,7 +1500,7 @@ mod test {
14991500
15001501 // Should prune based on both partition value and file statistics
15011502 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1502- let predicate = logical2physical ( & expr, & table_schema) ;
1503+ let predicate = logical2physical ( & expr, table_schema) ;
15031504 let opener = make_opener ( predicate) ;
15041505 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
15051506 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1545,7 +1546,7 @@ mod test {
15451546
15461547 // Filter should match the partition value and data value
15471548 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1548- let predicate = logical2physical ( & expr, & table_schema) ;
1549+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15491550 let opener = make_opener ( predicate) ;
15501551 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15511552 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1554,7 +1555,7 @@ mod test {
15541555
15551556 // Filter should match the partition value but not the data value
15561557 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1557- let predicate = logical2physical ( & expr, & table_schema) ;
1558+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15581559 let opener = make_opener ( predicate) ;
15591560 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15601561 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1563,7 +1564,7 @@ mod test {
15631564
15641565 // Filter should not match the partition value but match the data value
15651566 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1566- let predicate = logical2physical ( & expr, & table_schema) ;
1567+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15671568 let opener = make_opener ( predicate) ;
15681569 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15691570 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1572,7 +1573,7 @@ mod test {
15721573
15731574 // Filter should not match the partition value or the data value
15741575 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1575- let predicate = logical2physical ( & expr, & table_schema) ;
1576+ let predicate = logical2physical ( & expr, table_schema) ;
15761577 let opener = make_opener ( predicate) ;
15771578 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
15781579 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1625,7 +1626,7 @@ mod test {
16251626 // This filter could prune based on statistics, but since it's not dynamic it's not applied for pruning
16261627 // (the assumption is this happened already at planning time)
16271628 let expr = col ( "a" ) . eq ( lit ( 42 ) ) ;
1628- let predicate = logical2physical ( & expr, & table_schema) ;
1629+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16291630 let opener = make_opener ( predicate) ;
16301631 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16311632 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1634,7 +1635,8 @@ mod test {
16341635
16351636 // If we make the filter dynamic, it should prune.
16361637 // This allows dynamic filters to prune partitions/files even if they are populated late into execution.
1637- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1638+ let predicate =
1639+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16381640 let opener = make_opener ( predicate) ;
16391641 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16401642 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1644,7 +1646,8 @@ mod test {
16441646 // If we have a filter that touches partition columns only and is dynamic, it should prune even if there are no stats.
16451647 file. statistics = Some ( Arc :: new ( Statistics :: new_unknown ( & file_schema) ) ) ;
16461648 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
1647- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1649+ let predicate =
1650+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16481651 let opener = make_opener ( predicate) ;
16491652 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16501653 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1653,7 +1656,8 @@ mod test {
16531656
16541657 // Similarly a filter that combines partition and data columns should prune even if there are no stats.
16551658 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "a" ) . eq ( lit ( 42 ) ) ) ;
1656- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1659+ let predicate =
1660+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16571661 let opener = make_opener ( predicate) ;
16581662 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16591663 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
0 commit comments