@@ -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
373377std::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
11301137TableInfoPtr ArrowStorage::importCsvFile (const std::string& file_name,
0 commit comments