/*@brief search index catalog object from all cached database objects * @param index_oid * @return index catalog object; if not found return null */ std::shared_ptr<IndexCatalogObject> DatabaseCatalogObject::GetCachedIndexObject( oid_t index_oid) { for (auto it = table_objects_cache.begin(); it != table_objects_cache.end(); ++it) { auto table_object = it->second; auto index_object = table_object->GetIndexObject(index_oid, true); if (index_object) return index_object; } return nullptr; }
/*@brief search index catalog object from all cached database objects * @param index_name * @return index catalog object; if not found return null */ std::shared_ptr<IndexCatalogObject> DatabaseCatalogObject::GetCachedIndexObject( const std::string &index_name, const std::string &schema_name) { for (auto it = table_objects_cache.begin(); it != table_objects_cache.end(); ++it) { auto table_object = it->second; if (table_object != nullptr && table_object->GetSchemaName() == schema_name) { auto index_object = table_object->GetIndexObject(index_name, true); if (index_object) return index_object; } } return nullptr; }
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]); }