Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
a77ec35c
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,发现更多精彩内容 >>
提交
a77ec35c
编写于
6月 12, 2014
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dbms: JOINs: development [#METR-11370].
上级
0ba0894a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
38 addition
and
34 deletion
+38
-34
dbms/include/DB/Interpreters/ExpressionAnalyzer.h
dbms/include/DB/Interpreters/ExpressionAnalyzer.h
+0
-1
dbms/src/Interpreters/ExpressionAnalyzer.cpp
dbms/src/Interpreters/ExpressionAnalyzer.cpp
+36
-33
dbms/src/Parsers/ParserSelectQuery.cpp
dbms/src/Parsers/ParserSelectQuery.cpp
+2
-0
未找到文件。
dbms/include/DB/Interpreters/ExpressionAnalyzer.h
浏览文件 @
a77ec35c
...
...
@@ -133,7 +133,6 @@ private:
AggregateDescriptions
aggregate_descriptions
;
std
::
unordered_map
<
String
,
SetPtr
>
sets_with_subqueries
;
std
::
unordered_map
<
String
,
JoinPtr
>
joins_with_subqueries
;
typedef
std
::
unordered_map
<
String
,
ASTPtr
>
Aliases
;
Aliases
aliases
;
...
...
dbms/src/Interpreters/ExpressionAnalyzer.cpp
浏览文件 @
a77ec35c
...
...
@@ -1178,35 +1178,6 @@ void ExpressionAnalyzer::getActionsImpl(ASTPtr ast, bool no_subqueries, bool onl
actions_stack
.
addAction
(
ExpressionActions
::
Action
::
addColumn
(
column
));
}
else
if
(
ASTJoin
*
node
=
dynamic_cast
<
ASTJoin
*>
(
&*
ast
))
{
auto
&
join_keys_expr_list
=
dynamic_cast
<
ASTExpressionList
&>
(
*
node
->
using_expr_list
);
size_t
num_join_keys
=
join_keys_expr_list
.
children
.
size
();
Names
join_key_names
(
num_join_keys
);
for
(
size_t
i
=
0
;
i
<
num_join_keys
;
++
i
)
join_key_names
[
i
]
=
join_keys_expr_list
.
children
[
i
]
->
getColumnName
();
JoinPtr
join
=
new
Join
(
join_key_names
,
settings
.
limits
);
/** Для подзапроса в секции JOIN не действуют ограничения на максимальный размер результата.
* Так как результат этого поздапроса - ещё не результат всего запроса.
* Вместо этого работают ограничения max_rows_in_set, max_bytes_in_set, set_overflow_mode.
* TODO: отдельные ограничения для JOIN.
*/
Context
subquery_context
=
context
;
Settings
subquery_settings
=
context
.
getSettings
();
subquery_settings
.
limits
.
max_result_rows
=
0
;
subquery_settings
.
limits
.
max_result_bytes
=
0
;
/// Вычисление extremes не имеет смысла и не нужно (если его делать, то в результате всего запроса могут взяться extremes подзапроса).
subquery_settings
.
extremes
=
0
;
subquery_context
.
setSettings
(
subquery_settings
);
InterpreterSelectQuery
interpreter
(
node
->
subquery
,
subquery_context
,
QueryProcessingStage
::
Complete
,
subquery_depth
+
1
);
join
->
setSource
(
interpreter
.
execute
());
joins_with_subqueries
[
node
->
subquery
->
getColumnName
()]
=
join
;
}
else
{
for
(
ASTs
::
iterator
it
=
ast
->
children
.
begin
();
it
!=
ast
->
children
.
end
();
++
it
)
...
...
@@ -1473,10 +1444,42 @@ Sets ExpressionAnalyzer::getSetsWithSubqueries()
Joins
ExpressionAnalyzer
::
getJoinsWithSubqueries
()
{
Joins
res
;
for
(
auto
&
s
:
joins_with_subqueries
)
res
.
push_back
(
s
.
second
);
return
res
;
std
::
cerr
<<
__PRETTY_FUNCTION__
<<
std
::
endl
;
if
(
select_query
->
join
)
{
std
::
cerr
<<
"Found JOIN"
<<
std
::
endl
;
auto
&
node
=
dynamic_cast
<
ASTJoin
&>
(
*
select_query
->
join
);
auto
&
join_keys_expr_list
=
dynamic_cast
<
ASTExpressionList
&>
(
*
node
.
using_expr_list
);
size_t
num_join_keys
=
join_keys_expr_list
.
children
.
size
();
Names
join_key_names
(
num_join_keys
);
for
(
size_t
i
=
0
;
i
<
num_join_keys
;
++
i
)
join_key_names
[
i
]
=
join_keys_expr_list
.
children
[
i
]
->
getColumnName
();
JoinPtr
join
=
new
Join
(
join_key_names
,
settings
.
limits
);
/** Для подзапроса в секции JOIN не действуют ограничения на максимальный размер результата.
* Так как результат этого поздапроса - ещё не результат всего запроса.
* Вместо этого работают ограничения max_rows_in_set, max_bytes_in_set, set_overflow_mode.
* TODO: отдельные ограничения для JOIN.
*/
Context
subquery_context
=
context
;
Settings
subquery_settings
=
context
.
getSettings
();
subquery_settings
.
limits
.
max_result_rows
=
0
;
subquery_settings
.
limits
.
max_result_bytes
=
0
;
/// Вычисление extremes не имеет смысла и не нужно (если его делать, то в результате всего запроса могут взяться extremes подзапроса).
subquery_settings
.
extremes
=
0
;
subquery_context
.
setSettings
(
subquery_settings
);
InterpreterSelectQuery
interpreter
(
node
.
subquery
->
children
[
0
],
subquery_context
,
QueryProcessingStage
::
Complete
,
subquery_depth
+
1
);
join
->
setSource
(
interpreter
.
execute
());
return
Joins
(
1
,
join
);
}
return
Joins
();
}
...
...
dbms/src/Parsers/ParserSelectQuery.cpp
浏览文件 @
a77ec35c
...
...
@@ -280,6 +280,8 @@ bool ParserSelectQuery::parseImpl(Pos & pos, Pos end, ASTPtr & node, Expected &
select_query
->
children
.
push_back
(
select_query
->
table
);
if
(
select_query
->
array_join_expression_list
)
select_query
->
children
.
push_back
(
select_query
->
array_join_expression_list
);
if
(
select_query
->
join
)
select_query
->
children
.
push_back
(
select_query
->
join
);
if
(
select_query
->
sample_size
)
select_query
->
children
.
push_back
(
select_query
->
sample_size
);
if
(
select_query
->
where_expression
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录