ORM wave 2: 10 new defects — Active Record +3, Exposed +3, SeaORM +4 (167 sites, 64 ecosystems)

rails-0009: FilterAttributeHandler filter_parameters Array O(A×F) → Set (450×)
rails-0010: Encryption::AutoFilteredParameters two Array scans → Set (250×)
rails-0011: TimeZoneConversion skip_list Array O(M×C×S) → Set (20×)

exposed-0001: SchemaUtilityApi mapMissingColumnStatements O(N×M) → map (118×)
exposed-0002: IdentifierManagerApi isAKeyword O(K) linear → HashSet (144×)
exposed-0003: Table.clone consParams.map fresh List → hoisted HashSet (6×)

seaorm-0001: active_model establish_links leftover.any O(N²) → HashSet (501×)
seaorm-0002: rbac engine group_permissions .values().find() → HashMap by ID (502×)
seaorm-0003: schema builder sorted_tables Vec::contains → HashSet (500×)
seaorm-0004: TopologicalSort from_iter seen Vec O(N²) → BTreeSet (28×)

Unit tests: RailsTest 11/11, ExposedTest 3/3, SeaORMTest 4/4 PASS
Whitepaper: 157→167 sites, 62→64 ecosystems; §13.12 ORM Wave 2 added
This commit is contained in:
russell@unturf.com 2026-03-27 13:49:46 -04:00
parent d4ed2dff91
commit 547a9f5738
37 changed files with 2043 additions and 26 deletions

View file

@ -78,6 +78,8 @@ SUPPORT_ALL := support/TarjanAlgorithm.java \
unit-efcore unit-diesel \
unit-sqlalchemy unit-peewee unit-sequelize \
unit-typeorm unit-doctrine unit-gorm \
unit-exposed unit-seaorm \
unit-activerecord \
bench-mc-server bench-max bench-gumyum bench-everything bench-loadsim bench-elytra \
bench-unpatched bench-mitigated bench-enriched bench-three-tier \
play-unpatched play-mitigated play-enriched \
@ -114,7 +116,9 @@ unit: unit-tarjan unit-findnode unit-closure unit-toposort unit-deplist unit-bou
unit-hibernate unit-mybatis \
unit-efcore unit-diesel \
unit-sqlalchemy unit-peewee unit-sequelize \
unit-typeorm unit-doctrine unit-gorm
unit-typeorm unit-doctrine unit-gorm \
unit-exposed unit-seaorm \
unit-activerecord
unit-tarjan: unit/TarjanComplexityTest.class
@echo ""
@ -592,7 +596,7 @@ unit/RailsTest.class: ../defects/rails/unit/RailsTest.java
unit-rails: unit/RailsTest.class
@echo ""
@echo "=== UNIT rails-0001..0008: Rails preloader(210x) callbacks(51x) enumerable(475x) schema(130x) ==="
@echo "=== UNIT rails-0001..0011: Rails Active Record CWE-407 (1000x/475x/450x/251x/210x...) ==="
$(JAVA) -ea -cp . unit.RailsTest
unit/DjangoTest.class: ../defects/django/unit/DjangoTest.java
@ -691,6 +695,24 @@ unit-gorm: unit/GORMTest.class
@echo "=== UNIT gorm-0001: GORM sortCallbacks getRIndex→map (194x) ==="
$(JAVA) -ea -cp . unit.GORMTest
unit/ExposedTest.class: ../defects/exposed/unit/ExposedTest.java
$(JAVAC) -cp . -d . ../defects/exposed/unit/ExposedTest.java
unit-exposed: unit/ExposedTest.class
@echo ""
@echo "=== UNIT exposed-0001..0003: Exposed ORM schemaMigration/isAKeyword/clone (118x/144x/6x) ==="
$(JAVA) -ea -cp . unit.ExposedTest
unit/SeaORMTest.class: ../defects/seaorm/unit/SeaORMTest.java
$(JAVAC) -cp . -d . ../defects/seaorm/unit/SeaORMTest.java
unit-seaorm: unit/SeaORMTest.class
@echo ""
@echo "=== UNIT seaorm-0001..0004: SeaORM establish_links/permissions/sorted_tables/topo (501x/502x/500x/28x) ==="
$(JAVA) -ea -cp . unit.SeaORMTest
unit-activerecord: unit/RailsTest.class
# ── Integration ───────────────────────────────────────────────────────────────
# Runs against the installed JDK's compiled GraphUtils.
# Proves real timing growth and confirms algorithm correctness.