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

51 lines
1.8 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>
2012-03-11 08:52:56 +00:00
#include <DB/DataStreams/BlockIO.h>
2011-10-30 11:30:52 +00:00
#include <DB/Interpreters/Context.h>
namespace DB
{
/** Интерпретирует произвольный запрос.
*/
class InterpreterQuery
{
public:
2012-05-22 18:32:45 +00:00
InterpreterQuery(ASTPtr query_ptr_, Context & context_, QueryProcessingStage::Enum stage_ = QueryProcessingStage::Complete);
2011-10-30 11:30:52 +00:00
/** Выполнить запрос.
*
* ostr - куда писать результат выполнения запроса, если он есть.
*
* remaining_data_istr, если не nullptr, может содержать нераспарсенный остаток запроса с данными.
2011-10-30 11:30:52 +00:00
* (заранее может быть считан в оперативку для парсинга лишь небольшой кусок запроса, который содержит не все данные)
*
* В query_plan,
* после выполнения запроса, может быть записан BlockInputStreamPtr,
* использовавшийся при выполнении запроса,
* чтобы можно было получить информацию о том, как выполнялся запрос.
*/
2012-01-09 19:20:48 +00:00
void execute(WriteBuffer & ostr, ReadBuffer * remaining_data_istr, BlockInputStreamPtr & query_plan);
2011-10-30 11:30:52 +00:00
2012-03-11 08:52:56 +00:00
/** Подготовить запрос к выполнению. Вернуть потоки блоков, используя которые можно выполнить запрос.
*/
BlockIO execute();
2011-10-30 11:30:52 +00:00
private:
ASTPtr query_ptr;
Context context;
2012-05-22 18:32:45 +00:00
QueryProcessingStage::Enum stage;
void throwIfReadOnly()
{
if (context.getSettingsRef().limits.readonly)
throw Exception("Cannot execute query in readonly mode", ErrorCodes::READONLY);
}
2011-10-30 11:30:52 +00:00
};
}