apache / apache/iceberg-python

Add explicit truthiness semantics for constant BooleanExpressions

未关闭
#3,543 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Python
星标
1.1k
派生
581
平均合并
1 天 17 小时
30 天内合并 PR
78

描述

While this PR can use expression negation via `__invert__,` I think it may be worth supporting Python truthiness for the constant expressions in a follow-up:
```
class AlwaysTrue:
def __bool__(self) -> bool:
return True

class AlwaysFalse:
def __bool__(self) -> bool:
return False
```

That would make patterns like this behave intuitively:
```
if not self.visit_starts_with(term, literal):
return AlwaysTrue()
```

When adding this, we should also be careful that Python truthiness is for control flow, not expression construction: `not expr` returns a Python `bool`, while `~expr` returns a negated BooleanExpression. It would probably be safest for non-constant `BooleanExpression.__bool__` to raise, with only `AlwaysTrue` and `AlwaysFalse` overriding it. The follow-up should also audit optional-expression checks like `expr or AlwaysTrue()` and REST residual/filter handling so explicit `AlwaysFalse()` values are not treated as missing.

_Originally posted by @kevinjqliu in https://github.com/apache/iceberg-python/issues/3503#issuecomment-4763176953_

贡献指南

这个仓库没有索引到贡献指南

调研方向

先定位 BooleanExpression、AlwaysTrue 和 AlwaysFalse,然后检查 issue 中提到的可选表达式检查以及 REST residual/filter 处理。确认只有常量表达式支持 Python truthiness,非​​常量表达式会拒绝它,并且显式的 AlwaysFalse() 值会被保留,而不是被视为缺失。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
databases
Issue 类型
功能
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。