From 7e7121c363e4580d509ffad21197d70f47577832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 16 Dec 2012 00:21:46 +0200 Subject: [PATCH] make query flags sorted --- .../mysema/query/DefaultQueryMetadata.java | 45 +++++++++++-------- .../mysema/query/support/SerializerBase.java | 2 +- 2 files changed, 28 insertions(+), 19 deletions(-) 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 9902fe1c4..b1942a554 100644 --- a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java @@ -13,9 +13,6 @@ */ package com.mysema.query; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -26,7 +23,9 @@ import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.mysema.query.types.Expression; import com.mysema.query.types.ExpressionUtils; import com.mysema.query.types.OrderSpecifier; @@ -68,7 +67,6 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { private BooleanBuilder where = new BooleanBuilder(); - // TODO : make sure this is sorted private Set flags = ImmutableSet.of(); private boolean validate = true; @@ -77,7 +75,7 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { if (list.isEmpty()) { return ImmutableList.of(element); } else if (list.size() == 1) { - list = new ArrayList(list); + list = Lists.newArrayList(list); } list.add(element); return list; @@ -87,7 +85,17 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { if (set.isEmpty()) { return ImmutableSet.of(element); } else if (set.size() == 1) { - set = new HashSet(set); + set = Sets.newHashSet(set); + } + set.add(element); + return set; + } + + private static Set addSorted(Set set, T element) { + if (set.isEmpty()) { + return ImmutableSet.of(element); + } else if (set.size() == 1) { + set = Sets.newLinkedHashSet(set); } set.add(element); return set; @@ -97,7 +105,7 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { if (map.isEmpty()) { return ImmutableMap.of(key, value); } else if (map.size() == 1) { - map = new HashMap(map); + map = Maps.newHashMap(map); } map.put(key, value); return map; @@ -119,6 +127,12 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { validate = false; return this; } + + + @Override + public void addFlag(QueryFlag flag) { + flags = addSorted(flags, flag); + } @Override public void addGroupBy(Expression o) { @@ -214,16 +228,16 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { public QueryMetadata clone(){ try { DefaultQueryMetadata clone = (DefaultQueryMetadata) super.clone(); - clone.exprInJoins = new HashSet>(exprInJoins); - clone.groupBy = ImmutableList.copyOf(groupBy); + clone.exprInJoins = Sets.newHashSet(exprInJoins); + clone.groupBy = Lists.newArrayList(groupBy); clone.having = having.clone(); clone.joins = ImmutableList.copyOf(joins); clone.modifiers = new QueryModifiers(modifiers); - clone.orderBy = ImmutableList.copyOf(orderBy); + clone.orderBy = Lists.newArrayList(orderBy); clone.projection = ImmutableList.copyOf(projection); - clone.params = ImmutableMap.copyOf(params); + clone.params = Maps.newHashMap(params); clone.where = where.clone(); - clone.flags = ImmutableSortedSet.copyOf(flags); + clone.flags = Sets.newLinkedHashSet(flags); return clone; } catch (CloneNotSupportedException e) { throw new QueryException(e); @@ -331,11 +345,6 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { params = put(params, param, value); } - @Override - public void addFlag(QueryFlag flag) { - flags = add(flags, flag); - } - @Override public Set getFlags() { return flags; diff --git a/querydsl-core/src/main/java/com/mysema/query/support/SerializerBase.java b/querydsl-core/src/main/java/com/mysema/query/support/SerializerBase.java index 426207ad4..814380a21 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/SerializerBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/SerializerBase.java @@ -49,7 +49,7 @@ public abstract class SerializerBase> implements Vis private String anonParamPrefix = "_"; - private final Map constantToLabel = new HashMap(); + private final Map constantToLabel = new HashMap(4); @SuppressWarnings("unchecked") private final S self = (S) this;