Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
654245af
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
654245af
编写于
9月 14, 2020
作者:
A
Amos Bird
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix signedness conversion monotonicity
上级
c2f762e2
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
17 addition
and
17 deletion
+17
-17
src/Functions/FunctionsConversion.h
src/Functions/FunctionsConversion.h
+7
-17
tests/queries/0_stateless/01496_signedness_conversion_monotonicity.reference
...teless/01496_signedness_conversion_monotonicity.reference
+1
-0
tests/queries/0_stateless/01496_signedness_conversion_monotonicity.sql
.../0_stateless/01496_signedness_conversion_monotonicity.sql
+9
-0
未找到文件。
src/Functions/FunctionsConversion.h
浏览文件 @
654245af
...
...
@@ -1570,25 +1570,15 @@ struct ToNumberMonotonicity
if
(
left
.
isNull
()
||
right
.
isNull
())
return
{};
if
(
from_is_unsigned
==
to_is_unsigned
)
{
/// all bits other than that fits, must be same.
if
(
divideByRangeOfType
(
left
.
get
<
UInt64
>
())
==
divideByRangeOfType
(
right
.
get
<
UInt64
>
()))
return
{
true
};
/// Function cannot be monotonic when left and right are not on the same ranges.
if
(
divideByRangeOfType
(
left
.
get
<
UInt64
>
())
!=
divideByRangeOfType
(
right
.
get
<
UInt64
>
()))
return
{};
}
else
{
/// When signedness is changed, it's also required for arguments to be from the same half.
/// And they must be in the same half after converting to the result type.
if
(
left_in_first_half
==
right_in_first_half
&&
(
T
(
left
.
get
<
Int64
>
())
>=
0
)
==
(
T
(
right
.
get
<
Int64
>
())
>=
0
)
&&
divideByRangeOfType
(
left
.
get
<
UInt64
>
())
==
divideByRangeOfType
(
right
.
get
<
UInt64
>
()))
return
{
true
};
return
{};
}
if
(
to_is_unsigned
)
return
{
true
};
else
// If To is signed, it's possible that the signedness is different after conversion. So we check it explicitly.
return
{(
T
(
left
.
get
<
UInt64
>
())
>=
0
)
==
(
T
(
right
.
get
<
UInt64
>
())
>=
0
)};
}
__builtin_unreachable
();
...
...
tests/queries/0_stateless/01496_signedness_conversion_monotonicity.reference
0 → 100644
浏览文件 @
654245af
1
tests/queries/0_stateless/01496_signedness_conversion_monotonicity.sql
0 → 100644
浏览文件 @
654245af
drop
table
if
exists
test1
;
create
table
test1
(
i
Int64
)
engine
MergeTree
order
by
i
;
insert
into
test1
values
(
53
),
(
1777
),
(
53284
);
select
count
()
from
test1
where
toInt16
(
i
)
=
1777
;
drop
table
if
exists
test1
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录