#pragma once #include #include namespace DB { class ASTFunction; class ASTSetQuery; class ASTStorage : public IAST { public: ASTFunction * engine = nullptr; IAST * partition_by = nullptr; IAST * primary_key = nullptr; IAST * order_by = nullptr; IAST * sample_by = nullptr; ASTSetQuery * settings = nullptr; String getID(char) const override { return "Storage definition"; } ASTPtr clone() const override; void formatImpl(const FormatSettings & s, FormatState & state, FormatStateStacked frame) const override; }; class ASTExpressionList; class ASTColumns : public IAST { public: ASTExpressionList * columns = nullptr; ASTExpressionList * indices = nullptr; String getID(char) const override { return "Columns definition"; } ASTPtr clone() const override; 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 { public: bool attach{false}; /// Query ATTACH TABLE, not CREATE TABLE. bool if_not_exists{false}; bool is_view{false}; bool is_materialized_view{false}; bool is_populate{false}; bool replace_view{false}; /// CREATE OR REPLACE VIEW ASTColumns * columns_list = nullptr; String to_database; /// For CREATE MATERIALIZED VIEW mv TO table. String to_table; ASTStorage * storage = nullptr; String as_database; String as_table; ASTSelectWithUnionQuery * select = nullptr; /** 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; ASTPtr getRewrittenASTWithoutOnCluster(const std::string & new_database) const override { return removeOnCluster(clone(), new_database); } protected: void formatQueryImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override; }; }