csvql
Get data from .csv files use SQL-like queries.
Задание
Необходимо написать консольную программу, которая по заданному клиентом запросу осуществляет поиск данных в CSV-файлах, своего рода простенький исполнитель SQL запросов. При запуске программа должна предлагать пользователю ввести через командную строку поисковой запрос, сформированный в виде набора условий:
column_name OP value [AND/OR column_name OP value] …
Например, age > 40 AND status = “sick”
Критерии приемки
- При запуске программа печатает путь до исполняемого файла и версию последнего коммита
- Программа должна корректно обрабатывать выход по сигналу SIGINT, прерывая поиск, если он запущен
- Программа должна получать настройки из текстового конфигурационного файла (например, в TOML формате) при старте
- Программа должна завершать исполнение запроса, если он занимает слишком продолжительное время (значение таймаута задается в конфигурационном файле)
- Программа должна логировать все запросы в файл access.log, логировать все ошибки (например, остановку пользователем или прерывания по таймауту, невалидные запросы пользователя) в error.log
- Код должен быть покрыт тестами (test coverage хотя бы 30%)
- Код должен быть организован согласно выбранным принципам, например можно использовать project-layout для вдохновения
- Должен быть создан конфигурационный файл для golangci-lint
- При коммите в локальный репозиторий в автоматическом режиме должно происходить следующее make test - должен запускать тесты и печатать отчет о coverage make check - должен запускать все линтеры
Дополнительные задания (не обязательные к выполнению):
- Задавать через конфигурационный файл индекс по одному из полей таблицы, строить B-tree или Hash индекс по этому полю при старте программы
- Поддержать синтаксис выбора отдельных полей из таблиц в запросе, например как SELECT first_name, last_name FROM my.csv WHERE age > 40 AND status = “sick”