예제 #1
0
void test( uint64_t n )
{
	DBCore core;
	core.WipeDatabase();
	// Wipe old sql schema and data to get consistent records
	// Then create new sql schema, just containing large strings, currently
	// this is not perfectly tied together anyways, so insert does not 
	// care that our records are not correct, but we still need a relation
	// before we can get a segment for that relation
	// (Mb we should make segments that are not bound to a relation at some
	// point)
	std::string sql = "create table dbtest ( strentry char(5000), primary key (strentry));";
	core.AddRelationsFromString( sql );
	uint64_t segmentId = core.GetSegmentOfIndex( "dbtest", "strentry" );
	BPTree<T, CMP> bTree( core, *core.GetBufferManager(), segmentId );

	// Insert values
	for ( uint64_t i = 0; i < n; ++i )
	{
		bTree.Insert( getKey<T>( i ), static_cast<TID>(i*i) );	
	}
	uint32_t btreeSize = bTree.GetSize();
	assert( btreeSize == n );

	// Check if they can be retrieved
	for ( uint64_t i = 0; i < n; ++i )
	{
		std::pair<bool, TID> foundTID;
		foundTID = bTree.Lookup( getKey<T>( i ) );
		assert( foundTID.first );
		assert( foundTID.second == i*i );
	}

	// Delete some values
	for ( uint64_t i = 0; i < n; ++i )
		if ( (i % 7) == 0 )
			bTree.Erase( getKey<T>( i ) );

	// Check if the right ones have been deleted
	for ( uint64_t i = 0; i < n; ++i )
	{
		std::pair<bool, TID> foundTID;
		foundTID = bTree.Lookup( getKey<T>( i ) );
		if ( (i % 7) == 0 )
		{
			assert( !foundTID.first );
		}
		else
		{
			assert( foundTID.first );
			assert( foundTID.second == i*i );
		}
	}

	// Delete everything
	for ( uint64_t i = 0; i < n; ++i )
		bTree.Erase( getKey<T>( i ) );
	assert( bTree.GetSize() == 0 );
}
예제 #2
0
파일: BTreeTest.cpp 프로젝트: cfstras/db
void test(uint64_t n) {
   // Set up stuff, you probably have to change something here to match to your interfaces
   BufferManager bm;
   // ...
   BTree<T, CMP> bTree(segment);

   // Insert values
   for (uint64_t i=0; i<n; ++i)
      bTree.insert(getKey<T>(i),static_cast<TID>(i*i));
   assert(bTree.size()==n);

   // Check if they can be retrieved
   for (uint64_t i=0; i<n; ++i) {
      TID tid;
      assert(bTree.lookup(getKey<T>(i),tid));
      assert(tid==i*i);
   }

   // Delete some values
   for (uint64_t i=0; i<n; ++i)
      if ((i%7)==0)
         bTree.erase(getKey<T>(i));

   // Check if the right ones have been deleted
   for (uint64_t i=0; i<n; ++i) {
      TID tid;
      if ((i%7)==0) {
         assert(!bTree.lookup(getKey<T>(i),tid));
      } else {
         assert(bTree.lookup(getKey<T>(i),tid));
         assert(tid==i*i);
      }
   }

   // Delete everything
   for (uint64_t i=0; i<n; ++i)
      bTree.erase(getKey<T>(i));
   assert(bTree.size()==0);
}