Exemplo n.º 1
0
TEST_F(JitValidateTest, ValidateOnNonReferenceTable) {
  JitRuntimeContext context;
  context.transaction_id = _transaction_context->transaction_id();
  context.snapshot_commit_id = _transaction_context->snapshot_commit_id();

  auto source = std::make_shared<MockSource>();
  auto validate = std::make_shared<JitValidate>(TableType::Data);
  auto sink = std::make_shared<MockSink>();

  // Link operators to pipeline
  source->set_next_operator(validate);
  validate->set_next_operator(sink);

  auto expected_value_itr = _expected_values.begin();

  validate_row(ChunkID(0), ChunkOffset{0}, context, *expected_value_itr++, source, sink, TableType::Data);
  validate_row(ChunkID(0), ChunkOffset{1}, context, *expected_value_itr++, source, sink, TableType::Data);
  validate_row(ChunkID(0), ChunkOffset{2}, context, *expected_value_itr++, source, sink, TableType::Data);
  validate_row(ChunkID(1), ChunkOffset{0}, context, *expected_value_itr++, source, sink, TableType::Data);
  validate_row(ChunkID(1), ChunkOffset{1}, context, *expected_value_itr++, source, sink, TableType::Data);
  validate_row(ChunkID(1), ChunkOffset{2}, context, *expected_value_itr++, source, sink, TableType::Data);
  validate_row(ChunkID(2), ChunkOffset{0}, context, *expected_value_itr++, source, sink, TableType::Data);
  validate_row(ChunkID(2), ChunkOffset{1}, context, *expected_value_itr++, source, sink, TableType::Data);
}
Exemplo n.º 2
0
  JitValidateTest() {
    _test_table = load_table("resources/test_data/tbl/10_ints.tbl", 3u);

    _transaction_context = std::make_shared<TransactionContext>(5u, 3u);

    // data table has three chunks
    {
      auto& mvcc_data = *_test_table->get_chunk(ChunkID(0))->mvcc_data();
      // deleted -> false
      mvcc_data.begin_cids[0] = 1u;
      mvcc_data.end_cids[0] = 2u;
      mvcc_data.tids[0].exchange(0u);
      _expected_values.push_back(false);

      // visible -> true
      mvcc_data.begin_cids[1] = 1u;
      mvcc_data.end_cids[1] = MvccData::MAX_COMMIT_ID;
      mvcc_data.tids[1].exchange(0u);
      _expected_values.push_back(true);

      // not visible for this transaction -> false
      mvcc_data.begin_cids[2] = 10u;
      mvcc_data.end_cids[2] = MvccData::MAX_COMMIT_ID;
      mvcc_data.tids[2].exchange(0u);
      _expected_values.push_back(false);
    }

    {
      auto& mvcc_data = *_test_table->get_chunk(ChunkID(1))->mvcc_data();
      // inserted by other not committed transaction -> false
      mvcc_data.begin_cids[0] = 4u;
      mvcc_data.end_cids[0] = MvccData::MAX_COMMIT_ID;
      mvcc_data.tids[0].exchange(4u);
      _expected_values.push_back(false);

      // inserted by own transaction -> true
      mvcc_data.begin_cids[1] = 5u;
      mvcc_data.end_cids[1] = MvccData::MAX_COMMIT_ID;
      mvcc_data.tids[1].exchange(5u);
      _expected_values.push_back(true);

      // deleted by own transaction -> false
      mvcc_data.begin_cids[2] = 3u;
      mvcc_data.end_cids[2] = 5u;
      mvcc_data.tids[2].exchange(5u);
      _expected_values.push_back(false);
    }

    {
      // deleted by not commited transaction -> true
      auto& mvcc_data = *_test_table->get_chunk(ChunkID(2))->mvcc_data();
      mvcc_data.begin_cids[0] = 1u;
      mvcc_data.end_cids[0] = 4u;
      mvcc_data.tids[0].exchange(4u);
      _expected_values.push_back(true);

      // deleted by commited future transaction -> true
      mvcc_data.begin_cids[1] = 1u;
      mvcc_data.end_cids[1] = 9u;
      mvcc_data.tids[1].exchange(0u);
      _expected_values.push_back(true);
    }
  }
Exemplo n.º 3
0
TEST_F(JitValidateTest, ValidateOnReferenceTable) {
  JitRuntimeContext context;
  context.transaction_id = _transaction_context->transaction_id();
  context.snapshot_commit_id = _transaction_context->snapshot_commit_id();
  context.referenced_table = _test_table;

  auto source = std::make_shared<MockSource>();
  auto validate = std::make_shared<JitValidate>(TableType::References);
  auto sink = std::make_shared<MockSink>();

  // Link operators to pipeline
  source->set_next_operator(validate);
  validate->set_next_operator(sink);

  auto expected_value_itr = _expected_values.begin();

  // input reference table has 2 chunks
  auto pos_list = std::make_shared<PosList>(4);
  context.pos_list = pos_list;

  // first chunk
  (*pos_list)[0] = RowID(ChunkID(0), 0u);
  (*pos_list)[1] = RowID(ChunkID(0), 1u);
  (*pos_list)[2] = RowID(ChunkID(0), 2u);
  (*pos_list)[3] = RowID(ChunkID(1), 0u);

  validate_row(ChunkID(0), ChunkOffset{0}, context, *expected_value_itr++, source, sink, TableType::References);
  validate_row(ChunkID(0), ChunkOffset{1}, context, *expected_value_itr++, source, sink, TableType::References);
  validate_row(ChunkID(0), ChunkOffset{2}, context, *expected_value_itr++, source, sink, TableType::References);
  validate_row(ChunkID(0), ChunkOffset{3}, context, *expected_value_itr++, source, sink, TableType::References);

  // second chunk
  (*pos_list)[0] = RowID(ChunkID(1), 1u);
  (*pos_list)[1] = RowID(ChunkID(1), 2u);
  (*pos_list)[2] = RowID(ChunkID(2), 0u);
  (*pos_list)[3] = RowID(ChunkID(2), 1u);

  validate_row(ChunkID(1), ChunkOffset{0}, context, *expected_value_itr++, source, sink, TableType::References);
  validate_row(ChunkID(1), ChunkOffset{1}, context, *expected_value_itr++, source, sink, TableType::References);
  validate_row(ChunkID(1), ChunkOffset{2}, context, *expected_value_itr++, source, sink, TableType::References);
  validate_row(ChunkID(1), ChunkOffset{3}, context, *expected_value_itr++, source, sink, TableType::References);
}
Exemplo n.º 4
0
 static constexpr std::uint32_t ChunkID(char const (&s)[5])
    {return ChunkID(s[0], s[1], s[2], s[3]);}