Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
7fa5afec
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,发现更多精彩内容 >>
提交
7fa5afec
编写于
4月 10, 2020
作者:
P
philip.han
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support transform_null_in option for StorageSet
上级
c6bf39d7
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
59 addition
and
8 deletion
+59
-8
src/Interpreters/Set.cpp
src/Interpreters/Set.cpp
+2
-5
src/Storages/StorageSet.cpp
src/Storages/StorageSet.cpp
+3
-3
tests/queries/0_stateless/01231_operator_null_in.reference
tests/queries/0_stateless/01231_operator_null_in.reference
+16
-0
tests/queries/0_stateless/01231_operator_null_in.sql
tests/queries/0_stateless/01231_operator_null_in.sql
+38
-0
未找到文件。
src/Interpreters/Set.cpp
浏览文件 @
7fa5afec
...
...
@@ -86,11 +86,8 @@ void NO_INLINE Set::insertFromBlockImplCase(
if
constexpr
(
has_null_map
)
{
if
((
*
null_map
)[
i
])
{
if
(
transform_null_in
)
{
has_null
=
true
;
}
if
constexpr
(
build_filter
)
{
...
...
@@ -397,7 +394,7 @@ void NO_INLINE Set::executeImplCase(
{
if
(
has_null_map
&&
(
*
null_map
)[
i
])
{
if
(
has_null
)
if
(
transform_null_in
&&
has_null
)
vec_res
[
i
]
=
!
negative
;
else
vec_res
[
i
]
=
negative
;
...
...
src/Storages/StorageSet.cpp
浏览文件 @
7fa5afec
...
...
@@ -112,7 +112,7 @@ StorageSet::StorageSet(
const
ConstraintsDescription
&
constraints_
,
const
Context
&
context_
)
:
StorageSetOrJoinBase
{
relative_path_
,
table_id_
,
columns_
,
constraints_
,
context_
},
set
(
std
::
make_shared
<
Set
>
(
SizeLimits
(),
false
,
context_
.
getSettingsRef
().
transform_null_in
))
set
(
std
::
make_shared
<
Set
>
(
SizeLimits
(),
false
,
true
))
{
Block
header
=
getSampleBlock
();
header
=
header
.
sortColumns
();
...
...
@@ -127,7 +127,7 @@ void StorageSet::finishInsert() { set->finishInsert(); }
size_t
StorageSet
::
getSize
()
const
{
return
set
->
getTotalRowCount
();
}
void
StorageSet
::
truncate
(
const
ASTPtr
&
,
const
Context
&
context
,
TableStructureWriteLockHolder
&
)
void
StorageSet
::
truncate
(
const
ASTPtr
&
,
const
Context
&
,
TableStructureWriteLockHolder
&
)
{
Poco
::
File
(
path
).
remove
(
true
);
Poco
::
File
(
path
).
createDirectories
();
...
...
@@ -137,7 +137,7 @@ void StorageSet::truncate(const ASTPtr &, const Context & context, TableStructur
header
=
header
.
sortColumns
();
increment
=
0
;
set
=
std
::
make_shared
<
Set
>
(
SizeLimits
(),
false
,
context
.
getSettingsRef
().
transform_null_in
);
set
=
std
::
make_shared
<
Set
>
(
SizeLimits
(),
false
,
true
);
set
->
setHeader
(
header
);
}
...
...
tests/queries/0_stateless/01231_operator_null_in.reference
浏览文件 @
7fa5afec
...
...
@@ -62,3 +62,19 @@
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
tests/queries/0_stateless/01231_operator_null_in.sql
浏览文件 @
7fa5afec
...
...
@@ -40,8 +40,46 @@ SELECT count() == 3 FROM null_in WHERE i global not in (1, 3);
SELECT
count
()
==
3
FROM
null_in
WHERE
i
global
not
in
range
(
4
);
SELECT
count
()
==
3
FROM
null_in
WHERE
s
global
not
in
(
'1'
,
'3'
);
DROP
TABLE
IF
EXISTS
test_set
;
CREATE
TABLE
test_set
(
i
Nullable
(
int
))
ENGINE
=
Set
();
INSERT
INTO
test_set
VALUES
(
1
),
(
NULL
);
SET
transform_null_in
=
0
;
SELECT
count
()
==
1
FROM
null_in
WHERE
i
in
test_set
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
not
in
test_set
;
SELECT
count
()
==
1
FROM
null_in
WHERE
i
global
in
test_set
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
global
not
in
test_set
;
SET
transform_null_in
=
1
;
SELECT
count
()
==
3
FROM
null_in
WHERE
i
in
test_set
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
not
in
test_set
;
SELECT
count
()
==
3
FROM
null_in
WHERE
i
global
in
test_set
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
global
not
in
test_set
;
-- Create with transform_null_in
CREATE
TABLE
test_set2
(
i
Nullable
(
int
))
ENGINE
=
Set
();
INSERT
INTO
test_set2
VALUES
(
1
),
(
NULL
);
SET
transform_null_in
=
0
;
SELECT
count
()
==
1
FROM
null_in
WHERE
i
in
test_set2
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
not
in
test_set2
;
SELECT
count
()
==
1
FROM
null_in
WHERE
i
global
in
test_set2
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
global
not
in
test_set2
;
SET
transform_null_in
=
1
;
SELECT
count
()
==
3
FROM
null_in
WHERE
i
in
test_set2
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
not
in
test_set2
;
SELECT
count
()
==
3
FROM
null_in
WHERE
i
global
in
test_set2
;
SELECT
count
()
==
2
FROM
null_in
WHERE
i
global
not
in
test_set2
;
DROP
TABLE
IF
EXISTS
test_set
;
DROP
TABLE
IF
EXISTS
null_in
;
DROP
TABLE
IF
EXISTS
null_in_subquery
;
CREATE
TABLE
null_in_subquery
(
dt
DateTime
,
idx
int
,
i
Nullable
(
UInt64
))
ENGINE
=
MergeTree
()
PARTITION
BY
dt
ORDER
BY
idx
;
INSERT
INTO
null_in_subquery
SELECT
number
%
3
,
number
,
number
FROM
system
.
numbers
LIMIT
99999
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录