mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-22 01:30:51 +00:00
Merge
This commit is contained in:
commit
24f3f80b9f
@ -194,6 +194,28 @@ protected:
|
||||
progressImpl(Progress(res.rows(), res.bytes()));
|
||||
pre_reader->fillMissingColumns(res);
|
||||
|
||||
/** The column possibly added by pre_reader can be scheduled to be read by reader,
|
||||
* thus resulting in duplicate read of the same column. To avoid such possibility
|
||||
* we are removing such column from reader's column list */
|
||||
if (const auto added_column = pre_reader->getAddedColumn())
|
||||
{
|
||||
if (column_name_set.count(added_column->name))
|
||||
{
|
||||
for (auto it = columns.begin(); it != columns.end(); ++it)
|
||||
{
|
||||
if (it->name == added_column->name)
|
||||
{
|
||||
columns.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
reader->removeColumn(added_column->name);
|
||||
column_name_set.erase(added_column->name);
|
||||
|
||||
pre_columns.emplace_back(*added_column);
|
||||
}
|
||||
}
|
||||
|
||||
/// Вычислим выражение в PREWHERE.
|
||||
prewhere_actions->execute(res);
|
||||
|
||||
|
@ -58,6 +58,22 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
const NameAndTypePair * getAddedColumn() const { return added_column; }
|
||||
|
||||
void removeColumn(const String & column_name)
|
||||
{
|
||||
for (auto it = columns.begin(); it != columns.end(); ++it)
|
||||
{
|
||||
if (it->name == column_name)
|
||||
{
|
||||
columns.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
streams.erase(column_name);
|
||||
}
|
||||
|
||||
/** Если столбцов нет в блоке, добавляет их, если есть - добавляет прочитанные значения к ним в конец.
|
||||
* Не добавляет столбцы, для которых нет файлов. Чтобы их добавить, нужно вызвать fillMissingColumns.
|
||||
* В блоке должно быть либо ни одного столбца из columns, либо все, для которых есть файлы. */
|
||||
@ -176,6 +192,8 @@ public:
|
||||
|
||||
addStream(minimum_size_column->name, *minimum_size_column->type, all_mark_ranges);
|
||||
columns.emplace(std::begin(columns), *minimum_size_column);
|
||||
|
||||
added_column = &columns.front();
|
||||
}
|
||||
|
||||
/// Заполняет столбцы, которых нет в блоке, значениями по умолчанию.
|
||||
@ -366,6 +384,7 @@ private:
|
||||
bool use_uncompressed_cache;
|
||||
MergeTreeData & storage;
|
||||
const MarkRanges & all_mark_ranges;
|
||||
const NameAndTypePair * added_column = nullptr;
|
||||
|
||||
void addStream(const String & name, const IDataType & type, const MarkRanges & all_mark_ranges, size_t level = 0)
|
||||
{
|
||||
|
@ -54,7 +54,7 @@ void OLAPHTTPHandler::processQuery(Poco::Net::HTTPServerRequest & request, Poco:
|
||||
OLAP::QueryParseResult olap_query = server.olap_parser->parse(request_istream);
|
||||
|
||||
std::string clickhouse_query;
|
||||
server.olap_converter->OLAPServerQueryToClickhouse(olap_query, context, clickhouse_query);
|
||||
server.olap_converter->OLAPServerQueryToClickHouse(olap_query, context, clickhouse_query);
|
||||
|
||||
LOG_TRACE(log, "Converted query: " << clickhouse_query);
|
||||
|
||||
|
@ -32,7 +32,7 @@ static std::string firstWord(std::string s)
|
||||
return s;
|
||||
}
|
||||
|
||||
void QueryConverter::OLAPServerQueryToClickhouse(const QueryParseResult & query, Context & inout_context, std::string & out_query) const
|
||||
void QueryConverter::OLAPServerQueryToClickHouse(const QueryParseResult & query, Context & inout_context, std::string & out_query) const
|
||||
{
|
||||
/// Пустая строка, или строка вида ", 'ua'".
|
||||
std::string regions_point_of_view_formatted;
|
||||
|
@ -18,7 +18,7 @@ public:
|
||||
QueryConverter(Poco::Util::AbstractConfiguration & config);
|
||||
|
||||
/// Получает из запроса в формате OLAP-server запрос и настройки для clickhouse.
|
||||
void OLAPServerQueryToClickhouse(const QueryParseResult & query, Context & inout_context, std::string & out_query) const;
|
||||
void OLAPServerQueryToClickHouse(const QueryParseResult & query, Context & inout_context, std::string & out_query) const;
|
||||
|
||||
private:
|
||||
/// Значение атрибута, подходящее для вывода в ответ и для группировки по нему.
|
||||
|
Loading…
Reference in New Issue
Block a user