Skip to content
This repository was archived by the owner on May 9, 2024. It is now read-only.

Commit 1ca3597

Browse files
akroviakovkurapov-peter
authored andcommitted
make TableFragmentsInfo part of TableData
1 parent a49ea45 commit 1ca3597

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

omniscidb/ArrowStorage/ArrowStorage.cpp

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -346,28 +346,32 @@ std::shared_ptr<const TableFragmentsInfo> ArrowStorage::getTableMetadata(
346346
auto& table = *tables_.at(table_id);
347347
mapd_shared_lock<mapd_shared_mutex> table_lock(table.mutex);
348348
data_lock.unlock();
349+
return table.metadata;
350+
}
349351

352+
void ArrowStorage::setTableMetadata(TableData& table, const int table_id) const {
353+
// Assumes lock is already taken
350354
if (table.fragments.empty()) {
351-
return getEmptyTableMetadata(table_id);
352-
}
353-
354-
std::shared_ptr<TableFragmentsInfo> res = std::make_shared<TableFragmentsInfo>();
355-
res->setPhysicalNumTuples(table.row_count);
356-
for (size_t frag_idx = 0; frag_idx < table.fragments.size(); ++frag_idx) {
357-
auto& frag = table.fragments[frag_idx];
358-
auto& frag_info = res->fragments.emplace_back();
359-
frag_info.fragmentId = static_cast<int>(frag_idx + 1);
360-
frag_info.physicalTableId = table_id;
361-
frag_info.setPhysicalNumTuples(frag.row_count);
362-
frag_info.deviceIds.push_back(0); // Data_Namespace::DISK_LEVEL
363-
frag_info.deviceIds.push_back(0); // Data_Namespace::CPU_LEVEL
364-
frag_info.deviceIds.push_back(0); // Data_Namespace::GPU_LEVEL
365-
for (size_t col_idx = 0; col_idx < frag.metadata.size(); ++col_idx) {
366-
frag_info.setChunkMetadata(columnId(col_idx), frag.metadata[col_idx]);
355+
table.metadata = getEmptyTableMetadata(table_id);
356+
} else {
357+
auto res = std::make_shared<TableFragmentsInfo>();
358+
res->setPhysicalNumTuples(table.row_count);
359+
for (size_t frag_idx = 0; frag_idx < table.fragments.size(); ++frag_idx) {
360+
auto& frag = table.fragments[frag_idx];
361+
auto& frag_info = res->fragments.emplace_back();
362+
frag_info.fragmentId = static_cast<int>(frag_idx + 1);
363+
frag_info.physicalTableId = table_id;
364+
frag_info.setPhysicalNumTuples(frag.row_count);
365+
frag_info.deviceIds.push_back(0); // Data_Namespace::DISK_LEVEL
366+
frag_info.deviceIds.push_back(0); // Data_Namespace::CPU_LEVEL
367+
frag_info.deviceIds.push_back(0); // Data_Namespace::GPU_LEVEL
368+
for (size_t col_idx = 0; col_idx < frag.metadata.size(); ++col_idx) {
369+
frag_info.setChunkMetadata(columnId(col_idx), frag.metadata[col_idx]);
370+
}
367371
}
372+
res->setTableStats(table.table_stats);
373+
table.metadata = res;
368374
}
369-
res->setTableStats(table.table_stats);
370-
return res;
371375
}
372376

373377
std::shared_ptr<TableFragmentsInfo> ArrowStorage::getEmptyTableMetadata(
@@ -653,6 +657,7 @@ TableInfoPtr ArrowStorage::createTable(const std::string& table_name,
653657
auto& table = *iter->second;
654658
table.fragment_size = options.fragment_size;
655659
table.schema = schema;
660+
table.metadata = getEmptyTableMetadata(table_id);
656661
}
657662

658663
return res;
@@ -737,6 +742,7 @@ TableInfoPtr ArrowStorage::createRefragmentedView(const std::string& table_name,
737742
new_table.table_stats = original_table_data.table_stats;
738743

739744
refragmentTable(new_table, new_table_id, new_frag_size);
745+
setTableMetadata(new_table, new_table_id);
740746
return res;
741747
}
742748

@@ -1125,6 +1131,7 @@ void ArrowStorage::appendArrowTable(std::shared_ptr<arrow::Table> at, int table_
11251131
auto table_info = getTableInfo(db_id_, table_id);
11261132
table_info->fragments = table.fragments.size();
11271133
table_info->row_count = table.row_count;
1134+
setTableMetadata(table, table_id);
11281135
}
11291136

11301137
TableInfoPtr ArrowStorage::importCsvFile(const std::string& file_name,

omniscidb/ArrowStorage/ArrowStorage.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ class ArrowStorage : public SimpleSchemaProvider, public AbstractDataProvider {
170170
std::vector<DataFragment> fragments;
171171
size_t row_count = 0;
172172
TableStats table_stats;
173+
std::shared_ptr<const TableFragmentsInfo> metadata =
174+
std::make_shared<TableFragmentsInfo>();
173175
};
174176

175177
struct DictionaryData {
@@ -243,6 +245,7 @@ class ArrowStorage : public SimpleSchemaProvider, public AbstractDataProvider {
243245
size_t num_bytes) const;
244246
void refragmentTable(TableData& table, const int table_id, const size_t new_frag_size);
245247
void materializeDictionary(DictionaryData* dict_data);
248+
void setTableMetadata(TableData& table, const int table_id) const;
246249

247250
int db_id_;
248251
int schema_id_;

0 commit comments

Comments
 (0)