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

📄 catalog_manager.cpp

📁 设计并实现一个精简型单用户SQL引擎(DBMS)MiniSQL
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			{
				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 + -