Catalog.h
上传用户:lkd6667
上传日期:2015-05-13
资源大小:1448k
文件大小:3k
源码类别:

其他数据库

开发平台:

C/C++

  1. #ifndef CATALOG_H
  2. #define CATALOG_H
  3. #include "Glob_Var.h"
  4. #include "Intepretor.h"
  5. #include "Buffer.h"
  6. #define MAX_CHAR_LEN  256
  7. #define NAME_LENGTH  33
  8. #define Update_Condition TSelect_Condition
  9. #define Delete_Condition TSelect_Condition
  10. //字段约束条件中的值的形式
  11. union Limit_Value
  12. {
  13.     int    IntValue; //整形值
  14.     char  CharValue[MAX_CHAR_LEN]; //字符串 
  15.     float  FloatValue; //浮点型值
  16. };   
  17. //字段上的约束条件
  18. typedef struct TConstraint_Info
  19. {
  20. Operator_Type OperType; // >  >=  <  <=  =  !=  between…and…
  21.     Limit_Value min; //下限
  22.     Limit_Value max; //上限
  23. }Constraint_Info;
  24. //字段信息
  25. typedef struct TColumn_Info
  26. {
  27.     int ID; //按用户输入的顺序所规定的ID
  28. char     ColumnName[NAME_LENGTH]; //字段名(限定最长为32位)
  29.     int IsPrimary; //是否主键的标志:1-是;0-否
  30.     int  IsNull; //是否可以为空:1-是;0-否
  31. Column_Type ColType; //字段类型:int,char,float
  32.     int RequiredLength; //用户要求字段长度
  33. int StoredLength; //实际存储长度
  34. union{
  35. TColumn_Info* next; //下一个字段的内存指针
  36. _F_FileAddr  FileNext; //下一个字段的文件指针
  37. }ColumnPtr;
  38. union{
  39. Constraint_Info* constraint; //指向此字段上的约束条件的内存指针
  40. _F_FileAddr  FileConstraint; //指向此字段上的约束条件的文件指针
  41. }ConstraintPtr;
  42. }Column_Info;
  43. //表信息
  44. typedef struct TTable_Info
  45. {
  46.     TTable_Info();
  47. char      TableName[NAME_LENGTH]; //表名(限定最长为32位)
  48.     int      TotalColumn; //总字段数
  49.     int  RecordLength; //每个记录长度
  50. int      KeyAttrNum; //多属性主键中属性个数
  51. union{
  52. Column_Info*     Key; //指向主键的内存指针
  53. _F_FileAddr  FileKey; //指向主键的文件指针
  54. }KeyPtr;
  55. }Table_Info;
  56. class HCatalog
  57. {
  58. public:
  59.     
  60.     
  61.     void Create(TB_Create_Info&,char*); //创建表
  62.     
  63.     void Select(TB_Select_Info&, //查询(Interpreter给出TB_Create_Info&,
  64.                 Condition_Info&, // Condition_Info&给Index
  65.                 Select_Rec_Info&); //      Select_Rec_Info&给Record)
  66.     void Insert(TB_Insert_Info&, //插入(Interpreter给出TB_Insert_Info&,
  67.      Key_Attr&, //      pKey_Attr给Index,
  68.      Rec_Info&); // Record_Info&给Record)
  69.     
  70.     void Update(TB_Update_Info&, //更新(Interpreter给出TB_Update_Info&,
  71.      Condition_Info&, // Condion_Info&给Index,
  72.      Rec_Info&); // Rec_Info&给Record)
  73.     
  74.     void Delete(TB_Delete_Info&, //删除(Interpreter给出TB_Delete_Info&,
  75.          Condition_Info&); // Condition_Info给Index)
  76.  private:
  77. Column_Info* Find_Column(char* ) const; //查找并定位字段信息
  78.     
  79. bool Exist_Column(char*) const;  //检查字段是否已存在
  80.     bool Check_Key(Column_Info*) const; //检查是否是主键
  81. bool Check_Type(Column_Info*,Column_Type) const; //检查类型是否匹配
  82.     
  83. bool Check_Value(Column_Info*,Column_Value*) const; //检查插入或更新值是否满足约束条件
  84. bool Check_Length(Column_Info*,Column_Value*) const; //检查char型值的长度是否有效
  85. bool Check_Key_Validation(Column_Type, Column_Value*, Column_Value*) const;   //检查key的有效性
  86.   
  87.     Column_Info* Form_ListNode(Create_Column*,int) const;     //形成一个字段链表节点
  88.  
  89. };
  90. #endif