# Инструмент DB Querier
## Описание
Инструмент `db_querier` — это gRPC-сервис на Go, который выполняет SQL-запрос к указанному файлу базы данных **SQLite**. Он предназначен для чтения данных, но может выполнять любые корректные SQL-команды.
> **Внимание:** Этот инструмент может выполнять любой предоставленный ему SQL-запрос, включая разрушительные, такие как `UPDATE`, `DELETE` или `DROP TABLE`. Используйте с крайней осторожностью, так как это может привести к необратимой потере данных.
## Параметры
Инструмент принимает следующие аргументы в виде JSON-объекта:
| Параметр | Тип | Обязательный | Описание |
|-----------|----------|--------------|--------------------------------------------------------------------|
| `db_path` | `string` | **Да** | Локальный путь к файлу базы данных SQLite (например, `./data/main.db`). |
| `query` | `string` | **Да** | SQL-запрос для выполнения. |
В целях безопасности инструмент проверяет, существует ли файл базы данных, прежде чем пытаться его открыть.
## Ответ
* **Успешный запрос:** Если запрос выполнен успешно, инструмент возвращает JSON-массив объектов. Каждый объект представляет собой строку, где ключи соответствуют именам столбцов. Если запрос не вернул результатов, возвращается пустой массив `[]`.
* **Ошибка:** Если файл базы данных не найден, SQL-запрос некорректен или возникает другая ошибка, инструмент возвращает сообщение об ошибке.
## Пример использования
Вот пример использования инструмента `db_querier` для выбора всех пользователей из таблицы `users` в файле базы данных SQLite с именем `project.db`.
**Запрос:**
```bash
curl -X POST http://localhost:8002/v1/tools:run \
-d '{
"name": "db_querier",
"arguments": {
"db_path": "data/project.db",
"query": "SELECT id, name, email FROM users WHERE status = 'active';"
}
}'
```
**Успешный ответ:**
```json
{
"result": {
"listValue": {
"values": [
{
"structValue": {
"fields": {
"id": { "numberValue": 1 },
"name": { "stringValue": "Алиса" },
"email": { "stringValue": "alice@example.com" }
}
}
},
{
"structValue": {
"fields": {
"id": { "numberValue": 2 },
"name": { "stringValue": "Борис" },
"email": { "stringValue": "bob@example.com" }
}
}
}
]
}
}
}
```
## Конфигурация
Конфигурация инструмента управляется через файл `config.json`, расположенный в директории инструмента.
**Пример `config.json`:**
```json
{
"port": 50053,
"command": ["go", "run", "."]
}
```
* `port`: Порт, на котором будет слушать gRPC-сервер инструмента.
* `command`: Команда и аргументы для запуска инструмента.
## Проверки состояния и логирование
* **Проверки состояния:** Этот инструмент реализует стандартный протокол gRPC Health Checking Protocol.
* **Логирование:** Инструмент использует структурированный JSON-логгер (`slog`) для наблюдаемости.