Roadmap
План развития go-activerecord.
Статусы
- 🔴 Не начато
- 🟡 В работе
- 🟢 Готово
Комментарии в коде: задачи из кода вынесены сюда, в исходниках оставлены ссылки
вида // See docs/roadmap.md — "Название задачи". При реализации задачи удаляйте
комментарий-ссылку из кода и ставьте статус 🟢.
Общие улучшения
Высокий приоритет
| Задача |
Статус |
Описание |
| ENUM типы |
🔴 |
Поддержка PostgreSQL ENUM с генерацией Go констант |
| RO поля |
🔴 |
ReadOnly поля без генерации Set методов |
| Отключение методов |
🔴 |
Возможность отключать Insert/Update/Delete для таблиц |
| Проверка PK |
🔴 |
Валидация: один и только один primary_key |
| Схема prefix |
🔴 |
Поддержка //ar:schema:myschema для PostgreSQL |
Средний приоритет
| Задача |
Статус |
Описание |
| fieldnum → fieldcount |
🔴 |
Переименование с обратной совместимостью |
| Объединение шаблонов |
🔴 |
Уменьшение дублирования между бэкендами |
| Проверка интерфейсов |
🔴 |
Автоматическая проверка реализации интерфейсов |
Низкий приоритет
| Задача |
Статус |
Описание |
| Windows симлинки |
🔴 |
Проверка работы шаблонов под Windows |
| Оценка размера |
🔴 |
Прогнозирование размера таблиц и индексов |
PostgreSQL улучшения
Высокий приоритет
| Задача |
Статус |
Описание |
Комментарий в коде |
| Тег default |
🔴 |
Описание DEFAULT значения в декларации |
— |
| NULLABLE поля |
🔴 |
Поддержка NULL через указатели |
— |
| Тесты SelectAll |
🔴 |
Тестирование SelectAll с лимитами |
— |
| Reverse migration: DROP COLUMN |
🔴 |
Down-миграция для удалённых колонок (нужен тип колонки) |
internal/pkg/backend/postgres/schema_generator.go:379 |
| Reverse migration: DROP INDEX |
🔴 |
Down-миграция для удалённых индексов (нужно определение) |
internal/pkg/backend/postgres/schema_generator.go:436 |
Средний приоритет
| Задача |
Статус |
Описание |
| Ссылка на себя |
🔴 |
FieldsObject ссылка на текущую модель |
| Циклические зависимости |
🔴 |
Проверка на этапе парсинга |
| SelectorLimiter.After |
🔴 |
Keyset пагинация вместо offset |
| ProcFields для PG |
🔴 |
Вызов хранимых процедур PostgreSQL |
Низкий приоритет
| Задача |
Статус |
Описание |
| Сериализатор intarray |
🔴 |
Поддержка PostgreSQL массивов |
| View без доступа |
🔴 |
Исправление поведения pgx для views |
Octopus улучшения
Средний приоритет
| Задача |
Статус |
Описание |
| Документация pkg/octopus |
🔴 |
Добавить godoc к пакету |
| Генерация конфига |
🔴 |
Проверить config_generator.go |
Runtime: connection pool
| Задача |
Статус |
Описание |
Комментарий в коде |
| Закрытие неиспользуемых пулов |
🔴 |
При смене конфига закрывать старые пулы и освобождать соединения; реализовать колбеки на изменение конфигурации |
pkg/activerecord/connection.go:69 |
| Статистика инстансов |
🔴 |
Собирать статистику по используемым инстансам |
pkg/activerecord/connection.go:130 |
| Локальный пингер |
🔴 |
Пинговать инстансы и исключать недоступные из ротации |
pkg/activerecord/connection.go:130 |
Runtime: iproto
| Задача |
Статус |
Описание |
| Вынос в отдельный модуль |
🔴 |
Выделить pkg/iproto в отдельный Go модуль |
Шаблоны: context.TODO()
Вызовы context.TODO() в шаблонах генерации — стоит заменить на пробрасываемый ctx.
| Файл |
Строка |
internal/pkg/backend/octopus/tmpl/pkg/accessor.tmpl |
64 |
internal/pkg/backend/octopus/tmpl/pkg/mutators.tmpl |
80 |
internal/pkg/backend/postgres/tmpl/pkg/accessor.tmpl |
86 |
internal/pkg/generator/tmpl/meta.tmpl |
153, 272, 293 |
Legacy-код
| Задача |
Статус |
Описание |
Комментарий в коде |
| Replica flag (Perl legacy) |
🔴 |
Закомментированный Perl-код: use_replica флаг на объекте |
pkg/postgres/postgres.go:343 |
Реализованные возможности (v3.1.22)
Schema Generator
- 🟢 NOT NULL для всех полей
- 🟢 DEFAULT значения из Go типов
- 🟢 snake_case имена таблиц из
//ar:namespace:
- 🟢 lowercase имена колонок
- 🟢 FOREIGN KEY генерация из FieldsObjectMap
- 🟢 BIGSERIAL для полей с
init_by_db
- 🟢 Условные индексы с WHERE clause
- 🟢 Генерация миграций из diff
- 🟢 RENAME вместо DROP для удалённых таблиц
BulkUpdate
- 🟢 Кластеризация по набору полей
- 🟢 UPDATE FROM (VALUES ...) синтаксис
- 🟢 Поддержка мутаторов в bulk
BulkInsertReplace
- 🟢 ON CONFLICT DO UPDATE
- 🟢 RETURNING для автоинкрементных полей
- 🟢 Сопоставление через уникальный индекс
Flags*
- 🟢 Именованные битовые константы
- 🟢 Автоматические мутаторы set_bit/clear_bit
- 🟢 Пропуск позиций через
_
Индексы
- 🟢 Условные индексы (WHERE clause)
- 🟢 Наследование условий в IndexParts
- 🟢 Поддержка пустых строк в условиях
Мутаторы
- 🟢 And/Or/Xor операции для PostgreSQL
- 🟢 Документация Flags* структуры
Подготовка iproto к выносу
- 🟢 Удалён мёртвый код: Cluster, MultiWatcher, PacketServer/UDP, config factories, worker pool (~4600 строк)
- 🟢 Удалены пакеты:
iproto/config, util/pool, context/ctxlog
- 🟢 Удалены файлы:
cluster.go, watch.go, dgram.go, monotonic time
- 🟢 Очищены
handler.go, util.go от мёртвых символов
- 🟢 Инлайнен интерфейс
ctxlog.Context в pool.go
Как внести вклад
- Выберите задачу из roadmap
- Создайте issue для обсуждения
- Реализуйте и создайте PR
- При реализации удалите
// See docs/roadmap.md из кода
- Обновите документацию
Приоритизация
Приоритеты определяются на основе:
- Потребности пользователей
- Сложность реализации
- Влияние на обратную совместимость
- Доступность ресурсов
История изменений
v3.1.22 (2026-02-06)
- Добавлена генерация DDL схемы для PostgreSQL и Octopus бэкендов
- Поддержка NOT NULL, DEFAULT значений из Go типов
- FOREIGN KEY генерация из FieldsObjectMap
- BIGSERIAL для полей с
init_by_db
- Генерация миграций из diff
v3.1.21
- Наследование условий (condition) в IndexParts от родительского индекса
- Поддержка разделителя
&& для множественных условий в индексах
v3.1.20
- BulkUpdate с кластеризацией по набору полей
- Исправление использования VARCHAR в bulk update
v3.1.19
- And/Or/Xor мутаторы для PostgreSQL
- Документация Flags* структуры