コード例 #1
0
ファイル: BTreeTest.cpp プロジェクト: kfc35/SpringDB
bool BTreeDriver::TestDeleteCurrent() {
	Status status;
	BTreeFile *btf;
	bool res;

	btf = new BTreeFile(status, "BTreeTest6");

	if (status != OK) {
		std::cerr << "ERROR: Couldn't create a BTreeFile" << std::endl;
		minibase_errors.show_errors();

		std::cerr << "Hit [enter] to continue..." << std::endl;
		std::cin.get();
		exit(1);
	}

	std::cout << "Starting Test 6..." << std::endl;
	std::cout << "BTreeIndex created successfully." << std::endl;
	std::cout << "Inserting entries..." << std::endl;
	InsertRange(btf, 1, 10);
	char low[MAX_KEY_LENGTH];
	toString(3, low);
	BTreeFileScan* scan = btf->OpenScan(low, NULL);

	std::cout << "Deleting entries..." << std::endl;
	RecordID rid;
	char* keyPtr;
	scan->GetNext(rid, keyPtr); // 3
	scan->GetNext(rid, keyPtr); // 4
	scan->DeleteCurrent(); // 5
	scan->GetNext(rid, keyPtr); // 6
	scan->GetNext(rid, keyPtr); // 7
	scan->GetNext(rid, keyPtr); // 8
	scan->DeleteCurrent();
	delete scan;

	res = TestAbsent(btf, 4);
	res = TestAbsent(btf, 8);

	std::cout << "Inserting duplicate entry..." << std::endl;
	InsertKey(btf, 1, 3);
	toString(1, low);
	scan = btf->OpenScan(low, NULL);

	std::cout << "Deleting entry..." << std::endl;
	scan->GetNext(rid, keyPtr); // 1
	scan->DeleteCurrent(); // 1
	delete scan;

	res = TestAbsent(btf, 1, 1);
	res = TestPresent(btf, 1, 3);
	
	if (btf->DestroyFile() != OK) {
		std::cerr << "Error destroying BTreeFile" << std::endl;
		res = false;
	}

	delete btf;

	return res;
}