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