TEST_F(LogicalTileTests, TempTableTest) {
  const int tuple_count = TESTS_TUPLES_PER_TILEGROUP;
  auto pool = TestingHarness::GetInstance().GetTestingPool();

  catalog::Schema *schema = new catalog::Schema(
      {ExecutorTestsUtil::GetColumnInfo(0), ExecutorTestsUtil::GetColumnInfo(1),
       ExecutorTestsUtil::GetColumnInfo(2)});

  // Create our TempTable
  storage::TempTable table(INVALID_OID, schema, true);
  EXPECT_EQ(0, table.GetTupleCount());

  // Then shove some tuples in it
  for (int i = 0; i < tuple_count; i++) {
    storage::Tuple *tuple = new storage::Tuple(table.GetSchema(), true);
    auto val1 = type::ValueFactory::GetIntegerValue(
        ExecutorTestsUtil::PopulatedValue(i, 0));
    auto val2 = type::ValueFactory::GetIntegerValue(
        ExecutorTestsUtil::PopulatedValue(i, 1));
    auto val3 = type::ValueFactory::GetDoubleValue(
        ExecutorTestsUtil::PopulatedValue(i, 2));
    tuple->SetValue(0, val1, pool);
    tuple->SetValue(1, val2, pool);
    tuple->SetValue(2, val3, pool);
    table.InsertTuple(tuple);

    delete tuple;
  }
  LOG_INFO("%s", table.GetInfo().c_str());
  LOG_INFO("%s", GETINFO_SINGLE_LINE.c_str());

  // Check to see whether we can wrap a LogicalTile around it
  auto tile_group_count = table.GetTileGroupCount();
  std::vector<executor::LogicalTile *> logicalTiles;
  for (oid_t tile_group_itr = 0; tile_group_itr < tile_group_count;
       tile_group_itr++) {
    auto tile_group = table.GetTileGroup(tile_group_itr);
    EXPECT_NE(nullptr, tile_group);
    auto logical_tile = executor::LogicalTileFactory::WrapTileGroup(tile_group);
    EXPECT_NE(nullptr, logical_tile);
    logicalTiles.push_back(logical_tile);

    // Make sure that we can iterate over the LogicalTile and get
    // at our TempTable tuples
    EXPECT_NE(0, logical_tile->GetTupleCount());

    LOG_INFO("GetActiveTupleCount() = %d",
             (int)tile_group->GetActiveTupleCount());
    LOG_INFO("%s", tile_group->GetInfo().c_str());
    LOG_INFO("*****************************************");
    LOG_INFO("%s", logical_tile->GetInfo().c_str());
  }
  EXPECT_FALSE(logicalTiles.empty());

  for (executor::LogicalTile *lt : logicalTiles) {
    delete lt;
  }
}
Пример #2
0
oid_t DataTable::GetAllActiveTupleCount() {
  oid_t count = 0;
  for (auto tile_group_id : tile_groups_) {
    auto tile_group = GetTileGroupById(tile_group_id);
    auto tile_group_header = tile_group->GetHeader();
    count += tile_group_header->GetActiveTupleCount();
  }
  return count;
}
Пример #3
0
oid_t GetTotalTupleCount(size_t table_tile_group_count, cid_t next_cid) {
  auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();

  txn_manager.SetNextCid(next_cid);

  txn_manager.BeginTransaction();

  auto &catalog_manager = catalog::Manager::GetInstance();
  oid_t total_tuple_count = 0;
  for (size_t tile_group_id = 1; tile_group_id <= table_tile_group_count;
       tile_group_id++) {
    auto tile_group = catalog_manager.GetTileGroup(tile_group_id);
    total_tuple_count += tile_group->GetActiveTupleCount();
  }
  txn_manager.CommitTransaction();
  return total_tuple_count;
}
Пример #4
0
void CheckTupleCount(oid_t db_oid, oid_t table_oid, oid_t expected) {
  auto& manager = catalog::Manager::GetInstance();
  storage::Database* db = manager.GetDatabaseWithOid(db_oid);
  auto table = db->GetTableWithOid(table_oid);

  oid_t tile_group_count = table->GetTileGroupCount();

  oid_t active_tuple_count = 0;
  for (oid_t tile_group_itr = 0; tile_group_itr < tile_group_count;
       tile_group_itr++) {
    auto tile_group = table->GetTileGroup(tile_group_itr);
    active_tuple_count += tile_group->GetActiveTupleCount(INVALID_TXN_ID);
  }

  // check # of active tuples
  if (expected != active_tuple_count) {
    throw Exception("Tuple count does not match \n");
  }
}