TEST_F(CatalogTests, TableObject) { auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance(); auto txn = txn_manager.BeginTransaction(); auto table_object = catalog::Catalog::GetInstance()->GetTableObject( "emp_db", DEFAULT_SCHEMA_NAME, "department_table", txn); auto index_objects = table_object->GetIndexObjects(); auto column_objects = table_object->GetColumnObjects(); EXPECT_EQ(1, index_objects.size()); EXPECT_EQ(2, column_objects.size()); EXPECT_EQ(table_object->GetTableOid(), column_objects[0]->GetTableOid()); EXPECT_EQ("id", column_objects[0]->GetColumnName()); EXPECT_EQ(0, column_objects[0]->GetColumnId()); EXPECT_EQ(0, column_objects[0]->GetColumnOffset()); EXPECT_EQ(type::TypeId::INTEGER, column_objects[0]->GetColumnType()); EXPECT_TRUE(column_objects[0]->IsInlined()); EXPECT_TRUE(column_objects[0]->IsPrimary()); EXPECT_FALSE(column_objects[0]->IsNotNull()); EXPECT_EQ(table_object->GetTableOid(), column_objects[1]->GetTableOid()); EXPECT_EQ("name", column_objects[1]->GetColumnName()); EXPECT_EQ(1, column_objects[1]->GetColumnId()); EXPECT_EQ(4, column_objects[1]->GetColumnOffset()); EXPECT_EQ(type::TypeId::VARCHAR, column_objects[1]->GetColumnType()); EXPECT_TRUE(column_objects[1]->IsInlined()); EXPECT_FALSE(column_objects[1]->IsPrimary()); EXPECT_FALSE(column_objects[1]->IsNotNull()); // update pg_table SET version_oid = 1 where table_name = department_table oid_t department_table_oid = table_object->GetTableOid(); auto pg_table = catalog::Catalog::GetInstance() ->GetSystemCatalogs(table_object->GetDatabaseOid()) ->GetTableCatalog(); bool update_result = pg_table->UpdateVersionId(1, department_table_oid, txn); // get version id after update, invalidate old cache table_object = catalog::Catalog::GetInstance()->GetTableObject( "emp_db", DEFAULT_SCHEMA_NAME, "department_table", txn); uint32_t version_oid = table_object->GetVersionId(); EXPECT_NE(department_table_oid, INVALID_OID); EXPECT_EQ(update_result, true); EXPECT_EQ(version_oid, 1); txn_manager.CommitTransaction(txn); }
PWrapper CrWrapper(const std::string& theFileName, bool theDoPreCheckInSeparateProcess) { PWrapper aWrapper; EVersion aVersion = GetVersionId(theFileName,theDoPreCheckInSeparateProcess); switch(aVersion){ case eV2_2: // aWrapper.reset(new MED::V2_2::TVWrapper(theFileName)); break; case eV2_1: EXCEPTION(std::runtime_error,"Cannot open file '"<<theFileName<<"'. Med version 2.1 is not supported any more."); //aWrapper.reset(new MED::V2_1::TVWrapper(theFileName)); break; default: EXCEPTION(std::runtime_error,"MED::CrWrapper - theFileName = '"<<theFileName<<"'"); } return aWrapper; }
PWrapper CrWrapper(const std::string& theFileName, EVersion theId) { EVersion aVersion = GetVersionId(theFileName); if(aVersion != theId) remove(theFileName.c_str()); PWrapper aWrapper; switch(theId){ case eV2_2: // aWrapper.reset(new MED::V2_2::TVWrapper(theFileName)); break; case eV2_1: EXCEPTION(std::runtime_error,"Cannot open file '"<<theFileName<<"'. Med version 2.1 is not supported any more."); //aWrapper.reset(new MED::V2_1::TVWrapper(theFileName)); break; //default: // aWrapper.reset(new MED::V2_2::TVWrapper(theFileName)); } return aWrapper; }