⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 catalog.c

📁 linux 下用c++ 开发的一个小型数据库系统
💻 C
字号:
#include "catalog.h"RelCatalog::RelCatalog(Status &status) :	 HeapFile(RELCATNAME, status){// nothing needed}const Status RelCatalog::getInfo(const string & relation, RelDesc &record){  if (relation.empty())    return BADCATPARM;  Status status;  Record rec;  RID rid;  HeapFileScan *ifs ;    ifs = new HeapFileScan( RELCATNAME, status) ;   if (status != OK) return status ;  ifs->startScan( 0, relation.length(), STRING, relation.c_str(), EQ) ;    if(ifs->scanNext(rid) == OK){    if ((status = getRecord( rid, rec)) != OK){      delete ifs ;      return status ;    }    memcpy( &record, rec.data, rec.length) ;    delete ifs ;    return OK ;  }    delete ifs ;  return RELNOTFOUND ;}const Status RelCatalog::addInfo(RelDesc & record){  RID rid;  InsertFileScan*  ifs;  Status status;  Record rec ;  string myrelName ;  RelDesc myrec ;  ifs = new InsertFileScan( RELCATNAME, status) ;  if (status != OK) return status ;    myrelName.append(record.relName) ;    if ((status = getInfo( myrelName, myrec )) == OK){    delete ifs ;    return RELEXISTS ;  }  rec.data = &record ;  rec.length = sizeof(RelDesc) ;  if ((status = ifs->insertRecord( rec, rid)) != OK){    delete ifs ;    return status ;  }  delete ifs ;    return OK ;}const Status RelCatalog::removeInfo(const string & relation){  Status status;  RID rid;  HeapFileScan*  hfs;  if (relation.empty()) return BADCATPARM;  hfs = new HeapFileScan( RELCATNAME, status) ;  if (status != OK) return status ;  hfs->startScan( 0, relation.length(), STRING, relation.c_str(), EQ) ;    if((status = hfs->scanNext(rid)) == OK){      if ((status = hfs->deleteRecord()) != OK){      delete hfs ;      return status ;    }    delete hfs ;    return OK ;  }  delete hfs ;  return RELNOTFOUND ;}RelCatalog::~RelCatalog(){// nothing needed}AttrCatalog::AttrCatalog(Status &status) :	 HeapFile(ATTRCATNAME, status){// nothing needed}const Status AttrCatalog::getInfo(const string & relation, 				  const string & attrName,				  AttrDesc &record){  Status status;  RID rid;  Record rec;  HeapFileScan*  hfs;     hfs = new HeapFileScan( ATTRCATNAME, status) ;  if (status != OK) return status ;  hfs->startScan( 0, relation.length(), STRING, relation.c_str(), EQ) ;    while ((status = hfs->scanNext(rid)) != FILEEOF){    if ((status = hfs->getRecord(rec)) != OK){      delete hfs ;       return status ;    }    memcpy( &record, rec.data, rec.length) ;    if (strncmp ( record.attrName,attrName.c_str(), attrName.length()) == 0){      delete hfs ;      return OK ;    }   }  delete hfs ;  return ATTRNOTFOUND ;}const Status AttrCatalog::addInfo(AttrDesc & record){  RID rid;  InsertFileScan*  ifs;  Status status;  Record rec ;  string myattr, myrel ;  AttrDesc myads ;  ifs = new InsertFileScan( ATTRCATNAME, status) ;  if (status != OK) return status ;    myrel.append(record.relName) ;  myattr.append(record.attrName) ;  if ((status = getInfo( myrel, myattr, myads)) == OK){    delete ifs ;    return DUPLATTR ;  }  rec.data = &record ;  rec.length = sizeof(AttrDesc) ;    if ((status = ifs->insertRecord( rec, rid)) != OK){    delete ifs ;    return status ;  }    delete ifs ;  return OK ;}const Status AttrCatalog::removeInfo(const string & relation, 			       const string & attrName){  Status status;  Record rec;  RID rid;  AttrDesc record;  RelDesc relrec ;  HeapFileScan*  hfs;  if (relation.empty() || attrName.empty()) return BADCATPARM;    hfs = new HeapFileScan ( ATTRCATNAME, status) ;  if (status != OK) return status ;  if((status = relCat->getInfo( relation, relrec)) != OK){    delete hfs ;    return status ;  }  hfs->startScan( 0, relation.length(), STRING, relation.c_str(), EQ) ;    while((status = hfs->scanNext(rid)) != FILEEOF){    if ((status = hfs->getRecord(rec)) != OK){      delete hfs ;      return status ;    }    memcpy( &record, rec.data, rec.length) ;     if (strncmp(record.attrName, attrName.c_str(), attrName.length()) == 0){      hfs->deleteRecord() ;      delete hfs ;      return OK ;    }  }  delete hfs ;  return ATTRNOTFOUND ;}const Status AttrCatalog::getRelInfo(const string & relation, 				     int &attrCnt,				     AttrDesc *&attrs){  Status status;  RID rid;  Record rec;  HeapFileScan*  hfs;  int i ;  if (relation.empty()) return BADCATPARM;  hfs = new HeapFileScan( ATTRCATNAME, status) ;  if (status != OK) return status ;    i = 0 ;  hfs->startScan( 0, relation.length(), STRING, relation.c_str(), EQ) ;  while((status = hfs->scanNext(rid)) != FILEEOF){    i++ ;  }    attrs = new AttrDesc[i] ;  hfs = new HeapFileScan( ATTRCATNAME, status) ;  if (status != OK) return status ;    hfs->startScan( 0, relation.length(), STRING, relation.c_str(), EQ) ;  i = 0 ;  while(hfs->scanNext(rid) != FILEEOF){        hfs->getRecord(rec) ;     memcpy( &attrs[i], rec.data, rec.length) ;      i++ ;   }   attrCnt = i ;  delete hfs ;  return OK ;}AttrCatalog::~AttrCatalog(){// nothing needed}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -