@@ -1407,7 +1407,7 @@ mod test {
14071407
14081408 // A filter on "a" should not exclude any rows even if it matches the data
14091409 let expr = col ( "a" ) . eq ( lit ( 1 ) ) ;
1410- let predicate = logical2physical ( & expr, & schema) ;
1410+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
14111411 let opener = make_opener ( predicate) ;
14121412 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14131413 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1416,7 +1416,7 @@ mod test {
14161416
14171417 // A filter on `b = 5.0` should exclude all rows
14181418 let expr = col ( "b" ) . eq ( lit ( ScalarValue :: Float32 ( Some ( 5.0 ) ) ) ) ;
1419- let predicate = logical2physical ( & expr, & schema) ;
1419+ let predicate = logical2physical ( & expr, Arc :: clone ( & schema) ) ;
14201420 let opener = make_opener ( predicate) ;
14211421 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
14221422 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1462,7 +1462,8 @@ mod test {
14621462 let expr = col ( "part" ) . eq ( lit ( 1 ) ) ;
14631463 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14641464 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1465- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1465+ let predicate =
1466+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
14661467 let opener = make_opener ( predicate) ;
14671468 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
14681469 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1473,7 +1474,7 @@ mod test {
14731474 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
14741475 // Mark the expression as dynamic even if it's not to force partition pruning to happen
14751476 // Otherwise we assume it already happened at the planning stage and won't re-do the work here
1476- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1477+ let predicate = make_dynamic_expr ( logical2physical ( & expr, table_schema) ) ;
14771478 let opener = make_opener ( predicate) ;
14781479 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
14791480 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1529,7 +1530,7 @@ mod test {
15291530
15301531 // Filter should match the partition value and file statistics
15311532 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1532- let predicate = logical2physical ( & expr, & table_schema) ;
1533+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15331534 let opener = make_opener ( predicate) ;
15341535 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15351536 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1538,7 +1539,7 @@ mod test {
15381539
15391540 // Should prune based on partition value but not file statistics
15401541 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 1.0 ) ) ) ;
1541- let predicate = logical2physical ( & expr, & table_schema) ;
1542+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15421543 let opener = make_opener ( predicate) ;
15431544 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15441545 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1547,7 +1548,7 @@ mod test {
15471548
15481549 // Should prune based on file statistics but not partition value
15491550 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1550- let predicate = logical2physical ( & expr, & table_schema) ;
1551+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
15511552 let opener = make_opener ( predicate) ;
15521553 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
15531554 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1556,7 +1557,7 @@ mod test {
15561557
15571558 // Should prune based on both partition value and file statistics
15581559 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "b" ) . eq ( lit ( 7.0 ) ) ) ;
1559- let predicate = logical2physical ( & expr, & table_schema) ;
1560+ let predicate = logical2physical ( & expr, table_schema) ;
15601561 let opener = make_opener ( predicate) ;
15611562 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
15621563 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1602,7 +1603,7 @@ mod test {
16021603
16031604 // Filter should match the partition value and data value
16041605 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1605- let predicate = logical2physical ( & expr, & table_schema) ;
1606+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16061607 let opener = make_opener ( predicate) ;
16071608 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16081609 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1611,7 +1612,7 @@ mod test {
16111612
16121613 // Filter should match the partition value but not the data value
16131614 let expr = col ( "part" ) . eq ( lit ( 1 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1614- let predicate = logical2physical ( & expr, & table_schema) ;
1615+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16151616 let opener = make_opener ( predicate) ;
16161617 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16171618 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1620,7 +1621,7 @@ mod test {
16201621
16211622 // Filter should not match the partition value but match the data value
16221623 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 1 ) ) ) ;
1623- let predicate = logical2physical ( & expr, & table_schema) ;
1624+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16241625 let opener = make_opener ( predicate) ;
16251626 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16261627 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1629,7 +1630,7 @@ mod test {
16291630
16301631 // Filter should not match the partition value or the data value
16311632 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . or ( col ( "a" ) . eq ( lit ( 3 ) ) ) ;
1632- let predicate = logical2physical ( & expr, & table_schema) ;
1633+ let predicate = logical2physical ( & expr, table_schema) ;
16331634 let opener = make_opener ( predicate) ;
16341635 let stream = opener. open ( file) . unwrap ( ) . await . unwrap ( ) ;
16351636 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1682,7 +1683,7 @@ mod test {
16821683 // This filter could prune based on statistics, but since it's not dynamic it's not applied for pruning
16831684 // (the assumption is this happened already at planning time)
16841685 let expr = col ( "a" ) . eq ( lit ( 42 ) ) ;
1685- let predicate = logical2physical ( & expr, & table_schema) ;
1686+ let predicate = logical2physical ( & expr, Arc :: clone ( & table_schema) ) ;
16861687 let opener = make_opener ( predicate) ;
16871688 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16881689 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1691,7 +1692,8 @@ mod test {
16911692
16921693 // If we make the filter dynamic, it should prune.
16931694 // This allows dynamic filters to prune partitions/files even if they are populated late into execution.
1694- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1695+ let predicate =
1696+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
16951697 let opener = make_opener ( predicate) ;
16961698 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
16971699 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1701,7 +1703,8 @@ mod test {
17011703 // If we have a filter that touches partition columns only and is dynamic, it should prune even if there are no stats.
17021704 file. statistics = Some ( Arc :: new ( Statistics :: new_unknown ( & file_schema) ) ) ;
17031705 let expr = col ( "part" ) . eq ( lit ( 2 ) ) ;
1704- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1706+ let predicate =
1707+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
17051708 let opener = make_opener ( predicate) ;
17061709 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
17071710 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
@@ -1710,7 +1713,8 @@ mod test {
17101713
17111714 // Similarly a filter that combines partition and data columns should prune even if there are no stats.
17121715 let expr = col ( "part" ) . eq ( lit ( 2 ) ) . and ( col ( "a" ) . eq ( lit ( 42 ) ) ) ;
1713- let predicate = make_dynamic_expr ( logical2physical ( & expr, & table_schema) ) ;
1716+ let predicate =
1717+ make_dynamic_expr ( logical2physical ( & expr, Arc :: clone ( & table_schema) ) ) ;
17141718 let opener = make_opener ( predicate) ;
17151719 let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
17161720 let ( num_batches, num_rows) = count_batches_and_rows ( stream) . await ;
0 commit comments