diff --git a/jOOQ/src/main/java/org/jooq/Name.java b/jOOQ/src/main/java/org/jooq/Name.java index 62fe453512..e05c4b1ab9 100644 --- a/jOOQ/src/main/java/org/jooq/Name.java +++ b/jOOQ/src/main/java/org/jooq/Name.java @@ -427,4 +427,15 @@ public interface Name extends QueryPart { DerivedColumnList22 fields(String fieldName1, String fieldName2, String fieldName3, String fieldName4, String fieldName5, String fieldName6, String fieldName7, String fieldName8, String fieldName9, String fieldName10, String fieldName11, String fieldName12, String fieldName13, String fieldName14, String fieldName15, String fieldName16, String fieldName17, String fieldName18, String fieldName19, String fieldName20, String fieldName21, String fieldName22); // [jooq-tools] END [fields] + + /** + * {@inheritDoc} + */ + @Override + boolean equals(Object other); + + /** + * Compare this name with another one ignoring case. + */ + boolean equalsIgnoreCase(Name other); } diff --git a/jOOQ/src/main/java/org/jooq/impl/NameImpl.java b/jOOQ/src/main/java/org/jooq/impl/NameImpl.java index e703c2165e..2aaec37a69 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NameImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/NameImpl.java @@ -317,16 +317,39 @@ final class NameImpl extends AbstractQueryPart implements Name { @Override public boolean equals(Object that) { - if (this == that) { + if (this == that) return true; - } // [#1626] NameImpl equality can be decided without executing the // rather expensive implementation of AbstractQueryPart.equals() - if (that instanceof NameImpl) { + if (that instanceof NameImpl) return Arrays.equals(getName(), (((NameImpl) that).getName())); - } return super.equals(that); } + + @Override + public final boolean equalsIgnoreCase(Name that) { + if (this == that) + return true; + + String[] thisName = getName(); + String[] thatName = that.getName(); + + if (thisName.length != thatName.length) + return false; + + for (int i = 0; i < thisName.length; i++) { + if (thisName[i] == null && thatName[i] == null) + continue; + + if (thisName[i] == null || thatName[i] == null) + return false; + + if (!thisName[i].equalsIgnoreCase(thatName[i])) + return false; + } + + return true; + } }