ClickHouse/dbms/include/DB/Core/Protocol.h
2012-05-16 18:03:00 +00:00

79 lines
3.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
namespace DB
{
/** Протокол взаимодействия с сервером.
*
* Клиент соединяется с сервером и передаёт ему пакет Hello.
* Если версия не устраивает, то сервер может разорвать соединение.
* Сервер отвечает пакетом Hello.
* Если версия не устраивает, то клиент может разорвать соединение.
*
* Далее в цикле.
*
* Клиент отправляет на сервер пакет Query.
*
* Если этот запрос требует передачи данных от клиента, то клиент отправляет один или несколько пакетов Data
* с помощью ChunkedWriteBuffer.
* Конец данных определается по отправленному пустому блоку.
*
* Далее, сервер передаёт набор пакетов одного из следующих видов:
* - Data - данные результата выполнения запроса (один блок);
* - Progress - прогресс выполнения запроса;
* - Exception - ошибка;
* - EndOfStream - конец передачи данных;
*
* Клиент должен читать пакеты до EndOfStream или Exception.
* Также, клиент может передать на сервер пакет Cancel - отмена выполнения запроса.
* В этом случае, сервер может прервать выполнение запроса и вернуть неполные данные;
* но клиент всё равно должен читать все пакеты до EndOfStream.
*
* Между запросами, клиент может отправить Ping, и сервер должен ответить Pong.
*/
namespace Protocol
{
/// То, что передаёт сервер.
namespace Server
{
enum Enum
{
Hello = 0, /// Имя, версия, ревизия.
Data = 1, /// Идентификатор запроса, признак последнего чанка, размер чанка, часть данных со сжатием или без.
Exception = 2, /// Исключение во время обработки запроса.
Progress = 3, /// Прогресс выполнения запроса: строк считано, байт считано.
Pong = 4, /// Ответ на Ping.
EndOfStream = 5, /// Все пакеты были переданы.
};
}
/// То, что передаёт клиент.
namespace Client
{
enum Enum
{
Hello = 0, /// Имя, версия, ревизия.
Query = 1, /** Идентификатор запроса, информация, до какой стадии исполнять запрос,
* использовать ли сжатие, формат входных данных, формат выходных данных, текст запроса (без данных для INSERT-а).
*/
Data = 2, /// Идентификатор запроса, признак последнего чанка, размер чанка, часть данных со сжатием или без.
Cancel = 3, /// Отменить выполнение запроса.
Ping = 4, /// Проверка живости соединения с сервером.
EndOfStream = 5, /// Все пакеты были переданы.
};
}
/// Использовать ли сжатие.
namespace Compression
{
enum Enum
{
Disable = 0,
Enable = 1,
};
}
}
}