#include "catalog.h"


const Status RelCatalog::createRel(const string & relation, 
				   const int attrCnt,
				   const attrInfo attrList[])
{
  Status status;
  RelDesc rd;
  AttrDesc ad;

  if (relation.empty() || attrCnt < 1)
    return BADCATPARM;

  if (relation.length() >= sizeof rd.relName)
    return NAMETOOLONG;

  status = relCat->getInfo(relation, rd);
  if(status == OK) return RELEXISTS; 
  
  strcpy(rd.relName, relation.c_str());
  rd.attrCnt = attrCnt;
  status = relCat->addInfo(rd);
  if (status != OK) return status;
  int offset = 0;
  for (int i = 0; i<attrCnt; i++){
	  attrInfo ai = attrList[i];
	  strcpy(ad.relName, ai.relName);
	  strcpy(ad.attrName, ai.attrName);
	  ad.attrOffset = offset; 
	  ad.attrType   = ai.attrType;
	  ad.attrLen    = ai.attrLen;
	  status = attrCat->addInfo(ad);
	  if(status != OK) return status;
	  offset = offset + ai.attrLen;
  }
  
  status = createHeapFile(relation);
  if(status != OK) return status;
  return OK;

}

