可为空的字典键 + transform_null_in: 拒绝重写导致丢失 PK 优化
作者: clickgapai创建于 2026年9月17日更新于 2026年9月17日
标签comp-query-analyzer
为什么我们认为这是一个错误: InverseDictionaryLookupPass.cpp:485 (常量折叠分支) 和 :531 (IN子查询分支) 请求 getInFunctionNameForPassCreatedNode([src/Analyzer/Utils.cpp:222](https://GitHub.com/ClickHouse/ClickHouse/blob/2d19d1b6e073/src/Analyzer/Utils.cpp#L222)) 来获取要使用的名称。在 Utils.cpp:235 中,辅助函数返回 std::nullopt,因为 canContainNull(Nullable(UInt64)) 为真,并且两个调用位置都使用一个简单的 return; (:488、:534) 来放弃重写。存活的谓词为 equals(dictGet(...), 'x');dictGet 不在 KeyCondition::atom_map 中,因此整个原子是未知的,并且没有衍生范围。
内容来源: ClickHouse/ClickHouse