Repository navigation
fix(model): модель и описания колонок без гонок между потоками - #155
Conversation
- МодельДанных хранит объекты модели в СинхронизированнаяКарта и обходит ее
через ДляКаждого: регистрация класса параллельно операциям больше не роняет
обход модели ("Collection was modified"). Повторная регистрация типа не
подменяет объект модели, с которым уже работают хранилища.
- ОбъектМодели.Колонки() снова отдает копию: правка результата не меняет общую
модель. Библиотека и встроенные коннекторы читают таблицу без копии через
служебный Служебный_Колонки().
- Имя таблицы объекта модели подчиненной таблицы передается третьим параметром
конструктора ОбъектМодели; мутатор Служебный_ИмяТаблицы удален.
- ТипыКолонок.Типы() и ТипыПодчиненныхТаблиц.Типы() отдают ФиксированныйМассив.
Изменения поведения: Колонки() - копия, как до nixel2007#151; Типы() нельзя менять.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (20)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. WalkthroughИзменены контракты объекта модели и хранилища моделей. Внутренние операции и коннекторы используют исходные колонки модели. Перечни типов колонок и подчинённых таблиц теперь представлены фиксированными массивами. ChangesМодель данных и её потребители
Фиксированные массивы типов
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to The changes are mergeable after normal checks. No actionable failure was identified; the concurrency tests exercise registration alongside model enumeration. Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 3 systems. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches 💡 1🧪 Generate unit tests (beta)
🛠️ Fix failing CI checks 💡
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Пишет кролик: модель обновлена, Comment |
…ированиеПриЗаписи По ревью: - Колонки() по-прежнему отдает саму таблицу модели, менять ее контрактом запрещено; Служебный_Колонки() и копия убраны, тесты nixel2007#151 возвращены. - Модель данных меняется только при регистрации класса, поэтому хранится в КартаКопированиеПриЗаписи (collectionos 0.9.0): чтение и обход идут по неизменяемому снимку, ПолучитьОбъектыМодели - Значения().ВМассив(). - В комментариях перечней указан тип элементов ФиксированныйМассив. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Что чинит
Общие описания модели, которые читают все потоки, работающие с менеджером. Для каждого пункта сначала написан тест, красный на
master, потом исправление.masterМодельДанныххранила объекты модели в обычномСоответствиебез блокировки, а классы можно регистрировать и после передачи менеджера другим потокамИнициализировать), падало с «Collection was modified», пока другой поток регистрировал классыКартаКопированиеПриЗаписи(collectionos 0.9.0): модель меняется только при регистрации класса, а чтение и обход идут по неизменяемому снимку без блокировкиВставитьЕслиОтсутствует: для известного типа возвращается существующий объектСлужебный_ИмяТаблицыОбъектМодели, мутатор удалён. Имена и колонки подчинённых таблиц не меняются — сравнение с v5.4.0.2 в обсужденииТипыКолонок.Типы()иТипыПодчиненныхТаблиц.Типы()отдавали общий изменяемыйМассивФиксированныйМассивОбъектМодели.Колонки()остаётся как вmaster: отдаёт саму таблицу модели, менять её контрактом запрещено.Что меняется снаружи
Типы()—ФиксированныйМассив: код, который менял результат, получит ошибку.Служебный_ИмяТаблицы(помечен@internal) удалён. У конструктораОбъектМоделиновый необязательный параметрПИмяТаблицы.collectionosподнята до 0.9.0.Тесты
Новые:
МодельДанных— повторная регистрация не подменяет объект модели; задание обходит модель, пока тест регистрирует 50 сгенерированных классов. Наmasterвторой тест падал в задании три раза из трёх.ОбъектМодели.ИмяТаблицыЗадаетсяПриСоздании.ТипыКолонок— обаТипы()отдаютФиксированныйМассив.Полный прогон после правок по ревью, без PostgreSQL: OneScript 2.2.0 — 304 из 304, 2.3.0-next+a02323a1 — 304 из 304. До ревью с PostgreSQL: 322 из 322 на обоих движках и 305 из 305 только PostgreSQL.
🤖 Generated with Claude Code