Skip to content

stepan2volkov/csvdb

Repository files navigation

Go version CI codecov

CSV DB

Описание

Цель программы: использовать sql-like синтаксис для работы с csv-файлами.

Основные операции: AND, OR, =, <, >.

Пример запроса:

SELECT region, country, item_type, sales_channel, total_cost, total_profit FROM sales WHERE country = 'South Africa' AND item_type = 'Clothes' and sales_channel='Online' AND total_profit > 400000;

"Особенности":

  1. В конце запроса в обязательном порядке должна стоять ;
  2. Оператор AND имеет приоритет над оператором OR

Использование

Загрузка csv-файла

\load file.csv config.yaml

Формат yaml-файла

name: tablename         # Наименование таблицы
sep: ','                # Разделитель значений
lazyQuotes: true        # true, если значения заключены в двойные кавычки
fields:                 # Список полей в таблице
- name: lastname        # Наименование поля
  type: string          # Тип поля: string или number
- name: firstname
  type: string
- name: salary
  type: number

Список загруженных таблиц

\list

Удаление таблицы

 \drop tablename

Структура проекта

Направления зависимостей между пакетами приведены ниже.

flowchart LR;
  subgraph app
    App
  end
  subgraph parser
    SelectStmt
  end
  subgraph scanner
    Token
    TokenType
    Scanner
  end
  subgraph table
    LogicalOperation
    CompareValueOperation
    Value
    Table
    Formatter

    subgraph operation
      DummyValueOperation
      OrOperation
      AndOperation
    end

    subgraph value
      NumberValue
      StringValue
    end

    subgraph formatter
      DefaultFormatter
    end
  end

  SelectStmt-->LogicalOperation
  SelectStmt-->Token
  SelectStmt-->CompareValueOperation
  SelectStmt-->TokenType
  DummyValueOperation-. implements .->LogicalOperation
  OrOperation-. implements .->LogicalOperation
  AndOperation-. implements .->LogicalOperation

  NumberValue-. implements .->Value
  StringValue-. implements .->Value

  Table-- Contains -->Value
  DefaultFormatter-. implements .->Formatter

  App-- use-->Table
  App-- use-->Scanner
  App-- use-->SelectStmt
  App-- use-->LogicalOperation
Loading

Задачи на разработку

  • (CSVDB-1) Реализовать простейший парсер выражения where
  • (CSVDB-2) Подключить линтер и устранить его замечания
  • (CSVDB-3) Настроить pre-commit хук
  • (CSVDB-4) Настроить github actions
  • (CSVDB-5) Описать структуру хранения данных, полученных из csv-файла
  • (CSVDB-6) Описать доступные операции над данными
  • (CSVDB-7) Реализовать построение плана запроса из разобранного выражения where
  • (CSVDB-8) Реализовать загрузку файла в RAM
  • (CSVDB-9) Реализовать конфигурирование посредством yaml-файла
  • (CSVDB-10) Реализовать секцию from
  • (CSVDB-11) Реализовать секцию select
  • (CSVDB-12) Перенести логирование в файлы access.log и error.log
  • (CSVDB-13) Gracefull shutdown
  • (CSVDB-14) Добавить build приложения и установку golangci-lint в Makefile
  • (CSVDB-15) Добавить build в pre-commit hook
  • (CSVDB-16) Избавиться от глобальных переменных
  • (CSVDB-17) Перенести текстовые переменные в константы
  • (CSVDB-18) Передавать логгер в явном виде
  • (CSVDB-19) Покрыть тестами github.com/stepan2volkov/csvdb/internal/app/table/operation/helper.go
  • (CSVDB-20) Обработка контекста в handleInput(ctx) и приложении
  • (CSVDB-21) Добавить больше логов
  • (CSVDB-22) Рассмотреть возможности для распараллеливания

Локальная настройка окружения

После скачивания репозитория требуется подключить pre-commit хук, чтобы выявлять проблемы до заливки кода к репозиторий. Для этого требуется устновить фреймворк для управления хуками. Инструкцию по устновке можно найти здесь.

После этого потребуется один раз выполнить:

pre-commit install

После этого хук будет срабатывать автоматически.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published