From 86bc2b5dc87d1c7b98b9e96f574a1cddd00dd117 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 20 Mar 2013 20:04:28 +0100 Subject: [PATCH] [#2347] Let equals() implementations succeed early on identity --- .../src/main/java/org/jooq/util/AbstractDefinition.java | 3 +++ .../main/java/org/jooq/util/DefaultDataTypeDefinition.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/AbstractField.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/AbstractQueryPart.java | 5 ++++- jOOQ/src/main/java/org/jooq/impl/AbstractStore.java | 5 ++++- jOOQ/src/main/java/org/jooq/impl/AbstractTable.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/IdentityImpl.java | 4 ++++ jOOQ/src/main/java/org/jooq/impl/NameImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/PackageImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/ResultImpl.java | 4 ++++ jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/TableImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/Value.java | 6 +++++- jOOQ/src/main/java/org/jooq/types/ULong.java | 2 ++ jOOQ/src/main/java/org/jooq/types/UShort.java | 2 ++ 18 files changed, 58 insertions(+), 3 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDefinition.java index fb750b06cb..1e670358d5 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDefinition.java @@ -191,6 +191,9 @@ public abstract class AbstractDefinition implements Definition { @Override public final boolean equals(Object obj) { + if (this == obj) + return true; + if (obj instanceof Definition) { Definition that = (Definition) obj; return that.getQualifiedName().equals(getQualifiedName()); diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java index bafd0b4053..dc8f0ae8a2 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java @@ -152,6 +152,9 @@ public class DefaultDataTypeDefinition implements DataTypeDefinition { @Override public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj instanceof DefaultDataTypeDefinition) { DefaultDataTypeDefinition other = (DefaultDataTypeDefinition) obj; diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index 123c506a4b..9567fa727d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -1605,6 +1605,9 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#2144] Non-equality can be decided early, without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractQueryPart.java b/jOOQ/src/main/java/org/jooq/impl/AbstractQueryPart.java index 52e7c5ac08..83467f6adb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractQueryPart.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractQueryPart.java @@ -85,9 +85,12 @@ abstract class AbstractQueryPart implements QueryPartInternal { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } + // This is a working default implementation. It should be overridden by // concrete subclasses, to improve performance - if (that instanceof QueryPart) { String sql1 = create().renderInlined(this); String sql2 = create().renderInlined((QueryPart) that); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java b/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java index db6ca44928..9ae526eeac 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java @@ -138,8 +138,11 @@ abstract class AbstractStore implements AttachableInternal { @Override public boolean equals(Object obj) { - // Note: keep this implementation in-sync with AbstractRecord.compareTo()! + if (this == obj) { + return true; + } + // Note: keep this implementation in-sync with AbstractRecord.compareTo()! if (obj instanceof AbstractStore) { final AbstractStore that = (AbstractStore) obj; diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index 345aea5d98..682c3ba6c9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -445,6 +445,9 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#2144] Non-equality can be decided early, without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java b/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java index 43c081db60..21e37b18ab 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java @@ -110,6 +110,9 @@ public class CatalogImpl extends AbstractQueryPart implements Catalog { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#1626] CatalogImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/IdentityImpl.java b/jOOQ/src/main/java/org/jooq/impl/IdentityImpl.java index 80edd3e2aa..11d5a89168 100644 --- a/jOOQ/src/main/java/org/jooq/impl/IdentityImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/IdentityImpl.java @@ -75,6 +75,10 @@ class IdentityImpl implements Identity { @Override public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof Identity) { return toString().equals(obj.toString()); } diff --git a/jOOQ/src/main/java/org/jooq/impl/NameImpl.java b/jOOQ/src/main/java/org/jooq/impl/NameImpl.java index 41a93b4b11..265f1d9727 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NameImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/NameImpl.java @@ -88,6 +88,9 @@ class NameImpl extends AbstractQueryPart implements Name { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#1626] NameImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java b/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java index 0c77fced41..b7ae1bc71f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java @@ -99,6 +99,9 @@ public class PackageImpl extends AbstractQueryPart implements Package { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#1626] PackageImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java index c0d6b0dae5..63913eb432 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java @@ -109,6 +109,9 @@ class ParameterImpl extends AbstractQueryPart implements Parameter { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#1626] ParameterImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index 13007140c1..d2388f20b9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -1191,6 +1191,10 @@ class ResultImpl implements Result, AttachableInternal { @SuppressWarnings("unchecked") @Override public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof ResultImpl) { ResultImpl other = (ResultImpl) obj; return records.equals(other.records); diff --git a/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java b/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java index 1ee2db69f8..18a0fd43ec 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java @@ -155,6 +155,9 @@ public class SchemaImpl extends AbstractQueryPart implements Schema { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#2144] SchemaImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java index 8e817912e7..89cc0c36fc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java @@ -90,6 +90,9 @@ class TableFieldImpl extends AbstractField implements Ta @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#2144] TableFieldImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java index 493fefb9ba..773cfd38c8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java @@ -180,6 +180,9 @@ public class TableImpl extends AbstractTable { @Override public boolean equals(Object that) { + if (this == that) { + return true; + } // [#2144] TableImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() diff --git a/jOOQ/src/main/java/org/jooq/impl/Value.java b/jOOQ/src/main/java/org/jooq/impl/Value.java index e99f4a97b6..1f20b45f5a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Value.java +++ b/jOOQ/src/main/java/org/jooq/impl/Value.java @@ -69,7 +69,7 @@ class Value implements Serializable { @SuppressWarnings("unchecked") final void intern() { - + // [#2177] Future versions of jOOQ may optimise this type check by // performing type-decisions outside of Value if (value instanceof String) { @@ -135,6 +135,10 @@ class Value implements Serializable { @Override public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof Value) { Value other = (Value) obj; diff --git a/jOOQ/src/main/java/org/jooq/types/ULong.java b/jOOQ/src/main/java/org/jooq/types/ULong.java index 6ee1653d31..ddda7c4294 100644 --- a/jOOQ/src/main/java/org/jooq/types/ULong.java +++ b/jOOQ/src/main/java/org/jooq/types/ULong.java @@ -170,6 +170,8 @@ public final class ULong extends UNumber implements Comparable { @Override public boolean equals(Object obj) { + if (this == obj) + return true; if (obj instanceof ULong) { return value.equals(((ULong) obj).value); } diff --git a/jOOQ/src/main/java/org/jooq/types/UShort.java b/jOOQ/src/main/java/org/jooq/types/UShort.java index bda8a8160a..e6e8438266 100644 --- a/jOOQ/src/main/java/org/jooq/types/UShort.java +++ b/jOOQ/src/main/java/org/jooq/types/UShort.java @@ -157,6 +157,8 @@ public final class UShort extends UNumber implements Comparable { @Override public boolean equals(Object obj) { + if (this == obj) + return true; if (obj instanceof UShort) { return value == ((UShort) obj).value; }