void UpdateIndexUtility(storage::DataTable* table, const std::vector<sample_frequency_map_entry>& list) { oid_t index_count = table->GetIndexCount(); for (oid_t index_itr = 0; index_itr < index_count; index_itr++) { // Get index auto index = table->GetIndex(index_itr); auto index_metadata = index->GetMetadata(); auto index_key_attrs = index_metadata->GetKeyAttrs(); std::set<oid_t> index_set(index_key_attrs.begin(), index_key_attrs.end()); // Get current index utility auto current_index_utility = GetCurrentIndexUtility(index_set, list); auto average_index_utility = index_metadata->GetUtility(); LOG_TRACE("Average index utility %5.2lf", average_index_utility); LOG_TRACE("Current index utility %5.2lf", current_index_utility); // alpha (weight for old samples) double alpha = 0.2; // Update index utility auto updated_average_index_utility = alpha * current_index_utility + (1 - alpha) * average_index_utility; index_metadata->SetUtility(updated_average_index_utility); LOG_TRACE("Updated index utility %5.2lf :: %s", updated_average_index_utility, index_metadata->GetInfo().c_str()); } }
TEST_F(CatalogTests, CreatingDatabase) { auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance(); auto txn = txn_manager.BeginTransaction(); catalog::Catalog::GetInstance()->CreateDatabase("EMP_DB", txn); auto table_object = catalog::Catalog::GetInstance()->GetTableObject( CATALOG_DATABASE_NAME, INDEX_CATALOG_NAME, txn); auto index_object = table_object->GetIndexObject(INDEX_CATALOG_PKEY_OID); std::vector<oid_t> key_attrs = index_object->GetKeyAttrs(); EXPECT_EQ("EMP_DB", catalog::Catalog::GetInstance() ->GetDatabaseWithName("EMP_DB", txn) ->GetDBName()); txn_manager.CommitTransaction(txn); EXPECT_EQ(1, key_attrs.size()); EXPECT_EQ(0, key_attrs[0]); }