This commit is contained in:
Nikita Vasilev 2019-01-20 14:34:13 +03:00
parent 13a4fb2756
commit 5e626be07f
5 changed files with 23 additions and 19 deletions

View File

@ -1179,7 +1179,7 @@ protected:
/// Removes MATERIALIZED and ALIAS columns from create table query
static ASTPtr removeAliasColumnsFromCreateQuery(const ASTPtr & query_ast)
{
const ASTs & column_asts = typeid_cast<ASTCreateQuery &>(*query_ast).columns->children;
const ASTs & column_asts = typeid_cast<ASTCreateQuery &>(*query_ast).columns_list->columns->children;
auto new_columns = std::make_shared<ASTExpressionList>();
for (const ASTPtr & column_ast : column_asts)
@ -1198,8 +1198,11 @@ protected:
ASTPtr new_query_ast = query_ast->clone();
ASTCreateQuery & new_query = typeid_cast<ASTCreateQuery &>(*new_query_ast);
new_query.columns = new_columns.get();
new_query.children.at(0) = std::move(new_columns);
auto new_columns_list = std::make_shared<ASTColumns>();
new_columns_list->set(new_columns_list->columns, new_columns);
new_query.replace(new_query.columns_list, new_columns_list);
return new_query_ast;
}
@ -1217,7 +1220,7 @@ protected:
res->table = new_table.second;
res->children.clear();
res->set(res->columns, create.columns->clone());
res->set(res->columns_list, create.columns_list->clone());
res->set(res->storage, new_storage_ast->clone());
return res;

View File

@ -137,7 +137,6 @@ public:
bool is_view{false};
bool is_materialized_view{false};
bool is_populate{false};
ASTExpressionList * columns = nullptr;
ASTColumns * columns_list = nullptr;
String to_database; /// For CREATE MATERIALIZED VIEW mv TO table.
String to_table;
@ -156,8 +155,6 @@ public:
if (columns_list)
res->set(res->columns_list, columns_list->clone());
if (columns)
res->set(res->columns, columns->clone());
if (storage)
res->set(res->storage, storage->clone());
if (select)
@ -234,15 +231,6 @@ protected:
settings.ostr << (settings.one_line ? ")" : "\n)");
}
if (columns)
{
settings.ostr << (settings.one_line ? " (" : "\n(");
FormatStateStacked frame_nested = frame;
++frame_nested.indent;
columns->formatImpl(settings, state, frame_nested);
settings.ostr << (settings.one_line ? ")" : "\n)");
}
if (storage)
storage->formatImpl(settings, state, frame);

View File

@ -41,9 +41,14 @@ public:
void formatImpl(const FormatSettings & s, FormatState &state, FormatStateStacked frame) const override
{
s.ostr << name;
s.ostr << (s.hilite ? hilite_keyword : "") << " BY " << (s.hilite ? hilite_none : "");
frame.need_parens = false;
std::string indent_str = s.one_line ? "" : std::string(4 * frame.indent, ' ');
s.ostr << s.nl_or_ws << indent_str << backQuoteIfNeed(name);
s.ostr << " (";
expr->formatImpl(s, state, frame);
s.ostr << ")";
s.ostr << (s.hilite ? hilite_keyword : "") << " TYPE " << (s.hilite ? hilite_none : "");
type->formatImpl(s, state, frame);
s.ostr << (s.hilite ? hilite_keyword : "") << " GRANULARITY " << (s.hilite ? hilite_none : "");

View File

@ -96,6 +96,8 @@ bool ParserIndexDeclaration::parseImpl(Pos & pos, ASTPtr & node, Expected & expe
{
ParserKeyword s_type("TYPE");
ParserKeyword s_granularity("GRANULARITY");
ParserToken s_lparen(TokenType::OpeningRoundBracket);
ParserToken s_rparen(TokenType::ClosingRoundBracket);
ParserIdentifier name_p;
ParserIdentifierWithOptionalParameters ident_with_optional_params_p;
@ -110,9 +112,15 @@ bool ParserIndexDeclaration::parseImpl(Pos & pos, ASTPtr & node, Expected & expe
if (!name_p.parse(pos, name, expected))
return false;
if (!s_lparen.ignore(pos, expected))
return false;
if (!expression_p.parse(pos, expr, expected))
return false;
if (!s_rparen.ignore(pos, expected))
return false;
if (!s_type.ignore(pos, expected))
return false;

View File

@ -141,7 +141,7 @@ StorageMaterializedView::StorageMaterializedView(
manual_create_query->table = target_table_name;
auto new_columns_list = std::make_shared<ASTColumns>();
new_columns_list->set(new_columns_list->columns, query.columns->ptr());
new_columns_list->set(new_columns_list->columns, query.columns_list->columns->ptr());
manual_create_query->set(manual_create_query->columns_list, new_columns_list);
manual_create_query->set(manual_create_query->storage, query.storage->ptr());