761417898 commented on code in PR #522:
URL: https://github.com/apache/tsfile/pull/522#discussion_r2163283090


##########
cpp/src/file/tsfile_io_reader.cc:
##########
@@ -478,36 +521,97 @@ int TsFileIOReader::search_from_internal_node(
     if (RET_FAIL(read_file_->read(index_entry->get_offset(), data_buf, 
read_size,
                                   ret_read_len))) {
     } else if (read_size != ret_read_len) {
-      ret = E_TSFILE_CORRUPTED;
-    } else if (RET_FAIL(cur_level_index_node->device_deserialize_from(
-        data_buf, read_size))) {
+      return E_TSFILE_CORRUPTED;
+    }
+    if (!is_device) {
+        ret = cur_level_index_node->deserialize_from(data_buf, read_size);
     } else {
-      if (cur_level_index_node->node_type_ == LEAF_DEVICE) {
+        ret = cur_level_index_node->device_deserialize_from(data_buf, 
read_size);
+    }
+    if (ret != E_OK) {
+        return ret;
+    }
+    if (cur_level_index_node->node_type_ == LEAF_DEVICE) {
         ret = cur_level_index_node->binary_search_children(
             target_name, /*exact=*/true, ret_index_entry,
             ret_end_offset);
         cur_level_index_node->destroy();
         return ret; //// FIXME
-      } else if (cur_level_index_node->node_type_ == LEAF_MEASUREMENT) {
+    } else if (cur_level_index_node->node_type_ == LEAF_MEASUREMENT) {
         ret = cur_level_index_node->binary_search_children(
             target_name, /*exact=*/false, ret_index_entry,
             ret_end_offset);
         cur_level_index_node->destroy();
         return ret; //// FIXME
-      } else {
+    } else {
         ret = cur_level_index_node->binary_search_children(
             target_name, /*exact=*/false, index_entry, end_offset);
         cur_level_index_node->destroy();
-      }
     }
   }
   return ret;
 }
 
+bool TsFileIOReader::is_aligned_device(std::shared_ptr<MetaIndexNode> 
measurement_node) {
+    auto entry = measurement_node->children_[0];
+    return entry->get_name().is_null() || entry->get_name().to_std_string() == 
"";
+}
+
+int TsFileIOReader::get_time_column_metadata(
+    std::shared_ptr<MetaIndexNode> measurement_node,
+    TimeseriesIndex*& ret_timeseries_index, PageArena& pa) {
+    int ret = E_OK;
+    if (!is_aligned_device(measurement_node)) {
+        return ret;
+    }
+    char* ti_buf = nullptr;
+    int start_idx = 0, end_idx = 0;
+    int ret_read_len = 0;
+    if (measurement_node->node_type_ == LEAF_MEASUREMENT) {
+        ByteStream buffer;
+        if (measurement_node->children_.size() > 1) {
+            start_idx = measurement_node->children_[0]->get_offset();
+            end_idx = measurement_node->children_[1]->get_offset();
+            ti_buf = pa.alloc(end_idx - start_idx);
+            if (RET_FAIL(
+                read_file_->read(start_idx, ti_buf, end_idx - start_idx,
+                    ret_read_len))) {
+                return ret;
+            }

Review Comment:
   The memory is automatically freed when PageArena's destructor runs. If ret 
fails, the PageArena's owner ensures to destroy it.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@tsfile.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to