Repository: carbondata Updated Branches: refs/heads/master 7cba44b90 -> 33941281e
[CARBONDATA-2493] DataType.equals() failes for complex types This closes #2319 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/33941281 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/33941281 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/33941281 Branch: refs/heads/master Commit: 33941281ea3b0e9a3c623179642dd1f41b263551 Parents: 7cba44b Author: ajantha-bhat <[email protected]> Authored: Fri May 18 13:21:33 2018 +0530 Committer: Venkata Ramana G <[email protected]> Committed: Mon May 21 23:54:08 2018 +0530 ---------------------------------------------------------------------- .../core/metadata/datatype/ArrayType.java | 10 ++++- .../core/metadata/datatype/DataType.java | 24 ++++++++++++ .../core/metadata/datatype/DecimalType.java | 11 ++++-- .../core/metadata/datatype/MapType.java | 34 +++++++++++++++++ .../core/metadata/datatype/StructField.java | 40 ++++++++++++++++++++ .../core/metadata/datatype/StructType.java | 9 ++++- 6 files changed, 120 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/33941281/core/src/main/java/org/apache/carbondata/core/metadata/datatype/ArrayType.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/ArrayType.java b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/ArrayType.java index 94a4e89..9dea241 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/ArrayType.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/ArrayType.java @@ -39,10 +39,14 @@ public class ArrayType extends DataType { if (obj == null) { return false; } - if (!(obj instanceof ArrayType)) { + if (getClass() != obj.getClass()) { return false; } - if (!this.getName().equalsIgnoreCase(((ArrayType) obj).getName())) { + ArrayType other = (ArrayType) obj; + if (!this.getName().equalsIgnoreCase(other.getName())) { + return false; + } + if (!this.getElementType().equals(other.getElementType())) { return false; } return true; @@ -53,10 +57,12 @@ public class ArrayType extends DataType { final int prime = 31; int result = 1; result = prime * result + getName().hashCode(); + result = prime * result + getElementType().hashCode(); return result; } public DataType getElementType() { return elementType; } + } http://git-wip-us.apache.org/repos/asf/carbondata/blob/33941281/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DataType.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DataType.java b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DataType.java index 8e08436..d71f984 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DataType.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DataType.java @@ -115,4 +115,28 @@ public class DataType implements Serializable { } } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getName().hashCode(); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + if (!this.getName().equalsIgnoreCase(((DataType) obj).getName())) { + return false; + } + return true; + } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/33941281/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DecimalType.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DecimalType.java b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DecimalType.java index 8536222..a7f7a4e 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DecimalType.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/DecimalType.java @@ -37,16 +37,17 @@ public class DecimalType extends DataType { if (obj == null) { return false; } - if (!(obj instanceof DecimalType)) { + if (getClass() != obj.getClass()) { return false; } - if (!this.getName().equalsIgnoreCase(((DecimalType) obj).getName())) { + DecimalType other = (DecimalType)obj; + if (!this.getName().equalsIgnoreCase(other.getName())) { return false; } - if (this.precision != ((DecimalType) obj).precision) { + if (this.precision != other.precision) { return false; } - if (this.scale != ((DecimalType) obj).scale) { + if (this.scale != other.scale) { return false; } return true; @@ -57,6 +58,8 @@ public class DecimalType extends DataType { final int prime = 31; int result = 1; result = prime * result + getName().hashCode(); + result = prime * result + getPrecision(); + result = prime * result + getScale(); return result; } http://git-wip-us.apache.org/repos/asf/carbondata/blob/33941281/core/src/main/java/org/apache/carbondata/core/metadata/datatype/MapType.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/MapType.java b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/MapType.java index 69d49b8..47e536a 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/MapType.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/MapType.java @@ -32,4 +32,38 @@ public class MapType extends DataType { public boolean isComplexType() { return true; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + MapType other = (MapType) obj; + if (!this.getName().equalsIgnoreCase(other.getName())) { + return false; + } + if (!this.keyType.equals(other.keyType)) { + return false; + } + if (!this.valueType.equals(other.valueType)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getName().hashCode(); + result = prime * result + keyType.hashCode(); + result = prime * result + valueType.hashCode(); + return result; + } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/33941281/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructField.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructField.java b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructField.java index bfca057..c076f69 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructField.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructField.java @@ -54,4 +54,44 @@ public class StructField implements Serializable { public List<StructField> getChildren() { return children; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + fieldName.hashCode(); + result = prime * result + dataType.hashCode(); + result = prime * result + ((children == null) ? 0 : children.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + StructField other = (StructField) obj; + if (!this.fieldName.equalsIgnoreCase(other.fieldName)) { + return false; + } + if (!this.dataType.equals(other.dataType)) { + return false; + } + if (children == null) { + if (other.children != null) { + return false; + } + } else if (other.children == null) { + return false; + } else if (!children.equals(other.children)) { + return false; + } + return true; + } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/33941281/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructType.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructType.java b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructType.java index 90b7374..e8559b2 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructType.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/datatype/StructType.java @@ -41,10 +41,14 @@ public class StructType extends DataType { if (obj == null) { return false; } - if (!(obj instanceof StructType)) { + if (getClass() != obj.getClass()) { return false; } - if (!this.getName().equalsIgnoreCase(((StructType) obj).getName())) { + StructType other = (StructType) obj; + if (!this.getName().equalsIgnoreCase(other.getName())) { + return false; + } + if (!this.getFields().equals(other.getFields())) { return false; } return true; @@ -55,6 +59,7 @@ public class StructType extends DataType { final int prime = 31; int result = 1; result = prime * result + getName().hashCode(); + result = prime * result + getFields().hashCode(); return result; }
