?? catalog.h
字號:
#ifndef CATALOG_H
#define CATALOG_H
#include "Glob_Var.h"
#include "Intepretor.h"
#include "buffer.h"
#define MAX_CHAR_LEN 256
#define NAME_LENGTH 33
#define Update_Condition TSelect_Condition
#define Delete_Condition TSelect_Condition
//------------------------存放形式
//------------------------第一位置放關于表的信息--Table_Info
//------------------------下面順序存放各個字段信息
//------------------------每個約束條件連接到相應的字段上
//字段約束條件中的值的形式----------------------------------
union Limit_Value
{
int IntValue; //整形值
char CharValue[MAX_CHAR_LEN]; //字符串
float FloatValue; //浮點型值
};
//字段上的約束條件--------------------------------------
typedef struct TConstraint_Info
{
Operator_Type OperType; // > >= < <= = != between…and…
Limit_Value min; //下限
Limit_Value max; //上限
}Constraint_Info;
//字段信息--------------------------------------
typedef struct TColumn_Info
{
int ID; //按用戶輸入的順序所規定的ID
char ColumnName[NAME_LENGTH]; //字段名(限定最長為32位)
int IsPrimary; //是否主鍵的標志:1-是;0-否
int IsNull; //是否可以為空:1-是;0-否
Column_Type ColType; //字段類型-int,char,float
int RequiredLength; //用戶要求字段長度
int StoredLength; //實際存儲長度
union{
TColumn_Info* next; //下一個字段的內存指針
_F_FileAddr FileNext; //下一個字段的文件指針
}ColumnPtr;
union{
Constraint_Info* constraint; //指向此字段上的約束條件的內存指針
_F_FileAddr FileConstraint; //指向此字段上的約束條件的文件指針
}ConstraintPtr;
}Column_Info;
//表信息--------------------------------------
typedef struct TTable_Info
{
TTable_Info();
char TableName[NAME_LENGTH]; //表名(限定最長為32位)
int TotalColumn; //總字段數
int RecordLength; //每個記錄長度
int KeyAttrNum; //多屬性主鍵中屬性個數
union{
Column_Info* Key; //指向主鍵的內存指針
_F_FileAddr FileKey; //指向主鍵的文件指針
}KeyPtr;
}Table_Info;
//----------------------------------------------------------------------------------------------
class HCatalog
{
public:
//HCatalog();
void Create(TB_Create_Info&,char*); //表的創建(int為index所要的主鍵屬性個數)
void Select(TB_Select_Info&, //查詢(Interpreter給出TB_Create_Info&,
Condition_Info&, // Condition_Info&給Index
Select_Rec_Info&); // Select_Rec_Info&給Record)
void Insert(TB_Insert_Info&, //插入(Interpreter給出TB_Insert_Info&,
Key_Attr&, // pKey_Attr給Index,
Rec_Info&); // Record_Info&給Record)
void Update(TB_Update_Info&, //更新(Interpreter給出TB_Update_Info&,
Condition_Info&, // Condion_Info&給Index,
Rec_Info&); // Rec_Info&給Record)
void Delete(TB_Delete_Info&, //刪除(Interpreter給出TB_Delete_Info&,
Condition_Info&); // Condition_Info給Index)
//~HCatalog();
private:
Column_Info* Find_Column(char* ) const; //查找并定位字段信息
bool Exist_Column(char*) const; //檢查字段是否已存在
bool Check_Key(Column_Info*) const; //檢查是否是主鍵
bool Check_Type(Column_Info*,Column_Type) const; //檢查類型是否匹配
bool Check_Value(Column_Info*,Column_Value*) const; //檢查插入或更新值是否滿足約束條件
bool Check_Length(Column_Info*,Column_Value*) const; //檢查char型值的長度是否有效
bool Check_Key_Validation(Column_Type, Column_Value*, Column_Value*) const; //檢查key的有效性
Column_Info* Form_ListNode(Create_Column*,int) const; //形成一個字段鏈表節點
};
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -