Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
60c1ffc8
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,发现更多精彩内容 >>
提交
60c1ffc8
编写于
7月 08, 2020
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement supertype for LowCardinality
上级
1f978022
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
167 addition
and
25 deletion
+167
-25
src/DataTypes/getLeastSupertype.cpp
src/DataTypes/getLeastSupertype.cpp
+25
-25
tests/queries/0_stateless/01377_supertype_low_cardinality.reference
...ies/0_stateless/01377_supertype_low_cardinality.reference
+71
-0
tests/queries/0_stateless/01377_supertype_low_cardinality.sql
...s/queries/0_stateless/01377_supertype_low_cardinality.sql
+71
-0
未找到文件。
src/DataTypes/getLeastSupertype.cpp
浏览文件 @
60c1ffc8
...
@@ -161,62 +161,62 @@ DataTypePtr getLeastSupertype(const DataTypes & types)
...
@@ -161,62 +161,62 @@ DataTypePtr getLeastSupertype(const DataTypes & types)
}
}
}
}
/// For
Nullable
/// For
LowCardinality. This is above Nullable, because LowCardinality can contain Nullable but cannot be inside Nullable.
{
{
bool
have_nullable
=
false
;
bool
have_low_cardinality
=
false
;
bool
have_not_low_cardinality
=
false
;
DataTypes
nested_types
;
DataTypes
nested_types
;
nested_types
.
reserve
(
types
.
size
());
nested_types
.
reserve
(
types
.
size
());
for
(
const
auto
&
type
:
types
)
for
(
const
auto
&
type
:
types
)
{
{
if
(
const
DataType
Nullable
*
type_nullable
=
typeid_cast
<
const
DataTypeNullable
*>
(
type
.
get
()))
if
(
const
DataType
LowCardinality
*
type_low_cardinality
=
typeid_cast
<
const
DataTypeLowCardinality
*>
(
type
.
get
()))
{
{
have_nullable
=
true
;
have_low_cardinality
=
true
;
nested_types
.
emplace_back
(
type_low_cardinality
->
getDictionaryType
());
if
(
!
type_nullable
->
onlyNull
())
nested_types
.
emplace_back
(
type_nullable
->
getNestedType
());
}
}
else
else
{
have_not_low_cardinality
=
true
;
nested_types
.
emplace_back
(
type
);
nested_types
.
emplace_back
(
type
);
}
}
}
if
(
have_nullable
)
/// All LowCardinality gives LowCardinality.
/// LowCardinality with high cardinality gives high cardinality.
if
(
have_low_cardinality
)
{
{
return
std
::
make_shared
<
DataTypeNullable
>
(
getLeastSupertype
(
nested_types
));
if
(
have_not_low_cardinality
)
return
getLeastSupertype
(
nested_types
);
else
return
std
::
make_shared
<
DataTypeLowCardinality
>
(
getLeastSupertype
(
nested_types
));
}
}
}
}
/// For
LowCardinality
/// For
Nullable
{
{
bool
have_low_cardinality
=
false
;
bool
have_nullable
=
false
;
bool
have_not_low_cardinality
=
false
;
DataTypes
nested_types
;
DataTypes
nested_types
;
nested_types
.
reserve
(
types
.
size
());
nested_types
.
reserve
(
types
.
size
());
for
(
const
auto
&
type
:
types
)
for
(
const
auto
&
type
:
types
)
{
{
if
(
const
DataType
LowCardinality
*
type_low_cardinality
=
typeid_cast
<
const
DataTypeLowCardinality
*>
(
type
.
get
()))
if
(
const
DataType
Nullable
*
type_nullable
=
typeid_cast
<
const
DataTypeNullable
*>
(
type
.
get
()))
{
{
have_low_cardinality
=
true
;
have_nullable
=
true
;
nested_types
.
emplace_back
(
type_low_cardinality
->
getDictionaryType
());
if
(
!
type_nullable
->
onlyNull
())
nested_types
.
emplace_back
(
type_nullable
->
getNestedType
());
}
}
else
else
{
have_not_low_cardinality
=
true
;
nested_types
.
emplace_back
(
type
);
nested_types
.
emplace_back
(
type
);
}
}
}
/// All LowCardinality gives LowCardinality.
if
(
have_nullable
)
/// LowCardinality with high cardinality gives high cardinality.
if
(
have_low_cardinality
)
{
{
if
(
have_not_low_cardinality
)
return
std
::
make_shared
<
DataTypeNullable
>
(
getLeastSupertype
(
nested_types
));
return
getLeastSupertype
(
nested_types
);
else
return
std
::
make_shared
<
DataTypeLowCardinality
>
(
getLeastSupertype
(
nested_types
));
}
}
}
}
...
...
tests/queries/0_stateless/01377_supertype_low_cardinality.reference
0 → 100644
浏览文件 @
60c1ffc8
hello
hello
String
String
---
---
hello
hello
hello
hello
---
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
-
hello
hello
---
hello
hello
hello
-
hello
hello
hello
-
hello
hello
hello
-
hello
hello
hello
---
hello
hello
hello
hello
---
['abc','def']
['abc','def']
['abc','def']
tests/queries/0_stateless/01377_supertype_low_cardinality.sql
0 → 100644
浏览文件 @
60c1ffc8
SELECT
'hello'
UNION
ALL
SELECT
toLowCardinality
(
'hello'
);
SELECT
toTypeName
(
x
)
FROM
(
SELECT
'hello'
AS
x
UNION
ALL
SELECT
toLowCardinality
(
'hello'
));
SELECT
'---'
;
create
temporary
table
t1
(
a
String
);
create
temporary
table
t2
(
a
LowCardinality
(
String
));
select
a
from
t1
union
all
select
a
from
t2
;
SELECT
'---'
;
CREATE
TEMPORARY
TABLE
a
(
x
String
);
CREATE
TEMPORARY
TABLE
b
(
x
LowCardinality
(
String
));
CREATE
TEMPORARY
TABLE
c
(
x
Nullable
(
String
));
CREATE
TEMPORARY
TABLE
d
(
x
LowCardinality
(
Nullable
(
String
)));
INSERT
INTO
a
VALUES
(
'hello'
);
INSERT
INTO
b
VALUES
(
'hello'
);
INSERT
INTO
c
VALUES
(
'hello'
);
INSERT
INTO
d
VALUES
(
'hello'
);
SELECT
x
FROM
a
;
SELECT
x
FROM
b
;
SELECT
x
FROM
c
;
SELECT
x
FROM
d
;
SELECT
'---'
;
SELECT
x
FROM
a
UNION
ALL
SELECT
x
FROM
b
;
SELECT
'-'
;
SELECT
x
FROM
a
UNION
ALL
SELECT
x
FROM
c
;
SELECT
'-'
;
SELECT
x
FROM
a
UNION
ALL
SELECT
x
FROM
d
;
SELECT
'-'
;
SELECT
x
FROM
b
UNION
ALL
SELECT
x
FROM
a
;
SELECT
'-'
;
SELECT
x
FROM
b
UNION
ALL
SELECT
x
FROM
c
;
SELECT
'-'
;
SELECT
x
FROM
b
UNION
ALL
SELECT
x
FROM
d
;
SELECT
'-'
;
SELECT
x
FROM
c
UNION
ALL
SELECT
x
FROM
a
;
SELECT
'-'
;
SELECT
x
FROM
c
UNION
ALL
SELECT
x
FROM
b
;
SELECT
'-'
;
SELECT
x
FROM
c
UNION
ALL
SELECT
x
FROM
d
;
SELECT
'-'
;
SELECT
x
FROM
d
UNION
ALL
SELECT
x
FROM
a
;
SELECT
'-'
;
SELECT
x
FROM
d
UNION
ALL
SELECT
x
FROM
c
;
SELECT
'-'
;
SELECT
x
FROM
d
UNION
ALL
SELECT
x
FROM
b
;
SELECT
'---'
;
SELECT
x
FROM
b
UNION
ALL
SELECT
x
FROM
c
UNION
ALL
SELECT
x
FROM
d
;
SELECT
'-'
;
SELECT
x
FROM
a
UNION
ALL
SELECT
x
FROM
c
UNION
ALL
SELECT
x
FROM
d
;
SELECT
'-'
;
SELECT
x
FROM
a
UNION
ALL
SELECT
x
FROM
b
UNION
ALL
SELECT
x
FROM
d
;
SELECT
'-'
;
SELECT
x
FROM
a
UNION
ALL
SELECT
x
FROM
b
UNION
ALL
SELECT
x
FROM
c
;
SELECT
'---'
;
SELECT
x
FROM
a
UNION
ALL
SELECT
x
FROM
b
UNION
ALL
SELECT
x
FROM
c
UNION
ALL
SELECT
x
FROM
d
;
SELECT
'---'
;
SELECT
[
CAST
(
'abc'
AS
LowCardinality
(
String
)),
CAST
(
'def'
AS
Nullable
(
String
))];
SELECT
[
CAST
(
'abc'
AS
LowCardinality
(
String
)),
CAST
(
'def'
AS
FixedString
(
3
))];
SELECT
[
CAST
(
'abc'
AS
LowCardinality
(
String
)),
CAST
(
'def'
AS
LowCardinality
(
FixedString
(
3
)))];
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录