Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
f3a8149a
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,发现更多精彩内容 >>
未验证
提交
f3a8149a
编写于
3月 24, 2019
作者:
A
alexey-milovidov
提交者:
GitHub
3月 24, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4781 from yandex/ast-create-query-move-to-cpp
ParserCreateQuery: moved code to cpp
上级
5bd3246e
ad6648af
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
345 addition
and
289 deletion
+345
-289
dbms/src/Parsers/ASTColumnDeclaration.cpp
dbms/src/Parsers/ASTColumnDeclaration.cpp
+70
-0
dbms/src/Parsers/ASTColumnDeclaration.h
dbms/src/Parsers/ASTColumnDeclaration.h
+2
-62
dbms/src/Parsers/ASTCreateQuery.cpp
dbms/src/Parsers/ASTCreateQuery.cpp
+252
-0
dbms/src/Parsers/ASTCreateQuery.h
dbms/src/Parsers/ASTCreateQuery.h
+13
-227
dbms/src/Parsers/ParserCreateQuery.cpp
dbms/src/Parsers/ParserCreateQuery.cpp
+2
-0
dbms/src/Storages/Kafka/KafkaSettings.cpp
dbms/src/Storages/Kafka/KafkaSettings.cpp
+2
-0
dbms/src/Storages/MergeTree/MergeTreeSettings.cpp
dbms/src/Storages/MergeTree/MergeTreeSettings.cpp
+2
-0
dbms/src/Storages/StorageJoin.cpp
dbms/src/Storages/StorageJoin.cpp
+1
-0
dbms/src/Storages/StorageView.cpp
dbms/src/Storages/StorageView.cpp
+1
-0
未找到文件。
dbms/src/Parsers/ASTColumnDeclaration.cpp
0 → 100644
浏览文件 @
f3a8149a
#include <Parsers/ASTColumnDeclaration.h>
namespace
DB
{
ASTPtr
ASTColumnDeclaration
::
clone
()
const
{
const
auto
res
=
std
::
make_shared
<
ASTColumnDeclaration
>
(
*
this
);
res
->
children
.
clear
();
if
(
type
)
{
res
->
type
=
type
;
res
->
children
.
push_back
(
res
->
type
);
}
if
(
default_expression
)
{
res
->
default_expression
=
default_expression
->
clone
();
res
->
children
.
push_back
(
res
->
default_expression
);
}
if
(
codec
)
{
res
->
codec
=
codec
->
clone
();
res
->
children
.
push_back
(
res
->
codec
);
}
if
(
comment
)
{
res
->
comment
=
comment
->
clone
();
res
->
children
.
push_back
(
res
->
comment
);
}
return
res
;
}
void
ASTColumnDeclaration
::
formatImpl
(
const
FormatSettings
&
settings
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
{
frame
.
need_parens
=
false
;
std
::
string
indent_str
=
settings
.
one_line
?
""
:
std
::
string
(
4
*
frame
.
indent
,
' '
);
settings
.
ostr
<<
settings
.
nl_or_ws
<<
indent_str
<<
backQuoteIfNeed
(
name
);
if
(
type
)
{
settings
.
ostr
<<
' '
;
type
->
formatImpl
(
settings
,
state
,
frame
);
}
if
(
default_expression
)
{
settings
.
ostr
<<
' '
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
default_specifier
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
' '
;
default_expression
->
formatImpl
(
settings
,
state
,
frame
);
}
if
(
comment
)
{
settings
.
ostr
<<
' '
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
"COMMENT"
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
' '
;
comment
->
formatImpl
(
settings
,
state
,
frame
);
}
if
(
codec
)
{
settings
.
ostr
<<
' '
;
codec
->
formatImpl
(
settings
,
state
,
frame
);
}
}
}
dbms/src/Parsers/ASTColumnDeclaration.h
浏览文件 @
f3a8149a
...
...
@@ -20,68 +20,8 @@ public:
String
getID
(
char
delim
)
const
override
{
return
"ColumnDeclaration"
+
(
delim
+
name
);
}
ASTPtr
clone
()
const
override
{
const
auto
res
=
std
::
make_shared
<
ASTColumnDeclaration
>
(
*
this
);
res
->
children
.
clear
();
if
(
type
)
{
res
->
type
=
type
;
res
->
children
.
push_back
(
res
->
type
);
}
if
(
default_expression
)
{
res
->
default_expression
=
default_expression
->
clone
();
res
->
children
.
push_back
(
res
->
default_expression
);
}
if
(
codec
)
{
res
->
codec
=
codec
->
clone
();
res
->
children
.
push_back
(
res
->
codec
);
}
if
(
comment
)
{
res
->
comment
=
comment
->
clone
();
res
->
children
.
push_back
(
res
->
comment
);
}
return
res
;
}
void
formatImpl
(
const
FormatSettings
&
settings
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
{
frame
.
need_parens
=
false
;
std
::
string
indent_str
=
settings
.
one_line
?
""
:
std
::
string
(
4
*
frame
.
indent
,
' '
);
settings
.
ostr
<<
settings
.
nl_or_ws
<<
indent_str
<<
backQuoteIfNeed
(
name
);
if
(
type
)
{
settings
.
ostr
<<
' '
;
type
->
formatImpl
(
settings
,
state
,
frame
);
}
if
(
default_expression
)
{
settings
.
ostr
<<
' '
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
default_specifier
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
' '
;
default_expression
->
formatImpl
(
settings
,
state
,
frame
);
}
if
(
comment
)
{
settings
.
ostr
<<
' '
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
"COMMENT"
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
' '
;
comment
->
formatImpl
(
settings
,
state
,
frame
);
}
if
(
codec
)
{
settings
.
ostr
<<
' '
;
codec
->
formatImpl
(
settings
,
state
,
frame
);
}
}
ASTPtr
clone
()
const
override
;
void
formatImpl
(
const
FormatSettings
&
settings
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
;
};
}
dbms/src/Parsers/ASTCreateQuery.cpp
0 → 100644
浏览文件 @
f3a8149a
#include <Parsers/ASTExpressionList.h>
#include <Parsers/ASTFunction.h>
#include <Parsers/ASTSetQuery.h>
#include <Parsers/ASTSelectWithUnionQuery.h>
#include <Parsers/ASTCreateQuery.h>
namespace
DB
{
ASTPtr
ASTStorage
::
clone
()
const
{
auto
res
=
std
::
make_shared
<
ASTStorage
>
(
*
this
);
res
->
children
.
clear
();
if
(
engine
)
res
->
set
(
res
->
engine
,
engine
->
clone
());
if
(
partition_by
)
res
->
set
(
res
->
partition_by
,
partition_by
->
clone
());
if
(
primary_key
)
res
->
set
(
res
->
primary_key
,
primary_key
->
clone
());
if
(
order_by
)
res
->
set
(
res
->
order_by
,
order_by
->
clone
());
if
(
sample_by
)
res
->
set
(
res
->
sample_by
,
sample_by
->
clone
());
if
(
settings
)
res
->
set
(
res
->
settings
,
settings
->
clone
());
return
res
;
}
void
ASTStorage
::
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
{
if
(
engine
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"ENGINE"
<<
(
s
.
hilite
?
hilite_none
:
""
)
<<
" = "
;
engine
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
partition_by
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"PARTITION BY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
partition_by
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
primary_key
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"PRIMARY KEY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
primary_key
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
order_by
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"ORDER BY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
order_by
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
sample_by
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"SAMPLE BY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
sample_by
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
settings
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"SETTINGS "
<<
(
s
.
hilite
?
hilite_none
:
""
);
settings
->
formatImpl
(
s
,
state
,
frame
);
}
}
class
ASTColumnsElement
:
public
IAST
{
public:
String
prefix
;
IAST
*
elem
;
String
getID
(
char
c
)
const
override
{
return
"ASTColumnsElement for "
+
elem
->
getID
(
c
);
}
ASTPtr
clone
()
const
override
;
void
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
;
};
ASTPtr
ASTColumnsElement
::
clone
()
const
{
auto
res
=
std
::
make_shared
<
ASTColumnsElement
>
();
res
->
prefix
=
prefix
;
if
(
elem
)
res
->
set
(
res
->
elem
,
elem
->
clone
());
return
res
;
}
void
ASTColumnsElement
::
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
{
if
(
!
elem
)
return
;
if
(
prefix
.
empty
())
{
elem
->
formatImpl
(
s
,
state
,
frame
);
return
;
}
frame
.
need_parens
=
false
;
std
::
string
indent_str
=
s
.
one_line
?
""
:
std
::
string
(
4
*
frame
.
indent
,
' '
);
s
.
ostr
<<
s
.
nl_or_ws
<<
indent_str
;
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
prefix
<<
(
s
.
hilite
?
hilite_none
:
""
);
FormatSettings
nested_settings
=
s
;
nested_settings
.
one_line
=
true
;
nested_settings
.
nl_or_ws
=
' '
;
elem
->
formatImpl
(
nested_settings
,
state
,
frame
);
}
ASTPtr
ASTColumns
::
clone
()
const
{
auto
res
=
std
::
make_shared
<
ASTColumns
>
();
if
(
columns
)
res
->
set
(
res
->
columns
,
columns
->
clone
());
if
(
indices
)
res
->
set
(
res
->
indices
,
indices
->
clone
());
return
res
;
}
void
ASTColumns
::
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
{
ASTExpressionList
list
;
if
(
columns
)
{
for
(
const
auto
&
column
:
columns
->
children
)
{
auto
elem
=
std
::
make_shared
<
ASTColumnsElement
>
();
elem
->
prefix
=
""
;
elem
->
set
(
elem
->
elem
,
column
->
clone
());
list
.
children
.
push_back
(
elem
);
}
}
if
(
indices
)
{
for
(
const
auto
&
index
:
indices
->
children
)
{
auto
elem
=
std
::
make_shared
<
ASTColumnsElement
>
();
elem
->
prefix
=
"INDEX"
;
elem
->
set
(
elem
->
elem
,
index
->
clone
());
list
.
children
.
push_back
(
elem
);
}
}
if
(
!
list
.
children
.
empty
())
list
.
formatImpl
(
s
,
state
,
frame
);
}
ASTPtr
ASTCreateQuery
::
clone
()
const
{
auto
res
=
std
::
make_shared
<
ASTCreateQuery
>
(
*
this
);
res
->
children
.
clear
();
if
(
columns_list
)
res
->
set
(
res
->
columns_list
,
columns_list
->
clone
());
if
(
storage
)
res
->
set
(
res
->
storage
,
storage
->
clone
());
if
(
select
)
res
->
set
(
res
->
select
,
select
->
clone
());
cloneOutputOptions
(
*
res
);
return
res
;
}
void
ASTCreateQuery
::
formatQueryImpl
(
const
FormatSettings
&
settings
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
{
frame
.
need_parens
=
false
;
if
(
!
database
.
empty
()
&&
table
.
empty
())
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
(
attach
?
"ATTACH DATABASE "
:
"CREATE DATABASE "
)
<<
(
if_not_exists
?
"IF NOT EXISTS "
:
""
)
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
backQuoteIfNeed
(
database
);
formatOnCluster
(
settings
);
if
(
storage
)
storage
->
formatImpl
(
settings
,
state
,
frame
);
return
;
}
{
std
::
string
what
=
"TABLE"
;
if
(
is_view
)
what
=
"VIEW"
;
if
(
is_materialized_view
)
what
=
"MATERIALIZED VIEW"
;
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
(
attach
?
"ATTACH "
:
"CREATE "
)
<<
(
temporary
?
"TEMPORARY "
:
""
)
<<
(
replace_view
?
"OR REPLACE "
:
""
)
<<
what
<<
" "
<<
(
if_not_exists
?
"IF NOT EXISTS "
:
""
)
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
(
!
database
.
empty
()
?
backQuoteIfNeed
(
database
)
+
"."
:
""
)
<<
backQuoteIfNeed
(
table
);
formatOnCluster
(
settings
);
}
if
(
!
to_table
.
empty
())
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" TO "
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
(
!
to_database
.
empty
()
?
backQuoteIfNeed
(
to_database
)
+
"."
:
""
)
<<
backQuoteIfNeed
(
to_table
);
}
if
(
!
as_table
.
empty
())
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" AS "
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
(
!
as_database
.
empty
()
?
backQuoteIfNeed
(
as_database
)
+
"."
:
""
)
<<
backQuoteIfNeed
(
as_table
);
}
if
(
columns_list
)
{
settings
.
ostr
<<
(
settings
.
one_line
?
" ("
:
"
\n
("
);
FormatStateStacked
frame_nested
=
frame
;
++
frame_nested
.
indent
;
columns_list
->
formatImpl
(
settings
,
state
,
frame_nested
);
settings
.
ostr
<<
(
settings
.
one_line
?
")"
:
"
\n
)"
);
}
if
(
storage
)
storage
->
formatImpl
(
settings
,
state
,
frame
);
if
(
is_populate
)
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" POPULATE"
<<
(
settings
.
hilite
?
hilite_none
:
""
);
}
if
(
select
)
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" AS"
<<
settings
.
nl_or_ws
<<
(
settings
.
hilite
?
hilite_none
:
""
);
select
->
formatImpl
(
settings
,
state
,
frame
);
}
}
}
dbms/src/Parsers/ASTCreateQuery.h
浏览文件 @
f3a8149a
#pragma once
#include <Parsers/ASTExpressionList.h>
#include <Parsers/ASTFunction.h>
#include <Parsers/ASTSetQuery.h>
#include <Parsers/ASTSelectWithUnionQuery.h>
#include <Parsers/ASTQueryWithTableAndOutput.h>
#include <Parsers/ASTQueryWithOnCluster.h>
...
...
@@ -11,6 +7,9 @@
namespace
DB
{
class
ASTFunction
;
class
ASTSetQuery
;
class
ASTStorage
:
public
IAST
{
public:
...
...
@@ -23,154 +22,30 @@ public:
String
getID
(
char
)
const
override
{
return
"Storage definition"
;
}
ASTPtr
clone
()
const
override
{
auto
res
=
std
::
make_shared
<
ASTStorage
>
(
*
this
);
res
->
children
.
clear
();
if
(
engine
)
res
->
set
(
res
->
engine
,
engine
->
clone
());
if
(
partition_by
)
res
->
set
(
res
->
partition_by
,
partition_by
->
clone
());
if
(
primary_key
)
res
->
set
(
res
->
primary_key
,
primary_key
->
clone
());
if
(
order_by
)
res
->
set
(
res
->
order_by
,
order_by
->
clone
());
if
(
sample_by
)
res
->
set
(
res
->
sample_by
,
sample_by
->
clone
());
if
(
settings
)
res
->
set
(
res
->
settings
,
settings
->
clone
());
return
res
;
}
void
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
{
if
(
engine
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"ENGINE"
<<
(
s
.
hilite
?
hilite_none
:
""
)
<<
" = "
;
engine
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
partition_by
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"PARTITION BY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
partition_by
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
primary_key
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"PRIMARY KEY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
primary_key
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
order_by
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"ORDER BY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
order_by
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
sample_by
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"SAMPLE BY "
<<
(
s
.
hilite
?
hilite_none
:
""
);
sample_by
->
formatImpl
(
s
,
state
,
frame
);
}
if
(
settings
)
{
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
s
.
nl_or_ws
<<
"SETTINGS "
<<
(
s
.
hilite
?
hilite_none
:
""
);
settings
->
formatImpl
(
s
,
state
,
frame
);
}
ASTPtr
clone
()
const
override
;
}
void
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
;
};
class
ASTExpressionList
;
class
ASTColumns
:
public
IAST
{
private:
class
ASTColumnsElement
:
public
IAST
{
public:
String
prefix
;
IAST
*
elem
;
String
getID
(
char
c
)
const
override
{
return
"ASTColumnsElement for "
+
elem
->
getID
(
c
);
}
ASTPtr
clone
()
const
override
{
auto
res
=
std
::
make_shared
<
ASTColumnsElement
>
();
res
->
prefix
=
prefix
;
if
(
elem
)
res
->
set
(
res
->
elem
,
elem
->
clone
());
return
res
;
}
void
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
{
if
(
!
elem
)
return
;
if
(
prefix
.
empty
())
{
elem
->
formatImpl
(
s
,
state
,
frame
);
return
;
}
frame
.
need_parens
=
false
;
std
::
string
indent_str
=
s
.
one_line
?
""
:
std
::
string
(
4
*
frame
.
indent
,
' '
);
s
.
ostr
<<
s
.
nl_or_ws
<<
indent_str
;
s
.
ostr
<<
(
s
.
hilite
?
hilite_keyword
:
""
)
<<
prefix
<<
(
s
.
hilite
?
hilite_none
:
""
);
FormatSettings
nested_settings
=
s
;
nested_settings
.
one_line
=
true
;
nested_settings
.
nl_or_ws
=
' '
;
elem
->
formatImpl
(
nested_settings
,
state
,
frame
);
}
};
public:
ASTExpressionList
*
columns
=
nullptr
;
ASTExpressionList
*
indices
=
nullptr
;
String
getID
(
char
)
const
override
{
return
"Columns definition"
;
}
ASTPtr
clone
()
const
override
{
auto
res
=
std
::
make_shared
<
ASTColumns
>
();
if
(
columns
)
res
->
set
(
res
->
columns
,
columns
->
clone
());
if
(
indices
)
res
->
set
(
res
->
indices
,
indices
->
clone
());
return
res
;
}
void
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
{
ASTExpressionList
list
;
if
(
columns
)
for
(
const
auto
&
column
:
columns
->
children
)
{
auto
elem
=
std
::
make_shared
<
ASTColumnsElement
>
();
elem
->
prefix
=
""
;
elem
->
set
(
elem
->
elem
,
column
->
clone
());
list
.
children
.
push_back
(
elem
);
}
if
(
indices
)
for
(
const
auto
&
index
:
indices
->
children
)
{
auto
elem
=
std
::
make_shared
<
ASTColumnsElement
>
();
elem
->
prefix
=
"INDEX"
;
elem
->
set
(
elem
->
elem
,
index
->
clone
());
list
.
children
.
push_back
(
elem
);
}
ASTPtr
clone
()
const
override
;
if
(
!
list
.
children
.
empty
())
list
.
formatImpl
(
s
,
state
,
frame
);
}
void
formatImpl
(
const
FormatSettings
&
s
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
;
};
class
ASTSelectWithUnionQuery
;
/// CREATE TABLE or ATTACH TABLE query
class
ASTCreateQuery
:
public
ASTQueryWithTableAndOutput
,
public
ASTQueryWithOnCluster
{
...
...
@@ -192,22 +67,7 @@ public:
/** Get the text that identifies this element. */
String
getID
(
char
delim
)
const
override
{
return
(
attach
?
"AttachQuery"
:
"CreateQuery"
)
+
(
delim
+
database
)
+
delim
+
table
;
}
ASTPtr
clone
()
const
override
{
auto
res
=
std
::
make_shared
<
ASTCreateQuery
>
(
*
this
);
res
->
children
.
clear
();
if
(
columns_list
)
res
->
set
(
res
->
columns_list
,
columns_list
->
clone
());
if
(
storage
)
res
->
set
(
res
->
storage
,
storage
->
clone
());
if
(
select
)
res
->
set
(
res
->
select
,
select
->
clone
());
cloneOutputOptions
(
*
res
);
return
res
;
}
ASTPtr
clone
()
const
override
;
ASTPtr
getRewrittenASTWithoutOnCluster
(
const
std
::
string
&
new_database
)
const
override
{
...
...
@@ -215,81 +75,7 @@ public:
}
protected:
void
formatQueryImpl
(
const
FormatSettings
&
settings
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
{
frame
.
need_parens
=
false
;
if
(
!
database
.
empty
()
&&
table
.
empty
())
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
(
attach
?
"ATTACH DATABASE "
:
"CREATE DATABASE "
)
<<
(
if_not_exists
?
"IF NOT EXISTS "
:
""
)
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
backQuoteIfNeed
(
database
);
formatOnCluster
(
settings
);
if
(
storage
)
storage
->
formatImpl
(
settings
,
state
,
frame
);
return
;
}
{
std
::
string
what
=
"TABLE"
;
if
(
is_view
)
what
=
"VIEW"
;
if
(
is_materialized_view
)
what
=
"MATERIALIZED VIEW"
;
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
(
attach
?
"ATTACH "
:
"CREATE "
)
<<
(
temporary
?
"TEMPORARY "
:
""
)
<<
(
replace_view
?
"OR REPLACE "
:
""
)
<<
what
<<
" "
<<
(
if_not_exists
?
"IF NOT EXISTS "
:
""
)
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
(
!
database
.
empty
()
?
backQuoteIfNeed
(
database
)
+
"."
:
""
)
<<
backQuoteIfNeed
(
table
);
formatOnCluster
(
settings
);
}
if
(
!
to_table
.
empty
())
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" TO "
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
(
!
to_database
.
empty
()
?
backQuoteIfNeed
(
to_database
)
+
"."
:
""
)
<<
backQuoteIfNeed
(
to_table
);
}
if
(
!
as_table
.
empty
())
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" AS "
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
(
!
as_database
.
empty
()
?
backQuoteIfNeed
(
as_database
)
+
"."
:
""
)
<<
backQuoteIfNeed
(
as_table
);
}
if
(
columns_list
)
{
settings
.
ostr
<<
(
settings
.
one_line
?
" ("
:
"
\n
("
);
FormatStateStacked
frame_nested
=
frame
;
++
frame_nested
.
indent
;
columns_list
->
formatImpl
(
settings
,
state
,
frame_nested
);
settings
.
ostr
<<
(
settings
.
one_line
?
")"
:
"
\n
)"
);
}
if
(
storage
)
storage
->
formatImpl
(
settings
,
state
,
frame
);
if
(
is_populate
)
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" POPULATE"
<<
(
settings
.
hilite
?
hilite_none
:
""
);
}
if
(
select
)
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
" AS"
<<
settings
.
nl_or_ws
<<
(
settings
.
hilite
?
hilite_none
:
""
);
select
->
formatImpl
(
settings
,
state
,
frame
);
}
}
void
formatQueryImpl
(
const
FormatSettings
&
settings
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
override
;
};
}
dbms/src/Parsers/ParserCreateQuery.cpp
浏览文件 @
f3a8149a
...
...
@@ -4,6 +4,8 @@
#include <Parsers/ASTIndexDeclaration.h>
#include <Parsers/ASTExpressionList.h>
#include <Parsers/ASTCreateQuery.h>
#include <Parsers/ASTSetQuery.h>
#include <Parsers/ASTSelectWithUnionQuery.h>
#include <Parsers/ExpressionListParsers.h>
#include <Parsers/ParserCreateQuery.h>
#include <Parsers/ParserSelectWithUnionQuery.h>
...
...
dbms/src/Storages/Kafka/KafkaSettings.cpp
浏览文件 @
f3a8149a
#include <Storages/Kafka/KafkaSettings.h>
#include <Parsers/ASTCreateQuery.h>
#include <Parsers/ASTSetQuery.h>
#include <Parsers/ASTFunction.h>
#include <Common/Exception.h>
...
...
dbms/src/Storages/MergeTree/MergeTreeSettings.cpp
浏览文件 @
f3a8149a
#include <Storages/MergeTree/MergeTreeSettings.h>
#include <Parsers/ASTCreateQuery.h>
#include <Parsers/ASTSetQuery.h>
#include <Parsers/ASTFunction.h>
#include <Common/Exception.h>
...
...
dbms/src/Storages/StorageJoin.cpp
浏览文件 @
f3a8149a
...
...
@@ -2,6 +2,7 @@
#include <Storages/StorageFactory.h>
#include <Interpreters/Join.h>
#include <Parsers/ASTCreateQuery.h>
#include <Parsers/ASTSetQuery.h>
#include <Parsers/ASTIdentifier.h>
#include <Core/ColumnNumbers.h>
#include <DataStreams/IBlockInputStream.h>
...
...
dbms/src/Storages/StorageView.cpp
浏览文件 @
f3a8149a
...
...
@@ -3,6 +3,7 @@
#include <Parsers/ASTCreateQuery.h>
#include <Parsers/ASTSubquery.h>
#include <Parsers/ASTTablesInSelectQuery.h>
#include <Parsers/ASTSelectWithUnionQuery.h>
#include <Storages/StorageView.h>
#include <Storages/StorageFactory.h>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录