mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 07:31:57 +00:00
Merge
This commit is contained in:
commit
c96e421982
@ -17,13 +17,15 @@ public:
|
||||
InterpreterInsertQuery(ASTPtr query_ptr_, Context & context_);
|
||||
|
||||
/** Выполнить запрос.
|
||||
* remaining_data_istr, если не NULL, может содержать нераспарсенные данные для вставки.
|
||||
* remaining_data_istr, если не nullptr, может содержать нераспарсенные данные для вставки.
|
||||
* (заранее может быть считан в оперативку для парсинга лишь небольшой кусок запроса, который содержит не все данные)
|
||||
*/
|
||||
void execute(ReadBuffer * remaining_data_istr);
|
||||
|
||||
/** Подготовить запрос к выполнению. Вернуть поток блоков, в который можно писать данные для выполнения запроса.
|
||||
* Или вернуть NULL, если запрос INSERT SELECT (самодостаточный запрос - не принимает входные данные).
|
||||
/** Подготовить запрос к выполнению. Вернуть потоки блоков
|
||||
* - поток, в который можно писать данные для выполнения запроса, если INSERT;
|
||||
* - поток, из которого можно читать результат выполнения запроса, если SELECT и подобные;
|
||||
* Или ничего, если запрос INSERT SELECT (самодостаточный запрос - не принимает входные данные, не отдаёт результат).
|
||||
*/
|
||||
BlockIO execute();
|
||||
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
*
|
||||
* ostr - куда писать результат выполнения запроса, если он есть.
|
||||
*
|
||||
* remaining_data_istr, если не NULL, может содержать нераспарсенный остаток запроса с данными.
|
||||
* remaining_data_istr, если не nullptr, может содержать нераспарсенный остаток запроса с данными.
|
||||
* (заранее может быть считан в оперативку для парсинга лишь небольшой кусок запроса, который содержит не все данные)
|
||||
*
|
||||
* В query_plan,
|
||||
|
@ -84,19 +84,16 @@ void InterpreterInsertQuery::execute(ReadBuffer * remaining_data_istr)
|
||||
|
||||
/// Данные могут содержаться в распарсенной (query.data) и ещё не распарсенной (remaining_data_istr) части запроса.
|
||||
|
||||
/// Если данных нет.
|
||||
bool has_remaining_data = remaining_data_istr && !remaining_data_istr->eof();
|
||||
|
||||
if (!query.data && !has_remaining_data)
|
||||
throw Exception("No data to insert", ErrorCodes::NO_DATA_TO_INSERT);
|
||||
|
||||
ConcatReadBuffer::ReadBuffers buffers;
|
||||
ReadBuffer buf1(const_cast<char *>(query.data), query.data ? query.end - query.data : 0, 0);
|
||||
|
||||
if (query.data)
|
||||
buffers.push_back(&buf1);
|
||||
if (has_remaining_data)
|
||||
buffers.push_back(remaining_data_istr);
|
||||
buffers.push_back(remaining_data_istr);
|
||||
|
||||
/** NOTE Нельзя читать из remaining_data_istr до того, как прочтём всё между query.data и query.end.
|
||||
* - потому что query.data может ссылаться на кусок памяти, использующийся в качестве буфера в remaining_data_istr.
|
||||
*/
|
||||
|
||||
ConcatReadBuffer istr(buffers);
|
||||
Block sample = table->getSampleBlock();
|
||||
|
Loading…
Reference in New Issue
Block a user