dbms: added pretty-formatting for GLOBAL IN; pedantic modifications in comments [#METR-10071].

This commit is contained in:
Alexey Milovidov 2014-03-27 21:58:25 +04:00
parent 2c14e9be41
commit 26848b6803
4 changed files with 8 additions and 6 deletions

View File

@ -97,7 +97,7 @@ public:
/// Если ast - запрос SELECT, получает имена (алиасы) и типы столбцов из секции SELECT. /// Если ast - запрос SELECT, получает имена (алиасы) и типы столбцов из секции SELECT.
Block getSelectSampleBlock(); Block getSelectSampleBlock();
/// Все новые временные таблицы, полученные при выполнении подзапросов Global In /// Все новые временные таблицы, полученные при выполнении подзапросов GLOBAL IN.
std::vector<StoragePtr> external_tables; std::vector<StoragePtr> external_tables;
private: private:
typedef std::set<String> NamesSet; typedef std::set<String> NamesSet;
@ -261,12 +261,12 @@ private:
void normalizeTree(); void normalizeTree();
void normalizeTreeImpl(ASTPtr & ast, MapOfASTs & finished_asts, SetOfASTs & current_asts, std::string current_alias, bool in_sign_rewritten); void normalizeTreeImpl(ASTPtr & ast, MapOfASTs & finished_asts, SetOfASTs & current_asts, std::string current_alias, bool in_sign_rewritten);
/// Обходит запрос и сохраняет найденные глобальные функции (например Global in) /// Обходит запрос и сохраняет найденные глобальные функции (например GLOBAL IN)
void findGlobalFunctions(ASTPtr & ast, std::vector<ASTPtr> & global_nodes); void findGlobalFunctions(ASTPtr & ast, std::vector<ASTPtr> & global_nodes);
/// Превратить перечисление значений или подзапрос в ASTSet. node - функция in или notIn. /// Превратить перечисление значений или подзапрос в ASTSet. node - функция in или notIn.
void makeSet(ASTFunction * node, const Block & sample_block); void makeSet(ASTFunction * node, const Block & sample_block);
/// Выполнить подзапрос в секции global in и запомнить результат во временную таблицу типа memory /// Выполнить подзапрос в секции GLOBAL IN и запомнить результат во временную таблицу типа memory
/// Все новые временные таблицы хранятся в переменной external_tables /// Все новые временные таблицы хранятся в переменной external_tables
void addExternalStorage(ASTFunction * node, size_t & name_id); void addExternalStorage(ASTFunction * node, size_t & name_id);

View File

@ -569,7 +569,7 @@ void ExpressionAnalyzer::addExternalStorage(ASTFunction * node, size_t & name_id
bool parse_res = parser.parse(pos, end, subquery, expected); bool parse_res = parser.parse(pos, end, subquery, expected);
if (!parse_res) if (!parse_res)
throw Exception("Error in parsing select query while creating set for table " + table->name + ".", throw Exception("Error in parsing SELECT query while creating set for table " + table->name + ".",
ErrorCodes::LOGICAL_ERROR); ErrorCodes::LOGICAL_ERROR);
} }
else else
@ -592,7 +592,7 @@ void ExpressionAnalyzer::addExternalStorage(ASTFunction * node, size_t & name_id
external_tables.push_back(external_storage); external_tables.push_back(external_storage);
} }
else else
throw Exception("Global in (notIn) supports only select data.", ErrorCodes::BAD_ARGUMENTS); throw Exception("GLOBAL [NOT] IN supports only SELECT data.", ErrorCodes::BAD_ARGUMENTS);
} }

View File

@ -78,7 +78,7 @@ void InterpreterSelectQuery::init(BlockInputStreamPtr input_, const NamesAndType
query_analyzer = new ExpressionAnalyzer(query_ptr, context, storage, subquery_depth); query_analyzer = new ExpressionAnalyzer(query_ptr, context, storage, subquery_depth);
/// Выполняем все Global in подзапросы, результаты будут сохранены в query_analyzer->external_tables /// Выполняем все GLOBAL IN подзапросы, результаты будут сохранены в query_analyzer->external_tables
query_analyzer->processGlobalOperations(); query_analyzer->processGlobalOperations();
/// Сохраняем в query context новые временные таблицы /// Сохраняем в query context новые временные таблицы

View File

@ -498,6 +498,8 @@ void formatAST(const ASTFunction & ast, std::ostream & s, size_t indent, bool
"notLike", " NOT LIKE ", "notLike", " NOT LIKE ",
"in", " IN ", "in", " IN ",
"notIn", " NOT IN ", "notIn", " NOT IN ",
"globalIn", " GLOBAL IN ",
"globalNotIn", " GLOBAL NOT IN ",
nullptr nullptr
}; };