@@ -346,28 +346,32 @@ std::shared_ptr<const TableFragmentsInfo> ArrowStorage::getTableMetadata(
346
346
auto & table = *tables_.at (table_id);
347
347
mapd_shared_lock<mapd_shared_mutex> table_lock (table.mutex );
348
348
data_lock.unlock ();
349
+ return table.metadata ;
350
+ }
349
351
352
+ void ArrowStorage::setTableMetadata (TableData& table, const int table_id) const {
353
+ // Assumes lock is already taken
350
354
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
+ }
367
371
}
372
+ res->setTableStats (table.table_stats );
373
+ table.metadata = res;
368
374
}
369
- res->setTableStats (table.table_stats );
370
- return res;
371
375
}
372
376
373
377
std::shared_ptr<TableFragmentsInfo> ArrowStorage::getEmptyTableMetadata (
@@ -653,6 +657,7 @@ TableInfoPtr ArrowStorage::createTable(const std::string& table_name,
653
657
auto & table = *iter->second ;
654
658
table.fragment_size = options.fragment_size ;
655
659
table.schema = schema;
660
+ table.metadata = getEmptyTableMetadata (table_id);
656
661
}
657
662
658
663
return res;
@@ -737,6 +742,7 @@ TableInfoPtr ArrowStorage::createRefragmentedView(const std::string& table_name,
737
742
new_table.table_stats = original_table_data.table_stats ;
738
743
739
744
refragmentTable (new_table, new_table_id, new_frag_size);
745
+ setTableMetadata (new_table, new_table_id);
740
746
return res;
741
747
}
742
748
@@ -1125,6 +1131,7 @@ void ArrowStorage::appendArrowTable(std::shared_ptr<arrow::Table> at, int table_
1125
1131
auto table_info = getTableInfo (db_id_, table_id);
1126
1132
table_info->fragments = table.fragments .size ();
1127
1133
table_info->row_count = table.row_count ;
1134
+ setTableMetadata (table, table_id);
1128
1135
}
1129
1136
1130
1137
TableInfoPtr ArrowStorage::importCsvFile (const std::string& file_name,
0 commit comments