diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/BindHash.java b/ebean-core/src/main/java/io/ebeaninternal/api/BindHash.java index d70c5f09d..b3ad8e49b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/BindHash.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/BindHash.java @@ -1,37 +1,29 @@ package io.ebeaninternal.api; +import java.util.ArrayList; +import java.util.List; + /** * BindHash implementation. - * - * @author Roland Praml, FOCONIS AG - * */ -public interface BindHash { +public class BindHash { - /** - * Update with boolean value. - */ - BindHash update(boolean boolValue); + private final List values = new ArrayList<>(); - /** - * Update with int value. - */ - BindHash update(int intValue); + public BindHash update(Object value) { + values.add(value); + return this; + } - /** - * Update with long value. - */ - BindHash update(long longValue); + @Override + public boolean equals(Object obj) { + return obj instanceof BindHash && ((BindHash) obj).values.equals(values); + } - /** - * Update with object value. - */ - BindHash update(Object value); + @Override + public int hashCode() { + return values.hashCode(); + } - /** - * finishes the hash. May be used to compute internal state. After finish, no - * update method must be called - */ - void finish(); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java b/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java index b3da53833..74e7dfa23 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java @@ -410,7 +410,7 @@ public class BindParams implements Serializable { @Override public int hashCode() { int hc = getClass().hashCode(); -`` hc = hc * 92821 + (isInParam ? 0 : 1); + hc = hc * 92821 + (isInParam ? 0 : 1); hc = hc * 92821 + (isOutParam ? 0 : 1); hc = hc * 92821 + (type); hc = hc * 92821 + (inValue == null ? 0 : inValue.hashCode()); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BindValues.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BindValues.java deleted file mode 100644 index 6d71e8d79..000000000 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BindValues.java +++ /dev/null @@ -1,81 +0,0 @@ -package io.ebeaninternal.server.persist; - -import java.util.ArrayList; - -/** - * Holds a list of bind values for binding to a PreparedStatement. - */ -class BindValues { - - private final ArrayList list = new ArrayList<>(); - - /** - * Create with a Binder. - */ - public BindValues() { - } - - /** - * Add a bind value with its JDBC datatype. - * - * @param value the bind value - * @param dbType the type as per java.sql.Types - */ - public void add(Object value, int dbType, String name) { - list.add(new Value(value, dbType, name)); - } - - /** - * List of bind values. - */ - public ArrayList values() { - return list; - } - - /** - * A Value has additionally the JDBC data type. - */ - public static class Value { - - private final Object value; - - private final int dbType; - - private final String name; - - /** - * Create the value. - */ - Value(Object value, int dbType, String name) { - this.value = value; - this.dbType = dbType; - this.name = name; - } - - /** - * Return the type as per java.sql.Types. - */ - public int getDbType() { - return dbType; - } - - /** - * Return the value. - */ - public Object getValue() { - return value; - } - - /** - * Return the property name. - */ - public String getName() { - return name; - } - - @Override - public String toString() { - return String.valueOf(value); - } - } -} diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java index 1d94d7a81..600a7e21a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java @@ -77,33 +77,6 @@ public class Binder { return asOfStandardsBased; } - /** - * Bind the values to the Prepared Statement. - */ - public void bind(BindValues bindValues, DataBind dataBind, StringBuilder bindBuf) throws SQLException { - String logPrefix = ""; - ArrayList list = bindValues.values(); - for (BindValues.Value bindValue : list) { - Object val = bindValue.getValue(); - int dt = bindValue.getDbType(); - bindObject(dataBind, val, dt); - - if (bindBuf != null) { - bindBuf.append(logPrefix); - if (logPrefix.isEmpty()) { - logPrefix = ", "; - } - bindBuf.append(bindValue.getName()); - bindBuf.append("="); - if (isLob(dt)) { - bindBuf.append("[LOB]"); - } else { - bindBuf.append(val); - } - } - } - } - /** * Bind the parameters to the preparedStatement returning the bind log. */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index e4735e32b..865b3184b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -1244,9 +1244,8 @@ public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { public HashQuery queryHash() { // calculateQueryPlanHash is called just after potential AutoTune tuning // so queryPlanHash is calculated well before this method is called - BindHash hash = new HashCodeBindHash(); + BindHash hash = new BindHash(); queryBindHash(hash); - hash.finish(); return new HashQuery(queryPlanKey, hash); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/HashCodeBindHash.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/HashCodeBindHash.java deleted file mode 100644 index 9bc9c60fc..000000000 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/HashCodeBindHash.java +++ /dev/null @@ -1,63 +0,0 @@ -package io.ebeaninternal.server.querydefn; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import io.ebeaninternal.api.BindHash; - -/** - * HashCode builder that uses Object.hashCode for computing bind-hashes. - * This is a fast and lightweight implementation, but may produce collisions. - * - * @author Roland Praml, FOCONIS AG - */ -public class HashCodeBindHash implements BindHash { - - private final List values = new ArrayList<>(); - private int hashCode; - - @Override - public BindHash update(int intValue) { - values.add(intValue); - hashCode = hashCode * 92821 + intValue; - return this; - } - - @Override - public BindHash update(long longValue) { - values.add(longValue); - hashCode = hashCode * 92821 + Long.hashCode(longValue); - return this; - } - - @Override - public BindHash update(boolean boolValue) { - values.add(boolValue); - hashCode = hashCode * 92821 + Boolean.hashCode(boolValue); - return this; - } - - @Override - public BindHash update(Object value) { - values.add(value); - hashCode = hashCode * 92821 + Objects.hashCode(value); - return this; - } - - @Override - public void finish() { - // nothing to do - } - - @Override - public boolean equals(Object obj) { - return obj instanceof HashCodeBindHash && ((HashCodeBindHash) obj).values.equals(values); - } - - @Override - public int hashCode() { - return hashCode; - } - -} diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java index 6c608472f..99c7d7eec 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/expression/RawExpressionTest.java @@ -4,7 +4,6 @@ import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; import io.ebeaninternal.api.BindHash; -import io.ebeaninternal.server.querydefn.HashCodeBindHash; public class RawExpressionTest extends BaseExpressionTest { @@ -71,9 +70,8 @@ public class RawExpressionTest extends BaseExpressionTest { } private int getHash(RawExpression query) { - BindHash hash = new HashCodeBindHash(); + BindHash hash = new BindHash(); query.queryBindHash(hash); - hash.finish(); return hash.hashCode(); } } diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/HashCodeBindHashTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/BindHashTest.java similarity index 67% rename from ebean-core/src/test/java/io/ebeaninternal/server/querydefn/HashCodeBindHashTest.java rename to ebean-core/src/test/java/io/ebeaninternal/server/querydefn/BindHashTest.java index dea0a2e0c..a74f4432f 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/HashCodeBindHashTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/BindHashTest.java @@ -1,18 +1,19 @@ package io.ebeaninternal.server.querydefn; +import io.ebeaninternal.api.BindHash; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; -public class HashCodeBindHashTest { +public class BindHashTest { @Test public void update_with_null() { - HashCodeBindHash hash = new HashCodeBindHash(); + BindHash hash = new BindHash(); hash.update(1).update(null).update("hello"); - HashCodeBindHash hash2 = new HashCodeBindHash(); + BindHash hash2 = new BindHash(); hash2.update(1).update(null).update("hello"); assertThat(hash).isEqualTo(hash2); @@ -21,13 +22,13 @@ public class HashCodeBindHashTest { @Test public void notEqual() { - HashCodeBindHash hash = new HashCodeBindHash(); + BindHash hash = new BindHash(); hash.update(1).update(null).update("hello"); - HashCodeBindHash hash2 = new HashCodeBindHash(); + BindHash hash2 = new BindHash(); hash2.update(1).update("hello"); - HashCodeBindHash hash3 = new HashCodeBindHash(); + BindHash hash3 = new BindHash(); hash2.update(1).update(null); assertThat(hash).isNotEqualTo(hash2); diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java index cb1738ba8..999459892 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java @@ -113,9 +113,8 @@ public class DefaultOrmQueryTest extends BaseTestCase { } private int getHash(DefaultOrmQuery query) { - BindHash hash = new HashCodeBindHash(); + BindHash hash = new BindHash(); query.queryBindHash(hash); - hash.finish(); return hash.hashCode(); } }