761417898 commented on code in PR #522: URL: https://github.com/apache/tsfile/pull/522#discussion_r2163260126
########## 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; + } + } else { + start_idx = measurement_node->children_[0]->get_offset(); + end_idx = measurement_node->end_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; + } + } + buffer.wrap_from(ti_buf, end_idx - start_idx); + void *buf = pa.alloc(sizeof(TimeseriesIndex)); + ret_timeseries_index = new(buf) TimeseriesIndex; Review Comment: fixed -- 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