diff --git a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java index 146b59be3..a5d80d60c 100644 --- a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java @@ -17,6 +17,8 @@ import java.util.Set; import javax.annotation.Nullable; +import org.apache.commons.lang.ObjectUtils; + import com.mysema.query.types.Expression; import com.mysema.query.types.OrderSpecifier; import com.mysema.query.types.ParamExpression; @@ -297,4 +299,45 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { } } } + + @Override + public boolean equals(Object o) { + if (o instanceof QueryMetadata) { + QueryMetadata q = (QueryMetadata)o; + return q.getFlags().equals(flags) + && q.getGroupBy().equals(groupBy) + && ObjectUtils.equals(q.getHaving(), having.getValue()) + && q.isDistinct() == distinct + && q.isUnique() == unique + && q.getJoins().equals(joins) + && ObjectUtils.equals(q.getModifiers(), modifiers) + && q.getOrderBy().equals(orderBy) + && q.getParams().equals(params) + && q.getProjection().equals(projection) + && ObjectUtils.equals(q.getWhere(), where.getValue()); + + } else { + return false; + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = prime + (distinct ? 1231 : 1237); + result = prime * result + flags.hashCode(); + result = prime * result + groupBy.hashCode(); + result = prime * result + having.hashCode(); + result = prime * result + joins.hashCode(); + result = prime * result + ((modifiers == null) ? 0 : modifiers.hashCode()); + result = prime * result + orderBy.hashCode(); + result = prime * result + params.hashCode(); + result = prime * result + projection.hashCode(); + result = prime * result + (unique ? 1231 : 1237); + result = prime * result + where.hashCode(); + return result; + } + + + } diff --git a/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java b/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java index bc5f12292..c9bbc4279 100644 --- a/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java @@ -179,4 +179,55 @@ public class DefaultQueryMetadataTest { metadata.addFlag(flag); assertTrue(metadata.hasFlag(flag)); } + + @Test + public void Equals() { + metadata.addJoin(JoinType.DEFAULT, str); + metadata.addGroupBy(str); + metadata.addHaving(str.isNotNull()); + metadata.addJoin(JoinType.DEFAULT, str2); + QueryModifiers modifiers = new QueryModifiers(1l,2l); + metadata.setModifiers(modifiers); + metadata.addOrderBy(str.asc()); + metadata.addProjection(str, str.append("abc")); + metadata.addWhere(str.eq("b"), str.isNotEmpty()); + + QueryMetadata metadata2 = new DefaultQueryMetadata(); + assertFalse(metadata.equals(metadata2)); + metadata2.addJoin(JoinType.DEFAULT, str); + assertFalse(metadata.equals(metadata2)); + metadata2.addGroupBy(str); + assertFalse(metadata.equals(metadata2)); + metadata2.addHaving(str.isNotNull()); + assertFalse(metadata.equals(metadata2)); + metadata2.addJoin(JoinType.DEFAULT, str2); + assertFalse(metadata.equals(metadata2)); + metadata2.setModifiers(modifiers); + assertFalse(metadata.equals(metadata2)); + metadata2.addOrderBy(str.asc()); + assertFalse(metadata.equals(metadata2)); + metadata2.addProjection(str, str.append("abc")); + assertFalse(metadata.equals(metadata2)); + metadata2.addWhere(str.eq("b"), str.isNotEmpty()); + assertTrue(metadata.equals(metadata2)); + } + + @Test + public void HashCode() { + metadata.addJoin(JoinType.DEFAULT, str); + metadata.addGroupBy(str); + metadata.addHaving(str.isNotNull()); + metadata.addJoin(JoinType.DEFAULT, str2); + QueryModifiers modifiers = new QueryModifiers(1l,2l); + metadata.setModifiers(modifiers); + metadata.addOrderBy(str.asc()); + metadata.addProjection(str, str.append("abc")); + metadata.addWhere(str.eq("b"), str.isNotEmpty()); + metadata.hashCode(); + } + + @Test + public void HashCode_Empty_Metadata() { + metadata.hashCode(); + } }