You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2022/08/23 06:12:25 UTC

[iotdb] 01/02: init

This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch aligned_flush
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 1724273db49954ad1f5dc233fbdfaffc99c6c5a2
Author: HTHou <hh...@outlook.com>
AuthorDate: Tue Aug 9 09:25:24 2022 +0800

    init
---
 .../engine/memtable/AlignedWritableMemChunk.java   | 128 +++++++++++----------
 1 file changed, 69 insertions(+), 59 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
index dbcbc5c207..5796c87845 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
@@ -24,6 +24,8 @@ import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.utils.WALWriteUtils;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.BitMap;
 import org.apache.iotdb.tsfile.utils.Pair;
@@ -295,66 +297,74 @@ public class AlignedWritableMemChunk implements IWritableMemChunk {
   @Override
   public void encode(IChunkWriter chunkWriter) {
     AlignedChunkWriterImpl alignedChunkWriter = (AlignedChunkWriterImpl) chunkWriter;
-    List<Integer> timeDuplicateAlignedRowIndexList = null;
-    for (int sortedRowIndex = 0; sortedRowIndex < list.rowCount(); sortedRowIndex++) {
-      long time = list.getTime(sortedRowIndex);
-
-      // skip duplicated data
-      if ((sortedRowIndex + 1 < list.rowCount() && (time == list.getTime(sortedRowIndex + 1)))) {
-        // record the time duplicated row index list for vector type
-        if (timeDuplicateAlignedRowIndexList == null) {
-          timeDuplicateAlignedRowIndexList = new ArrayList<>();
-          timeDuplicateAlignedRowIndexList.add(list.getValueIndex(sortedRowIndex));
-        }
-        timeDuplicateAlignedRowIndexList.add(list.getValueIndex(sortedRowIndex + 1));
-        continue;
-      }
-      List<TSDataType> dataTypes = list.getTsDataTypes();
-      int originRowIndex = list.getValueIndex(sortedRowIndex);
-      for (int columnIndex = 0; columnIndex < dataTypes.size(); columnIndex++) {
-        // write the time duplicated rows
-        if (timeDuplicateAlignedRowIndexList != null
-            && !timeDuplicateAlignedRowIndexList.isEmpty()) {
-          originRowIndex =
-              list.getValidRowIndexForTimeDuplicatedRows(
-                  timeDuplicateAlignedRowIndexList, columnIndex);
-        }
-        boolean isNull = list.isNullValue(originRowIndex, columnIndex);
-        switch (dataTypes.get(columnIndex)) {
-          case BOOLEAN:
-            alignedChunkWriter.write(
-                time, list.getBooleanByValueIndex(originRowIndex, columnIndex), isNull);
-            break;
-          case INT32:
-            alignedChunkWriter.write(
-                time, list.getIntByValueIndex(originRowIndex, columnIndex), isNull);
-            break;
-          case INT64:
-            alignedChunkWriter.write(
-                time, list.getLongByValueIndex(originRowIndex, columnIndex), isNull);
-            break;
-          case FLOAT:
-            alignedChunkWriter.write(
-                time, list.getFloatByValueIndex(originRowIndex, columnIndex), isNull);
-            break;
-          case DOUBLE:
-            alignedChunkWriter.write(
-                time, list.getDoubleByValueIndex(originRowIndex, columnIndex), isNull);
-            break;
-          case TEXT:
-            alignedChunkWriter.write(
-                time, list.getBinaryByValueIndex(originRowIndex, columnIndex), isNull);
-            break;
-          default:
-            LOGGER.error(
-                "AlignedWritableMemChunk does not support data type: {}",
-                dataTypes.get(columnIndex));
-            break;
-        }
-      }
-      alignedChunkWriter.write(time);
-      timeDuplicateAlignedRowIndexList = null;
+    List<TSEncoding> encodingList = new ArrayList<>();
+    for (TSDataType e : list.getTsDataTypes()) {
+      encodingList.add(TSEncoding.PLAIN);
     }
+    TsBlock tsBlock = list.buildTsBlock(0, encodingList, null);
+    alignedChunkWriter.write(
+        tsBlock.getTimeColumn(), tsBlock.getValueColumns(), tsBlock.getPositionCount());
+    //    List<Integer> timeDuplicateAlignedRowIndexList = null;
+    //    for (int sortedRowIndex = 0; sortedRowIndex < list.rowCount(); sortedRowIndex++) {
+    //      long time = list.getTime(sortedRowIndex);
+    //
+    //      // skip duplicated data
+    //      if ((sortedRowIndex + 1 < list.rowCount() && (time == list.getTime(sortedRowIndex +
+    // 1)))) {
+    //        // record the time duplicated row index list for vector type
+    //        if (timeDuplicateAlignedRowIndexList == null) {
+    //          timeDuplicateAlignedRowIndexList = new ArrayList<>();
+    //          timeDuplicateAlignedRowIndexList.add(list.getValueIndex(sortedRowIndex));
+    //        }
+    //        timeDuplicateAlignedRowIndexList.add(list.getValueIndex(sortedRowIndex + 1));
+    //        continue;
+    //      }
+    //      List<TSDataType> dataTypes = list.getTsDataTypes();
+    //      int originRowIndex = list.getValueIndex(sortedRowIndex);
+    //      for (int columnIndex = 0; columnIndex < dataTypes.size(); columnIndex++) {
+    //        // write the time duplicated rows
+    //        if (timeDuplicateAlignedRowIndexList != null
+    //            && !timeDuplicateAlignedRowIndexList.isEmpty()) {
+    //          originRowIndex =
+    //              list.getValidRowIndexForTimeDuplicatedRows(
+    //                  timeDuplicateAlignedRowIndexList, columnIndex);
+    //        }
+    //        boolean isNull = list.isNullValue(originRowIndex, columnIndex);
+    //        switch (dataTypes.get(columnIndex)) {
+    //          case BOOLEAN:
+    //            alignedChunkWriter.write(
+    //                time, list.getBooleanByValueIndex(originRowIndex, columnIndex), isNull);
+    //            break;
+    //          case INT32:
+    //            alignedChunkWriter.write(
+    //                time, list.getIntByValueIndex(originRowIndex, columnIndex), isNull);
+    //            break;
+    //          case INT64:
+    //            alignedChunkWriter.write(
+    //                time, list.getLongByValueIndex(originRowIndex, columnIndex), isNull);
+    //            break;
+    //          case FLOAT:
+    //            alignedChunkWriter.write(
+    //                time, list.getFloatByValueIndex(originRowIndex, columnIndex), isNull);
+    //            break;
+    //          case DOUBLE:
+    //            alignedChunkWriter.write(
+    //                time, list.getDoubleByValueIndex(originRowIndex, columnIndex), isNull);
+    //            break;
+    //          case TEXT:
+    //            alignedChunkWriter.write(
+    //                time, list.getBinaryByValueIndex(originRowIndex, columnIndex), isNull);
+    //            break;
+    //          default:
+    //            LOGGER.error(
+    //                "AlignedWritableMemChunk does not support data type: {}",
+    //                dataTypes.get(columnIndex));
+    //            break;
+    //        }
+    //      }
+    //      alignedChunkWriter.write(time);
+    //      timeDuplicateAlignedRowIndexList = null;
+    //    }
   }
 
   @Override