📄 catalog_manager.cpp
字号:
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
tempattr = temp -> AllAttrs;
while(tempattr != NULL)
{
if(strcmp(tempattr->AttrName,attrname) == 0)
{
return tempattr->type;
}
else
{
tempattr = tempattr->Next;
}
}
}
return 0;
}
short int CCatalogManager::GetAttrTypeByNum(CString tablename, unsigned int attrnum)
{
int i = 0;
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
AttrPointer tempattr;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
{
ptrTable = ptrTable->Next;
}
}
tempattr=temp->AllAttrs;
while(tempattr != NULL)
{
for(i=0;i<(int)attrnum;i++)
{
tempattr = tempattr->Next;
}
return tempattr->type;
}
}
return 0;
}
unsigned int CCatalogManager::GetAttrOffset(CString tablename, CString attrname)
{
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
AttrPointer tempattr;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
tempattr=temp->AllAttrs;
while(tempattr != NULL)
{
if(strcmp(tempattr->AttrName,attrname) == 0)
{
return tempattr->offset;
}
else
{
tempattr= tempattr->Next;
}
}
}
return 0;
}
unsigned int CCatalogManager::GetAttrLength(CString tablename, CString attrname)
{
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
AttrPointer tempattr;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
tempattr=temp->AllAttrs;
while(tempattr != NULL)
{
if(strcmp(tempattr->AttrName,attrname) == 0)
{
return tempattr->length;
}
else
{
tempattr = tempattr->Next;
}
}
}
return 0;
}
unsigned int CCatalogManager::GetRecordLength(CString tablename)
{
int len = 0;
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
AttrPointer tempattr;
if(ptrTable != NULL)
{
if(IsTableExists(tablename) == 1)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
tempattr=temp->AllAttrs;
while(tempattr!= NULL)
{
len += tempattr->length;
tempattr = tempattr->Next;
}
return len;
}
}
return 0;
}
short int CCatalogManager::IsIndexCreated(CString tablename, CString attrname)
{
IndexPointer ptrIndex = m_indextail;
while(ptrIndex != NULL)
{
if(strcmp(ptrIndex->TableName,tablename) == 0)
if(strcmp(ptrIndex->AttrName,attrname) == 0)
return 1;
ptrIndex = ptrIndex->Next;
}
return 0;
}
CString CCatalogManager::GetIndexName(CString tablename, CString attrname)
{
IndexPointer ptrIndex = m_indextail;
while(ptrIndex != NULL)
{
if(strcmp(ptrIndex->TableName,tablename) == 0)
{
if(strcmp(ptrIndex->AttrName,attrname) == 0)
return ptrIndex->IndexName;
else
ptrIndex = ptrIndex->Next;
}
else
ptrIndex = ptrIndex->Next;
}
return CString("");
}
unsigned int CCatalogManager::GetAttrNum(CString tablename)
{
int num = 0;
TablePointer ptrTable = m_tablehead;
AttrPointer ptrAttr;
TablePointer temp = NULL;
if(IsTableExists(tablename) == 1)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
ptrAttr = temp ->AllAttrs;
while(ptrAttr!= NULL)
{
num ++;
ptrAttr = ptrAttr->Next;
}
return num;
}
return 0;
}
short int CCatalogManager::GetAttrInfo(CString tablename, unsigned int attrnum, column* tempcol)
{
int i = 0;
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
AttrPointer tempattr;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
{
ptrTable = ptrTable->Next;
}
}
tempattr=temp->AllAttrs;
if(tempattr != NULL)
{
for(i=0;i<(int)attrnum;i++)
{
tempattr = tempattr->Next;
}
tempcol->collength = tempattr ->length;
strcpy(tempcol->colname,tempattr->AttrName);
tempcol->coloffset =tempattr->offset;
tempcol->IsPrimary = tempattr->IsPrimarykey;
tempcol->IsUnique = tempattr->IsUnique;
tempcol->type = tempattr->type;
return 1;
}
}
return 0;
}
short int CCatalogManager::CreateTableInfo(CString tablename, column* cols)
{
AttrPointer ptrAttr = NULL;
column* temp = cols; //save the initial colpointer
int tagA = 0;
int len = 0;
TablePointer ptrTable = new TableNode;
TablePointer ptr = m_tablehead;
if(m_tabletail != NULL)
{
m_tabletail->Next = ptrTable;
m_tabletail = ptrTable;
ptrTable->Next = NULL;
}
else
{
m_tabletail = ptrTable;
m_tablehead = ptrTable;
ptrTable->Next = NULL;
}
strcpy(ptrTable->TableName,tablename); //copy the tablename
ptrTable->number = 0;
while((cols->IsPrimary == 0) && (cols->next != NULL)) //copy the primarykey
{
cols = cols->next;
}
if((cols->IsPrimary == 0) && (cols->next == NULL))
{
strcpy(ptrTable->primarykey,"NULL");
}
else
{
strcpy(ptrTable->primarykey,cols->colname);
}
cols = temp;
while(cols != NULL) //copy the attrbutes
{
if(tagA == 0)
{
ptrTable->AllAttrs = new AttrNode;
ptrAttr = ptrTable->AllAttrs;
tagA = 1;
}
else
{
ptrAttr->Next = new AttrNode;
ptrAttr = ptrAttr->Next;
}
strcpy(ptrAttr->AttrName,cols->colname);
ptrAttr->IsPrimarykey = cols->IsPrimary;
ptrAttr->IsUnique = cols->IsUnique;
ptrAttr->length = cols->collength;
ptrAttr->type = cols->type;
if(cols->type == INT)
{
ptrAttr->offset = len;
len = len + 10;
}
else if (cols->type == FLOAT)
{
ptrAttr->offset = len;
len = len + 20;
}
else
{
ptrAttr->offset = len;
len = len + cols->collength;
}
cols = cols->next;
}
ptrAttr->Next = NULL;
cols = temp;
return 1;
}
short int CCatalogManager::CreateIndexInfo(CString indexname, CString tablename, column* cols)
{
IndexPointer ptrIndex = new IndexNode;
if(m_indextail != NULL)
{
m_indextail->Next = ptrIndex;
m_indextail = ptrIndex;
ptrIndex->Next = NULL;
}
else
{
m_indextail = ptrIndex;
m_indextail = ptrIndex;
ptrIndex->Next = NULL;
}
strcpy(ptrIndex->IndexName,indexname);
strcpy(ptrIndex->TableName,tablename);
strcpy(ptrIndex->AttrName,cols->colname);
return 1;
}
short int CCatalogManager::IsAttrUnique(CString tablename, CString attrname)
{
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
AttrPointer tempattr;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
tempattr=temp->AllAttrs;
while(tempattr != NULL)
{
if(strcmp(tempattr->AttrName,attrname) == 0)
{
if(tempattr->IsUnique == 1)
{
return 1;
}
else
{
return 0;
}
}
else
{
tempattr = tempattr->Next;
}
}
}
return 0;
}
unsigned int CCatalogManager::GetRecordNumber(CString tablename)
{
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
return temp->number;
}
return 0;
}
void CCatalogManager::RecordNumDel(CString tablename, unsigned int deleted)
{
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
temp->number = temp->number - deleted;
}
}
void CCatalogManager::RecordNumAdd(CString tablename, unsigned int added)
{
TablePointer ptrTable = m_tablehead;
TablePointer temp = NULL;
if(ptrTable != NULL)
{
while(ptrTable != NULL)
{
if(strcmp(ptrTable->TableName,tablename) == 0)
{
temp = ptrTable; //temp指向参数给定的表
ptrTable = NULL;
}
else
ptrTable = ptrTable->Next;
}
temp->number = temp->number + added;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -