Skip to content

Commit a3072d2

Browse files
authored
fix: Skip Batches Expression for boolean literals (#21310)
1 parent eae47a4 commit a3072d2

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

crates/polars-plan/src/plans/aexpr/predicates/skip_batches.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ fn aexpr_to_skip_batch_predicate_rec(
200200
if let Some(Some(lv)) = constant_evaluate(e, expr_arena, schema, 0) {
201201
if let Some(av) = lv.to_any_value() {
202202
return match av {
203-
AnyValue::Null => Some(lv!(bool: false)),
204-
AnyValue::Boolean(b) => Some(lv!(bool: b)),
203+
AnyValue::Null => Some(lv!(bool: true)),
204+
AnyValue::Boolean(b) => Some(lv!(bool: !b)),
205205
_ => None,
206206
};
207207
}

py-polars/tests/unit/io/test_parquet.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,3 +2869,13 @@ def test_nested_string_slice_utf8_21202() -> None:
28692869
pl.scan_parquet(f).slice(1, 1).collect().to_series(),
28702870
s.slice(1, 1),
28712871
)
2872+
2873+
2874+
def test_filter_true_predicate_21204() -> None:
2875+
f = io.BytesIO()
2876+
2877+
df = pl.DataFrame({"a": [1]})
2878+
df.write_parquet(f)
2879+
f.seek(0)
2880+
lf = pl.scan_parquet(f).filter(pl.lit(True))
2881+
assert_frame_equal(lf.collect(), df)

py-polars/tests/unit/io/test_skip_batch_predicate.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import polars as pl
1010
from polars.meta import get_index_type
11-
from polars.testing import assert_series_equal
11+
from polars.testing import assert_frame_equal, assert_series_equal
1212
from polars.testing.parametric.strategies import series
1313

1414
if TYPE_CHECKING:
@@ -55,6 +55,31 @@ def assert_skp_series(
5555
raise
5656

5757

58+
def test_true_false_predicate() -> None:
59+
true_sbp = pl.lit(True)._skip_batch_predicate({})
60+
false_sbp = pl.lit(False)._skip_batch_predicate({})
61+
null_sbp = pl.lit(None)._skip_batch_predicate({})
62+
63+
df = pl.DataFrame({"len": [1]})
64+
65+
out = df.select(
66+
true=true_sbp,
67+
false=false_sbp,
68+
null=null_sbp,
69+
)
70+
71+
assert_frame_equal(
72+
out,
73+
pl.DataFrame(
74+
{
75+
"true": [False],
76+
"false": [True],
77+
"null": [True],
78+
}
79+
),
80+
)
81+
82+
5883
def test_equality() -> None:
5984
assert_skp_series(
6085
"a",

0 commit comments

Comments
 (0)