Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
3e576a29
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,发现更多精彩内容 >>
未验证
提交
3e576a29
编写于
9月 16, 2020
作者:
A
Amos Bird
提交者:
GitHub
9月 16, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
explict column list in columns matcher (#14775)
上级
28a6b7e6
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
47 addition
and
12 deletion
+47
-12
src/Interpreters/TranslateQualifiedNamesVisitor.cpp
src/Interpreters/TranslateQualifiedNamesVisitor.cpp
+15
-7
src/Parsers/ASTColumnsMatcher.cpp
src/Parsers/ASTColumnsMatcher.cpp
+6
-2
src/Parsers/ASTColumnsMatcher.h
src/Parsers/ASTColumnsMatcher.h
+2
-0
src/Parsers/ExpressionElementParsers.cpp
src/Parsers/ExpressionElementParsers.cpp
+14
-3
tests/queries/0_stateless/01470_columns_transformers.reference
.../queries/0_stateless/01470_columns_transformers.reference
+6
-0
tests/queries/0_stateless/01470_columns_transformers.sql
tests/queries/0_stateless/01470_columns_transformers.sql
+4
-0
未找到文件。
src/Interpreters/TranslateQualifiedNamesVisitor.cpp
浏览文件 @
3e576a29
...
...
@@ -250,18 +250,26 @@ void TranslateQualifiedNamesMatcher::visit(ASTExpressionList & node, const ASTPt
}
else
if
(
const
auto
*
asterisk_pattern
=
child
->
as
<
ASTColumnsMatcher
>
())
{
bool
first_table
=
true
;
for
(
const
auto
&
table
:
tables_with_columns
)
if
(
asterisk_pattern
->
column_list
)
{
for
(
const
auto
&
column
:
table
.
columns
)
for
(
const
auto
&
ident
:
asterisk_pattern
->
column_list
->
children
)
node
.
children
.
emplace_back
(
ident
->
clone
());
}
else
{
bool
first_table
=
true
;
for
(
const
auto
&
table
:
tables_with_columns
)
{
if
(
asterisk_pattern
->
isColumnMatching
(
column
.
name
)
&&
(
first_table
||
!
data
.
join_using_columns
.
count
(
column
.
name
))
)
for
(
const
auto
&
column
:
table
.
columns
)
{
addIdentifier
(
node
.
children
,
table
.
table
,
column
.
name
,
AsteriskSemantic
::
getAliases
(
*
asterisk_pattern
));
if
(
asterisk_pattern
->
isColumnMatching
(
column
.
name
)
&&
(
first_table
||
!
data
.
join_using_columns
.
count
(
column
.
name
)))
{
addIdentifier
(
node
.
children
,
table
.
table
,
column
.
name
,
AsteriskSemantic
::
getAliases
(
*
asterisk_pattern
));
}
}
}
first_table
=
false
;
first_table
=
false
;
}
}
// ColumnsMatcher's transformers start to appear at child 1
for
(
auto
it
=
asterisk_pattern
->
children
.
begin
()
+
1
;
it
!=
asterisk_pattern
->
children
.
end
();
++
it
)
...
...
src/Parsers/ASTColumnsMatcher.cpp
浏览文件 @
3e576a29
...
...
@@ -30,8 +30,12 @@ void ASTColumnsMatcher::updateTreeHashImpl(SipHash & hash_state) const
void
ASTColumnsMatcher
::
formatImpl
(
const
FormatSettings
&
settings
,
FormatState
&
state
,
FormatStateStacked
frame
)
const
{
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
"COLUMNS"
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
"("
<<
quoteString
(
original_pattern
)
<<
")"
;
settings
.
ostr
<<
(
settings
.
hilite
?
hilite_keyword
:
""
)
<<
"COLUMNS"
<<
(
settings
.
hilite
?
hilite_none
:
""
)
<<
"("
;
if
(
column_list
)
column_list
->
formatImpl
(
settings
,
state
,
frame
);
else
settings
.
ostr
<<
quoteString
(
original_pattern
);
settings
.
ostr
<<
")"
;
for
(
ASTs
::
const_iterator
it
=
children
.
begin
()
+
1
;
it
!=
children
.
end
();
++
it
)
{
settings
.
ostr
<<
' '
;
...
...
src/Parsers/ASTColumnsMatcher.h
浏览文件 @
3e576a29
...
...
@@ -36,6 +36,8 @@ public:
bool
isColumnMatching
(
const
String
&
column_name
)
const
;
void
updateTreeHashImpl
(
SipHash
&
hash_state
)
const
override
;
ASTPtr
column_list
;
protected:
void
formatImpl
(
const
FormatSettings
&
settings
,
FormatState
&
,
FormatStateStacked
)
const
override
;
...
...
src/Parsers/ExpressionElementParsers.cpp
浏览文件 @
3e576a29
...
...
@@ -1188,6 +1188,7 @@ bool ParserAlias::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
bool
ParserColumnsMatcher
::
parseImpl
(
Pos
&
pos
,
ASTPtr
&
node
,
Expected
&
expected
)
{
ParserKeyword
columns
(
"COLUMNS"
);
ParserList
columns_p
(
std
::
make_unique
<
ParserCompoundIdentifier
>
(),
std
::
make_unique
<
ParserToken
>
(
TokenType
::
Comma
),
false
);
ParserStringLiteral
regex
;
if
(
!
columns
.
ignore
(
pos
,
expected
))
...
...
@@ -1197,8 +1198,9 @@ bool ParserColumnsMatcher::parseImpl(Pos & pos, ASTPtr & node, Expected & expect
return
false
;
++
pos
;
ASTPtr
column_list
;
ASTPtr
regex_node
;
if
(
!
regex
.
parse
(
pos
,
regex_node
,
expected
))
if
(
!
columns_p
.
parse
(
pos
,
column_list
,
expected
)
&&
!
regex
.
parse
(
pos
,
regex_node
,
expected
))
return
false
;
if
(
pos
->
type
!=
TokenType
::
ClosingRoundBracket
)
...
...
@@ -1206,8 +1208,17 @@ bool ParserColumnsMatcher::parseImpl(Pos & pos, ASTPtr & node, Expected & expect
++
pos
;
auto
res
=
std
::
make_shared
<
ASTColumnsMatcher
>
();
res
->
setPattern
(
regex_node
->
as
<
ASTLiteral
&>
().
value
.
get
<
String
>
());
res
->
children
.
push_back
(
regex_node
);
if
(
column_list
)
{
res
->
column_list
=
column_list
;
res
->
children
.
push_back
(
res
->
column_list
);
}
else
{
res
->
setPattern
(
regex_node
->
as
<
ASTLiteral
&>
().
value
.
get
<
String
>
());
res
->
children
.
push_back
(
regex_node
);
}
ParserColumnsTransformers
transformers_p
;
ASTPtr
transformer
;
while
(
transformers_p
.
parse
(
pos
,
transformer
,
expected
))
...
...
tests/queries/0_stateless/01470_columns_transformers.reference
浏览文件 @
3e576a29
...
...
@@ -61,3 +61,9 @@ SELECT
j,
k
FROM columns_transformers
220 18 347
SELECT
sum(i),
sum(j),
sum(k)
FROM columns_transformers
tests/queries/0_stateless/01470_columns_transformers.sql
浏览文件 @
3e576a29
...
...
@@ -33,4 +33,8 @@ EXPLAIN SYNTAX SELECT a.* APPLY(toDate) REPLACE(i + 1 AS i) APPLY(any) from colu
-- Multiple REPLACE in a row
EXPLAIN
SYNTAX
SELECT
*
REPLACE
(
i
+
1
AS
i
)
REPLACE
(
i
+
1
AS
i
)
from
columns_transformers
;
-- Explicit column list
SELECT
COLUMNS
(
i
,
j
,
k
)
APPLY
(
sum
)
from
columns_transformers
;
EXPLAIN
SYNTAX
SELECT
COLUMNS
(
i
,
j
,
k
)
APPLY
(
sum
)
from
columns_transformers
;
DROP
TABLE
columns_transformers
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录