From 29de25c608f1b7f9d28bdf631191ea3611e0fada Mon Sep 17 00:00:00 2001 From: Andrey Mironov Date: Mon, 15 Dec 2014 23:43:24 +0300 Subject: [PATCH] dbms: implement ASTSubquery::clone properly. [#METR-13399] --- dbms/include/DB/Parsers/ASTExpressionList.h | 15 ++++++------ dbms/include/DB/Parsers/ASTSubquery.h | 27 ++++++++++++--------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/dbms/include/DB/Parsers/ASTExpressionList.h b/dbms/include/DB/Parsers/ASTExpressionList.h index ac5e7467298..df5f72d94fc 100644 --- a/dbms/include/DB/Parsers/ASTExpressionList.h +++ b/dbms/include/DB/Parsers/ASTExpressionList.h @@ -14,21 +14,22 @@ using Poco::SharedPtr; class ASTExpressionList : public IAST { public: - ASTExpressionList() {} + ASTExpressionList() = default; ASTExpressionList(StringRange range_) : IAST(range_) {} /** Получить текст, который идентифицирует этот элемент. */ - String getID() const { return "ExpressionList"; } + String getID() const override { return "ExpressionList"; } - ASTPtr clone() const + ASTPtr clone() const override { - ASTExpressionList * res = new ASTExpressionList(*this); + const auto res = new ASTExpressionList(*this); + ASTPtr ptr{res}; res->children.clear(); - for (ASTs::const_iterator it = children.begin(); it != children.end(); ++it) - res->children.push_back((*it)->clone()); + for (const auto & child : children) + res->children.emplace_back(child->clone()); - return res; + return ptr; } }; diff --git a/dbms/include/DB/Parsers/ASTSubquery.h b/dbms/include/DB/Parsers/ASTSubquery.h index d395ab8e067..dca3deb3d0b 100644 --- a/dbms/include/DB/Parsers/ASTSubquery.h +++ b/dbms/include/DB/Parsers/ASTSubquery.h @@ -9,25 +9,30 @@ namespace DB { -/** Подзарос SELECT в секции IN. +/** Подзарос SELECT */ class ASTSubquery : public IAST { public: - /// тип возвращаемого значения - DataTypePtr return_type; - /// номер столбца возвращаемого значения - size_t return_column_number; - - ASTSubquery() {} - ASTSubquery(StringRange range_) : IAST(range_), return_column_number(0) {} + ASTSubquery() = default; + ASTSubquery(StringRange range_) : IAST(range_) {} /** Получить текст, который идентифицирует этот элемент. */ - String getID() const { return "Subquery"; }; + String getID() const override { return "Subquery"; } - ASTPtr clone() const { return new ASTSubquery(*this); } + ASTPtr clone() const override + { + const auto res = new ASTSubquery{*this}; + ASTPtr ptr{res}; + res->children.clear(); - String getColumnName() const { return getTreeID(); } + for (const auto & child : children) + res->children.emplace_back(child->clone()); + + return ptr; + } + + String getColumnName() const override { return getTreeID(); } }; }