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

43 lines
2.4 KiB
C
Raw Normal View History

2011-10-30 11:30:52 +00:00
#pragma once
2012-05-22 18:32:45 +00:00
#include <DB/Core/QueryProcessingStage.h>
2011-10-30 11:30:52 +00:00
#include <DB/Interpreters/InterpreterQuery.h>
namespace DB
{
/** Парсит и исполняет запрос.
*/
void executeQuery(
ReadBuffer & istr, /// Откуда читать запрос (а также данные для INSERT-а, если есть)
WriteBuffer & ostr, /// Куда писать результат
Context & context, /// БД, таблицы, типы данных, движки таблиц, функции, агрегатные функции...
BlockInputStreamPtr & query_plan, /// Сюда может быть записано описание, как выполнялся запрос
bool internal = false, /// Если true - значит запрос порождён из другого запроса, и не нужно его регистировать в ProcessList-е.
2012-05-22 18:32:45 +00:00
QueryProcessingStage::Enum stage = QueryProcessingStage::Complete); /// До какой стадии выполнять SELECT запрос.
2011-10-30 11:30:52 +00:00
2012-03-11 08:52:56 +00:00
/** Более низкоуровневая функция для межсерверного взаимодействия.
* Подготавливает запрос к выполнению, но не выполняет его.
* Возвращает потоки блоков, при использовании которых, запрос будет выполняться.
* То есть, вы можете, в некоторой степени, управлять циклом выполнения запроса.
*
* Для выполнения запроса:
* - сначала передайте данные INSERT-а, если есть, в BlockIO::out;
* - затем читайте результат из BlockIO::in;
*
* Если запрос не предполагает записи данных или возврата результата, то out и in,
* соответственно, будут равны nullptr.
2012-03-11 08:52:56 +00:00
*
* Часть запроса по парсингу и форматированию (секция FORMAT) необходимо выполнить отдельно.
*/
BlockIO executeQuery(
const String & query, /// Текст запроса, без данных INSERT-а (если есть). Данные INSERT-а следует писать в BlockIO::out.
2012-05-22 18:32:45 +00:00
Context & context,
bool internal = false,
2012-05-22 18:32:45 +00:00
QueryProcessingStage::Enum stage = QueryProcessingStage::Complete);
2012-03-11 08:52:56 +00:00
2011-10-30 11:30:52 +00:00
}