Conversation
Охрана перед кэшированием: копия Колонки() не влияет на модель, правка служебных колонок видна приведению, поле и колонка ищутся каждый по своему имени, неизвестные поле и колонка дают исключение, идентификатор неизменяем. Исключения проверяются явной попыткой: ВыбрасываетИсключение() из asserts без фрагмента текста проходит и без исключения. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017UYvrFghKi7WmhoF3vvpyp
ОбъектМодели строит в конструкторе соответствия колонок по имени поля и по имени колонки, карту описаний типов и неизменяемый идентификатор; дальше они только читаются. Раньше на каждое значение каждой строки копировалась таблица колонок и заново строилась карта из восьми ОписаниеТипов. Соответствия ссылаются на строки самой таблицы, поэтому правка через Служебный_Колонки() видна и им. Публичный Колонки() по-прежнему отдает копию. РаботаСКоннекторами.ЗаполнитьКолонки обходит таблицу модели без копии. Замер, 219 строк, 12 колонок, пул сущностей заполнен: PostgreSQL 863 -> 407 мкс на строку, SQLite 859 -> 292. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017UYvrFghKi7WmhoF3vvpyp
ПривестиЗначениеПоля, ПолучитьПриведенноеЗначениеПоля и УстановитьЗначениеКолонкиВПоле с именем, которого нет в модели, бросают «В модели сущности <Тип> нет поля|колонки <Имя>» вместо ошибки обращения к полю Неопределено, текст которой зависит от локали. Тесты проверяют текст через ВыбрасываетИсключение. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017UYvrFghKi7WmhoF3vvpyp
Contributor
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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 |
Колонки() отдает саму таблицу модели, только для чтения; служебный Служебный_Колонки() удален - ОбработкаКоллекций и ЗаполнитьКолонки берут Колонки(). Поиск колонки - Найти по таблице модели вместо двух соответствий. Поле Идентификатор хранит ФиксированнуюСтруктуру, отдельное поле под нее не нужно. Замер, 219 строк, 12 колонок, пул сущностей заполнен: PostgreSQL 378 мкс на строку, SQLite 358 - на уровне варианта с соответствиями. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017UYvrFghKi7WmhoF3vvpyp
Описание метода говорит, что таблица колонок только для чтения, без подробностей реализации. Почему ОбработкаКоллекций ее все же меняет - в комментарии на месте изменения. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017UYvrFghKi7WmhoF3vvpyp
Индексы строятся в конструкторе, после заполнения таблицы; поиск колонки в ОбъектМодели идет по ним. ОбработкаКоллекций меняет у строк только тип колонки и тип ссылки, индексированные имена не трогает. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017UYvrFghKi7WmhoF3vvpyp
nixel2007
merged commit Sep 25, 2026
cc82b22
into
claude/entity-opentelemetry-integration-uhz1qn
15 of 16 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Поверх #149.
Что было
При сборке сущности из строки результата
ОбъектМоделина каждое значение каждой колонки:Колонки()отдавалКолонки.Скопировать(), аУстановитьЗначениеКолонкиВПоле,ПривестиЗначениеПоля,ПолучитьПриведенноеЗначениеПоляискали колонку черезКолонки().Найти(...); ещё одна копия — в циклеРаботаСКоннекторами.ЗаполнитьКолонкина каждую строку;Соответствиеиз восьмиОписаниеТипов(ВыполнитьПриведениеЗначения→СоответствиеТиповМоделиОписанийТипов());ФиксированнаяСтруктурана каждыйИдентификатор().Полезная работа — приведение и запись поля — около 2 мкс из ~72 мкс на колонку.
Что сделано
Колонки()отдаёт саму таблицу модели, только для чтения; контракт описан в комментарии и вdocs/ОбъектМодели.md.Служебный_Колонки()удалён:ОбработкаКоллекцийиЗаполнитьКолонкиберутКолонки(). Колонка ищетсяНайтипо таблице модели.ОписаниеТиповстроится один раз в конструкторе.ИдентификаторхранитФиксированнуюСтруктуру,Идентификатор()просто его возвращает.Неопределено, текст которой зависел от локали.Потокобезопасность: новых общих изменяемых данных нет. Таблица колонок и карта типов после конструктора только читаются; перебор и
Найтив движке ничего не пишут,ОписаниеТипов.ПривестиЗначениечитает только неизменяемые поля. Таблицу колонок меняет лишьОбработкаКоллекций— у только что созданного объекта модели элемента коллекции, который другим потокам ещё не виден. Внутри entity все остальные вызывающиеКолонки()таблицу только читают.Замер
219 строк, 12 колонок, пул сущностей заполнен:
Тесты
tests/ОбъектМодели.os:Колонки()отдаёт таблицу модели; правка колонок видна приведению; поле и колонка ищутся каждый по своему имени; неизвестные поле и колонка дают исключение с текстом; идентификатор неизменяем и отдаётся один и тот же.Полный прогон с SQLite и PostgreSQL: 314 из 314.
🤖 Generated with Claude Code
https://claude.ai/code/session_017UYvrFghKi7WmhoF3vvpyp