Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
3e131579
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,发现更多精彩内容 >>
提交
3e131579
编写于
12月 27, 2019
作者:
C
chertus
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
better engine Join tests
上级
b75771be
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
100 addition
and
14 deletion
+100
-14
dbms/src/Storages/StorageJoin.cpp
dbms/src/Storages/StorageJoin.cpp
+12
-10
dbms/tests/queries/0_stateless/01051_all_join_engine.reference
...tests/queries/0_stateless/01051_all_join_engine.reference
+32
-0
dbms/tests/queries/0_stateless/01051_all_join_engine.sql
dbms/tests/queries/0_stateless/01051_all_join_engine.sql
+56
-0
dbms/tests/queries/0_stateless/01051_new_any_join_engine.reference
...s/queries/0_stateless/01051_new_any_join_engine.reference
+0
-1
dbms/tests/queries/0_stateless/01051_new_any_join_engine.sql
dbms/tests/queries/0_stateless/01051_new_any_join_engine.sql
+0
-3
未找到文件。
dbms/src/Storages/StorageJoin.cpp
浏览文件 @
3e131579
...
...
@@ -140,35 +140,36 @@ void registerStorageJoin(StorageFactory & factory)
{
const
String
strictness_str
=
Poco
::
toLower
(
*
opt_strictness_id
);
if
(
strictness_str
==
"any"
||
strictness_str
==
"
\'
any
\'
"
)
if
(
strictness_str
==
"any"
)
{
if
(
old_any_join
)
strictness
=
ASTTableJoin
::
Strictness
::
RightAny
;
else
strictness
=
ASTTableJoin
::
Strictness
::
Any
;
}
else
if
(
strictness_str
==
"all"
||
strictness_str
==
"
\'
all
\'
"
)
else
if
(
strictness_str
==
"all"
)
strictness
=
ASTTableJoin
::
Strictness
::
All
;
else
if
(
strictness_str
==
"semi"
||
strictness_str
==
"
\'
semi
\'
"
)
else
if
(
strictness_str
==
"semi"
)
strictness
=
ASTTableJoin
::
Strictness
::
Semi
;
else
if
(
strictness_str
==
"anti"
||
strictness_str
==
"
\'
anti
\'
"
)
else
if
(
strictness_str
==
"anti"
)
strictness
=
ASTTableJoin
::
Strictness
::
Anti
;
}
if
(
strictness
==
ASTTableJoin
::
Strictness
::
Unspecified
)
throw
Exception
(
"First parameter of storage Join must be ANY or ALL or SEMI or ANTI."
,
ErrorCodes
::
BAD_ARGUMENTS
);
throw
Exception
(
"First parameter of storage Join must be ANY or ALL or SEMI or ANTI (without quotes)."
,
ErrorCodes
::
BAD_ARGUMENTS
);
if
(
auto
opt_kind_id
=
tryGetIdentifierName
(
engine_args
[
1
]))
{
const
String
kind_str
=
Poco
::
toLower
(
*
opt_kind_id
);
if
(
kind_str
==
"left"
||
kind_str
==
"
\'
left
\'
"
)
if
(
kind_str
==
"left"
)
kind
=
ASTTableJoin
::
Kind
::
Left
;
else
if
(
kind_str
==
"inner"
||
kind_str
==
"
\'
inner
\'
"
)
else
if
(
kind_str
==
"inner"
)
kind
=
ASTTableJoin
::
Kind
::
Inner
;
else
if
(
kind_str
==
"right"
||
kind_str
==
"
\'
right
\'
"
)
else
if
(
kind_str
==
"right"
)
kind
=
ASTTableJoin
::
Kind
::
Right
;
else
if
(
kind_str
==
"full"
||
kind_str
==
"
\'
full
\'
"
)
else
if
(
kind_str
==
"full"
)
{
if
(
strictness
==
ASTTableJoin
::
Strictness
::
Any
)
strictness
=
ASTTableJoin
::
Strictness
::
RightAny
;
...
...
@@ -177,7 +178,8 @@ void registerStorageJoin(StorageFactory & factory)
}
if
(
kind
==
ASTTableJoin
::
Kind
::
Comma
)
throw
Exception
(
"Second parameter of storage Join must be LEFT or INNER or RIGHT or FULL."
,
ErrorCodes
::
BAD_ARGUMENTS
);
throw
Exception
(
"Second parameter of storage Join must be LEFT or INNER or RIGHT or FULL (without quotes)."
,
ErrorCodes
::
BAD_ARGUMENTS
);
Names
key_names
;
key_names
.
reserve
(
engine_args
.
size
()
-
2
);
...
...
dbms/tests/queries/0_stateless/01051_all_join_engine.reference
0 → 100644
浏览文件 @
3e131579
left
0 a1
1 a2
2 a3 b1
2 a3 b2
3 a4
4 a5 b3
4 a5 b4
4 a5 b5
inner
2 a3 b1
2 a3 b2
4 a5 b3
4 a5 b4
4 a5 b5
right
2 a3 b1
2 a3 b2
4 a5 b3
4 a5 b4
4 a5 b5
5 b6
full
0 a1
1 a2
2 a3 b1
2 a3 b2
3 a4
4 a5 b3
4 a5 b4
4 a5 b5
5 b6
dbms/tests/queries/0_stateless/01051_all_join_engine.sql
0 → 100644
浏览文件 @
3e131579
DROP
TABLE
IF
EXISTS
t1
;
DROP
TABLE
IF
EXISTS
left_join
;
DROP
TABLE
IF
EXISTS
inner_join
;
DROP
TABLE
IF
EXISTS
right_join
;
DROP
TABLE
IF
EXISTS
full_join
;
CREATE
TABLE
t1
(
x
UInt32
,
str
String
)
engine
=
Memory
;
CREATE
TABLE
left_join
(
x
UInt32
,
s
String
)
engine
=
Join
(
ALL
,
LEFT
,
x
);
CREATE
TABLE
inner_join
(
x
UInt32
,
s
String
)
engine
=
Join
(
ALL
,
INNER
,
x
);
CREATE
TABLE
right_join
(
x
UInt32
,
s
String
)
engine
=
Join
(
ALL
,
RIGHT
,
x
);
CREATE
TABLE
full_join
(
x
UInt32
,
s
String
)
engine
=
Join
(
ALL
,
FULL
,
x
);
INSERT
INTO
t1
(
x
,
str
)
VALUES
(
0
,
'a1'
),
(
1
,
'a2'
),
(
2
,
'a3'
),
(
3
,
'a4'
),
(
4
,
'a5'
);
INSERT
INTO
left_join
(
x
,
s
)
VALUES
(
2
,
'b1'
),
(
2
,
'b2'
),
(
4
,
'b3'
),
(
4
,
'b4'
),
(
4
,
'b5'
),
(
5
,
'b6'
);
INSERT
INTO
inner_join
(
x
,
s
)
VALUES
(
2
,
'b1'
),
(
2
,
'b2'
),
(
4
,
'b3'
),
(
4
,
'b4'
),
(
4
,
'b5'
),
(
5
,
'b6'
);
INSERT
INTO
right_join
(
x
,
s
)
VALUES
(
2
,
'b1'
),
(
2
,
'b2'
),
(
4
,
'b3'
),
(
4
,
'b4'
),
(
4
,
'b5'
),
(
5
,
'b6'
);
INSERT
INTO
full_join
(
x
,
s
)
VALUES
(
2
,
'b1'
),
(
2
,
'b2'
),
(
4
,
'b3'
),
(
4
,
'b4'
),
(
4
,
'b5'
),
(
5
,
'b6'
);
SET
join_use_nulls
=
0
;
SELECT
'left'
;
SELECT
*
FROM
t1
LEFT
JOIN
left_join
j
USING
(
x
)
ORDER
BY
x
,
str
,
s
;
SELECT
'inner'
;
SELECT
*
FROM
t1
INNER
JOIN
inner_join
j
USING
(
x
)
ORDER
BY
x
,
str
,
s
;
SELECT
'right'
;
SELECT
*
FROM
t1
RIGHT
JOIN
right_join
j
USING
(
x
)
ORDER
BY
x
,
str
,
s
;
SELECT
'full'
;
SELECT
*
FROM
t1
FULL
JOIN
full_join
j
USING
(
x
)
ORDER
BY
x
,
str
,
s
;
-- TODO
-- SET join_use_nulls = 1;
--
-- SELECT 'left (join_use_nulls)';
-- SELECT * FROM t1 LEFT JOIN left_join j USING(x) ORDER BY x, str, s;
--
-- SELECT 'inner (join_use_nulls)';
-- SELECT * FROM t1 INNER JOIN inner_join j USING(x) ORDER BY x, str, s;
--
-- SELECT 'right (join_use_nulls)';
-- SELECT * FROM t1 RIGHT JOIN right_join j USING(x) ORDER BY x, str, s;
--
-- SELECT 'full (join_use_nulls)';
-- SELECT * FROM t1 FULL JOIN full_join j USING(x) ORDER BY x, str, s;
DROP
TABLE
t1
;
DROP
TABLE
left_join
;
DROP
TABLE
inner_join
;
DROP
TABLE
right_join
;
DROP
TABLE
full_join
;
dbms/tests/queries/0_stateless/01051_new_any_join_engine.reference
浏览文件 @
3e131579
...
...
@@ -16,7 +16,6 @@ any right
5 b6
semi left
2 a3 b1
2 a6 b1
4 a5 b3
semi right
2 a3 b1
...
...
dbms/tests/queries/0_stateless/01051_new_any_join_engine.sql
浏览文件 @
3e131579
...
...
@@ -45,9 +45,6 @@ SELECT * FROM t1 ANY INNER JOIN any_inner_join j USING(x) ORDER BY x, str, s;
SELECT
'any right'
;
SELECT
*
FROM
t1
ANY
RIGHT
JOIN
any_right_join
j
USING
(
x
)
ORDER
BY
x
,
str
,
s
;
INSERT
INTO
t1
(
x
,
str
)
VALUES
(
2
,
'a6'
);
SELECT
'semi left'
;
SELECT
*
FROM
t1
SEMI
LEFT
JOIN
semi_left_join
j
USING
(
x
)
ORDER
BY
x
,
str
,
s
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录