From 1b0d7c08b9246b8b4ffec03e3efdec925e4ed034 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 5 Feb 2013 14:06:29 +0100 Subject: [PATCH] [#1626] Explicitly implement hashCode() and equals() in some additional QueryParts --- .../main/java/org/jooq/impl/CatalogImpl.java | 22 ++++++++++++++++++ .../src/main/java/org/jooq/impl/NameImpl.java | 23 +++++++++++++++++++ .../main/java/org/jooq/impl/PackageImpl.java | 17 +++++++++++++- .../java/org/jooq/impl/ParameterImpl.java | 15 +++++++++++- .../main/java/org/jooq/impl/SchemaImpl.java | 8 +++++++ 5 files changed, 83 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java b/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java index 450f648d0d..43c081db60 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java @@ -42,6 +42,7 @@ import org.jooq.BindContext; import org.jooq.Catalog; import org.jooq.RenderContext; import org.jooq.Schema; +import org.jooq.tools.StringUtils; /** * A common base class for database catalogs @@ -97,4 +98,25 @@ public class CatalogImpl extends AbstractQueryPart implements Catalog { public List getSchemas() { return Collections.emptyList(); } + + // ------------------------------------------------------------------------ + // XXX: Object API + // ------------------------------------------------------------------------ + + @Override + public int hashCode() { + return getName() != null ? getName().hashCode() : 0; + } + + @Override + public boolean equals(Object that) { + + // [#1626] CatalogImpl equality can be decided without executing the + // rather expensive implementation of AbstractQueryPart.equals() + if (that instanceof CatalogImpl) { + return StringUtils.equals(getName(), (((CatalogImpl) that).getName())); + } + + return super.equals(that); + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/NameImpl.java b/jOOQ/src/main/java/org/jooq/impl/NameImpl.java index 14801b2fb6..41a93b4b11 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NameImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/NameImpl.java @@ -35,6 +35,8 @@ */ package org.jooq.impl; +import java.util.Arrays; + import org.jooq.BindContext; import org.jooq.Name; import org.jooq.RenderContext; @@ -74,4 +76,25 @@ class NameImpl extends AbstractQueryPart implements Name { public final String[] getName() { return qualifiedName; } + + // ------------------------------------------------------------------------ + // XXX: Object API + // ------------------------------------------------------------------------ + + @Override + public int hashCode() { + return Arrays.hashCode(getName()); + } + + @Override + public boolean equals(Object that) { + + // [#1626] NameImpl equality can be decided without executing the + // rather expensive implementation of AbstractQueryPart.equals() + if (that instanceof NameImpl) { + return Arrays.equals(getName(), (((NameImpl) that).getName())); + } + + return super.equals(that); + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java b/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java index d3038e1571..0c77fced41 100644 --- a/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/PackageImpl.java @@ -40,6 +40,7 @@ import org.jooq.Package; import org.jooq.RenderContext; import org.jooq.SQLDialect; import org.jooq.Schema; +import org.jooq.tools.StringUtils; /** * A default implementation for packages (containers of stored procedures and @@ -93,6 +94,20 @@ public class PackageImpl extends AbstractQueryPart implements Package { // [#1938] This is a much more efficient hashCode() implementation // compared to that of standard QueryParts - return name.hashCode(); + return name != null ? name.hashCode() : 0; + } + + @Override + public boolean equals(Object that) { + + // [#1626] PackageImpl equality can be decided without executing the + // rather expensive implementation of AbstractQueryPart.equals() + if (that instanceof PackageImpl) { + return + StringUtils.equals(schema, ((PackageImpl) that).getSchema()) && + StringUtils.equals(name, ((PackageImpl) that).name); + } + + return super.equals(that); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java index 54ba1d0a16..c0d6b0dae5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParameterImpl.java @@ -41,6 +41,7 @@ import org.jooq.Configuration; import org.jooq.DataType; import org.jooq.Parameter; import org.jooq.RenderContext; +import org.jooq.tools.StringUtils; /** * A common base class for stored procedure parameters @@ -103,6 +104,18 @@ class ParameterImpl extends AbstractQueryPart implements Parameter { // [#1938] This is a much more efficient hashCode() implementation // compared to that of standard QueryParts - return name.hashCode(); + return name != null ? name.hashCode() : 0; + } + + @Override + public boolean equals(Object that) { + + // [#1626] ParameterImpl equality can be decided without executing the + // rather expensive implementation of AbstractQueryPart.equals() + if (that instanceof ParameterImpl) { + return StringUtils.equals(name, ((ParameterImpl) that).name); + } + + return super.equals(that); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java b/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java index 02e1f53e00..1ee2db69f8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java @@ -145,6 +145,14 @@ public class SchemaImpl extends AbstractQueryPart implements Schema { // XXX: Object API // ------------------------------------------------------------------------ + @Override + public int hashCode() { + + // [#1938] This is a much more efficient hashCode() implementation + // compared to that of standard QueryParts + return getName() != null ? getName().hashCode() : 0; + } + @Override public boolean equals(Object that) {