Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
4e54056c
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,发现更多精彩内容 >>
提交
4e54056c
编写于
9月 09, 2015
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dbms: allowed to specify duplicate columns in JOIN subquery [#METR-17664].
上级
64d47f35
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
19 addition
and
2 deletion
+19
-2
dbms/src/Interpreters/ExpressionAnalyzer.cpp
dbms/src/Interpreters/ExpressionAnalyzer.cpp
+2
-1
dbms/src/Parsers/ASTSelectQuery.cpp
dbms/src/Parsers/ASTSelectQuery.cpp
+5
-1
dbms/tests/queries/0_stateless/00225_join_duplicate_columns.reference
...ueries/0_stateless/00225_join_duplicate_columns.reference
+3
-0
dbms/tests/queries/0_stateless/00225_join_duplicate_columns.sql
...ests/queries/0_stateless/00225_join_duplicate_columns.sql
+9
-0
未找到文件。
dbms/src/Interpreters/ExpressionAnalyzer.cpp
浏览文件 @
4e54056c
...
...
@@ -2251,7 +2251,8 @@ void ExpressionAnalyzer::collectJoinedColumns(NameSet & joined_columns, NamesAnd
for
(
const
auto
i
:
ext
::
range
(
0
,
nested_result_sample
.
columns
()))
{
const
auto
&
col
=
nested_result_sample
.
getByPosition
(
i
);
if
(
join_key_names_right
.
end
()
==
std
::
find
(
join_key_names_right
.
begin
(),
join_key_names_right
.
end
(),
col
.
name
))
if
(
join_key_names_right
.
end
()
==
std
::
find
(
join_key_names_right
.
begin
(),
join_key_names_right
.
end
(),
col
.
name
)
&&
!
joined_columns
.
count
(
col
.
name
))
/// Дублирующиеся столбцы в подзапросе для JOIN-а не имеют смысла.
{
joined_columns
.
insert
(
col
.
name
);
joined_columns_name_type
.
emplace_back
(
col
.
name
,
col
.
type
);
...
...
dbms/src/Parsers/ASTSelectQuery.cpp
浏览文件 @
4e54056c
...
...
@@ -78,6 +78,8 @@ void ASTSelectQuery::rewriteSelectExpressionList(const Names & column_names)
using
Mapping
=
std
::
vector
<
Arrow
>
;
Mapping
mapping
(
asts
.
size
());
/// На какой позиции в SELECT-выражении находится соответствующий столбец из column_names.
std
::
vector
<
size_t
>
from
(
column_names
.
size
());
/// Не будем выбрасывать выражения, содержащие функцию arrayJoin.
...
...
@@ -106,6 +108,8 @@ void ASTSelectQuery::rewriteSelectExpressionList(const Names & column_names)
}
auto
to
=
from
;
/// Теперь from - список позиций column_names по возрастанию.
std
::
sort
(
from
.
begin
(),
from
.
end
());
for
(
size_t
i
=
0
;
i
<
column_names
.
size
();
++
i
)
...
...
@@ -130,7 +134,7 @@ void ASTSelectQuery::rewriteSelectExpressionList(const Names & column_names)
/** NOTE: Может показаться, что мы могли испортить запрос, выбросив выражение с алиасом, который используется где-то еще.
* Такого произойти не может, потому что этот метод вызывается всегда для запроса, на котором хоть раз создавали
* ExpressionAnalyzer, что гарантирует, что в нем все алиасы уже подставлены. Не совсем очевидная логика
:)
* ExpressionAnalyzer, что гарантирует, что в нем все алиасы уже подставлены. Не совсем очевидная логика
.
*/
}
...
...
dbms/tests/queries/0_stateless/00225_join_duplicate_columns.reference
0 → 100644
浏览文件 @
4e54056c
0
2
42 1 1 0 0
dbms/tests/queries/0_stateless/00225_join_duplicate_columns.sql
0 → 100644
浏览文件 @
4e54056c
select
b
from
(
select
1
as
a
,
42
as
c
)
any
left
join
(
select
2
as
b
,
2
as
b
,
41
as
c
)
using
c
;
select
b
from
(
select
1
as
a
,
42
as
c
)
any
left
join
(
select
2
as
b
,
2
as
b
,
42
as
c
)
using
c
;
select
c
,
a
,
a
,
b
,
b
from
(
select
1
as
a
,
1
as
a
,
42
as
c
group
by
c
order
by
a
,
c
)
any
left
join
(
select
2
as
b
,
2
as
b
,
41
as
c
group
by
c
order
by
b
,
c
)
using
c
order
by
b
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录