bool MergeFile::merge() { RecordKeyVector hitSet; FileRecordMgr *frm = _context->getFile(0); while (!frm->eof()) { Record *key = frm->getNextRecord(&hitSet); if (key == NULL) continue; _recordOutputMgr->printRecord(hitSet.getKey(), _context->getColumnOpsVal(hitSet)); } return true; }
bool FileIntersect::processUnsortedFiles() { const QuickString &databaseFilename = _context->getDatabaseFileName(); BinTree *binTree = new BinTree(_context->getDatabaseFileIdx(), _context); FileRecordMgr *queryFRM = new FileRecordMgr(_context->getQueryFileIdx(), _context); if (!queryFRM->open()) { return false; } if (!binTree->loadDB()) { fprintf(stderr, "Error: Unable to load database file %s.\n", databaseFilename.c_str()); delete binTree; exit(1); } _context->determineOutputType(); _recordOutputMgr->init(_context); while (!queryFRM->eof()) { Record *queryRecord = queryFRM->allocateAndGetNextRecord(); if (queryRecord == NULL) { continue; } RecordKeyList hitSet(queryRecord); binTree->getHits(queryRecord, hitSet); if (_context->getObeySplits()) { RecordKeyList keySet(hitSet.getKey()); RecordKeyList resultSet; _blockMgr->findBlockedOverlaps(keySet, hitSet, resultSet); processHits(resultSet); } else { processHits(hitSet); } queryFRM->deleteRecord(queryRecord); } queryFRM->close(); //clean up. delete queryFRM; delete binTree; return true; }