Skip to content

perf(model): сборка сущности без копий таблицы колонок - #152

Merged
nixel2007 merged 6 commits into
masterfrom
claude/model-object-cache-uhz1qn
Sep 25, 2026
Merged

nixel2007 merged 6 commits into
masterfrom
claude/model-object-cache-uhz1qn

Conversation

@nixel2007

Copy link
Copy Markdown
Owner

see #151

Охрана перед кэшированием: копия Колонки() не влияет на модель, правка
служебных колонок видна приведению, поле и колонка ищутся каждый по
своему имени, неизвестные поле и колонка дают исключение, идентификатор
неизменяем.

Исключения проверяются явной попыткой: ВыбрасываетИсключение() из 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
Колонки() отдает саму таблицу модели, только для чтения; служебный
Служебный_Колонки() удален - ОбработкаКоллекций и ЗаполнитьКолонки
берут Колонки(). Поиск колонки - Найти по таблице модели вместо двух
соответствий. Поле Идентификатор хранит ФиксированнуюСтруктуру,
отдельное поле под нее не нужно.

Замер, 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
nixel2007 merged commit 58e761e into master Sep 25, 2026
21 of 23 checks passed
@coderabbitai

coderabbitai Bot commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: fd8b70eb-e97e-450d-916c-983e55b7062f

📥 Commits

Reviewing files that changed from the base of the PR and between bf2fc94 and 6414b68.

📒 Files selected for processing (4)
  • docs/ОбъектМодели.md
  • src/internal/Модули/ОбработкаКоллекций.os
  • src/Классы/ОбъектМодели.os
  • tests/ОбъектМодели.os
 __________________________________________________
< Deploying the charm offensive against your bugs. >
 --------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants