From 52fd6e3b639daf5a8204007eab806f4777883cc6 Mon Sep 17 00:00:00 2001 From: Yuya Ebihara Date: Sun, 14 Jun 2026 09:45:16 +0900 Subject: [PATCH] Return overflow sentinel in LongLiteral.to(FloatType) --- pyiceberg/expressions/literals.py | 4 ++++ tests/expressions/test_literals.py | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/pyiceberg/expressions/literals.py b/pyiceberg/expressions/literals.py index 1ff8008520..747dbbb796 100644 --- a/pyiceberg/expressions/literals.py +++ b/pyiceberg/expressions/literals.py @@ -317,6 +317,10 @@ def _(self, _: IntegerType) -> Literal[int]: @to.register(FloatType) def _(self, _: FloatType) -> Literal[float]: + if FloatType.max < self.value: + return FloatAboveMax() + elif FloatType.min > self.value: + return FloatBelowMin() return FloatLiteral(float(self.value)) @to.register(DoubleType) diff --git a/tests/expressions/test_literals.py b/tests/expressions/test_literals.py index de9d390775..1b88ef207b 100644 --- a/tests/expressions/test_literals.py +++ b/tests/expressions/test_literals.py @@ -184,6 +184,16 @@ def test_long_to_float_conversion() -> None: assert lit.value == float_lit.value +def test_long_to_float_outside_bound() -> None: + big_lit = literal(10**39) + above_max_lit = big_lit.to(FloatType()) + assert above_max_lit == FloatAboveMax() + + small_lit = literal(-(10**39)) + below_min_lit = small_lit.to(FloatType()) + assert below_min_lit == FloatBelowMin() + + def test_long_to_double_conversion() -> None: lit = literal(34).to(LongType()) dbl_lit = lit.to(DoubleType())