ClickHouse/dbms/include/DB/Interpreters/executeQuery.h

44 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <DB/Core/QueryProcessingStage.h>
#include <DB/DataStreams/BlockIO.h>
namespace DB
{
/** Парсит и исполняет запрос.
*/
void executeQuery(
ReadBuffer & istr, /// Откуда читать запрос (а также данные для INSERT-а, если есть)
WriteBuffer & ostr, /// Куда писать результат
Context & context, /// БД, таблицы, типы данных, движки таблиц, функции, агрегатные функции...
BlockInputStreamPtr & query_plan, /// Сюда может быть записано описание, как выполнялся запрос
std::function<void(const String &)> set_content_type /// Может быть передан колбэк, с помощью которого может быть сообщён Content-Type формата.
);
/** Более низкоуровневая функция для межсерверного взаимодействия.
* Подготавливает запрос к выполнению, но не выполняет его.
* Возвращает потоки блоков, при использовании которых, запрос будет выполняться.
* То есть, вы можете, в некоторой степени, управлять циклом выполнения запроса.
*
* Для выполнения запроса:
* - сначала передайте данные INSERT-а, если есть, в BlockIO::out;
* - затем читайте результат из BlockIO::in;
*
* Если запрос не предполагает записи данных или возврата результата, то out и in,
* соответственно, будут равны nullptr.
*
* Часть запроса по парсингу и форматированию (секция FORMAT) необходимо выполнить отдельно.
*/
BlockIO executeQuery(
const String & query, /// Текст запроса, без данных INSERT-а (если есть). Данные INSERT-а следует писать в BlockIO::out.
Context & context, /// БД, таблицы, типы данных, движки таблиц, функции, агрегатные функции...
bool internal = false, /// Если true - значит запрос порождён из другого запроса, и не нужно его регистировать в ProcessList-е.
QueryProcessingStage::Enum stage = QueryProcessingStage::Complete /// До какой стадии выполнять SELECT запрос.
);
}