Github user manishgupta88 commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2956#discussion_r236646004
--- Diff:
core/src/main/java/org/apache/carbondata/core/datastore/block/SegmentPropertiesAndSchemaHolder.java
---
@@ -332,13 +334,42 @@ public void clear() {
}
SegmentPropertiesAndSchemaHolder.SegmentPropertiesWrapper other =
(SegmentPropertiesAndSchemaHolder.SegmentPropertiesWrapper) obj;
- return tableIdentifier.equals(other.tableIdentifier) &&
columnsInTable
- .equals(other.columnsInTable) && Arrays
+ return tableIdentifier.equals(other.tableIdentifier) &&
checkColumnSchemaEquality(
+ columnsInTable, other.columnsInTable) && Arrays
.equals(columnCardinality, other.columnCardinality);
}
+ private boolean checkColumnSchemaEquality(List<ColumnSchema> obj1,
List<ColumnSchema> obj2) {
+ List<ColumnSchema> clonedObj1 = new ArrayList<>(obj1);
+ List<ColumnSchema> clonedObj2 = new ArrayList<>(obj2);
+ clonedObj1.addAll(obj1);
+ clonedObj2.addAll(obj2);
+ Collections.sort(clonedObj1, new Comparator<ColumnSchema>() {
+ @Override public int compare(ColumnSchema o1, ColumnSchema o2) {
+ return o1.getColumnUniqueId().compareTo(o2.getColumnUniqueId());
+ }
+ });
+ Collections.sort(clonedObj2, new Comparator<ColumnSchema>() {
+ @Override public int compare(ColumnSchema o1, ColumnSchema o2) {
+ return o1.getColumnUniqueId().compareTo(o2.getColumnUniqueId());
+ }
+ });
+ boolean exists = true;
+ for (int i = 0; i < obj1.size(); i++) {
+ if (!clonedObj1.get(i).equalsWithColumnId(clonedObj2.get(i))) {
+ exists = false;
+ break;
+ }
+ }
+ return exists;
+ }
+
@Override public int hashCode() {
- return tableIdentifier.hashCode() + columnsInTable.hashCode() +
Arrays
+ int hashCode = 0;
+ for (ColumnSchema columnSchema: columnsInTable) {
+ hashCode += columnSchema.hashCodeWithColumnId();
--- End diff --
rename variable name to `allColumnsHashCode`
---