Skip to content

Commit 7733923

Browse files
committed
Use build_balanced_tree in And expression
1 parent f978d01 commit 7733923

3 files changed

Lines changed: 17 additions & 17 deletions

File tree

pyiceberg/expressions/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from __future__ import annotations
1919

2020
from abc import ABC, abstractmethod
21-
from functools import cached_property, reduce
21+
from functools import cached_property
2222
from typing import (
2323
Any,
2424
Callable,
@@ -255,7 +255,7 @@ class And(BooleanExpression):
255255

256256
def __new__(cls, left: BooleanExpression, right: BooleanExpression, *rest: BooleanExpression) -> BooleanExpression: # type: ignore
257257
if rest:
258-
return reduce(And, (left, right, *rest))
258+
return _build_balanced_tree(And, (left, right, *rest))
259259
if left is AlwaysFalse() or right is AlwaysFalse():
260260
return AlwaysFalse()
261261
elif left is AlwaysTrue():

tests/expressions/test_expressions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ def test_negate(lhs: BooleanExpression, rhs: BooleanExpression) -> None:
574574
[
575575
(
576576
And(ExpressionA(), ExpressionB(), ExpressionA()),
577-
And(And(ExpressionA(), ExpressionB()), ExpressionA()),
577+
And(ExpressionA(), And(ExpressionB(), ExpressionA())),
578578
),
579579
(
580580
Or(ExpressionA(), ExpressionB(), ExpressionA()),

tests/expressions/test_visitors.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,9 @@ def test_boolean_expression_visitor() -> None:
235235
"OR",
236236
"EQUALTO",
237237
"NOT",
238-
"AND",
239238
"NOTEQUALTO",
240239
"AND",
240+
"AND",
241241
]
242242

243243

@@ -335,28 +335,28 @@ def test_always_false_or_always_true_expression_binding(table_schema_simple: Sch
335335
),
336336
),
337337
And(
338-
And(
339-
BoundIn(
340-
BoundReference(
341-
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
342-
accessor=Accessor(position=0, inner=None),
343-
),
344-
{literal("bar"), literal("baz")},
338+
BoundIn(
339+
BoundReference(
340+
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
341+
accessor=Accessor(position=0, inner=None),
345342
),
343+
{literal("bar"), literal("baz")},
344+
),
345+
And(
346346
BoundEqualTo[int](
347347
BoundReference(
348348
field=NestedField(field_id=2, name="bar", field_type=IntegerType(), required=True),
349349
accessor=Accessor(position=1, inner=None),
350350
),
351351
literal(1),
352352
),
353-
),
354-
BoundEqualTo(
355-
BoundReference(
356-
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
357-
accessor=Accessor(position=0, inner=None),
353+
BoundEqualTo(
354+
BoundReference(
355+
field=NestedField(field_id=1, name="foo", field_type=StringType(), required=False),
356+
accessor=Accessor(position=0, inner=None),
357+
),
358+
literal("baz"),
358359
),
359-
literal("baz"),
360360
),
361361
),
362362
),

0 commit comments

Comments
 (0)