diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java b/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java index eec000f388..cb8242a1ba 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java @@ -97,7 +97,7 @@ abstract class AbstractParam extends AbstractParamX implements SimpleQuery *
  • Otherwise, take the string value of value
  • * */ - static Name name(Object value, String paramName) { + static final Name name(Object value, String paramName) { return DSL.name( paramName != null ? paramName @@ -112,10 +112,21 @@ abstract class AbstractParam extends AbstractParamX implements SimpleQuery - : String.valueOf(value) + : name(value) ); } + private final static String name(Object value) { + + // [#13392] The generated name of a byte[] value shouldn't depend on the + // identity of the value, but on the value itself + if (value instanceof byte[]) { byte[] b = (byte[]) value; + return "b_" + Internal.hash0(Arrays.hashCode(Arrays.copyOf(b, 16))); + } + else + return String.valueOf(value); + } + // ------------------------------------------------------------------------ // XXX: QueryPart API // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/Internal.java b/jOOQ/src/main/java/org/jooq/impl/Internal.java index 30ee49a4e8..950346452d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Internal.java +++ b/jOOQ/src/main/java/org/jooq/impl/Internal.java @@ -615,10 +615,17 @@ public final class Internal { * account FindBugs' RV_ABSOLUTE_VALUE_OF_HASHCODE pattern */ public static final int hash(QueryPart part) { + return hash0(CTX.render(part)); + } + + static final int hash0(Object object) { + if (object == null) + return 0; // [#6025] Prevent unstable alias generation for derived tables due to // inlined bind variables in hashCode() calculation // [#6175] TODO: Speed this up with a faster way to calculate a hash code - return 0x7FFFFFF & CTX.render(part).hashCode(); + else + return 0x7FFFFFF & object.hashCode(); } }