Перейти к содержанию

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

Как внести вклад

  1. Выберите задачу из roadmap
  2. Создайте issue для обсуждения
  3. Реализуйте и создайте PR
  4. При реализации удалите // See docs/roadmap.md из кода
  5. Обновите документацию

Приоритизация

Приоритеты определяются на основе:

  1. Потребности пользователей
  2. Сложность реализации
  3. Влияние на обратную совместимость
  4. Доступность ресурсов

История изменений

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* структуры