Fix date type is not correctly cast during sorting a Tablet
diff --git a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
index a552002..f50260c 100644
--- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -78,6 +78,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -3295,13 +3296,19 @@
         }
         return sortedValues;
       case INT32:
-      case DATE:
         int[] intValues = (int[]) valueList;
         int[] sortedIntValues = new int[intValues.length];
         for (int i = 0; i < index.length; i++) {
           sortedIntValues[i] = intValues[index[i]];
         }
         return sortedIntValues;
+      case DATE:
+        LocalDate[] dateValues = (LocalDate[]) valueList;
+        LocalDate[] sortedDateValues = new LocalDate[dateValues.length];
+        for (int i = 0; i < index.length; i++) {
+          sortedDateValues[i] = dateValues[index[i]];
+        }
+        return sortedDateValues;
       case INT64:
       case TIMESTAMP:
         long[] longValues = (long[]) valueList;
diff --git a/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java b/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java
index 689ebab..53f582d 100644
--- a/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java
+++ b/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java
@@ -21,10 +21,13 @@
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.junit.Test;
 
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -36,6 +39,16 @@
     Session session = new Session("127.0.0.1", 1234);
     List<MeasurementSchema> schemaList = new ArrayList<>();
     schemaList.add(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
+    schemaList.add(new MeasurementSchema("s2", TSDataType.TIMESTAMP));
+    schemaList.add(new MeasurementSchema("s3", TSDataType.INT32));
+    schemaList.add(new MeasurementSchema("s4", TSDataType.DATE));
+    schemaList.add(new MeasurementSchema("s5", TSDataType.BOOLEAN));
+    schemaList.add(new MeasurementSchema("s6", TSDataType.DOUBLE));
+    schemaList.add(new MeasurementSchema("s7", TSDataType.BLOB));
+    schemaList.add(new MeasurementSchema("s8", TSDataType.TEXT));
+    schemaList.add(new MeasurementSchema("s9", TSDataType.STRING));
+    ;
+
     // insert three rows data
     Tablet tablet = new Tablet("root.sg1.d1", schemaList, 3);
     long[] timestamps = tablet.timestamps;
@@ -52,11 +65,32 @@
     timestamps[0] = 2;
     timestamps[1] = 0;
     timestamps[2] = 1;
-    // just one column INT64 data
-    long[] sensor = (long[]) values[0];
-    sensor[0] = 0;
-    sensor[1] = 1;
-    sensor[2] = 2;
+    values[0] = new long[] {0, 1, 2};
+    values[1] = new long[] {0, 1, 2};
+    values[2] = new int[] {0, 1, 2};
+    values[3] =
+        new LocalDate[] {LocalDate.ofEpochDay(0), LocalDate.ofEpochDay(1), LocalDate.ofEpochDay(2)};
+    values[4] = new boolean[] {true, false, true};
+    values[5] = new double[] {0.0, 1.0, 2.0};
+    values[6] =
+        new Binary[] {
+          new Binary("0".getBytes(StandardCharsets.UTF_8)),
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8))
+        };
+    values[7] =
+        new Binary[] {
+          new Binary("0".getBytes(StandardCharsets.UTF_8)),
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8))
+        };
+    values[8] =
+        new Binary[] {
+          new Binary("0".getBytes(StandardCharsets.UTF_8)),
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8))
+        };
+
     tablet.rowSize = 3;
 
     session.sortTablet(tablet);
@@ -72,10 +106,36 @@
     If the data equal to above tablet, test pass, otherwise test fialed
      */
     long[] resTimestamps = tablet.timestamps;
-    long[] resValues = (long[]) tablet.values[0];
     long[] expectedTimestamps = new long[] {0, 1, 2};
-    long[] expectedValues = new long[] {1, 2, 0};
     assertArrayEquals(expectedTimestamps, resTimestamps);
-    assertArrayEquals(expectedValues, resValues);
+    assertArrayEquals(new long[] {1, 2, 0}, ((long[]) tablet.values[0]));
+    assertArrayEquals(new long[] {1, 2, 0}, ((long[]) tablet.values[1]));
+    assertArrayEquals(new int[] {1, 2, 0}, ((int[]) tablet.values[2]));
+    assertArrayEquals(
+        new LocalDate[] {LocalDate.ofEpochDay(1), LocalDate.ofEpochDay(2), LocalDate.ofEpochDay(0)},
+        ((LocalDate[]) tablet.values[3]));
+    assertArrayEquals(new boolean[] {false, true, true}, ((boolean[]) tablet.values[4]));
+    assertArrayEquals(new double[] {1.0, 2.0, 0.0}, ((double[]) tablet.values[5]), 0.001);
+    assertArrayEquals(
+        new Binary[] {
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8)),
+          new Binary("0".getBytes(StandardCharsets.UTF_8))
+        },
+        ((Binary[]) tablet.values[6]));
+    assertArrayEquals(
+        new Binary[] {
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8)),
+          new Binary("0".getBytes(StandardCharsets.UTF_8))
+        },
+        ((Binary[]) tablet.values[7]));
+    assertArrayEquals(
+        new Binary[] {
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8)),
+          new Binary("0".getBytes(StandardCharsets.UTF_8))
+        },
+        ((Binary[]) tablet.values[8]));
   }
 }