> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-86180b7b.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Пакеты нативного клиента

> Клиент собственного протокола

| значение | имя               | описание                   |
| -------- | ----------------- | -------------------------- |
| 0        | [Hello](#hello)   | Начало рукопожатия клиента |
| 1        | [Запрос](#query)  | Запрос                     |
| 2        | [Данные](#data)   | Блок с данными             |
| 3        | [Cancel](#cancel) | Отмена запроса             |
| 4        | [Ping](#ping)     | Запрос Ping                |
| 5        | TableStatus       | Запрос состояния таблицы   |

Пакет `Data` может быть сжат.

<div id="hello">
  ## Hello
</div>

Например, мы используем `Go Client` v1.10, который поддерживает версию протокола `54451`, и
хотим подключиться к базе данных `default` под пользователем `default` с паролем `secret`.

| поле              | тип     | значение      | описание                    |
| ----------------- | ------- | ------------- | --------------------------- |
| client\_name      | String  | `"Go Client"` | Название реализации клиента |
| version\_major    | UVarInt | `1`           | Основная версия клиента     |
| version\_minor    | UVarInt | `10`          | Минорная версия клиента     |
| protocol\_version | UVarInt | `54451`       | Версия протокола TCP        |
| database          | String  | `"default"`   | Имя базы данных             |
| username          | String  | `"default"`   | Имя пользователя            |
| password          | String  | `"secret"`    | Пароль                      |

<div id="protocol-version">
  ### Версия протокола
</div>

Версия протокола — это версия TCP-протокола клиента.

Обычно она совпадает с последней совместимой ревизией сервера, но
её не следует с ней путать.

<div id="defaults">
  ### Значения по умолчанию
</div>

Все значения должны быть **явно указаны** — на стороне сервера значения по умолчанию отсутствуют.
На стороне клиента используйте в качестве значений по умолчанию базу данных `"default"`, имя пользователя `"default"` и пароль `""` (пустую строку).

<div id="query">
  ## Запрос
</div>

| поле            | тип                        | значение   | описание                    |
| --------------- | -------------------------- | ---------- | --------------------------- |
| query\_id       | String                     | `1ff-a123` | Query id, может быть UUIDv4 |
| client\_info    | [ClientInfo](#client-info) | См. тип    | Данные о клиенте            |
| settings        | [Настройки](#settings)     | См. тип    | Список настроек             |
| secret          | String                     | `secret`   | Межсерверный секрет         |
| [stage](#stage) | UVarInt                    | `2`        | Выполнять до стадии запроса |
| compression     | UVarInt                    | `0`        | Отключено=0, включено=1     |
| body            | String                     | `SELECT 1` | Текст запроса               |

<div id="client-info">
  ### Информация о клиенте
</div>

| поле               | тип             | описание                        |
| ------------------ | --------------- | ------------------------------- |
| query\_kind        | byte            | None=0, Initial=1, Secondary=2  |
| initial\_user      | String          | Первоначальный пользователь     |
| initial\_query\_id | String          | Идентификатор исходного запроса |
| initial\_address   | String          | Исходный адрес                  |
| initial\_time      | Int64           | Исходное время                  |
| interface          | byte            | TCP=1, HTTP=2                   |
| os\_user           | String          | Пользователь ОС                 |
| client\_hostname   | String          | Имя хоста клиента               |
| client\_name       | String          | Имя клиента                     |
| version\_major     | UVarInt         | Основная версия клиента         |
| version\_minor     | UVarInt         | Минорная версия клиента         |
| protocol\_version  | UVarInt         | Версия протокола клиента        |
| quota\_key         | String          | Ключ квоты                      |
| distributed\_depth | UVarInt         | Глубина распределения           |
| version\_patch     | UVarInt         | Патч-версия клиента             |
| otel               | Bool            | Поля трассировки присутствуют   |
| trace\_id          | FixedString(16) | Trace ID                        |
| span\_id           | FixedString(8)  | Span ID                         |
| trace\_state       | String          | Состояние трассировки           |
| trace\_flags       | Byte            | Флаги трассировки               |

<div id="settings">
  ### Настройки
</div>

| поле      | тип    | значение          | описание                   |
| --------- | ------ | ----------------- | -------------------------- |
| key       | String | `send_logs_level` | Ключ настройки             |
| value     | String | `trace`           | Значение настройки         |
| important | Bool   | `true`            | Можно игнорировать или нет |

Кодируется как список; пустые key и value обозначают конец списка.

<div id="stage">
  ### Этап
</div>

| значение | имя                | описание                                                  |
| -------- | ------------------ | --------------------------------------------------------- |
| 0        | FetchColumns       | Получить только типы столбцов                             |
| 1        | WithMergeableState | До состояния, пригодного для слияния                      |
| 2        | Complete           | До полной готовности (должно использоваться по умолчанию) |

<div id="data">
  ## Данные
</div>

| поле    | тип                    | описание                          |
| ------- | ---------------------- | --------------------------------- |
| info    | BlockInfo              | Закодированная информация о блоке |
| columns | UVarInt                | Число столбцов                    |
| rows    | UVarInt                | Число строк                       |
| columns | [\[\]Столбец](#column) | Столбцы с данными                 |

<div id="column">
  ### Столбец
</div>

| поле | тип    | значение        | описание       |
| ---- | ------ | --------------- | -------------- |
| name | String | `foo`           | Имя столбца    |
| type | String | `DateTime64(9)` | Тип столбца    |
| data | bytes  | \~              | Данные столбца |

<div id="cancel">
  ## Cancel
</div>

У пакета нет тела. Сервер должен отменить запрос.

<div id="ping">
  ## Ping
</div>

Без тела пакета. Сервер должен [ответить пакетом pong](/ru/resources/develop-contribute/native-protocol/server#pong).
