in java/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java [957:1100]
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || !getClass().equals(o.getClass())) {
return false;
}
Tablet that = (Tablet) o;
boolean flag =
that.rowSize == rowSize
&& Objects.equals(that.insertTargetName, insertTargetName)
&& Objects.equals(that.schemas, schemas)
&& Objects.equals(that.columnCategories, columnCategories)
&& Objects.equals(that.measurementIndex, measurementIndex);
if (!flag) {
return false;
}
// assert timestamps and bitmaps
int columns = (schemas == null ? 0 : schemas.size());
if (!isTimestampsEqual(this.timestamps, that.timestamps, rowSize)
|| !isBitMapsEqual(this.bitMaps, that.bitMaps, columns)) {
return false;
}
// assert values
Object[] thatValues = that.values;
if (thatValues == values) {
return true;
}
if (thatValues == null || values == null) {
return false;
}
if (thatValues.length != values.length) {
return false;
}
for (int i = 0, n = values.length; i < n; i++) {
if (thatValues[i] == values[i]) {
continue;
}
if (thatValues[i] == null || values[i] == null) {
return false;
}
if (!thatValues[i].getClass().equals(values[i].getClass())) {
return false;
}
switch (schemas.get(i).getType()) {
case INT32:
int[] thisIntValues = (int[]) values[i];
int[] thatIntValues = (int[]) thatValues[i];
if (thisIntValues.length < rowSize || thatIntValues.length < rowSize) {
return false;
}
for (int j = 0; j < rowSize; j++) {
if (thisIntValues[j] != thatIntValues[j]) {
return false;
}
}
break;
case DATE:
LocalDate[] thisDateValues = (LocalDate[]) values[i];
LocalDate[] thatDateValues = (LocalDate[]) thatValues[i];
if (thisDateValues.length < rowSize || thatDateValues.length < rowSize) {
return false;
}
for (int j = 0; j < rowSize; j++) {
if (!thisDateValues[j].equals(thatDateValues[j])) {
return false;
}
}
break;
case INT64:
case TIMESTAMP:
long[] thisLongValues = (long[]) values[i];
long[] thatLongValues = (long[]) thatValues[i];
if (thisLongValues.length < rowSize || thatLongValues.length < rowSize) {
return false;
}
for (int j = 0; j < rowSize; j++) {
if (thisLongValues[j] != thatLongValues[j]) {
return false;
}
}
break;
case FLOAT:
float[] thisFloatValues = (float[]) values[i];
float[] thatFloatValues = (float[]) thatValues[i];
if (thisFloatValues.length < rowSize || thatFloatValues.length < rowSize) {
return false;
}
for (int j = 0; j < rowSize; j++) {
if (thisFloatValues[j] != thatFloatValues[j]) {
return false;
}
}
break;
case DOUBLE:
double[] thisDoubleValues = (double[]) values[i];
double[] thatDoubleValues = (double[]) thatValues[i];
if (thisDoubleValues.length < rowSize || thatDoubleValues.length < rowSize) {
return false;
}
for (int j = 0; j < rowSize; j++) {
if (thisDoubleValues[j] != thatDoubleValues[j]) {
return false;
}
}
break;
case BOOLEAN:
boolean[] thisBooleanValues = (boolean[]) values[i];
boolean[] thatBooleanValues = (boolean[]) thatValues[i];
if (thisBooleanValues.length < rowSize || thatBooleanValues.length < rowSize) {
return false;
}
for (int j = 0; j < rowSize; j++) {
if (thisBooleanValues[j] != thatBooleanValues[j]) {
return false;
}
}
break;
case TEXT:
case STRING:
case BLOB:
Binary[] thisBinaryValues = (Binary[]) values[i];
Binary[] thatBinaryValues = (Binary[]) thatValues[i];
if (thisBinaryValues.length < rowSize || thatBinaryValues.length < rowSize) {
return false;
}
for (int j = 0; j < rowSize; j++) {
if (!thisBinaryValues[j].equals(thatBinaryValues[j])) {
return false;
}
}
break;
default:
throw new UnSupportedDataTypeException(
String.format("Data type %s is not supported.", schemas.get(i).getType()));
}
}
return true;
}