Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
cbf3c34c
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,发现更多精彩内容 >>
提交
cbf3c34c
编写于
12月 19, 2018
作者:
C
chertus
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
minor improvement in ExpressionAnalyzer + array join
上级
b7ce79c4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
29 addition
and
23 deletion
+29
-23
dbms/src/Interpreters/ExpressionAnalyzer.cpp
dbms/src/Interpreters/ExpressionAnalyzer.cpp
+16
-12
dbms/src/Interpreters/ExpressionAnalyzer.h
dbms/src/Interpreters/ExpressionAnalyzer.h
+1
-1
dbms/src/Interpreters/SyntaxAnalyzer.cpp
dbms/src/Interpreters/SyntaxAnalyzer.cpp
+6
-2
dbms/src/Parsers/ASTSelectQuery.cpp
dbms/src/Parsers/ASTSelectQuery.cpp
+5
-7
dbms/src/Parsers/ASTSelectQuery.h
dbms/src/Parsers/ASTSelectQuery.h
+1
-1
未找到文件。
dbms/src/Interpreters/ExpressionAnalyzer.cpp
浏览文件 @
cbf3c34c
...
...
@@ -143,15 +143,17 @@ void ExpressionAnalyzer::analyzeAggregation()
ExpressionActionsPtr
temp_actions
=
std
::
make_shared
<
ExpressionActions
>
(
source_columns
,
context
);
if
(
select_query
&&
select_query
->
array_join_expression_list
())
{
getRootActions
(
select_query
->
array_join_expression_list
(),
true
,
temp_actions
);
addMultipleArrayJoinAction
(
temp_actions
);
array_join_columns
=
temp_actions
->
getSampleBlock
().
getNamesAndTypesList
();
}
if
(
select_query
)
{
bool
is_array_join_left
;
ASTPtr
array_join_expression_list
=
select_query
->
array_join_expression_list
(
is_array_join_left
);
if
(
array_join_expression_list
)
{
getRootActions
(
array_join_expression_list
,
true
,
temp_actions
);
addMultipleArrayJoinAction
(
temp_actions
,
is_array_join_left
);
array_join_columns
=
temp_actions
->
getSampleBlock
().
getNamesAndTypesList
();
}
const
ASTTablesInSelectQueryElement
*
join
=
select_query
->
join
();
if
(
join
)
{
...
...
@@ -512,7 +514,7 @@ void ExpressionAnalyzer::initChain(ExpressionActionsChain & chain, const NamesAn
}
/// "Big" ARRAY JOIN.
void
ExpressionAnalyzer
::
addMultipleArrayJoinAction
(
ExpressionActionsPtr
&
actions
)
const
void
ExpressionAnalyzer
::
addMultipleArrayJoinAction
(
ExpressionActionsPtr
&
actions
,
bool
array_join_is_left
)
const
{
NameSet
result_columns
;
for
(
const
auto
&
result_source
:
syntax
->
array_join_result_to_source
)
...
...
@@ -525,22 +527,24 @@ void ExpressionAnalyzer::addMultipleArrayJoinAction(ExpressionActionsPtr & actio
result_columns
.
insert
(
result_source
.
first
);
}
actions
->
add
(
ExpressionAction
::
arrayJoin
(
result_columns
,
select_query
->
array_join_is_left
()
,
context
));
actions
->
add
(
ExpressionAction
::
arrayJoin
(
result_columns
,
array_join_is_left
,
context
));
}
bool
ExpressionAnalyzer
::
appendArrayJoin
(
ExpressionActionsChain
&
chain
,
bool
only_types
)
{
assertSelect
();
if
(
!
select_query
->
array_join_expression_list
())
bool
is_array_join_left
;
ASTPtr
array_join_expression_list
=
select_query
->
array_join_expression_list
(
is_array_join_left
);
if
(
!
array_join_expression_list
)
return
false
;
initChain
(
chain
,
source_columns
);
ExpressionActionsChain
::
Step
&
step
=
chain
.
steps
.
back
();
getRootActions
(
select_query
->
array_join_expression_list
()
,
only_types
,
step
.
actions
);
getRootActions
(
array_join_expression_list
,
only_types
,
step
.
actions
);
addMultipleArrayJoinAction
(
step
.
actions
);
addMultipleArrayJoinAction
(
step
.
actions
,
is_array_join_left
);
return
true
;
}
...
...
dbms/src/Interpreters/ExpressionAnalyzer.h
浏览文件 @
cbf3c34c
...
...
@@ -240,7 +240,7 @@ private:
/// Find global subqueries in the GLOBAL IN/JOIN sections. Fills in external_tables.
void
initGlobalSubqueriesAndExternalTables
();
void
addMultipleArrayJoinAction
(
ExpressionActionsPtr
&
actions
)
const
;
void
addMultipleArrayJoinAction
(
ExpressionActionsPtr
&
actions
,
bool
is_left
)
const
;
void
addJoinAction
(
ExpressionActionsPtr
&
actions
,
bool
only_types
)
const
;
...
...
dbms/src/Interpreters/SyntaxAnalyzer.cpp
浏览文件 @
cbf3c34c
...
...
@@ -676,9 +676,13 @@ void optimizeUsing(const ASTSelectQuery * select_query)
void
getArrayJoinedColumns
(
ASTPtr
&
query
,
SyntaxAnalyzerResult
&
result
,
const
ASTSelectQuery
*
select_query
,
const
Names
&
source_columns
,
const
NameSet
&
source_columns_set
)
{
if
(
select_query
&&
select_query
->
array_join_expression_list
())
if
(
!
select_query
)
return
;
ASTPtr
array_join_expression_list
=
select_query
->
array_join_expression_list
();
if
(
array_join_expression_list
)
{
ASTs
&
array_join_asts
=
select_query
->
array_join_expression_list
()
->
children
;
ASTs
&
array_join_asts
=
array_join_expression_list
->
children
;
for
(
const
auto
&
ast
:
array_join_asts
)
{
const
String
nested_table_name
=
ast
->
getColumnName
();
...
...
dbms/src/Parsers/ASTSelectQuery.cpp
浏览文件 @
cbf3c34c
...
...
@@ -283,23 +283,21 @@ bool ASTSelectQuery::final() const
}
ASTPtr
ASTSelectQuery
::
array_join_expression_list
()
const
ASTPtr
ASTSelectQuery
::
array_join_expression_list
(
bool
&
is_left
)
const
{
const
ASTArrayJoin
*
array_join
=
getFirstArrayJoin
(
*
this
);
if
(
!
array_join
)
return
{};
is_left
=
(
array_join
->
kind
==
ASTArrayJoin
::
Kind
::
Left
);
return
array_join
->
expression_list
;
}
bool
ASTSelectQuery
::
array_join_is_lef
t
()
const
ASTPtr
ASTSelectQuery
::
array_join_expression_lis
t
()
const
{
const
ASTArrayJoin
*
array_join
=
getFirstArrayJoin
(
*
this
);
if
(
!
array_join
)
return
{};
return
array_join
->
kind
==
ASTArrayJoin
::
Kind
::
Left
;
bool
is_left
;
return
array_join_expression_list
(
is_left
);
}
...
...
dbms/src/Parsers/ASTSelectQuery.h
浏览文件 @
cbf3c34c
...
...
@@ -41,9 +41,9 @@ public:
/// Compatibility with old parser of tables list. TODO remove
ASTPtr
sample_size
()
const
;
ASTPtr
sample_offset
()
const
;
ASTPtr
array_join_expression_list
(
bool
&
is_left
)
const
;
ASTPtr
array_join_expression_list
()
const
;
const
ASTTablesInSelectQueryElement
*
join
()
const
;
bool
array_join_is_left
()
const
;
bool
final
()
const
;
void
replaceDatabaseAndTable
(
const
String
&
database_name
,
const
String
&
table_name
);
void
addTableFunction
(
ASTPtr
&
table_function_ptr
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录