Skip to content

Commit

Permalink
Fix multiple column transformers.
Browse files Browse the repository at this point in the history
  • Loading branch information
amosbird committed Sep 28, 2020
1 parent ca6e56f commit 8eb8175
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 8 deletions.
22 changes: 14 additions & 8 deletions src/Interpreters/TranslateQualifiedNamesVisitor.cpp
Expand Up @@ -228,6 +228,7 @@ void TranslateQualifiedNamesMatcher::visit(ASTExpressionList & node, const ASTPt

for (const auto & child : old_children)
{
ASTs columns;
if (const auto * asterisk = child->as<ASTAsterisk>())
{
bool first_table = true;
Expand All @@ -237,23 +238,23 @@ void TranslateQualifiedNamesMatcher::visit(ASTExpressionList & node, const ASTPt
{
if (first_table || !data.join_using_columns.count(column.name))
{
addIdentifier(node.children, table.table, column.name, AsteriskSemantic::getAliases(*asterisk));
addIdentifier(columns, table.table, column.name, AsteriskSemantic::getAliases(*asterisk));
}
}

first_table = false;
}
for (const auto & transformer : asterisk->children)
{
IASTColumnsTransformer::transform(transformer, node.children);
IASTColumnsTransformer::transform(transformer, columns);
}
}
else if (const auto * asterisk_pattern = child->as<ASTColumnsMatcher>())
{
if (asterisk_pattern->column_list)
{
for (const auto & ident : asterisk_pattern->column_list->children)
node.children.emplace_back(ident->clone());
columns.emplace_back(ident->clone());
}
else
{
Expand All @@ -264,7 +265,7 @@ void TranslateQualifiedNamesMatcher::visit(ASTExpressionList & node, const ASTPt
{
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));
addIdentifier(columns, table.table, column.name, AsteriskSemantic::getAliases(*asterisk_pattern));
}
}

Expand All @@ -274,7 +275,7 @@ void TranslateQualifiedNamesMatcher::visit(ASTExpressionList & node, const ASTPt
// ColumnsMatcher's transformers start to appear at child 1
for (auto it = asterisk_pattern->children.begin() + 1; it != asterisk_pattern->children.end(); ++it)
{
IASTColumnsTransformer::transform(*it, node.children);
IASTColumnsTransformer::transform(*it, columns);
}
}
else if (const auto * qualified_asterisk = child->as<ASTQualifiedAsterisk>())
Expand All @@ -287,19 +288,24 @@ void TranslateQualifiedNamesMatcher::visit(ASTExpressionList & node, const ASTPt
{
for (const auto & column : table.columns)
{
addIdentifier(node.children, table.table, column.name, AsteriskSemantic::getAliases(*qualified_asterisk));
addIdentifier(columns, table.table, column.name, AsteriskSemantic::getAliases(*qualified_asterisk));
}
break;
}
}
// QualifiedAsterisk's transformers start to appear at child 1
for (auto it = qualified_asterisk->children.begin() + 1; it != qualified_asterisk->children.end(); ++it)
{
IASTColumnsTransformer::transform(*it, node.children);
IASTColumnsTransformer::transform(*it, columns);
}
}
else
node.children.emplace_back(child);
columns.emplace_back(child);

node.children.insert(
node.children.end(),
std::make_move_iterator(columns.begin()),
std::make_move_iterator(columns.end()));
}
}

Expand Down
3 changes: 3 additions & 0 deletions src/Parsers/ASTColumnsMatcher.cpp
Expand Up @@ -32,7 +32,10 @@ void ASTColumnsMatcher::formatImpl(const FormatSettings & settings, FormatState
{
settings.ostr << (settings.hilite ? hilite_keyword : "") << "COLUMNS" << (settings.hilite ? hilite_none : "") << "(";
if (column_list)
{
frame.expression_list_prepend_whitespace = false;
column_list->formatImpl(settings, state, frame);
}
else
settings.ostr << quoteString(original_pattern);
settings.ostr << ")";
Expand Down
10 changes: 10 additions & 0 deletions tests/queries/0_stateless/01470_columns_transformers.reference
Expand Up @@ -67,3 +67,13 @@ SELECT
sum(j),
sum(k)
FROM columns_transformers
100 10 100 10 324 10
120 8 120 8 23 8
SELECT
i,
j,
toFloat64(i),
toFloat64(j),
toFloat64(k),
j
FROM columns_transformers
4 changes: 4 additions & 0 deletions tests/queries/0_stateless/01470_columns_transformers.sql
Expand Up @@ -37,4 +37,8 @@ EXPLAIN SYNTAX SELECT * REPLACE(i + 1 AS i) REPLACE(i + 1 AS i) from columns_tra
SELECT COLUMNS(i, j, k) APPLY(sum) from columns_transformers;
EXPLAIN SYNTAX SELECT COLUMNS(i, j, k) APPLY(sum) from columns_transformers;

-- Multiple column matchers and transformers
SELECT i, j, COLUMNS(i, j, k) APPLY(toFloat64), COLUMNS(i, j) EXCEPT (i) from columns_transformers;
EXPLAIN SYNTAX SELECT i, j, COLUMNS(i, j, k) APPLY(toFloat64), COLUMNS(i, j) EXCEPT (i) from columns_transformers;

DROP TABLE columns_transformers;

0 comments on commit 8eb8175

Please sign in to comment.