2011-10-30 11:30:52 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
2012-05-22 18:32:45 +00:00
|
|
|
|
#include <DB/Core/QueryProcessingStage.h>
|
2015-06-18 02:11:05 +00:00
|
|
|
|
#include <DB/DataStreams/BlockIO.h>
|
2011-10-30 11:30:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Парсит и исполняет запрос.
|
|
|
|
|
*/
|
|
|
|
|
void executeQuery(
|
2014-05-03 22:57:43 +00:00
|
|
|
|
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,
|
2014-05-03 22:57:43 +00:00
|
|
|
|
* соответственно, будут равны 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,
|
2013-09-03 23:58:05 +00:00
|
|
|
|
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
|
|
|
|
}
|