java-topology/defects/mybatis/patch/mybatis-0001-result-mapping-flags-enumset.patch

61 lines
2.3 KiB
Diff

# UNDF: UNDF-2026-000000174
diff --git a/src/main/java/org/apache/ibatis/mapping/ResultMapping.java b/src/main/java/org/apache/ibatis/mapping/ResultMapping.java
--- a/src/main/java/org/apache/ibatis/mapping/ResultMapping.java
+++ b/src/main/java/org/apache/ibatis/mapping/ResultMapping.java
@@ -18,8 +18,9 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
@@ -42,7 +43,7 @@ public class ResultMapping {
private Set<String> notNullColumns;
private String columnPrefix;
- private List<ResultFlag> flags;
+ private Set<ResultFlag> flags;
private List<ResultMapping> composites;
private String resultSet;
private String foreignColumn;
@@ -66,7 +67,7 @@ public class ResultMapping {
public Builder(Configuration configuration, String property) {
resultMapping.configuration = configuration;
resultMapping.property = property;
- resultMapping.flags = new ArrayList<>();
+ resultMapping.flags = EnumSet.noneOf(ResultFlag.class);
resultMapping.composites = new ArrayList<>();
resultMapping.lazy = configuration.isLazyLoadingEnabled();
}
@@ -133,7 +134,11 @@ public class ResultMapping {
public Builder flags(List<ResultFlag> flags) {
- resultMapping.flags = flags;
+ // Convert to EnumSet for O(1) contains() — ArrayList.contains() is O(F) per call
+ EnumSet<ResultFlag> enumFlags = EnumSet.noneOf(ResultFlag.class);
+ if (flags != null && !flags.isEmpty()) {
+ enumFlags.addAll(flags);
+ }
+ resultMapping.flags = enumFlags;
return this;
}
@@ -153,7 +158,7 @@ public class ResultMapping {
public ResultMapping build() {
// lock down collections
- resultMapping.flags = Collections.unmodifiableList(resultMapping.flags);
+ resultMapping.flags = Collections.unmodifiableSet(resultMapping.flags);
resultMapping.composites = Collections.unmodifiableList(resultMapping.composites);
validate();
return resultMapping;
@@ -230,7 +235,7 @@ public class ResultMapping {
return columnPrefix;
}
- public List<ResultFlag> getFlags() {
+ public Set<ResultFlag> getFlags() {
return flags;
}