GithubHelp home page GithubHelp logo

sophiadb's People

Contributors

dependabot[bot] avatar unhandled-exception avatar

Stargazers

 avatar

Watchers

 avatar

sophiadb's Issues

Плейсхолдеры во встроенном драйвере без регулярки

Делаем простой токенайзер, выдающий три типа лексем: text, positional, named. Не ищем positional и named в строках и комментариях. Строки, комментарии и вайтспейсы выдаём в поток в виде text-лексем.

  • Токенайзер
    • Лексемы: error, eof, text, named, positionsl
    • Строки в одинарных и двойных кавычках как text
    • Вайтспейсы и переводы строк как text, чтобы передать базе оригинальный запрос
    • Выкидываем комментарии
  • В applyFilter токенизируем запрос вместо регулярки

Поиск по hash-индексу в базе

Из главы 12 берем реализацию статического хеш индекса — по файлу на каждый бакет индекса. Добавляем поддержку индексов в планировщик.

  • HashIndex (12.3.2)
  • Тесты на Constant.Hash
  • IndexSelectPlan/IndexSelectScan (12.6.1)
  • IndexJoinPlan/IndexJoinScan (12.6.2)
  • IndexUpdatePlanner (12.7)

Завести тикеты из доп-заданий:

Образы сканирования. SelectScan

Глава 8. Обработка запросов

  • Интерфейсы Scan, UpdateScan, Predicate, Term
  • Оставить в scan только функции-итераторы
  • SelectScan
    • Структура
    • Тесты на SelectScan
  • Constants
    • Структура
    • Тесты
  • Terms
    • Структура
    • Тесты
  • AndPredicate
    • Структура
    • Тесты
  • Expressions
    • Структура
    • Тесты

PR #34

Планировщик запросов

Глава 10 книги «Планирование». Планы делаем в #45

  • Planner с заглушками для QueryPlanner и CommandsPlanner
  • Планеры с валидаторами метаданных
    • QueryPlanner
      • CreatePlan
      • Тесты на CreatePlan без пролем валидации запросов
      • Можно жить без валидаторов — имена таблиц и полей мы проверяем при создании планов или сканировании
    • CommandsPlanner
      • ExecuteInsert
      • ExecuteDelete (остались тесты)
      • ExecuteUpdate
      • ExecuteCreateTable
      • ExecuteCreateIndex
      • ExecuteCreateView
  • Тесты на Planner
    • CreateQueryPlan
    • ExecuteCommand
    • ExecuteInsert
    • ExecuteDelete
    • ExecuteUpdate
    • ExecuteCreateTable
    • ExecuteCreateIndex
    • ExecuteCreateView

Отдельный тикет? Добавить в выражение для индекса параметр типа индекса create index idx1 on table1 (field1, ...) [using btree|hash]. В парсере временно выдавать ошибку, если нам передали несколько полей?

Добавить в pkg/db реализацию интерфейсов embedded-драйвера для database/sql

В 11 главе книжки описывается овис-интерфейс. Нам нужен интерфейс для database/sql. Делаем современные методы с контекстом.

https://pkg.go.dev/database/sql/driver

  • Интерфейс database/sql/driver
    • Соединение с БД
    • Exec
    • Query
    • Тесты на транзакции
    • Тесты на несколько соединений
    • Параметры в dsn
  • Плейсхолдеры и named-параметры (отдельным тикетом)

Образы сканирования. Project Scan

Оператор project принимает два аргумента: входную таблицу и набор имен полей. Выходная таблица включает все записи из входной таблицы, но ее схема содержит только указанные поля.

  • Конструктор NewProjectScan и заглушка для интерфейса Scan
  • В интерфейсе scan.Scan заменить метод Layout на Schema (лэяут не у каждого образа есть, а схема есть)
  • Методы
  • Тесты
  • Для SelectScan дописать тесты, проверяющие, что о оборачиваемый образ не поддерживает UpdateScan

B-Tree индекс (12.5)

  • 12.5.6. Реализация страниц B-дерева
    • BTPage класс
    • BTPage тесты
    • BTreeLeaf
    • BTreeDir
  • 12.5.7. Реализация индекса на основе B-дерева
  • Проверить создание b-tree через create index using btree

Написать свой токенайзер вместо github.com/bzick/tokenizer

Токенайзер из github.com/bzick/tokenizer для нас избыточен. Берем идею лексера из доклада Пайка — https://www.youtube.com/watch?v=HxaD_trXwRE&t=1567 и код из https://cs.opensource.google/go/go/+/master:src/text/template/parse/lex.go и делаем свой простой лексер

  • Делаем токенайзер по заветам Пайка
  • Заменяем bzick/tokenizer в лексере на свой
  • Переделать врапер ошибок
  • Причесать код и комментарии

Синтаксический анализатор. Парсер

  • Модуль и интерфейс Парсера
  • Операторы
    • Select
    • Insert
    • Delete
    • Update
    • Create table
    • Create index
    • Create view
  • Парсер с тестами
  • Дописать тесты на лексер
  • Добавить проверку, что после парсинга в строке не осталось токенов
  • Сделать методы parseTables, parseValues и т.п. частью типов TablesList, ValuesList и т.п.

Добавить в выражение для индекса параметр типа индекса create index idx1 on table1 (field1, …) [using btree|hash]

Попутно можно ругаться, если нам передали несколько полей в индексе — в книге поддерживается только одно поле в индексе.

  • Доавить в парсер для create index разбор выражения using
  • Выдавать ошибку в парсере, еслинам передали несколько полей

Использовать IndexSelectScan для executeDelete и executeUpdate, если есть индекс по полю из where (12.20)

Методы executeDelete и executeUpdate в планировщике обновлений в SimpleDB используют образ сканирования для оператора селекции (SelectScan), чтобы найти требуемые записи. Однако образ можно по- строить и с поддержкой индекса (IndexSelectScan), если подходящий индекс существует.

В executeCreateIndex автоматически строить индекс (12.24)

Одна из проблем, связанных с методом executeCreateIndex планиров- щика обновлений, заключается в том, что он создает пустой индекс, даже если индексируемая таблица содержит записи. Переделайте ме- тод так, чтобы он автоматически вставлял индексные записи для всех существующих записей в индексируемой таблице.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.