@@ -1356,7 +1356,7 @@ mod test {
13561356
13571357 // A filter on "a" should not exclude any rows even if it matches the data
13581358 let expr = col ( "a" ) . eq ( lit ( 1 ) ) ;
1359- let predicate = logical2physical ( & expr, & schema) ;
1359+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
13601360 let opener = make_opener ( predicate) ;
13611361 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
13621362 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1365,7 +1365,7 @@ mod test {
13651365
13661366 // A filter on `b = 5.0` should exclude all rows
13671367 let expr = col ( "b" ) . eq ( lit ( ScalarValue :: Float32 ( Some ( 5.0 ) ) ) ) ;
1368- let predicate = logical2physical ( & expr, & schema) ;
1368+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
13691369 let opener = make_opener ( predicate) ;
13701370 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
13711371 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1411,7 +1411,8 @@ mod test {
14111411 let expr = col ( "part" ) . eq ( lit ( 1 ) ) ;
14121412 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14131413 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1414- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1414+ let predicate =
1415+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
14151416 let opener = make_opener ( predicate) ;
14161417 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14171418 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1422,7 +1423,7 @@ mod test {
14221423 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
14231424 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14241425 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1425- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1426+ let predicate = make_dynamic_expr ( logical2physical ( & expr, table_schema) ) ;
14261427 let opener = make_opener ( predicate) ;
14271428 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
14281429 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1478,7 +1479,7 @@ mod test {
14781479
14791480 // Filter should match the partition value and file statistics
14801481 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1481- let predicate = logical2physical ( & expr, & table_schema) ;
1482+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
14821483 let opener = make_opener ( predicate) ;
14831484 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14841485 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1487,7 +1488,7 @@ mod test {
14871488
14881489 // Should prune based on partition value but not file statistics
14891490 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1490- let predicate = logical2physical ( & expr, & table_schema) ;
1491+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
14911492 let opener = make_opener ( predicate) ;
14921493 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14931494 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1496,7 +1497,7 @@ mod test {
14961497
14971498 // Should prune based on file statistics but not partition value
14981499 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1499- let predicate = logical2physical ( & expr, & table_schema) ;
1500+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15001501 let opener = make_opener ( predicate) ;
15011502 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15021503 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1505,7 +1506,7 @@ mod test {
15051506
15061507 // Should prune based on both partition value and file statistics
15071508 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1508- let predicate = logical2physical ( & expr, & table_schema) ;
1509+ let predicate = logical2physical ( & expr, table_schema) ;
15091510 let opener = make_opener ( predicate) ;
15101511 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
15111512 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1551,7 +1552,7 @@ mod test {
15511552
15521553 // Filter should match the partition value and data value
15531554 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1554- let predicate = logical2physical ( & expr, & table_schema) ;
1555+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15551556 let opener = make_opener ( predicate) ;
15561557 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15571558 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1560,7 +1561,7 @@ mod test {
15601561
15611562 // Filter should match the partition value but not the data value
15621563 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1563- let predicate = logical2physical ( & expr, & table_schema) ;
1564+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15641565 let opener = make_opener ( predicate) ;
15651566 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15661567 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1569,7 +1570,7 @@ mod test {
15691570
15701571 // Filter should not match the partition value but match the data value
15711572 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1572- let predicate = logical2physical ( & expr, & table_schema) ;
1573+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15731574 let opener = make_opener ( predicate) ;
15741575 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15751576 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1578,7 +1579,7 @@ mod test {
15781579
15791580 // Filter should not match the partition value or the data value
15801581 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1581- let predicate = logical2physical ( & expr, & table_schema) ;
1582+ let predicate = logical2physical ( & expr, table_schema) ;
15821583 let opener = make_opener ( predicate) ;
15831584 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
15841585 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1631,7 +1632,7 @@ mod test {
16311632 // This filter could prune based on statistics, but since it's not dynamic it's not applied for pruning
16321633 // (the assumption is this happened already at planning time)
16331634 let expr = col ( "a" ) . eq ( lit ( 42 ) ) ;
1634- let predicate = logical2physical ( & expr, & table_schema) ;
1635+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16351636 let opener = make_opener ( predicate) ;
16361637 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16371638 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1640,7 +1641,8 @@ mod test {
16401641
16411642 // If we make the filter dynamic, it should prune.
16421643 // This allows dynamic filters to prune partitions/files even if they are populated late into execution.
1643- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1644+ let predicate =
1645+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16441646 let opener = make_opener ( predicate) ;
16451647 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16461648 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1650,7 +1652,8 @@ mod test {
16501652 // If we have a filter that touches partition columns only and is dynamic, it should prune even if there are no stats.
16511653 file. statistics = Some ( Arc :: new ( Statistics :: new_unknown ( & file_schema) ) ) ;
16521654 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
1653- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1655+ let predicate =
1656+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16541657 let opener = make_opener ( predicate) ;
16551658 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16561659 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1659,7 +1662,8 @@ mod test {
16591662
16601663 // Similarly a filter that combines partition and data columns should prune even if there are no stats.
16611664 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "a" ) . eq ( lit ( 42 ) ) ) ;
1662- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1665+ let predicate =
1666+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16631667 let opener = make_opener ( predicate) ;
16641668 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16651669 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
0 commit comments