TEST_F(CatalogTests, CreatingTable) { auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance(); auto txn = txn_manager.BeginTransaction(); auto id_column = catalog::Column( type::TypeId::INTEGER, type::Type::GetTypeSize(type::TypeId::INTEGER), "id", true); id_column.AddConstraint( catalog::Constraint(ConstraintType::PRIMARY, "primary_key")); auto name_column = catalog::Column(type::TypeId::VARCHAR, 32, "name", true); std::unique_ptr<catalog::Schema> table_schema( new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_2( new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_3( new catalog::Schema({id_column, name_column})); catalog::Catalog::GetInstance()->CreateTable( "emp_db", DEFAULT_SCHEMA_NAME, "emp_table", std::move(table_schema), txn); catalog::Catalog::GetInstance()->CreateTable("emp_db", DEFAULT_SCHEMA_NAME, "department_table", std::move(table_schema_2), txn); catalog::Catalog::GetInstance()->CreateTable("emp_db", DEFAULT_SCHEMA_NAME, "salary_table", std::move(table_schema_3), txn); // insert random tuple into DATABASE_METRICS_CATALOG and check std::unique_ptr<type::AbstractPool> pool(new type::EphemeralPool()); catalog::DatabaseMetricsCatalog::GetInstance()->InsertDatabaseMetrics( 2, 3, 4, 5, pool.get(), txn); // inset meaningless tuple into QUERY_METRICS_CATALOG and check stats::QueryMetric::QueryParamBuf param; param.len = 1; param.buf = (unsigned char *)pool->Allocate(1); *param.buf = 'a'; auto database_object = catalog::Catalog::GetInstance()->GetDatabaseObject("emp_db", txn); catalog::Catalog::GetInstance() ->GetSystemCatalogs(database_object->GetDatabaseOid()) ->GetQueryMetricsCatalog() ->InsertQueryMetrics("a query", database_object->GetDatabaseOid(), 1, param, param, param, 1, 1, 1, 1, 1, 1, 1, pool.get(), txn); auto param1 = catalog::Catalog::GetInstance() ->GetSystemCatalogs(database_object->GetDatabaseOid()) ->GetQueryMetricsCatalog() ->GetParamTypes("a query", txn); EXPECT_EQ(1, param1.len); EXPECT_EQ('a', *param1.buf); // check colum object EXPECT_EQ("name", catalog::Catalog::GetInstance() ->GetTableObject("emp_db", DEFAULT_SCHEMA_NAME, "department_table", txn) ->GetColumnObject(1) ->GetColumnName()); txn_manager.CommitTransaction(txn); }
TEST_F(CatalogTests, CreatingTable) { auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance(); auto txn = txn_manager.BeginTransaction(); auto id_column = catalog::Column( common::Type::INTEGER, common::Type::GetTypeSize(common::Type::INTEGER), "id", true); auto name_column = catalog::Column(common::Type::VARCHAR, 32, "name", true); std::unique_ptr<catalog::Schema> table_schema( new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_2( new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_3( new catalog::Schema({id_column, name_column})); catalog::Catalog::GetInstance()->CreateTable("EMP_DB", "emp_table", std::move(table_schema), txn); catalog::Catalog::GetInstance()->CreateTable("EMP_DB", "department_table", std::move(table_schema_2), txn); catalog::Catalog::GetInstance()->CreateTable("EMP_DB", "salary_table", std::move(table_schema_3), txn); txn_manager.CommitTransaction(txn); EXPECT_EQ(catalog::Catalog::GetInstance() ->GetDatabaseWithName("EMP_DB") ->GetTableWithName("department_table") ->GetSchema() ->GetColumn(1) .GetName(), "name"); EXPECT_EQ(catalog::Catalog::GetInstance() ->GetDatabaseWithName("catalog_db") ->GetTableWithName("table_catalog") ->GetTupleCount(), 3); EXPECT_EQ(catalog::Catalog::GetInstance() ->GetDatabaseWithName("catalog_db") ->GetTableWithName("table_catalog") ->GetSchema() ->GetLength(), 72); }
TEST_F(CatalogTests, CreatingTable) { auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance(); txn_manager.BeginTransaction(); auto id_column = catalog::Column(VALUE_TYPE_INTEGER, GetTypeSize(VALUE_TYPE_INTEGER), "dept_id", true); auto name_column = catalog::Column(VALUE_TYPE_VARCHAR, 32, "dept_name", true); std::unique_ptr<catalog::Schema> table_schema(new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_2(new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_3(new catalog::Schema({id_column, name_column})); catalog::Bootstrapper::global_catalog->CreateTable("EMP_DB", "emp_table", std::move(table_schema)); catalog::Bootstrapper::global_catalog->CreateTable("EMP_DB", "department_table", std::move(table_schema_2)); catalog::Bootstrapper::global_catalog->CreateTable("EMP_DB", "salary_table", std::move(table_schema_3)); txn_manager.CommitTransaction(); EXPECT_EQ(catalog::Bootstrapper::global_catalog->GetDatabaseWithName("EMP_DB")->GetTableWithName("department_table")->GetSchema()->GetColumn(1).GetName(), "dept_name"); EXPECT_EQ(catalog::Bootstrapper::global_catalog->GetDatabaseWithName("catalog_db")->GetTableWithName("table_catalog")->GetNumberOfTuples(), 3); }
TEST_F(CatalogTests, CreatingTable) { auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance(); auto txn = txn_manager.BeginTransaction(); auto id_column = catalog::Column( type::TypeId::INTEGER, type::Type::GetTypeSize(type::TypeId::INTEGER), "id", true); id_column.AddConstraint( catalog::Constraint(ConstraintType::PRIMARY, "primary_key")); auto name_column = catalog::Column(type::TypeId::VARCHAR, 32, "name", true); std::unique_ptr<catalog::Schema> table_schema( new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_2( new catalog::Schema({id_column, name_column})); std::unique_ptr<catalog::Schema> table_schema_3( new catalog::Schema({id_column, name_column})); catalog::Catalog::GetInstance()->CreateTable("EMP_DB", "emp_table", std::move(table_schema), txn); catalog::Catalog::GetInstance()->CreateTable("EMP_DB", "department_table", std::move(table_schema_2), txn); catalog::Catalog::GetInstance()->CreateTable("EMP_DB", "salary_table", std::move(table_schema_3), txn); // insert random tuple into DATABASE_METRICS_CATALOG and check std::unique_ptr<type::AbstractPool> pool(new type::EphemeralPool()); catalog::DatabaseMetricsCatalog::GetInstance()->InsertDatabaseMetrics( 2, 3, 4, 5, pool.get(), txn); // oid_t time_stamp = // catalog::DatabaseMetricsCatalog::GetInstance()->GetTimeStamp(2, txn); // inset meaningless tuple into QUERY_METRICS_CATALOG and check stats::QueryMetric::QueryParamBuf param; param.len = 1; param.buf = (unsigned char *)pool->Allocate(1); *param.buf = 'a'; catalog::QueryMetricsCatalog::GetInstance()->InsertQueryMetrics( "a query", 1, 1, param, param, param, 1, 1, 1, 1, 1, 1, 1, pool.get(), txn); auto param1 = catalog::QueryMetricsCatalog::GetInstance()->GetParamTypes( "a query", 1, txn); EXPECT_EQ(1, param1.len); EXPECT_EQ('a', *param1.buf); EXPECT_EQ("name", catalog::Catalog::GetInstance() ->GetDatabaseWithName("EMP_DB", txn) ->GetTableWithName("department_table") ->GetSchema() ->GetColumn(1) .GetName()); txn_manager.CommitTransaction(txn); // EXPECT_EQ(5, time_stamp); // We remove these tests so people can add new catalogs without breaking this // test... // 3 + 4 // EXPECT_EQ(catalog::Catalog::GetInstance() // ->GetDatabaseWithName("pg_catalog") // ->GetTableWithName("pg_table") // ->GetTupleCount(), // 11); // // 6 + pg_database(2) + pg_table(3) + pg_attribute(7) + pg_index(6) // EXPECT_EQ(catalog::Catalog::GetInstance() // ->GetDatabaseWithName("pg_catalog") // ->GetTableWithName("pg_attribute") // ->GetTupleCount(), // 57); // // pg_catalog + EMP_DB // EXPECT_EQ(catalog::Catalog::GetInstance() // ->GetDatabaseWithName("pg_catalog") // ->GetTableWithName("pg_database") // ->GetTupleCount(), // 2); // // 3 + pg_index(3) + pg_attribute(3) + pg_table(3) + pg_database(2) // EXPECT_EQ(catalog::Catalog::GetInstance() // ->GetDatabaseWithName("pg_catalog") // ->GetTableWithName("pg_index") // ->GetTupleCount(), // 18); // EXPECT_EQ(catalog::Catalog::GetInstance() // ->GetDatabaseWithName("pg_catalog") // ->GetTableWithName("pg_table") // ->GetSchema() // ->GetLength(), // 72); }