#869 - Clash on bind hash value for query cache with consecutive values of "01","20" and "02", "10"

This commit is contained in:
Rob Bygrave
2016-11-07 23:47:29 +13:00
parent 5cf5629232
commit 376cb9ebcb
10 changed files with 12 additions and 13 deletions
@@ -120,9 +120,9 @@ class AllEqualsExpression extends NonPrepareExpression {
@Override
public int queryBindHash() {
int hc = 31;
int hc = 92821;
for (Object value : propMap.values()) {
hc = hc * 31 + (value == null ? 0 : value.hashCode());
hc = hc * 92821 + (value == null ? 0 : value.hashCode());
}
return hc;
@@ -52,7 +52,7 @@ public class ArrayContainsExpression extends AbstractExpression {
public int queryBindHash() {
int hc = values[0].hashCode();
for (int i = 1; i < values.length; i++) {
hc = hc * 31 + values[i].hashCode();
hc = hc * 92821 + values[i].hashCode();
}
return hc;
}
@@ -30,7 +30,7 @@ public class ArrayIsEmptyExpression extends AbstractExpression {
@Override
public int queryBindHash() {
return empty ? 0 : 31;
return empty ? 0 : 92821;
}
@Override
@@ -54,7 +54,7 @@ class BetweenExpression extends AbstractExpression {
@Override
public int queryBindHash() {
int hc = low().hashCode();
hc = hc * 31 + high().hashCode();
hc = hc * 92821 + high().hashCode();
return hc;
}
@@ -230,9 +230,8 @@ public class DefaultExampleExpression implements SpiExpression, ExampleExpressio
public int queryBindHash() {
int hc = DefaultExampleExpression.class.getName().hashCode();
for (int i = 0; i < list.size(); i++) {
hc = hc * 31 + list.get(i).queryBindHash();
hc = hc * 92821 + list.get(i).queryBindHash();
}
return hc;
}
@@ -511,7 +511,7 @@ public class DefaultExpressionList<T> implements SpiExpressionList<T> {
public int queryBindHash() {
int hash = DefaultExpressionList.class.getName().hashCode();
for (int i = 0, size = list.size(); i < size; i++) {
hash = hash * 31 + list.get(i).queryBindHash();
hash = hash * 92821 + list.get(i).queryBindHash();
}
return hash;
}
@@ -119,9 +119,9 @@ class InExpression extends AbstractExpression {
@Override
public int queryBindHash() {
int hc = 31;
int hc = 92821;
for (int i = 0; i < bindValues.length; i++) {
hc = 31 * hc + bindValues[i].hashCode();
hc = 92821 * hc + bindValues[i].hashCode();
}
return hc;
}
@@ -79,7 +79,7 @@ class JsonPathExpression extends AbstractExpression {
@Override
public int queryBindHash() {
int hc = (value == null) ? 0 : value.hashCode();
hc = (upperValue == null) ? hc : hc * 31 + upperValue.hashCode();
hc = (upperValue == null) ? hc : hc * 92821 + upperValue.hashCode();
return hc;
}
@@ -204,7 +204,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
int hc = JunctionExpression.class.getName().hashCode();
List<SpiExpression> list = exprList.internalList();
for (int i = 0; i < list.size(); i++) {
hc = hc * 31 + list.get(i).queryBindHash();
hc = hc * 92821 + list.get(i).queryBindHash();
}
return hc;
}
@@ -146,7 +146,7 @@ abstract class LogicExpression implements SpiExpression {
@Override
public int queryBindHash() {
int hc = expOne.queryBindHash();
hc = hc * 31 + expTwo.queryBindHash();
hc = hc * 92821 + expTwo.queryBindHash();
return hc;
}