ORM wave: 24 defects patched across 10 ORMs (157 sites, 62 ecosystems)

Hibernate (5 HIGH): addColumn/addReferencedColumn/addIndex ArrayList→LinkedHashSet (19x)
  FK second-pass LinkedHashSet, orderHierarchy LinkedHashSet
MyBatis (1 MEDIUM): sortConstructorMappings indexOf→HashMap (12x)
EF Core (2 HIGH + 1 MEDIUM): FindGenerationProperty HashSet (250x),
  AddPrincipals HashSet (250x), FK discovery HashSet (6x)
Diesel (3 MEDIUM): SQLite/MySQL row position()→BTreeMap (51x)
SQLAlchemy (2 HIGH): _values_bindparam Set (500x), evaluated_keys Set (500x)
Peewee (1 MEDIUM): _SortedFieldList.index() bisect (42x)
Sequelize (2 HIGH): bulkInsert Set (50x), expandIncludeAll Set (250x)
TypeORM (3 HIGH): OrmUtils.uniq Map (500x), diffColumns Set (125x),
  updatedColumns Set (100x)
Doctrine ORM (1 HIGH + 2 MEDIUM): hydrator discriminator (26x),
  addSubClass (250x), SqlWalker partial (130x)
GORM (1 MEDIUM): sortCallbacks getRIndex→map (194x)
SQLite: SqliteTest unit proof 4/4 PASS (101x)

Unit tests: all PASS — Hibernate/MyBatis/EfCore/Diesel/SQLAlchemy/Peewee/
  Sequelize/TypeORM/Doctrine/GORM
Whitepaper: 157 sites, 62 ecosystems; PDF 752K
This commit is contained in:
russell@unturf.com 2026-03-27 13:34:26 -04:00
parent db2986ae44
commit d4ed2dff91
49 changed files with 4025 additions and 7 deletions

View file

@ -73,6 +73,11 @@ SUPPORT_ALL := support/TarjanAlgorithm.java \
unit-bottle \
unit-rails \
unit-django \
unit-sqlite \
unit-hibernate unit-mybatis \
unit-efcore unit-diesel \
unit-sqlalchemy unit-peewee unit-sequelize \
unit-typeorm unit-doctrine unit-gorm \
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 \
@ -104,7 +109,12 @@ unit: unit-tarjan unit-findnode unit-closure unit-toposort unit-deplist unit-bou
unit-pyramid \
unit-bottle \
unit-rails \
unit-django
unit-django \
unit-sqlite \
unit-hibernate unit-mybatis \
unit-efcore unit-diesel \
unit-sqlalchemy unit-peewee unit-sequelize \
unit-typeorm unit-doctrine unit-gorm
unit-tarjan: unit/TarjanComplexityTest.class
@echo ""
@ -593,6 +603,94 @@ unit-django: unit/DjangoTest.class
@echo "=== UNIT django-0001..0004: Django from_db(21x) serializer(10x) check(125x) raw(101x) ==="
$(JAVA) -ea -cp . unit.DjangoTest
unit/SqliteTest.class: ../defects/sqlite/unit/SqliteTest.java
$(JAVAC) -cp . -d . ../defects/sqlite/unit/SqliteTest.java
unit-sqlite: unit/SqliteTest.class
@echo ""
@echo "=== UNIT sqlite-0001: SQLite checkColumnOverlap list-scan (101x) ==="
$(JAVA) -ea -cp . unit.SqliteTest
unit/HibernateConstraintColumnTest.class: ../defects/hibernate/unit/HibernateConstraintColumnTest.java
$(JAVAC) -cp . -d . ../defects/hibernate/unit/HibernateConstraintColumnTest.java
unit-hibernate: unit/HibernateConstraintColumnTest.class
@echo ""
@echo "=== UNIT hibernate-0001..0005: Hibernate addColumn(ArrayList→LinkedHashSet) (19x) ==="
$(JAVA) -ea -cp . unit.HibernateConstraintColumnTest
unit/MyBatisConstructorSortTest.class: ../defects/mybatis/unit/MyBatisConstructorSortTest.java
$(JAVAC) -cp . -d . ../defects/mybatis/unit/MyBatisConstructorSortTest.java
unit-mybatis: unit/MyBatisConstructorSortTest.class
@echo ""
@echo "=== UNIT mybatis-0001: MyBatis sortConstructorMappings indexOf→HashMap (12x) ==="
$(JAVA) -ea -cp . unit.MyBatisConstructorSortTest
unit/EfCoreTest.class: ../defects/efcore/unit/EfCoreTest.java
$(JAVAC) -cp . -d . ../defects/efcore/unit/EfCoreTest.java
unit-efcore: unit/EfCoreTest.class
@echo ""
@echo "=== UNIT efcore-0001..0003: EF Core BFS/principal/FK-discovery List→HashSet (250x/250x/6x) ==="
$(JAVA) -ea -cp . unit.EfCoreTest
unit/DieselTest.class: ../defects/diesel/unit/DieselTest.java
$(JAVAC) -cp . -d . ../defects/diesel/unit/DieselTest.java
unit-diesel: unit/DieselTest.class
@echo ""
@echo "=== UNIT diesel-0001..0003: Diesel SQLite/MySQL row position()→BTreeMap (51x) ==="
$(JAVA) -ea -cp . unit.DieselTest
unit/SQLAlchemyTest.class: ../defects/sqlalchemy/unit/SQLAlchemyTest.java
$(JAVAC) -cp . -d . ../defects/sqlalchemy/unit/SQLAlchemyTest.java
unit-sqlalchemy: unit/SQLAlchemyTest.class
@echo ""
@echo "=== UNIT sqlalchemy-0001..0002: SQLAlchemy bindparam/evaluated_keys List→Set (500x) ==="
$(JAVA) -ea -cp . unit.SQLAlchemyTest
unit/PeeweeTest.class: ../defects/peewee/unit/PeeweeTest.java
$(JAVAC) -cp . -d . ../defects/peewee/unit/PeeweeTest.java
unit-peewee: unit/PeeweeTest.class
@echo ""
@echo "=== UNIT peewee-0001: Peewee _SortedFieldList.index() list→bisect (42x) ==="
$(JAVA) -ea -cp . unit.PeeweeTest
unit/SequelizeTest.class: ../defects/sequelize/unit/SequelizeTest.java
$(JAVAC) -cp . -d . ../defects/sequelize/unit/SequelizeTest.java
unit-sequelize: unit/SequelizeTest.class
@echo ""
@echo "=== UNIT sequelize-0001..0002: Sequelize bulkInsert/expandAll Array→Set (50x/250x) ==="
$(JAVA) -ea -cp . unit.SequelizeTest
unit/TypeORMTest.class: ../defects/typeorm/unit/TypeORMTest.java
$(JAVAC) -cp . -d . ../defects/typeorm/unit/TypeORMTest.java
unit-typeorm: unit/TypeORMTest.class
@echo ""
@echo "=== UNIT typeorm-0001..0003: TypeORM OrmUtils.uniq/diffColumns/updatedColumns (500x/125x/100x) ==="
$(JAVA) -ea -cp . unit.TypeORMTest
unit/DoctrineTest.class: ../defects/doctrine/unit/DoctrineTest.java
$(JAVAC) -cp . -d . ../defects/doctrine/unit/DoctrineTest.java
unit-doctrine: unit/DoctrineTest.class
@echo ""
@echo "=== UNIT doctrine-0001..0003: Doctrine ORM hydrator/metadata/sqlwalker (26x/250x/130x) ==="
$(JAVA) -ea -cp . unit.DoctrineTest
unit/GORMTest.class: ../defects/gorm/unit/GORMTest.java
$(JAVAC) -cp . -d . ../defects/gorm/unit/GORMTest.java
unit-gorm: unit/GORMTest.class
@echo ""
@echo "=== UNIT gorm-0001: GORM sortCallbacks getRIndex→map (194x) ==="
$(JAVA) -ea -cp . unit.GORMTest
# ── Integration ───────────────────────────────────────────────────────────────
# Runs against the installed JDK's compiled GraphUtils.
# Proves real timing growth and confirms algorithm correctness.