Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
3e60a95c
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,体验更适合开发者的 AI 搜索 >>
提交
3e60a95c
编写于
6月 06, 2016
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Allowed subqueries in views [#METR-21586].
上级
70feb3fd
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
35 addition
and
15 deletion
+35
-15
dbms/include/DB/Storages/StorageView.h
dbms/include/DB/Storages/StorageView.h
+4
-0
dbms/src/Storages/StorageView.cpp
dbms/src/Storages/StorageView.cpp
+31
-15
未找到文件。
dbms/include/DB/Storages/StorageView.h
浏览文件 @
3e60a95c
...
...
@@ -61,6 +61,10 @@ protected:
const
NamesAndTypesList
&
materialized_columns_
,
const
NamesAndTypesList
&
alias_columns_
,
const
ColumnDefaults
&
column_defaults_
);
private:
/// Достать из самого внутреннего подзапроса имя базы данных и таблицы: select_database_name, select_table_name.
void
extractDependentTable
(
const
ASTSelectQuery
&
query
);
};
}
dbms/src/Storages/StorageView.cpp
浏览文件 @
3e60a95c
...
...
@@ -56,23 +56,38 @@ StorageView::StorageView(
inner_query
=
select
;
if
(
inner_query
.
database
)
select_database_name
=
typeid_cast
<
const
ASTIdentifier
&>
(
*
inner_query
.
database
).
name
;
else
throw
Exception
(
"Logical error while creating StorageView."
" Could not retrieve database name from select query."
,
DB
::
ErrorCodes
::
LOGICAL_ERROR
);
extractDependentTable
(
inner_query
);
if
(
!
select_table_name
.
empty
())
context
.
getGlobalContext
().
addDependency
(
DatabaseAndTableName
(
select_database_name
,
select_table_name
),
DatabaseAndTableName
(
database_name
,
table_name
));
}
void
StorageView
::
extractDependentTable
(
const
ASTSelectQuery
&
query
)
{
if
(
!
query
.
table
)
return
;
if
(
const
ASTIdentifier
*
ast_id
=
typeid_cast
<
const
ASTIdentifier
*>
(
query
.
table
.
get
()))
{
if
(
!
query
.
database
)
throw
Exception
(
"Logical error while creating StorageView."
" Could not retrieve database name from select query."
,
DB
::
ErrorCodes
::
LOGICAL_ERROR
);
if
(
inner_query
.
table
)
select_table_name
=
typeid_cast
<
const
ASTIdentifier
&>
(
*
inner_query
.
table
).
name
;
select_database_name
=
typeid_cast
<
const
ASTIdentifier
&>
(
*
query
.
database
).
name
;
select_table_name
=
ast_id
->
name
;
}
else
if
(
const
ASTSelectQuery
*
ast_select
=
typeid_cast
<
const
ASTSelectQuery
*>
(
query
.
table
.
get
()))
{
extractDependentTable
(
*
ast_select
);
}
else
throw
Exception
(
"Logical error while creating StorageView."
" Could not retrieve table name from select query."
,
DB
::
ErrorCodes
::
LOGICAL_ERROR
);
context
.
getGlobalContext
().
addDependency
(
DatabaseAndTableName
(
select_database_name
,
select_table_name
),
DatabaseAndTableName
(
database_name
,
table_name
));
}
...
...
@@ -110,9 +125,10 @@ BlockInputStreams StorageView::read(
void
StorageView
::
drop
()
{
context
.
getGlobalContext
().
removeDependency
(
DatabaseAndTableName
(
select_database_name
,
select_table_name
),
DatabaseAndTableName
(
database_name
,
table_name
));
if
(
!
select_table_name
.
empty
())
context
.
getGlobalContext
().
removeDependency
(
DatabaseAndTableName
(
select_database_name
,
select_table_name
),
DatabaseAndTableName
(
database_name
,
table_name
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录