in cpp/src/writer/tsfile_writer.cc [706:777]
int TsFileWriter::write_table(Tablet &tablet) {
int ret = E_OK;
if (io_writer_->get_schema()->table_schema_map_.find(
tablet.insert_target_name_) ==
io_writer_->get_schema()->table_schema_map_.end()) {
ret = E_TABLE_NOT_EXIST;
return ret;
}
if (RET_FAIL(do_check_and_prepare_tablet(tablet))) {
return ret;
}
auto device_id_end_index_pairs = split_tablet_by_device(tablet);
int start_idx = 0;
for (auto &device_id_end_index_pair : device_id_end_index_pairs) {
auto device_id = device_id_end_index_pair.first;
int end_idx = device_id_end_index_pair.second;
if (end_idx == 0) continue;
if (table_aligned_) {
SimpleVector<ValueChunkWriter *> value_chunk_writers;
TimeChunkWriter *time_chunk_writer = nullptr;
if (RET_FAIL(do_check_schema_table(device_id, tablet,
time_chunk_writer,
value_chunk_writers))) {
return ret;
}
for (int i = start_idx; i < end_idx; i++) {
time_chunk_writer->write(tablet.timestamps_[i]);
}
uint32_t field_col_count = 0;
for (uint32_t i = 0; i < tablet.get_column_count(); ++i) {
if (tablet.column_categories_[i] ==
common::ColumnCategory::FIELD) {
ValueChunkWriter *value_chunk_writer =
value_chunk_writers[field_col_count];
if (IS_NULL(value_chunk_writer)) {
continue;
}
if (RET_FAIL(value_write_column(value_chunk_writer, tablet,
i, start_idx, end_idx))) {
return ret;
}
field_col_count++;
}
}
start_idx = end_idx;
} else {
MeasurementNamesFromTablet mnames_getter(tablet);
SimpleVector<ChunkWriter *> chunk_writers;
if (RET_FAIL(
do_check_schema(device_id, mnames_getter, chunk_writers))) {
return ret;
}
ASSERT(chunk_writers.size() == tablet.get_column_count());
for (uint32_t c = 0; c < chunk_writers.size(); c++) {
ChunkWriter *chunk_writer = chunk_writers[c];
if (IS_NULL(chunk_writer)) {
continue;
}
if (RET_FAIL(write_column(chunk_writer, tablet, c, start_idx,
device_id_end_index_pair.second))) {
return ret;
}
}
start_idx = device_id_end_index_pair.second;
}
}
record_count_since_last_flush_ += tablet.cur_row_size_;
ret = check_memory_size_and_may_flush_chunks();
return ret;
}