Index: cayenne-java/src/cayenne/java/org/apache/cayenne/DataRow.java =================================================================== --- cayenne-java/src/cayenne/java/org/apache/cayenne/DataRow.java (revision 603157) +++ cayenne-java/src/cayenne/java/org/apache/cayenne/DataRow.java (working copy) ..-24,7 +24,6 @@ import java.util.List; import java.util.Map; -import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DbRelationship; ..-30,6 +29,7 @@ import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.util.Util; +import org.apache.commons.lang.builder.ToStringBuilder; /** * DataRow a map that holds values retrieved from the database for a given query row. ..-41,6 +41,8 @@ */ public class DataRow extends HashMap { + private static final long serialVersionUID = 4985193658466841633L; + // "volatile" is supposed to ensure consistency in read and increment operations; // is this universally true? ..-243,4 +245,25 @@ " version", version).append(" replaces", replacesVersion).toString(); } + + /* + * Caseless matching + */ + + public Object put(Object key, Object value) { + return super.put(normalizeKey(key), value); + } + + public Object get(Object key) { + return super.get(normalizeKey(key)); + } + + private String normalizeKey(Object key) { + String k = (String) key; + if (k != null) { + k = k.toLowerCase(); + } + return k; + } + }