Esempio n. 1
0
char* BANDB::read(int transID, int key) {
	int pageIndex = bm->findKey(key);
	if (pageIndex == -1) { return ""; }

	Record* rec = bm->locateRecord(pageIndex, key);
	return rec->readData();
}
Esempio n. 2
0
bool BANDB::remove(int transID, int key) {
	int pageIndex = bm->findKey(key);
	if (pageIndex == -1) { return false; }
	int pageNum = bm->getNumAtIndex(pageIndex);

	Record* oldRecP = bm->locateRecord(pageIndex, key);
	Record oldRec = *oldRecP;
	char* oldData = (char*) &oldRec;

	char empty[16] = {};
	for (int i = 0; i < 16; i++) { empty[i] = 0; }

	bool result = bm->removeRecord(pageIndex, key);
	lm->writeWriteRecord(transID, pageNum, oldData, empty);
	return result;
}
Esempio n. 3
0
bool BANDB::write(int transID, int key, char* data) {
	int pageIndex = bm->findKey(key);
	if (pageIndex == -1) { pageIndex = bm->findKey(0); }
	if (pageIndex == -1) { return false; }
	int pageNum = bm->getNumAtIndex(pageIndex);

	Record* oldRecP = bm->locateRecord(pageIndex, key);
	Record oldRec = *oldRecP;
	char* oldData = (char*) &oldRec;

	Record newRec = Record(key, data);
	char* newData = (char*) &newRec;

	bool result = bm->insertRecord(pageIndex, key, data);
	lm->writeWriteRecord(transID, pageNum, oldData, newData);
	return result;
}