#pragma once #include #include namespace DB { class ASTSelectQuery; struct SettingChange; class SettingsChanges; /// Pushdown SETTINGS clause that goes after FORMAT to the SELECT query: /// (since settings after FORMAT parsed separately not in the ParserSelectQuery but in ParserQueryWithOutput) /// /// SELECT 1 FORMAT Null SETTINGS max_block_size = 1 -> /// SELECT 1 SETTINGS max_block_size = 1 FORMAT Null SETTINGS max_block_size = 1 /// /// Otherwise settings after FORMAT will not be applied. class QueryWithOutputSettingsPushDownMatcher { public: using Visitor = InDepthNodeVisitor; struct Data { const ASTPtr & settings_ast; }; static bool needChildVisit(ASTPtr & node, const ASTPtr & child); static void visit(ASTPtr & ast, Data & data); private: static void visit(ASTSelectQuery &, ASTPtr &, Data &); }; using QueryWithOutputSettingsPushDownVisitor = QueryWithOutputSettingsPushDownMatcher::Visitor; }