Skip to content

SQL: port window functions from SQLite

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

  1. в over поддерживаются только ключевые слова partition by и order by. Фильтрация (filter) и настройки окна должны добавляться в следующих итерациях.
  2. из функций поддерживаются все агрегатные функции (avg, count, max, min, total, sum, group_concat), а из непосредственно оконных только row_number.
window_function (...) OVER ( [[ PARTITION BY ( expr, ... ) ]] [[ ORDER BY ( expr, ... ) ]] )

Чтобы портировать оконные функции из SQLite в Тарантул, нужны как минимум следующие коммиты:

  1. https://github.com/sqlite/sqlite/commit/86fb6e173885b9ac170b14ce9a9d0ccf7cd34e50
  2. https://github.com/sqlite/sqlite/commit/dfa552f45be381ec1834573e6a94eccea728de2c

А так же багфиксы:

  1. https://github.com/sqlite/sqlite/commit/a83899754423bea16d4efeb4f39482b57d79c083
  2. https://github.com/sqlite/sqlite/commit/a83899754423bea16d4efeb4f39482b57d79c083
  3. https://github.com/sqlite/sqlite/commit/2e362f9775ba05e353276039acc788e592fea0e4
  4. https://github.com/sqlite/sqlite/commit/4780b9ad46ebf5b9a2628cd80ef2ec95a6566f56
  5. ...
  6. PROFIT
Edited by Denis Smirnov