diff --git a/src/main/java/io/ebeaninternal/api/BindParams.java b/src/main/java/io/ebeaninternal/api/BindParams.java index e6e813c5f..b034fb2b1 100644 --- a/src/main/java/io/ebeaninternal/api/BindParams.java +++ b/src/main/java/io/ebeaninternal/api/BindParams.java @@ -35,7 +35,7 @@ public class BindParams implements Serializable { * Bind hash and count used to detect when the bind values have changed such * that the generated SQL (with named parameters) needs to be recalculated. */ - private int[] bindHash; + private String bindHash; public BindParams() { } @@ -56,32 +56,29 @@ public class BindParams implements Serializable { * taken into account when calculating the query hash. *

*/ - public void buildQueryPlanHash(HashQueryPlanBuilder builder) { - int[] vals = calcQueryPlanHash(); - builder.add(vals[0]).bind(vals[1]); + public String calcQueryPlanHash() { + StringBuilder builder = new StringBuilder(); + buildQueryPlanHash(builder); + return builder.toString(); } /** * Calculate and return a query plan bind hash with total bind count. */ - public int[] calcQueryPlanHash() { + public void buildQueryPlanHash(StringBuilder builder) { int tempBindCount; int bc = 0; - int hc = 92821; for (Param param : positionedParameters) { tempBindCount = param.queryBindCount(); bc += tempBindCount; - hc = hc * 92821 + tempBindCount; + builder.append("p").append(bc).append(" ?:").append(tempBindCount).append(","); } for (Map.Entry entry : namedParameters.entrySet()) { tempBindCount = entry.getValue().queryBindCount(); bc += tempBindCount; - hc = hc * 92821 + entry.getKey().hashCode(); - hc = hc * 92821 + tempBindCount; + builder.append("n").append(bc).append(" k:").append(entry.getKey()).append(" ?:").append(tempBindCount).append(","); } - - return new int[]{hc, bc}; } /** @@ -277,9 +274,9 @@ public class BindParams implements Serializable { bindHash = calcQueryPlanHash(); return false; } - int[] oldPlan = bindHash; + String oldPlan = bindHash; bindHash = calcQueryPlanHash(); - return bindHash[0] == oldPlan[0] && bindHash[1] == oldPlan[1]; + return bindHash.equals(oldPlan); } /** diff --git a/src/main/java/io/ebeaninternal/api/SpiExpression.java b/src/main/java/io/ebeaninternal/api/SpiExpression.java index be25997e1..df69ad702 100644 --- a/src/main/java/io/ebeaninternal/api/SpiExpression.java +++ b/src/main/java/io/ebeaninternal/api/SpiExpression.java @@ -48,18 +48,13 @@ public interface SpiExpression extends Expression { * from an AutoTune perspective and get different tuning. *

*/ - void queryPlanHash(HashQueryPlanBuilder builder); + void queryPlanHash(StringBuilder builder); /** * Return the hash value for the values that will be bound. */ int queryBindHash(); - /** - * Return true if the expression is the same without taking into account bind values. - */ - boolean isSameByPlan(SpiExpression other); - /** * Return true if the expression is the same with respect to bind values. */ diff --git a/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java b/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java index 1434cd018..d30649149 100644 --- a/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -12,7 +11,7 @@ import io.ebeaninternal.api.SpiExpressionRequest; */ public abstract class AbstractTextExpression extends AbstractExpression { - protected AbstractTextExpression(String propName) { + AbstractTextExpression(String propName) { super(propName); } @@ -33,7 +32,7 @@ public abstract class AbstractTextExpression extends AbstractExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { + public void queryPlanHash(StringBuilder builder) { // do nothing, only execute against document store } @@ -42,12 +41,6 @@ public abstract class AbstractTextExpression extends AbstractExpression { return 0; } - @Override - public boolean isSameByPlan(SpiExpression other) { - // do not compare by plan / bind values (this way) - return false; - } - @Override public boolean isSameByBind(SpiExpression other) { // do not compare by plan / bind values (this way) diff --git a/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java b/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java index 49cf8237a..5a931ec5a 100644 --- a/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -105,16 +104,21 @@ class AllEqualsExpression extends NonPrepareExpression { *

*/ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - - builder.add(AllEqualsExpression.class); + public void queryPlanHash(StringBuilder builder) { + builder.append("AllEquals["); for (Entry entry : propMap.entrySet()) { Object value = entry.getValue(); String propName = entry.getKey(); - builder.add(propName).add(value == null ? 0 : 1); - builder.bindIfNotNull(value); + builder.append(propName); + if (value == null) { + builder.append(" isNull"); + } else { + builder.append(" =?"); + } + builder.append(","); } + builder.append("]"); } @Override @@ -128,16 +132,6 @@ class AllEqualsExpression extends NonPrepareExpression { return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof AllEqualsExpression)) { - return false; - } - - AllEqualsExpression that = (AllEqualsExpression) other; - return isSameByValue(that, false); - } - @Override public boolean isSameByBind(SpiExpression other) { if (!(other instanceof AllEqualsExpression)) { diff --git a/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java b/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java index aa5e29ac1..8c12bec60 100644 --- a/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -15,7 +14,7 @@ public class ArrayContainsExpression extends AbstractExpression { private final Object[] values; - protected ArrayContainsExpression(String propName, boolean contains, Object... values) { + ArrayContainsExpression(String propName, boolean contains, Object... values) { super(propName); this.contains = contains; this.values = values; @@ -43,9 +42,10 @@ public class ArrayContainsExpression extends AbstractExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(ArrayContainsExpression.class).add(propName).add(contains); - builder.bind(values.length); + public void queryPlanHash(StringBuilder builder) { + builder.append("ArrayContains[").append(propName) + .append(" b:").append(contains) + .append(" ?:").append(values.length).append("]"); } @Override @@ -57,17 +57,6 @@ public class ArrayContainsExpression extends AbstractExpression { return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof ArrayContainsExpression)) { - return false; - } - ArrayContainsExpression that = (ArrayContainsExpression) other; - return this.propName.equals(that.propName) - && this.contains == that.contains - && this.values.length == that.values.length; - } - @Override public boolean isSameByBind(SpiExpression other) { ArrayContainsExpression that = (ArrayContainsExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java b/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java index 6dbe91d79..815223dfe 100644 --- a/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -13,7 +12,7 @@ public class ArrayIsEmptyExpression extends AbstractExpression { private final boolean empty; - protected ArrayIsEmptyExpression(String propName, boolean empty) { + ArrayIsEmptyExpression(String propName, boolean empty) { super(propName); this.empty = empty; } @@ -24,8 +23,13 @@ public class ArrayIsEmptyExpression extends AbstractExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(ArrayIsEmptyExpression.class).add(propName); + public void queryPlanHash(StringBuilder builder) { + if (empty) { + builder.append("ArrayIsEmpty["); + } else { + builder.append("ArrayIsNotEmpty["); + } + builder.append(propName).append("]"); } @Override @@ -33,15 +37,6 @@ public class ArrayIsEmptyExpression extends AbstractExpression { return empty ? 0 : 92821; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof ArrayIsEmptyExpression)) { - return false; - } - ArrayIsEmptyExpression that = (ArrayIsEmptyExpression) other; - return this.propName.equals(that.propName) && this.empty == that.empty; - } - @Override public boolean isSameByBind(SpiExpression other) { return true; diff --git a/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java b/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java index 7387ecd93..410323cdf 100644 --- a/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -41,14 +40,12 @@ class BetweenExpression extends AbstractExpression { @Override public void addSql(SpiExpressionRequest request) { - request.append(propName).append(BETWEEN).append(" ? and ? "); } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(BetweenExpression.class).add(propName); - builder.bind(2); + public void queryPlanHash(StringBuilder builder) { + builder.append("Between[").append(propName).append("]"); } @Override @@ -58,16 +55,6 @@ class BetweenExpression extends AbstractExpression { return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof BetweenExpression)) { - return false; - } - - BetweenExpression that = (BetweenExpression) other; - return this.propName.equals(that.propName); - } - @Override public boolean isSameByBind(SpiExpression other) { BetweenExpression that = (BetweenExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java b/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java index 461b568bb..c582d20f2 100644 --- a/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -85,9 +84,8 @@ class BetweenPropertyExpression extends NonPrepareExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(BetweenPropertyExpression.class).add(lowProperty).add(highProperty); - builder.bind(1); + public void queryPlanHash(StringBuilder builder) { + builder.append("BetweenProperties[").append("low:").append(lowProperty).append(" high:").append(highProperty).append("]"); } @Override @@ -95,16 +93,6 @@ class BetweenPropertyExpression extends NonPrepareExpression { return val().hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof BetweenPropertyExpression)) { - return false; - } - - BetweenPropertyExpression that = (BetweenPropertyExpression) other; - return lowProperty.equals(that.lowProperty) && highProperty.equals(that.highProperty); - } - @Override public boolean isSameByBind(SpiExpression other) { BetweenPropertyExpression that = (BetweenPropertyExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java b/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java index 089dee7b7..e82698a4a 100644 --- a/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; import io.ebeaninternal.server.el.ElPropertyValue; @@ -51,9 +50,8 @@ class CaseInsensitiveEqualExpression extends AbstractValueExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(CaseInsensitiveEqualExpression.class).add(propName); - builder.bind(1); + public void queryPlanHash(StringBuilder builder) { + builder.append("Ieq[").append(propName).append("]"); } @Override @@ -61,16 +59,6 @@ class CaseInsensitiveEqualExpression extends AbstractValueExpression { return val().hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof CaseInsensitiveEqualExpression)) { - return false; - } - - CaseInsensitiveEqualExpression that = (CaseInsensitiveEqualExpression) other; - return this.propName.equals(that.propName); - } - @Override public boolean isSameByBind(SpiExpression other) { CaseInsensitiveEqualExpression that = (CaseInsensitiveEqualExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java b/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java index 5d4411c79..7c139da45 100644 --- a/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java @@ -4,7 +4,6 @@ import io.ebean.ExampleExpression; import io.ebean.LikeType; import io.ebean.bean.EntityBean; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -214,12 +213,14 @@ public class DefaultExampleExpression implements SpiExpression, ExampleExpressio * Return a hash for AutoTune query identification. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { + public void queryPlanHash(StringBuilder builder) { - builder.add(DefaultExampleExpression.class); + builder.append("Example["); for (SpiExpression aList : list) { aList.queryPlanHash(builder); + builder.append(","); } + builder.append("]"); } /** @@ -234,24 +235,6 @@ public class DefaultExampleExpression implements SpiExpression, ExampleExpressio return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof DefaultExampleExpression)) { - return false; - } - - DefaultExampleExpression that = (DefaultExampleExpression) other; - if (this.list.size() != that.list.size()) { - return false; - } - for (int i = 0; i < list.size(); i++) { - if (!list.get(i).isSameByPlan(that.list.get(i))) { - return false; - } - } - return true; - } - @Override public boolean isSameByBind(SpiExpression other) { DefaultExampleExpression that = (DefaultExampleExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java index 166d90d8e..cf8f63c45 100644 --- a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java +++ b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java @@ -1,25 +1,12 @@ package io.ebeaninternal.server.expression; -import io.ebean.Expression; -import io.ebean.ExpressionFactory; -import io.ebean.ExpressionList; -import io.ebean.FetchPath; -import io.ebean.FutureIds; -import io.ebean.FutureList; -import io.ebean.FutureRowCount; -import io.ebean.Junction; -import io.ebean.OrderBy; -import io.ebean.PagedList; -import io.ebean.Query; -import io.ebean.QueryIterator; -import io.ebean.Version; +import io.ebean.*; import io.ebean.event.BeanQueryRequest; import io.ebean.search.Match; import io.ebean.search.MultiMatch; import io.ebean.search.TextCommonTerms; import io.ebean.search.TextQueryString; import io.ebean.search.TextSimple; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionList; @@ -559,11 +546,19 @@ public class DefaultExpressionList implements SpiExpressionList { * values. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(DefaultExpressionList.class); + public void queryPlanHash(StringBuilder builder) { + builder.append("List["); + if (textRoot) { + builder.append("textRoot:true "); + } + if (allDocNestedPath != null) { + builder.append("path:").append(allDocNestedPath).append(" "); + } for (SpiExpression aList : list) { aList.queryPlanHash(builder); + builder.append(","); } + builder.append("]"); } /** @@ -578,24 +573,6 @@ public class DefaultExpressionList implements SpiExpressionList { return hash; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof DefaultExpressionList)) { - return false; - } - - DefaultExpressionList that = (DefaultExpressionList) other; - if (list.size() != that.list.size()) { - return false; - } - for (int i = 0, size = list.size(); i < size; i++) { - if (!list.get(i).isSameByPlan(that.list.get(i))) { - return false; - } - } - return true; - } - @Override public boolean isSameByBind(SpiExpression other) { DefaultExpressionList that = (DefaultExpressionList) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java b/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java index dc1f955a6..c7e9c1159 100644 --- a/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.api.SpiExpression; @@ -24,7 +23,7 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress protected String sql; - public ExistsQueryExpression(SpiQuery subQuery, boolean not) { + ExistsQueryExpression(SpiQuery subQuery, boolean not) { this.subQuery = subQuery; this.not = not; } @@ -74,9 +73,9 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(ExistsQueryExpression.class).add(not); - builder.add(sql).add(bindParams.size()); + public void queryPlanHash(StringBuilder builder) { + builder.append("ExistsQuery[").append(" not:").append(not); + builder.append(" sql:").append(sql).append(" ?:").append(bindParams.size()).append("]"); } @Override @@ -103,18 +102,6 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress } } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof ExistsQueryExpression)) { - return false; - } - - ExistsQueryExpression that = (ExistsQueryExpression) other; - return this.sql.equals(that.sql) - && this.not == that.not - && this.bindParams.size() == that.bindParams.size(); - } - @Override public boolean isSameByBind(SpiExpression other) { ExistsQueryExpression that = (ExistsQueryExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/IdExpression.java b/src/main/java/io/ebeaninternal/server/expression/IdExpression.java index 6f59eff32..aafc5b360 100644 --- a/src/main/java/io/ebeaninternal/server/expression/IdExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/IdExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -68,9 +67,8 @@ class IdExpression extends NonPrepareExpression implements SpiExpression { * No properties so this is just a unique static number. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(IdExpression.class); - builder.bind(1); + public void queryPlanHash(StringBuilder builder) { + builder.append("Id[]"); } @Override @@ -78,11 +76,6 @@ class IdExpression extends NonPrepareExpression implements SpiExpression { return value.hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - return other instanceof IdExpression; - } - @Override public boolean isSameByBind(SpiExpression other) { IdExpression that = (IdExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java b/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java index ca0c20fb6..436be9d54 100644 --- a/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -13,7 +12,7 @@ import java.util.Collection; import java.util.Iterator; /** - * Slightly redundant as Query.setId() ultimately also does the same job. + * In a collection of Id values. */ public class IdInExpression extends NonPrepareExpression { @@ -92,9 +91,8 @@ public class IdInExpression extends NonPrepareExpression { * Incorporates the number of Id values to bind. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(IdInExpression.class).add(idCollection.size()); - builder.bind(idCollection.size()); + public void queryPlanHash(StringBuilder builder) { + builder.append("IdIn[").append("?").append(idCollection.size()).append("]"); } @Override @@ -102,16 +100,6 @@ public class IdInExpression extends NonPrepareExpression { return idCollection.hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof IdInExpression)) { - return false; - } - - IdInExpression that = (IdInExpression) other; - return this.idCollection.size() == that.idCollection.size(); - } - @Override public boolean isSameByBind(SpiExpression other) { IdInExpression that = (IdInExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/InExpression.java b/src/main/java/io/ebeaninternal/server/expression/InExpression.java index 96fc7c1e8..3409e0ce0 100644 --- a/src/main/java/io/ebeaninternal/server/expression/InExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/InExpression.java @@ -2,7 +2,6 @@ package io.ebeaninternal.server.expression; import io.ebean.bean.EntityBean; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; import io.ebeaninternal.server.el.ElPropertyValue; @@ -115,9 +114,14 @@ class InExpression extends AbstractExpression { * Based on the number of values in the in clause. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(InExpression.class).add(propName).add(bindValues.length).add(not); - builder.bind(bindValues.length); + public void queryPlanHash(StringBuilder builder) { + if (not) { + builder.append("NotIn["); + } else { + builder.append("In["); + } + builder.append(propName); + builder.append(" ?").append(bindValues.length).append("]"); } @Override @@ -129,18 +133,6 @@ class InExpression extends AbstractExpression { return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof InExpression)) { - return false; - } - - InExpression that = (InExpression) other; - return propName.equals(that.propName) - && not == that.not - && bindValues.length == that.bindValues.length; - } - @Override public boolean isSameByBind(SpiExpression other) { InExpression that = (InExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java b/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java index 43da81e3c..b0681e720 100644 --- a/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -57,9 +56,10 @@ class InQueryExpression extends AbstractExpression implements UnsupportedDocStor } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(InQueryExpression.class).add(propName).add(not); - builder.add(sql).add(bindParams.size()); + public void queryPlanHash(StringBuilder builder) { + builder.append("InQuery[").append(propName) + .append(" not:").append(not).append(" sql:").append(sql) + .append(" ?:").append(bindParams.size()).append("]"); } /** @@ -96,19 +96,6 @@ class InQueryExpression extends AbstractExpression implements UnsupportedDocStor } } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof InQueryExpression)) { - return false; - } - - InQueryExpression that = (InQueryExpression) other; - return propName.equals(that.propName) - && sql.equals(that.sql) - && not == that.not - && bindParams.size() == that.bindParams.size(); - } - @Override public boolean isSameByBind(SpiExpression other) { InQueryExpression that = (InQueryExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java b/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java index edfb43d62..52c6b31d3 100644 --- a/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -94,8 +93,13 @@ class IsEmptyExpression extends AbstractExpression { * Based on the type and propertyName. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(IsEmptyExpression.class).add(propName); + public void queryPlanHash(StringBuilder builder) { + if (empty) { + builder.append("IsEmpty["); + } else { + builder.append("IsNotEmpty["); + } + builder.append(propName).append("]"); } @Override @@ -103,16 +107,6 @@ class IsEmptyExpression extends AbstractExpression { return 1; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof IsEmptyExpression)) { - return false; - } - - IsEmptyExpression that = (IsEmptyExpression) other; - return this.propName.equals(that.propName) && this.empty == that.empty; - } - @Override public boolean isSameByBind(SpiExpression other) { return (other instanceof IsEmptyExpression); diff --git a/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java b/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java index db0a5efe4..6f4cec83e 100644 --- a/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -70,10 +69,16 @@ class JsonPathExpression extends AbstractExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(JsonPathExpression.class).add(propName).add(path).add(operator); - builder.bindIfNotNull(value); - builder.bindIfNotNull(upperValue); + public void queryPlanHash(StringBuilder builder) { + builder.append("JsonPath["); + builder.append(propName).append(" path:").append(path).append(" op:").append(operator); + if (value != null) { + builder.append(" ?1"); + } + if (upperValue != null) { + builder.append(" ?2"); + } + builder.append("]"); } @Override @@ -83,20 +88,6 @@ class JsonPathExpression extends AbstractExpression { return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof JsonPathExpression)) { - return false; - } - - JsonPathExpression that = (JsonPathExpression) other; - return propName.equals(that.propName) - && operator == that.operator - && Same.sameByValue(path, that.path) - && Same.sameByNull(value, that.value) - && Same.sameByNull(upperValue, that.upperValue); - } - @Override public boolean isSameByBind(SpiExpression other) { JsonPathExpression that = (JsonPathExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java b/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java index 6fa585c0d..acd5cf838 100644 --- a/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java @@ -1,24 +1,12 @@ package io.ebeaninternal.server.expression; -import io.ebean.Expression; -import io.ebean.ExpressionList; -import io.ebean.FetchPath; -import io.ebean.FutureIds; -import io.ebean.FutureList; -import io.ebean.FutureRowCount; -import io.ebean.Junction; -import io.ebean.OrderBy; -import io.ebean.PagedList; -import io.ebean.Query; -import io.ebean.QueryIterator; -import io.ebean.Version; +import io.ebean.*; import io.ebean.event.BeanQueryRequest; import io.ebean.search.Match; import io.ebean.search.MultiMatch; import io.ebean.search.TextCommonTerms; import io.ebean.search.TextQueryString; import io.ebean.search.TextSimple; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -194,12 +182,14 @@ class JunctionExpression implements SpiJunction, SpiExpression, Expression * Based on Junction type and all the expression contained. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(JunctionExpression.class).add(type); + public void queryPlanHash(StringBuilder builder) { + builder.append(type).append("["); List list = exprList.internalList(); for (SpiExpression aList : list) { aList.queryPlanHash(builder); + builder.append(","); } + builder.append("]"); } @Override @@ -212,17 +202,6 @@ class JunctionExpression implements SpiJunction, SpiExpression, Expression return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - - if (!(other instanceof JunctionExpression)) { - return false; - } - - JunctionExpression that = (JunctionExpression) other; - return type == that.type && exprList.isSameByPlan(that.exprList); - } - @Override public boolean isSameByBind(SpiExpression other) { JunctionExpression that = (JunctionExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java b/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java index b1828d8e2..ab55b467b 100644 --- a/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.expression; import io.ebean.LikeType; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; import io.ebeaninternal.server.el.ElPropertyValue; @@ -63,9 +62,11 @@ class LikeExpression extends AbstractValueExpression { * Based on caseInsensitive and the property name. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(LikeExpression.class).add(caseInsensitive).add(propName); - builder.bind(1); + public void queryPlanHash(StringBuilder builder) { + if (caseInsensitive){ + builder.append("I"); + } + builder.append("Like[").append(type).append(" ").append(propName).append("]"); } @Override @@ -73,18 +74,6 @@ class LikeExpression extends AbstractValueExpression { return strValue().hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof LikeExpression)) { - return false; - } - - LikeExpression that = (LikeExpression) other; - return this.propName.equals(that.propName) - && this.caseInsensitive == that.caseInsensitive - && this.type == that.type; - } - @Override public boolean isSameByBind(SpiExpression other) { LikeExpression that = (LikeExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java b/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java index 22902d9fa..2b02c4e21 100644 --- a/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java @@ -3,7 +3,6 @@ package io.ebeaninternal.server.expression; import io.ebean.Expression; import io.ebean.Junction; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -137,10 +136,12 @@ abstract class LogicExpression implements SpiExpression { * Based on the joinType plus the two expressions. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(LogicExpression.class).add(joinType); + public void queryPlanHash(StringBuilder builder) { + builder.append("Logic").append(joinType).append("["); expOne.queryPlanHash(builder); + builder.append(","); expTwo.queryPlanHash(builder); + builder.append("]"); } @Override @@ -150,19 +151,6 @@ abstract class LogicExpression implements SpiExpression { return hc; } - @Override - public boolean isSameByPlan(SpiExpression other) { - - if (!(other instanceof LogicExpression)) { - return false; - } - - LogicExpression that = (LogicExpression) other; - return this.joinType.equals(that.joinType) - && this.expOne.isSameByPlan(that.expOne) - && this.expTwo.isSameByPlan(that.expTwo); - } - @Override public boolean isSameByBind(SpiExpression other) { LogicExpression that = (LogicExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java b/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java index 1cca474b7..a9298e209 100644 --- a/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.expression; import io.ebean.LikeType; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; import io.ebeaninternal.server.el.ElPropertyValue; @@ -50,9 +49,8 @@ class NativeILikeExpression extends AbstractExpression { * Based on caseInsensitive and the property name. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(NativeILikeExpression.class).add(propName); - builder.bind(1); + public void queryPlanHash(StringBuilder builder) { + builder.append("NativeILike[").append(propName).append("]"); } @Override @@ -60,16 +58,6 @@ class NativeILikeExpression extends AbstractExpression { return val.hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof NativeILikeExpression)) { - return false; - } - - NativeILikeExpression that = (NativeILikeExpression) other; - return this.propName.equals(that.propName); - } - @Override public boolean isSameByBind(SpiExpression other) { NativeILikeExpression that = (NativeILikeExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java b/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java index 726533041..2a5a942ce 100644 --- a/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -58,8 +57,13 @@ class NestedPathWrapperExpression implements SpiExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { + public void queryPlanHash(StringBuilder builder) { + builder.append("NestedPath["); + if (nestedPath != null){ + builder.append("path:").append(nestedPath).append(" "); + } delegate.queryPlanHash(builder); + builder.append("]"); } @Override @@ -67,16 +71,6 @@ class NestedPathWrapperExpression implements SpiExpression { return delegate.queryBindHash(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (other instanceof NestedPathWrapperExpression) { - NestedPathWrapperExpression that = (NestedPathWrapperExpression) other; - return nestedPath.equals(that.nestedPath) - && delegate.isSameByPlan(that.delegate); - } - return false; - } - @Override public boolean isSameByBind(SpiExpression other) { return delegate.isSameByBind(other); diff --git a/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java b/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java index 7808f7be4..adc609fad 100644 --- a/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -58,8 +57,8 @@ class NoopExpression implements SpiExpression { } @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(NoopExpression.class); + public void queryPlanHash(StringBuilder builder) { + builder.append("Noop[]"); } @Override @@ -78,11 +77,6 @@ class NoopExpression implements SpiExpression { // nothing to do } - @Override - public boolean isSameByPlan(SpiExpression other) { - return other instanceof NoopExpression; - } - @Override public boolean isSameByBind(SpiExpression other) { return true; diff --git a/src/main/java/io/ebeaninternal/server/expression/NotExpression.java b/src/main/java/io/ebeaninternal/server/expression/NotExpression.java index 518f547f1..8ff526ee6 100644 --- a/src/main/java/io/ebeaninternal/server/expression/NotExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/NotExpression.java @@ -2,7 +2,6 @@ package io.ebeaninternal.server.expression; import io.ebean.Expression; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -81,9 +80,10 @@ final class NotExpression implements SpiExpression { * Based on the expression. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(NotExpression.class); + public void queryPlanHash(StringBuilder builder) { + builder.append("Not["); exp.queryPlanHash(builder); + builder.append("]"); } @Override @@ -91,15 +91,6 @@ final class NotExpression implements SpiExpression { return exp.queryBindHash(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof NotExpression)) { - return false; - } - NotExpression that = (NotExpression) other; - return exp.isSameByPlan(that.exp); - } - @Override public boolean isSameByBind(SpiExpression other) { NotExpression that = (NotExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/expression/NullExpression.java b/src/main/java/io/ebeaninternal/server/expression/NullExpression.java index 49290802f..aa2dc652e 100644 --- a/src/main/java/io/ebeaninternal/server/expression/NullExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/NullExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -72,17 +71,6 @@ class NullExpression extends AbstractExpression { } } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof NullExpression)) { - return false; - } - - NullExpression that = (NullExpression) other; - return this.propName.equals(that.propName) - && this.notNull == that.notNull; - } - @Override public boolean isSameByBind(SpiExpression other) { // no bind values so always true @@ -93,8 +81,13 @@ class NullExpression extends AbstractExpression { * Based on notNull flag and the propertyName. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(NullExpression.class).add(notNull).add(propName); + public void queryPlanHash(StringBuilder builder) { + if (notNull) { + builder.append("NotNull["); + } else { + builder.append("Null["); + } + builder.append(propName).append("]"); } @Override diff --git a/src/main/java/io/ebeaninternal/server/expression/RawExpression.java b/src/main/java/io/ebeaninternal/server/expression/RawExpression.java index 32c7856fd..7fc0c6dfa 100644 --- a/src/main/java/io/ebeaninternal/server/expression/RawExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/RawExpression.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; @@ -58,8 +57,12 @@ class RawExpression extends NonPrepareExpression { * Based on the sql. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(RawExpression.class).add(sql); + public void queryPlanHash(StringBuilder builder) { + builder.append("Raw[").append(sql); + if (values != null) { + builder.append(" ?").append(values.length); + } + builder.append("]"); } @Override @@ -67,15 +70,6 @@ class RawExpression extends NonPrepareExpression { return sql.hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof RawExpression)) { - return false; - } - RawExpression that = (RawExpression) other; - return sql.equals(that.sql); - } - @Override public boolean isSameByBind(SpiExpression other) { if (!(other instanceof RawExpression)) { diff --git a/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java b/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java index df90b02af..df4596414 100644 --- a/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java @@ -2,7 +2,6 @@ package io.ebeaninternal.server.expression; import io.ebean.bean.EntityBean; import io.ebean.plugin.ExpressionPath; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionRequest; import io.ebeaninternal.server.el.ElPropertyValue; @@ -106,9 +105,8 @@ public class SimpleExpression extends AbstractValueExpression { * Based on the type and propertyName. */ @Override - public void queryPlanHash(HashQueryPlanBuilder builder) { - builder.add(SimpleExpression.class).add(propName).add(type.name()); - builder.bind(1); + public void queryPlanHash(StringBuilder builder) { + builder.append(type.name()).append("[").append(propName).append("]"); } @Override @@ -116,16 +114,6 @@ public class SimpleExpression extends AbstractValueExpression { return value().hashCode(); } - @Override - public boolean isSameByPlan(SpiExpression other) { - if (!(other instanceof SimpleExpression)) { - return false; - } - - SimpleExpression that = (SimpleExpression) other; - return this.propName.equals(that.propName) && this.type == that.type; - } - @Override public boolean isSameByBind(SpiExpression other) { SimpleExpression that = (SimpleExpression) other; diff --git a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java index 808cc0467..4ae6a6e33 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.querydefn; import io.ebean.FetchConfig; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanPropertyAssoc; import io.ebeaninternal.server.el.ElPropertyDeploy; @@ -56,16 +55,10 @@ public class OrmQueryDetail implements Serializable { return copy; } - public int queryPlanHash() { - HashQueryPlanBuilder builder = new HashQueryPlanBuilder(); - queryPlanHash(builder); - return builder.getPlanHash(); - } - /** * Calculate the hash for the query plan. */ - public void queryPlanHash(HashQueryPlanBuilder builder) { + public void queryPlanHash(StringBuilder builder) { baseProps.queryPlanHash(builder); if (fetchPaths != null) { for (OrmQueryProperties p : fetchPaths.values()) { @@ -74,36 +67,6 @@ public class OrmQueryDetail implements Serializable { } } - /** - * Return true if the details are the same for query plan purposes. - */ - public boolean isSameByPlan(OrmQueryDetail otherDetail) { - if (!isSameByPlan(baseProps, otherDetail.baseProps)) { - return false; - } - if (fetchPaths == null) { - return otherDetail.fetchPaths == null; - } - if (fetchPaths.size() != otherDetail.fetchPaths.size()) { - return false; - } - // check with ordering being important - Iterator> thisIt = fetchPaths.entrySet().iterator(); - Iterator> thatIt = otherDetail.fetchPaths.entrySet().iterator(); - while (thisIt.hasNext() && thatIt.hasNext()) { - Map.Entry thisEntry = thisIt.next(); - Map.Entry thatEntry = thatIt.next(); - if (!thisEntry.getKey().equals(thatEntry.getKey())) { - return false; - } - if (!thisEntry.getValue().isSameByPlan(thatEntry.getValue())) { - return false; - } - } - - return true; - } - /** * Return true if equal in terms of autoTune (select and fetch without property ordering). */ @@ -133,10 +96,6 @@ public class OrmQueryDetail implements Serializable { return p1 == null ? p2 == null : p1.isSameByAutoTune(p2); } - private boolean isSameByPlan(OrmQueryProperties p1, OrmQueryProperties p2) { - return p1 == null ? p2 == null : p1.isSameByPlan(p2); - } - @Override public String toString() { return asString(); @@ -312,7 +271,7 @@ public class OrmQueryDetail implements Serializable { public void sortFetchPaths(BeanDescriptor d) { sortFetchPaths(d, true); } - + private void sortFetchPaths(BeanDescriptor d, boolean addIds) { if (!fetchPaths.isEmpty()) { diff --git a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java index a4b8864b7..721d21b1e 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java @@ -5,7 +5,6 @@ import io.ebean.Query; import io.ebean.RawSql; import io.ebeaninternal.api.BindParams; import io.ebeaninternal.api.CQueryPlanKey; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.server.deploy.TableJoin; @@ -15,16 +14,11 @@ import io.ebeaninternal.server.deploy.TableJoin; */ class OrmQueryPlanKey implements CQueryPlanKey { - private final SpiExpression where; - private final SpiExpression having; private final RawSql.Key rawSqlKey; private final int maxRows; private final int firstRow; - private final OrmUpdateProperties updateProperties; - private final int planHash; - private final int bindCount; - private final String options; + private final String description; OrmQueryPlanKey(String discValue, TableJoin m2mIncludeTable, SpiQuery.Type type, OrmQueryDetail detail, int maxRows, int firstRow, boolean disableLazyLoading, OrderBy orderBy, boolean distinct, boolean sqlDistinct, String mapKey, Object id, BindParams bindParams, @@ -68,43 +62,46 @@ class OrmQueryPlanKey implements CQueryPlanKey { if (mapKey != null) { sb.append(",mapKey:").append(mapKey); } - this.options = sb.toString(); this.maxRows = maxRows; this.firstRow = firstRow; - this.where = (whereExpressions == null) ? null : whereExpressions.copyForPlanKey(); - this.having = (havingExpressions == null) ? null : havingExpressions.copyForPlanKey(); - this.updateProperties = updateProperties; this.rawSqlKey = (rawSql == null) ? null : rawSql.getKey(); - // exclude bind values and things unrelated to the sql being generated - HashQueryPlanBuilder builder = new HashQueryPlanBuilder(); - builder.add(options.hashCode()); - builder.add(firstRow).add(maxRows); - builder.add(rawSqlKey == null ? 0 : rawSqlKey.hashCode()); - if (detail != null) { - detail.queryPlanHash(builder); + sb.append(" detail["); + detail.queryPlanHash(sb); + sb.append("]"); } if (bindParams != null) { - bindParams.buildQueryPlanHash(builder); + sb.append(" bindParams["); + bindParams.buildQueryPlanHash(sb); + sb.append("]"); } - if (where != null) { - where.queryPlanHash(builder); + if (whereExpressions != null) { + sb.append(" where["); + whereExpressions.queryPlanHash(sb); + sb.append("]"); } - if (having != null) { - having.queryPlanHash(builder); + if (havingExpressions != null) { + sb.append(" having["); + havingExpressions.queryPlanHash(sb); + sb.append("]"); } if (updateProperties != null) { - updateProperties.buildQueryPlanHash(builder); + sb.append(" update["); + updateProperties.buildQueryPlanHash(sb); + sb.append("]"); } - this.planHash = builder.getPlanHash(); - this.bindCount = builder.getBindCount(); + this.description = sb.toString(); + int hc = description.hashCode(); + hc = hc * 92821 + (maxRows); + hc = hc * 92821 + (firstRow); + this.planHash = hc; } @Override public String getPartialKey() { - return planHash + "_" + bindCount; + return description; } @Override @@ -119,14 +116,9 @@ class OrmQueryPlanKey implements CQueryPlanKey { OrmQueryPlanKey that = (OrmQueryPlanKey) o; - if (planHash != that.planHash) return false; - if (bindCount != that.bindCount) return false; if (maxRows != that.maxRows) return false; if (firstRow != that.firstRow) return false; - if (!options.equals(that.options)) return false; - if (where != null ? !where.isSameByPlan(that.where) : that.where != null) return false; - if (having != null ? !having.isSameByPlan(that.having) : that.having != null) return false; - if (updateProperties != null ? !updateProperties.isSameByPlan(that.updateProperties) : that.updateProperties != null) return false; + if (!description.equals(that.description)) return false; return rawSqlKey != null ? rawSqlKey.equals(that.rawSqlKey) : that.rawSqlKey == null; } } diff --git a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java index a0803c6a9..b804a707a 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java @@ -4,14 +4,12 @@ import io.ebean.ExpressionFactory; import io.ebean.FetchConfig; import io.ebean.OrderBy; import io.ebean.Query; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionFactory; import io.ebeaninternal.api.SpiExpressionList; import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.server.expression.FilterExprPath; import io.ebeaninternal.server.expression.FilterExpressionList; -import io.ebeaninternal.server.expression.Same; import io.ebeaninternal.server.query.SplitName; import java.io.Serializable; @@ -476,33 +474,30 @@ public class OrmQueryProperties implements Serializable { return included.equals(p2.included); } - /** - * Properties are the same for query plan purposes. - */ - public boolean isSameByPlan(OrmQueryProperties p2) { - - if (!Same.sameByValue(secondaryQueryJoins, p2.secondaryQueryJoins)) return false; - if (!Same.sameByValue(included, p2.included)) return false; - if (!Same.sameByNull(filterMany, p2.filterMany)) return false; - if (filterMany != null && !filterMany.isSameByPlan(p2.filterMany)) return false; - - return fetchConfig.equals(p2.fetchConfig); - } - /** * Calculate the query plan hash. */ - public void queryPlanHash(HashQueryPlanBuilder builder) { + public void queryPlanHash(StringBuilder builder) { - builder.add(path); - builder.addOrdered(included); - builder.add(secondaryQueryJoins); - - builder.add(filterMany != null); - if (filterMany != null) { - filterMany.queryPlanHash(builder); + builder.append("qpp["); + builder.append(path); + if (included != null){ + builder.append(" included:").append(included); } - builder.add(fetchConfig.hashCode()); + if (secondaryQueryJoins != null) { + builder.append(" secondary:").append(secondaryQueryJoins); + } + + if (filterMany != null) { + builder.append(" filterMany["); + filterMany.queryPlanHash(builder); + builder.append("]"); + } + + if (fetchConfig != null) { + builder.append(" config:").append(fetchConfig.hashCode()); + } + builder.append("]"); } } diff --git a/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java b/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java index 3b2b913e0..2d5228973 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java @@ -149,23 +149,14 @@ public class OrmUpdateProperties { } } - /** - * Return true if this update has the same logical set clause. - */ - public boolean isSameByPlan(OrmUpdateProperties that) { - return that.values.size() == values.size() - && logicalSetClause().equals(that.logicalSetClause()); - } - /** * Build the hash for the query plan caching. */ - void buildQueryPlanHash(HashQueryPlanBuilder builder) { - builder.add(OrmUpdateProperties.class); + void buildQueryPlanHash(StringBuilder builder) { Set> entries = values.entrySet(); for (Map.Entry entry : entries) { - builder.add(entry.getKey()); - builder.bind(entry.getValue().getBindCount()); + builder.append("key:").append(entry.getKey()); + builder.append(" ?:").append(entry.getValue().getBindCount()); } } diff --git a/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java b/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java index 463729a96..a91cfa0d1 100644 --- a/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java +++ b/src/test/java/io/ebeaninternal/server/core/DefaultServer_createOrmQueryRequestTest.java @@ -7,8 +7,8 @@ import io.ebean.FetchConfig; import io.ebean.Query; import io.ebeaninternal.server.querydefn.DefaultOrmQuery; import io.ebeaninternal.server.querydefn.OrmQueryDetail; -import org.tests.model.basic.Order; import org.junit.Test; +import org.tests.model.basic.Order; import static org.assertj.core.api.Assertions.assertThat; @@ -305,12 +305,16 @@ public class DefaultServer_createOrmQueryRequestTest extends BaseTestCase { } private void assertSame(OrmQueryDetail detail1, OrmQueryDetail detail2) { - assertThat(detail1.isSameByPlan(detail2)).isTrue(); - assertThat(detail1.queryPlanHash()).isEqualTo(detail2.queryPlanHash()); + assertThat(hash(detail1)).isEqualTo(hash(detail2)); } private void assertDifferent(OrmQueryDetail detail1, OrmQueryDetail detail2) { - assertThat(detail1.isSameByPlan(detail2)).isFalse(); - assertThat(detail1.queryPlanHash()).isNotEqualTo(detail2.queryPlanHash()); + assertThat(hash(detail1)).isNotEqualTo(hash(detail2)); + } + + private String hash(OrmQueryDetail detail1) { + StringBuilder sb = new StringBuilder(); + detail1.queryPlanHash(sb); + return sb.toString(); } } diff --git a/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java index c0c7b4f7f..316edb569 100644 --- a/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/AllEqualsExpressionTest.java @@ -8,12 +8,12 @@ import java.util.Map; import static org.assertj.core.api.StrictAssertions.assertThat; -public class AllEqualsExpressionTest { +public class AllEqualsExpressionTest extends BaseExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", 10).isSameByPlan(exp("a", 10))).isTrue(); + same(exp("a", 10), exp("a", 10)); } @Test @@ -25,55 +25,55 @@ public class AllEqualsExpressionTest { @Test public void isSameByPlan_when_diffBindValue() { - assertThat(exp("a", 10).isSameByPlan(exp("a", 20))).isTrue(); + same(exp("a", 10), exp("a", 20)); } @Test public void isSameByPlan_when_multiple() { - assertThat(exp("a", 10, "b", 20, "c", 30).isSameByPlan(exp("a", 10, "b", 20, "c", 30))).isTrue(); + same(exp("a", 10, "b", 20, "c", 30), exp("a", 10, "b", 20, "c", 30)); } @Test public void isSameByPlan_when_less() { - assertThat(exp("a", 10, "b", 20, "c", 30).isSameByPlan(exp("a", 10, "b", 20))).isFalse(); + different(exp("a", 10, "b", 20, "c", 30), exp("a", 10, "b", 20)); } @Test public void isSameByPlan_when_more() { - assertThat(exp("a", 10, "b", 20).isSameByPlan(exp("a", 10, "b", 20, "c", 30))).isFalse(); + different(exp("a", 10, "b", 20), exp("a", 10, "b", 20, "c", 30)); } @Test public void isSameByPlan_when_diffProperty_diff() { - assertThat(exp("a", 10).isSameByPlan(exp("b", 10))).isFalse(); + different(exp("a", 10), exp("b", 10)); } @Test public void isSameByPlan_when_diffType_diff() { - assertThat(exp("a", 10).isSameByPlan(new NoopExpression())).isFalse(); + different(exp("a", 10), new NoopExpression()); } @Test public void isSameByPlan_when_diffBindByNull_last() { - assertThat(exp("a", 10).isSameByPlan(exp("a", null))).isFalse(); + different(exp("a", 10), exp("a", null)); } @Test public void isSameByPlan_when_diffBindByNull_first() { - assertThat(exp("a", null).isSameByPlan(exp("a", 10))).isFalse(); + different(exp("a", null), exp("a", 10)); } @Test public void isSameByPlan_when_differentExpressionType() { - assertThat(exp("a", null).isSameByPlan(new NoopExpression())).isFalse(); + different(exp("a", null), new NoopExpression()); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java index 98c187307..e1a39f669 100644 --- a/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/BaseExpressionTest.java @@ -1,13 +1,32 @@ package io.ebeaninternal.server.expression; import io.ebean.BaseTestCase; +import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.server.deploy.BeanDescriptor; import org.tests.model.basic.Order; +import static org.assertj.core.api.StrictAssertions.assertThat; + public abstract class BaseExpressionTest extends BaseTestCase { protected DefaultExpressionRequest newExpressionRequest() { BeanDescriptor desc = getBeanDescriptor(Order.class); return new DefaultExpressionRequest(desc); } + + protected String hash(SpiExpression expression) { + StringBuilder sb = new StringBuilder(); + if (expression != null) { + expression.queryPlanHash(sb); + } + return sb.toString(); + } + + protected void same(SpiExpression one, SpiExpression two){ + assertThat(hash(one)).isEqualTo(hash(two)); + } + + protected void different(SpiExpression one, SpiExpression two){ + assertThat(hash(one)).isNotEqualTo(hash(two)); + } } diff --git a/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java index 6509e9d5b..82f742247 100644 --- a/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/BetweenExpressionTest.java @@ -33,8 +33,8 @@ public class BetweenExpressionTest extends BaseExpressionTest { BetweenExpression exp0 = new BetweenExpression("startDate", 1, 2); BetweenExpression exp1 = new BetweenExpression("startDate", 3, 4); - assertThat(exp0.isSameByPlan(exp1)).isTrue(); - assertThat(exp1.isSameByPlan(exp0)).isTrue(); + same(exp0, exp1); + same(exp1, exp0); } @Test @@ -43,8 +43,8 @@ public class BetweenExpressionTest extends BaseExpressionTest { BetweenExpression exp0 = new BetweenExpression("startDate", 1, 2); BetweenExpression exp1 = new BetweenExpression("endDate", 1, 2); - assertThat(exp0.isSameByPlan(exp1)).isFalse(); - assertThat(exp1.isSameByPlan(exp0)).isFalse(); + different(exp0, exp1); + different(exp1, exp0); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java index 3a2c93a4b..f23d4b126 100644 --- a/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/BetweenPropertyExpressionTest.java @@ -5,7 +5,7 @@ import org.junit.Test; import static org.assertj.core.api.StrictAssertions.assertThat; -public class BetweenPropertyExpressionTest { +public class BetweenPropertyExpressionTest extends BaseExpressionTest { @NotNull private BetweenPropertyExpression exp(String lowProperty, String highProperty, Object value) { @@ -21,22 +21,22 @@ public class BetweenPropertyExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", "b", 10).isSameByPlan(exp("a", "b", 10))).isTrue(); + same(exp("a", "b", 10), exp("a", "b", 10)); } @Test public void isSameByPlan_when_diffValue() { - assertThat(exp("a", "b", 10).isSameByPlan(exp("a", "b", 20))).isTrue(); + same(exp("a", "b", 10), exp("a", "b", 20)); } @Test public void isSameByPlan_when_diffProperty() { - assertThat(exp("a", "b", 10).isSameByPlan(exp("a", "c", 10))).isFalse(); + different(exp("a", "b", 10), exp("a", "c", 10)); } @Test public void isSameByPlan_when_diffExpressionType() { - assertThat(exp("a", "b", 10).isSameByPlan(new NoopExpression())).isFalse(); + different(exp("a", "b", 10), new NoopExpression()); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java index 197c92012..3e9e0ca45 100644 --- a/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpressionTest.java @@ -5,7 +5,7 @@ import org.junit.Test; import static org.assertj.core.api.StrictAssertions.assertThat; -public class CaseInsensitiveEqualExpressionTest { +public class CaseInsensitiveEqualExpressionTest extends BaseExpressionTest { CaseInsensitiveEqualExpression exp(String propName, String value) { return new CaseInsensitiveEqualExpression(propName, value); @@ -14,25 +14,25 @@ public class CaseInsensitiveEqualExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", "10").isSameByPlan(exp("a", "10"))).isTrue(); + same(exp("a", "10"), exp("a", "10")); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp("a", "10").isSameByPlan(exp("a", "20"))).isTrue(); + same(exp("a", "10"), exp("a", "20")); } @Test public void isSameByPlan_when_diffProperty_diff() { - assertThat(exp("a", "10").isSameByPlan(exp("b", "10"))).isFalse(); + different(exp("a", "10"), exp("b", "10")); } @Test public void isSameByPlan_when_diffType_diff() { - assertThat(exp("a", "10").isSameByPlan(new NoopExpression())).isFalse(); + different(exp("a", "10"), new NoopExpression()); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java index 1e99f074c..29736f21a 100644 --- a/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/DefaultExampleExpressionTest.java @@ -1,24 +1,22 @@ package io.ebeaninternal.server.expression; -import io.ebean.BaseTestCase; import io.ebean.LikeType; import io.ebean.Query; import io.ebean.bean.EntityBean; import io.ebean.event.BeanQueryRequest; -import io.ebeaninternal.api.HashQueryPlanBuilder; import io.ebeaninternal.api.ManyWhereJoins; import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.server.core.OrmQueryRequest; import io.ebeaninternal.server.deploy.BeanDescriptor; +import org.junit.Test; import org.tests.model.basic.Address; import org.tests.model.basic.Customer; import org.tests.model.basic.ResetBasicData; -import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; -public class DefaultExampleExpressionTest extends BaseTestCase { +public class DefaultExampleExpressionTest extends BaseExpressionTest { Customer customer() { @@ -68,7 +66,7 @@ public class DefaultExampleExpressionTest extends BaseTestCase { prepare(expr); - HashQueryPlanBuilder builder = new HashQueryPlanBuilder(); + StringBuilder builder = new StringBuilder(); expr.queryPlanHash(builder); TDSpiExpressionRequest req = new TDSpiExpressionRequest(customerBeanDescriptor()); @@ -100,25 +98,25 @@ public class DefaultExampleExpressionTest extends BaseTestCase { @Test public void isSameByPlan_whenSame() { - assertThat(prepare(exp()).isSameByPlan(prepare(exp()))).isTrue(); + same(prepare(exp()), prepare(exp())); } @Test public void isSameByPlan_when_diffBindValue_stillSame() { - assertThat(prepare(exp()).isSameByPlan(prepare(expDiffName()))).isTrue(); + same(prepare(exp()), prepare(expDiffName())); } @Test public void isSameByPlan_when_extraExpression_then_different() { - assertThat(prepare(exp()).isSameByPlan(prepare(expExtra()))).isFalse(); + different(prepare(exp()), prepare(expExtra())); } @Test public void isSameByPlan_when_lessExpression_then_different() { - assertThat(prepare(expExtra()).isSameByPlan(prepare(exp()))).isFalse(); + different(prepare(expExtra()), prepare(exp())); } } diff --git a/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java b/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java index 0cc3423bf..149b620db 100644 --- a/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/DefaultExpressionListTest.java @@ -5,7 +5,7 @@ import org.junit.Test; import static org.assertj.core.api.StrictAssertions.assertThat; -public class DefaultExpressionListTest { +public class DefaultExpressionListTest extends BaseExpressionTest { DefaultExpressionList exp() { @@ -13,57 +13,57 @@ public class DefaultExpressionListTest { return new DefaultExpressionList<>(null, new DefaultExpressionFactory(true, true), null); } - DefaultExpressionList spi(ExpressionList list) { + private DefaultExpressionList spi(ExpressionList list) { return (DefaultExpressionList) list; } @Test public void isSameByPlan_when_same() { - assertThat(spi(exp().eq("a", 10).eq("b", 20)) - .isSameByPlan(spi(exp().eq("a", 10).eq("b", 20)))).isTrue(); + same(spi(exp().eq("a", 10).eq("b", 20)) + ,spi(exp().eq("a", 10).eq("b", 20))); } @Test public void isSameByPlan_when_diffExpressionType() { - assertThat(spi(exp().eq("a", 10).eq("b", 20)) - .isSameByPlan(new NoopExpression())).isFalse(); + different(spi(exp().eq("a", 10).eq("b", 20)) + ,new NoopExpression()); } @Test public void isSameByPlan_when_less() { - assertThat(spi(exp().eq("a", 10).eq("b", 20)) - .isSameByPlan(spi(exp().eq("a", 10)))).isFalse(); + different(spi(exp().eq("a", 10).eq("b", 20)) + ,spi(exp().eq("a", 10))); } @Test public void isSameByPlan_when_lessEmptyLast() { - assertThat(spi(exp().eq("a", 10).eq("b", 20)) - .isSameByPlan(spi(exp()))).isFalse(); + different(spi(exp().eq("a", 10).eq("b", 20)) + ,spi(exp())); } @Test public void isSameByPlan_when_lessEmptyFirst() { - assertThat(spi(exp()) - .isSameByPlan(spi(exp().eq("a", 10)))).isFalse(); + different(spi(exp()) + ,spi(exp().eq("a", 10))); } @Test public void isSameByPlan_when_more() { - assertThat(spi(exp().eq("a", 10).eq("b", 20)) - .isSameByPlan(spi(exp().eq("a", 10).eq("b", 20).eq("c", 30)))).isFalse(); + different(spi(exp().eq("a", 10).eq("b", 20)) + ,spi(exp().eq("a", 10).eq("b", 20).eq("c", 30))); } @Test public void isSameByPlan_when_diffProperties() { - assertThat(spi(exp().eq("a", 10).eq("b", 20)) - .isSameByPlan(spi(exp().eq("c", 10).eq("b", 20)))).isFalse(); + different(spi(exp().eq("a", 10).eq("b", 20)) + ,spi(exp().eq("c", 10).eq("b", 20))); } diff --git a/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java index 8a2fe2290..f3989a141 100644 --- a/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/ExistsQueryExpressionTest.java @@ -8,7 +8,7 @@ import java.util.Arrays; import static org.assertj.core.api.StrictAssertions.assertThat; -public class ExistsQueryExpressionTest { +public class ExistsQueryExpressionTest extends BaseExpressionTest { @NotNull @@ -19,37 +19,37 @@ public class ExistsQueryExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp(true, "a", 10).isSameByPlan(exp(true, "a", 10))).isTrue(); + same(exp(true, "a", 10), exp(true, "a", 10)); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp(true, "a", 10).isSameByPlan(exp(true, "a", 20))).isTrue(); + same(exp(true, "a", 10), exp(true, "a", 20)); } @Test public void isSameByPlan_when_diffNot() { - assertThat(exp(true, "a", 10).isSameByPlan(exp(false, "a", 10))).isFalse(); + different(exp(true, "a", 10), exp(false, "a", 10)); } @Test public void isSameByPlan_when_diffSql() { - assertThat(exp(true, "a", 10).isSameByPlan(exp(true, "b", 10))).isFalse(); + different(exp(true, "a", 10), exp(true, "b", 10)); } @Test public void isSameByBind_when_sameBindValues() { - assertThat(exp(true, "a", 10).isSameByBind(exp(true, "a", 10))).isTrue(); + same(exp(true, "a", 10), exp(true, "a", 10)); } @Test public void isSameByBind_when_sameMultipleBindValues() { - assertThat(exp(true, "a", 10, "ABC", 20).isSameByBind(exp(true, "a", 10, "ABC", 20))).isTrue(); + same(exp(true, "a", 10, "ABC", 20), exp(true, "a", 10, "ABC", 20)); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java index 097051a9f..b3babb490 100644 --- a/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/IdExpressionTest.java @@ -6,7 +6,7 @@ import org.junit.Test; import static org.assertj.core.api.StrictAssertions.assertThat; -public class IdExpressionTest { +public class IdExpressionTest extends BaseExpressionTest { @NotNull @@ -17,13 +17,13 @@ public class IdExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp(10).isSameByPlan(exp(10))).isTrue(); + same(exp(10), exp(10)); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp(10).isSameByPlan(exp(20))).isTrue(); + same(exp(10), exp(20)); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java index cefa12f4d..253fd0851 100644 --- a/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/IdInExpressionTest.java @@ -7,7 +7,7 @@ import java.util.Arrays; import static org.assertj.core.api.StrictAssertions.assertThat; -public class IdInExpressionTest { +public class IdInExpressionTest extends BaseExpressionTest { @NotNull @@ -18,19 +18,19 @@ public class IdInExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp(10).isSameByPlan(exp(10))).isTrue(); + same(exp(10), exp(10)); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp(10).isSameByPlan(exp(20))).isTrue(); + same(exp(10), exp(20)); } @Test public void isSameByPlan_when_diffBindCount() { - assertThat(exp(10).isSameByPlan(exp(10, 20))).isFalse(); + different(exp(10), exp(10, 20)); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java index 7f8c24777..f5fe6b782 100644 --- a/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/InExpressionTest.java @@ -1,7 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebeaninternal.api.HashQueryPlanBuilder; -import org.jetbrains.annotations.NotNull; import org.junit.Test; import java.util.ArrayList; @@ -9,10 +7,8 @@ import java.util.Arrays; import java.util.List; import static org.assertj.core.api.StrictAssertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -public class InExpressionTest { +public class InExpressionTest extends BaseExpressionTest { @Test @@ -26,13 +22,7 @@ public class InExpressionTest { ex1.prepareExpression(null); ex2.prepareExpression(null); - HashQueryPlanBuilder b1 = new HashQueryPlanBuilder(); - ex1.queryPlanHash(b1); - - HashQueryPlanBuilder b2 = new HashQueryPlanBuilder(); - ex2.queryPlanHash(b2); - - assertNotEquals(b1.build(), b2.build()); + different(ex1, ex2); } @Test @@ -47,13 +37,7 @@ public class InExpressionTest { ex1.prepareExpression(null); ex2.prepareExpression(null); - HashQueryPlanBuilder b1 = new HashQueryPlanBuilder(); - ex1.queryPlanHash(b1); - - HashQueryPlanBuilder b2 = new HashQueryPlanBuilder(); - ex2.queryPlanHash(b2); - - assertNotEquals(b1.build(), b2.build()); + different(ex1, ex2); } @Test @@ -67,13 +51,7 @@ public class InExpressionTest { ex1.prepareExpression(null); ex2.prepareExpression(null); - HashQueryPlanBuilder b1 = new HashQueryPlanBuilder(); - ex1.queryPlanHash(b1); - - HashQueryPlanBuilder b2 = new HashQueryPlanBuilder(); - ex2.queryPlanHash(b2); - - assertNotEquals(b1.build(), b2.build()); + different(ex1, ex2); } @Test @@ -87,16 +65,10 @@ public class InExpressionTest { ex1.prepareExpression(null); ex2.prepareExpression(null); - HashQueryPlanBuilder b1 = new HashQueryPlanBuilder(); - ex1.queryPlanHash(b1); - - HashQueryPlanBuilder b2 = new HashQueryPlanBuilder(); - ex2.queryPlanHash(b2); - - assertEquals(b1.build(), b2.build()); + same(ex1, ex2); } - List values(int... vals) { + private List values(int... vals) { ArrayList list = new ArrayList(); for (int val : vals) { list.add(val); @@ -104,7 +76,6 @@ public class InExpressionTest { return list; } - @NotNull private InExpression exp(String propName, boolean not, Object... values) { InExpression ex = new InExpression(propName, Arrays.asList(values), not); ex.prepareExpression(null); @@ -114,31 +85,31 @@ public class InExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", false, 10).isSameByPlan(exp("a", false, 10))).isTrue(); + same(exp("a", false, 10), exp("a", false, 10)); } @Test public void isSameByPlan_when_diffPropertyName() { - assertThat(exp("a", false, 10).isSameByPlan(exp("b", false, 10))).isFalse(); + different(exp("a", false, 10), exp("b", false, 10)); } @Test public void isSameByPlan_when_diffNot() { - assertThat(exp("a", false, 10).isSameByPlan(exp("a", true, 10))).isFalse(); + different(exp("a", false, 10), exp("a", true, 10)); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp("a", false, 10).isSameByPlan(exp("a", false, 10, 20))).isFalse(); + different(exp("a", false, 10), exp("a", false, 10, 20)); } @Test public void isSameByPlan_when_diffBindCount() { - assertThat(exp("a", false, 10).isSameByPlan(exp("a", false, 10, 20))).isFalse(); + different(exp("a", false, 10), exp("a", false, 10, 20)); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java index 9aa91ce45..d137cdbc1 100644 --- a/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/InQueryExpressionTest.java @@ -7,7 +7,7 @@ import java.util.Arrays; import static org.assertj.core.api.StrictAssertions.assertThat; -public class InQueryExpressionTest { +public class InQueryExpressionTest extends BaseExpressionTest { @NotNull @@ -18,31 +18,31 @@ public class InQueryExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("name", true, "sql", 10).isSameByPlan(exp("name", true, "sql", 10))).isTrue(); + same(exp("name", true, "sql", 10), exp("name", true, "sql", 10)); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp("name", true, "sql", 10).isSameByPlan(exp("name", true, "sql", 20))).isTrue(); + same(exp("name", true, "sql", 10), exp("name", true, "sql", 20)); } @Test public void isSameByPlan_when_diffNPropertyName() { - assertThat(exp("name", true, "sql", 10).isSameByPlan(exp("nameDiff", true, "sql", 10))).isFalse(); + different(exp("name", true, "sql", 10), exp("nameDiff", true, "sql", 10)); } @Test public void isSameByPlan_when_diffNot() { - assertThat(exp("name", true, "sql", 10).isSameByPlan(exp("name", false, "sql", 10))).isFalse(); + different(exp("name", true, "sql", 10), exp("name", false, "sql", 10)); } @Test public void isSameByPlan_when_diffSql() { - assertThat(exp("name", true, "sql", 10).isSameByPlan(exp("name", true, "sqlDiff", 10))).isFalse(); + different(exp("name", true, "sql", 10), exp("name", true, "sqlDiff", 10)); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java index c7f2aa1c0..4dd27e9b1 100644 --- a/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/JsonPathExpressionTest.java @@ -5,7 +5,7 @@ import org.junit.Test; import static org.assertj.core.api.StrictAssertions.assertThat; -public class JsonPathExpressionTest { +public class JsonPathExpressionTest extends BaseExpressionTest { @NotNull private JsonPathExpression exp(String propertyName, String path, Op operator, Object value) { @@ -15,37 +15,37 @@ public class JsonPathExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", "path", Op.EQ, 10).isSameByPlan(exp("a", "path", Op.EQ, 10))).isTrue(); + same(exp("a", "path", Op.EQ, 10), exp("a", "path", Op.EQ, 10)); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp("a", "path", Op.EQ, 10).isSameByPlan(exp("a", "path", Op.EQ, 20))).isTrue(); + same(exp("a", "path", Op.EQ, 10), exp("a", "path", Op.EQ, 20)); } @Test public void isSameByPlan_when_diffPath() { - assertThat(exp("a", "path", Op.EQ, 10).isSameByPlan(exp("a", "pathDiff", Op.EQ, 10))).isFalse(); + different(exp("a", "path", Op.EQ, 10), exp("a", "pathDiff", Op.EQ, 10)); } @Test public void isSameByPlan_when_diffProperty_diff() { - assertThat(exp("a", "path", Op.EQ, 10).isSameByPlan(exp("b", "path", Op.EQ, 10))).isFalse(); + different(exp("a", "path", Op.EQ, 10), exp("b", "path", Op.EQ, 10)); } @Test public void isSameByPlan_when_diffOperator_diff() { - assertThat(exp("a", "path", Op.EQ, 10).isSameByPlan(exp("a", "path", Op.LT, 10))).isFalse(); + different(exp("a", "path", Op.EQ, 10), exp("a", "path", Op.LT, 10)); } @Test public void isSameByPlan_when_diffType_diff() { - assertThat(exp("a", "path", Op.EQ, 10).isSameByPlan(new NoopExpression())).isFalse(); + different(exp("a", "path", Op.EQ, 10), new NoopExpression()); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java index b1c38c5c6..57a1cd4b2 100644 --- a/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/JunctionExpressionTest.java @@ -5,9 +5,7 @@ import io.ebean.Expression; import io.ebean.Junction; import org.junit.Test; -import static org.assertj.core.api.StrictAssertions.assertThat; - -public class JunctionExpressionTest { +public class JunctionExpressionTest extends BaseExpressionTest { Expression eq(String propName, int value) { return Expr.eq(propName, value); @@ -34,28 +32,28 @@ public class JunctionExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(and(exp(eq("a", 10), eq("b", 10))) - .isSameByPlan(and(exp(eq("a", 10), eq("b", 10))))).isTrue(); + same(and(exp(eq("a", 10), eq("b", 10))), + and(exp(eq("a", 10), eq("b", 10)))); } @Test public void copyForPlanKey_isSameByPlan_when_same() { - assertThat(and(exp(eq("a", 10), eq("b", 10)).copyForPlanKey()) - .isSameByPlan(and(exp(eq("a", 10), eq("b", 10))))).isTrue(); + same(and(exp(eq("a", 10), eq("b", 10)).copyForPlanKey()), + and(exp(eq("a", 10), eq("b", 10)))); } @Test public void copyForPlanKey_isSameByPlan_when_diff() { - assertThat(and(exp(eq("a", 10), eq("b", 10)).copyForPlanKey()) - .isSameByPlan(and(exp(eq("a", 10), eq("c", 10))))).isFalse(); + different(and(exp(eq("a", 10), eq("b", 10)).copyForPlanKey()), + and(exp(eq("a", 10), eq("c", 10)))); } @Test public void isSameByPlan_when_diffType() { - assertThat(and(exp(eq("a", 10), eq("b", 10))) - .isSameByPlan(or(exp(eq("a", 10), eq("b", 10))))).isFalse(); + different(and(exp(eq("a", 10), eq("b", 10))), + or(exp(eq("a", 10), eq("b", 10)))); } } diff --git a/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java index bc0718ec0..cbf8e76c3 100644 --- a/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/LikeExpressionTest.java @@ -17,36 +17,36 @@ public class LikeExpressionTest extends BaseExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", "rob", true, LikeType.STARTS_WITH) - .isSameByPlan(exp("a", "rob", true, LikeType.STARTS_WITH))).isTrue(); + same(exp("a", "rob", true, LikeType.STARTS_WITH) + , exp("a", "rob", true, LikeType.STARTS_WITH)); } @Test public void isSameByPlan_when_diffBind_then_stillSame() { - assertThat(exp("a", "rob", true, LikeType.STARTS_WITH) - .isSameByPlan(exp("a", "bor", true, LikeType.STARTS_WITH))).isTrue(); + same(exp("a", "rob", true, LikeType.STARTS_WITH) + , exp("a", "bor", true, LikeType.STARTS_WITH)); } @Test public void isSameByPlan_when_diffCaseInsensitive() { - assertThat(exp("a", "rob", true, LikeType.STARTS_WITH) - .isSameByPlan(exp("a", "rob", false, LikeType.STARTS_WITH))).isFalse(); + different(exp("a", "rob", true, LikeType.STARTS_WITH) + , exp("a", "rob", false, LikeType.STARTS_WITH)); } @Test public void isSameByPlan_when_diffLikeType() { - assertThat(exp("a", "rob", true, LikeType.STARTS_WITH) - .isSameByPlan(exp("a", "rob", true, LikeType.ENDS_WITH))).isFalse(); + different(exp("a", "rob", true, LikeType.STARTS_WITH) + , exp("a", "rob", true, LikeType.ENDS_WITH)); } @Test public void isSameByPlan_when_diffProperty() { - assertThat(exp("a", "rob", true, LikeType.STARTS_WITH) - .isSameByPlan(exp("b", "rob", true, LikeType.STARTS_WITH))).isFalse(); + different(exp("a", "rob", true, LikeType.STARTS_WITH) + , exp("b", "rob", true, LikeType.STARTS_WITH)); } diff --git a/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java index 648a3fcfd..8e2fbea0f 100644 --- a/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/LogicExpressionTest.java @@ -2,65 +2,65 @@ package io.ebeaninternal.server.expression; import io.ebean.Expr; import io.ebean.Expression; -import org.tests.model.basic.Order; import org.junit.Test; +import org.tests.model.basic.Order; import static org.assertj.core.api.Assertions.assertThat; public class LogicExpressionTest extends BaseExpressionTest { - Expression eq(String propName, int value) { + private Expression eq(String propName, int value) { return Expr.eq(propName, value); } - LogicExpression and(Expression a, Expression b) { + private LogicExpression and(Expression a, Expression b) { return new LogicExpression.And(a, b); } - LogicExpression or(Expression a, Expression b) { + private LogicExpression or(Expression a, Expression b) { return new LogicExpression.Or(a, b); } @Test public void isSameByPlan_when_same() { - assertThat(and(eq("a", 10), eq("b", 10)) - .isSameByPlan(and(eq("a", 10), eq("b", 10)))).isTrue(); + same(and(eq("a", 10), eq("b", 10)) + , and(eq("a", 10), eq("b", 10))); } @Test public void isSameByPlan_when_diffBind_then_stillSame() { - assertThat(and(eq("a", 10), eq("b", 10)) - .isSameByPlan(and(eq("a", 20), eq("b", 20)))).isTrue(); + same(and(eq("a", 10), eq("b", 10)) + , and(eq("a", 20), eq("b", 20))); } @Test public void isSameByPlan_when_diffExp1_then_diff() { - assertThat(and(eq("a", 10), eq("b", 10)) - .isSameByPlan(and(eq("c", 10), eq("b", 10)))).isFalse(); + different(and(eq("a", 10), eq("b", 10)) + , and(eq("c", 10), eq("b", 10))); } @Test public void isSameByPlan_when_diffExp2_then_diff() { - assertThat(and(eq("a", 10), eq("b", 10)) - .isSameByPlan(and(eq("a", 10), eq("c", 10)))).isFalse(); + different(and(eq("a", 10), eq("b", 10)) + , and(eq("a", 10), eq("c", 10))); } @Test public void isSameByPlan_when_diffType_then_diff() { - assertThat(or(eq("a", 10), eq("b", 10)) - .isSameByPlan(and(eq("a", 10), eq("c", 10)))).isFalse(); + different(or(eq("a", 10), eq("b", 10)) + , and(eq("a", 10), eq("c", 10))); } @Test public void isSameByPlan_when_diffExpressionType() { - assertThat(or(eq("a", 10), eq("b", 10)) - .isSameByPlan(new NoopExpression())).isFalse(); + different(or(eq("a", 10), eq("b", 10)) + , new NoopExpression()); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java index 0767e4cf5..463d9e2fc 100644 --- a/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/NoopExpressionTest.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.expression; -import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; import org.junit.Test; @@ -10,7 +9,7 @@ import org.tests.model.onetoone.album.Cover; import static org.assertj.core.api.Assertions.assertThat; -public class NoopExpressionTest extends BaseTestCase { +public class NoopExpressionTest extends BaseExpressionTest { @Test public void test() { @@ -55,13 +54,13 @@ public class NoopExpressionTest extends BaseTestCase { @Test public void isSameByPlan_when_same() { - assertThat(new NoopExpression().isSameByPlan(new NoopExpression())).isTrue(); + same(new NoopExpression(), new NoopExpression()); } @Test public void isSameByPlan_when_diffExpressionType() { - assertThat(new NoopExpression().isSameByPlan(null)).isFalse(); + different(new NoopExpression(), null); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java index a1cf6ed85..17ba46220 100644 --- a/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/NotExpressionTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import static io.ebean.Expr.eq; import static org.assertj.core.api.StrictAssertions.assertThat; -public class NotExpressionTest { +public class NotExpressionTest extends BaseExpressionTest { NotExpression not(Expression expression) { @@ -17,29 +17,25 @@ public class NotExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(not(eq("a", 10)) - .isSameByPlan(not(eq("a", 10)))).isTrue(); + same(not(eq("a", 10)), not(eq("a", 10))); } @Test public void isSameByPlan_when_sameByPlan() { - assertThat(not(eq("a", 10)) - .isSameByPlan(not(eq("a", 20)))).isTrue(); + same(not(eq("a", 10)), not(eq("a", 20))); } @Test public void isSameByPlan_when_different() { - assertThat(not(eq("a", 10)) - .isSameByPlan(not(eq("b", 10)))).isFalse(); + different(not(eq("a", 10)), not(eq("b", 10))); } @Test public void isSameByPlan_when_differentExpressionType() { - assertThat(not(eq("a", 10)) - .isSameByPlan(new NoopExpression())).isFalse(); + different(not(eq("a", 10)), new NoopExpression()); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java index 2ad676ad5..01f35797b 100644 --- a/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/NullExpressionTest.java @@ -9,7 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class NullExpressionTest extends BaseExpressionTest { - NullExpression nullExp(String propertyName, boolean notNull) { + private NullExpression nullExp(String propertyName, boolean notNull) { NullExpression expr = new NullExpression(propertyName, notNull); expr.containsMany(getBeanDescriptor(Order.class), new ManyWhereJoins()); return expr; @@ -74,22 +74,22 @@ public class NullExpressionTest extends BaseExpressionTest { @Test public void isSameByPlan_true() throws Exception { - assertThat(nullExp("customer.name", false) - .isSameByPlan(nullExp("customer.name", false))).isTrue(); + same(nullExp("customer.name", false), + nullExp("customer.name", false)); } @Test public void isSameByPlan_false_when_notNullDiff() throws Exception { - assertThat(new NullExpression("customer.name", false) - .isSameByPlan(new NullExpression("customer.name", true))).isFalse(); + different(new NullExpression("customer.name", false), + new NullExpression("customer.name", true)); } @Test public void isSameByPlan_false_when_propertyNameDiff() throws Exception { - assertThat(new NullExpression("customer.startDate", true) - .isSameByPlan(new NullExpression("customer.name", true))).isFalse(); + different(new NullExpression("customer.startDate", true), + new NullExpression("customer.name", true)); } } diff --git a/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java index c45e54125..e6ec2b038 100644 --- a/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java @@ -5,7 +5,7 @@ import org.junit.Test; import static org.assertj.core.api.StrictAssertions.assertThat; -public class RawExpressionTest { +public class RawExpressionTest extends BaseExpressionTest { @NotNull private RawExpression exp(String sql, Object... values) { @@ -14,17 +14,17 @@ public class RawExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", 10).isSameByPlan(exp("a", 10))).isTrue(); + same(exp("a", 10), exp("a", 10)); } @Test public void isSameByPlan_when_diffBindValues() { - assertThat(exp("a", 10).isSameByPlan(exp("a", 20))).isTrue(); + same(exp("a", 10), exp("a", 20)); } @Test public void isSameByPlan_when_diffSql() { - assertThat(exp("a", 10).isSameByPlan(exp("b", 10))).isFalse(); + different(exp("a", 10), exp("b", 10)); } @Test diff --git a/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java b/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java index fe3cf770b..1ce846e45 100644 --- a/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java +++ b/src/test/java/io/ebeaninternal/server/expression/SimpleExpressionTest.java @@ -1,14 +1,12 @@ package io.ebeaninternal.server.expression; -import org.jetbrains.annotations.NotNull; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class SimpleExpressionTest extends BaseExpressionTest { - @NotNull private SimpleExpression exp(String propertyName, Op operator, Object value) { return new SimpleExpression(propertyName, operator, value); } @@ -16,31 +14,31 @@ public class SimpleExpressionTest extends BaseExpressionTest { @Test public void isSameByPlan_when_same() { - assertThat(exp("a", Op.EQ, 10).isSameByPlan(exp("a", Op.EQ, 10))).isTrue(); + same(exp("a", Op.EQ, 10), exp("a", Op.EQ, 10)); } @Test public void isSameByPlan_when_diffBind_same() { - assertThat(exp("a", Op.EQ, 10).isSameByPlan(exp("a", Op.EQ, 20))).isTrue(); + same(exp("a", Op.EQ, 10), exp("a", Op.EQ, 20)); } @Test public void isSameByPlan_when_diffProperty_diff() { - assertThat(exp("a", Op.EQ, 10).isSameByPlan(exp("b", Op.EQ, 10))).isFalse(); + different(exp("a", Op.EQ, 10), exp("b", Op.EQ, 10)); } @Test public void isSameByPlan_when_diffOperator_diff() { - assertThat(exp("a", Op.EQ, 10).isSameByPlan(exp("a", Op.LT, 10))).isFalse(); + different(exp("a", Op.EQ, 10), exp("a", Op.LT, 10)); } @Test public void isSameByPlan_when_diffType_diff() { - assertThat(exp("a", Op.EQ, 10).isSameByPlan(new NoopExpression())).isFalse(); + different(exp("a", Op.EQ, 10), new NoopExpression()); } @Test