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

📄 intepretor.h

📁 实现一个精简型单用户SQL引擎(DBMS)MiniSQL
💻 H
📖 第 1 页 / 共 2 页
字号:
	}
  ~TB_Select_Info(){delete ColumnHead;delete ConditionHead;}
};
    
//插入的记录的其中一个字段信息
typedef struct TInsert_Column *pIns_Col;
typedef  struct TInsert_Column  
{											    
	char		      		ColumnName[NAMEMAXLEN];			    //字段名
	Column_Type		  	    ColType;		              		//此字段的类型
	COLVAL		            value;
	TInsert_Column*		    next;			                	//下一个字段信息
	TInsert_Column(char* str,Column_Type coltype,COLVAL val):
        ColType(coltype),value(val) {strcpy(ColumnName,str);
	next = NULL;}
	~TInsert_Column(){delete next;}
}Insert_Column;

//插入的记录
class TB_Insert_Info							
{
public:
	TB_Insert_Info(char* tbname,pIns_Col phead,int ival):head(phead),ColumnNum(ival){strcpy(TableName,tbname);}
	char 			        TableName[NAMEMAXLEN];				//所要插入的表名
	Insert_Column*      	head;				               	//所有字段信息链表
	int			           	ColumnNum;		          			//链表长度
	~TB_Insert_Info(){delete head;} 
};

										    
//修改的记录的其中一个字段信息
typedef struct TUpdate_Column *pUpd_Col;
typedef struct TUpdate_Column 
{
	char				    ColumnName[NAMEMAXLEN];		        //字段名
	Column_Type		    	ColType;	            		    //此字段的类型
	COLVAL		            value;                              //字段的新值
	TUpdate_Column*		    next;	              			    //下一个字段信息
	TUpdate_Column(char* colname,Column_Type tcoltype,COLVAL val):
	ColType(tcoltype),value(val),next(0)
	{strcpy(ColumnName,colname);
	}
	~TUpdate_Column(){delete next;}
}Update_Column;


//修改信息
class	 TB_Update_Info						
{
public:
	TB_Update_Info(char* tbname,Update_Column* colhead,int colnum,pConds condhead,int condnum):
	ColumnHead(colhead),ConditionHead(condhead),ColumnNum(colnum),ConditionNum(condnum)
	{strcpy(TableName,tbname);}
	Update_Column*		ColumnHead;		      	                //所要修改的字段及其值的链表
	pConds 	            ConditionHead;	    	                //修改的范围的查询条件链表
	int					ColumnNum;			                    //字段数
	int					ConditionNum;		                    //条件数
	char				TableName[NAMEMAXLEN];		            //要执行修改的表名
	~TB_Update_Info(){delete ColumnHead;delete ConditionHead;}
};


//删除信息
class	 TB_Delete_Info						
{
public:
	char		      		TableName[32];		                //要进行删除的表名
	Delete_Condition*	    head;			    	            //条件链表
	int					    ConditionNum;	  	                //条件链表长度
	TB_Delete_Info(char* tbn,Delete_Condition *pdel_cond,int icond):
	head(pdel_cond),ConditionNum(icond)
	{
		strcpy(TableName,tbn);
	}
	~TB_Delete_Info(){delete head;};
};

 //*** 类型说明:这是有关处理输入的一个类,包括输入->有意字串,有意字串->参数类的组织全在其成员函数之中
 class Ch_csVstrBlk
 {
  public:
    Ch_csVstrBlk();                                             
    //对输入进行处理,产生一个有以字串的集合
  	~Ch_csVstrBlk(){delete strInputCharList;delete  StrHead;}

    void MakeVstrBlkList();
    //** 功能描述: 用于将所有vstrBlk给打印出来
    TB_Create_Info* CH_Create();
    //** 功能描述:负责Create命令的所有操作
    TB_Select_Info* CH_Select();
    //** 功能描述:负责Select命令的所有操作 
    TB_Insert_Info* CH_Insert();
    //** 功能描述:负责Insert命令的所有操作 
    TB_Update_Info* CH_Update();
    //** 功能描述:负责Update命令的所有操作 
    TB_Delete_Info* CH_Delete();
    //** 功能描述:负责Deletc命令的所有操作
	  
    ECMD_TYPE ResolveCmd();
    //** 功能描述:负责判断第一个有意字串并决定输入的到底是何命令
	void ThrowStrErr(int type,int iNum = 0);
    //** 功能描述:负责构造一个错误类并将它抛出来
    void PassCommon(char*);
    void ChoseDatabase();
    //** 功能描述:选择一个数据库
    void DropDB();
    //** 功能描述:删除一个数据库
    void DropTB();
   //** 功能描述:删除一个表
    void NewDB();
   //** 功能描述:创建一个数据库

  private:
    VSTR_BLK_PTR StrHead;
    VSTR_BLK_PTR StrNow;
    VSTR_BLK_PTR StrTail;
    char* strInputCharList;
    int iNumNowInVstr;
    //** 功能描述:记录现在StrNow所指的对象在链表中所处的序号(从1开始计数)
    int iLineNum[20][2];                                        
    //** 功能描述:记录输入的行数信息,用于出错时提示,
    //如x=iLineNum[i][0]:表示第i行的起始元素在StrHead所指向的链表中处于第x个位置(从0开始计)
    int sta_i;
    //** 功能描述:用于描述对于这一次的命令输入的处理中当前所出的在strInputCharList中的位置,见InString();函数

	char* InitialInput();
    //** 功能描述:初始化输入
    char* GetTBName();
    //** 功能描述:从StrNow->str中得到所需要的表名
    bool InString(char**);
    //** 功能描述:在初始化得到的字符串中获取一个有意字串
    void InitialVar();
    //** 功能描述:初始化一些特殊的值
    void NextStr();
    //** 功能描述:跳到下一个有意字串
    pCreate_Column GetColumnInfo(bool* NotEnd,bool&);
    void GetCheckInfo(bool *NotEnd,pCreate_Column pHead);
    //** 功能描述:得到有关一个列的约束信息
    EOPE_TYPE GetOptype();
    //** 功能描述:得到一个列的约束的操作类型
    pCreate_Column GetColForCheck(char* str,pCreate_Column pHead);
    //** 功能描述:得到有关一个列的约束类型,是 enum Operator_Type {B, BE, L, LE, E, NE,BETWEEN} 中的一种 
    void SetMin_Max(COLVAL& min,COLVAL& max,EOPE_TYPE optype,ECOL_TYPE coltype,bool next = 1);
    //** 功能描述:根据optype给min和max赋值,当前StrNow必须处在处理的有意字串上
    void SetMin_Max(COLVAL temp,COLVAL& min,COLVAL& max,EOPE_TYPE optype,ECOL_TYPE coltype);
    //** 功能描述:重载SetMin_Max,利用temp的值配合optype和coltype来给min和max赋值
    void SetColValFStr(ECOL_TYPE& coltype,COLVAL& tColval,bool next = 1);
    //** 功能描述:得到有关一个输入的字串为和类型(I,C,F)及对相应的tColVal赋值
    pSel_Col   GetSelColList(int& iColNum);
    //** 功能描述:得到select中关于字段(列名)的列表
    pSel_Cond  GetCondList(int& iCondNum);
    //** 功能描述:得到select,update,delete,insert中有关条件的描述信息的列表
    pIns_Col GetInsValList(int& iValNum);
    //** 功能描述:得到一个有关Insert函数中所有的输入的值得链表
    pUpd_Col GetUpdColList(int &iColNum);
    //** 功能描述:得到Update中关于字段(列名)及其值的列表
 };

 /***********************类定义***********************/
 /***********************函数声明***********************/
// enum MSG { CREATE, SELECT, INSERT, UPDATE, DELETE, DROP, QUIT} ;
 ECMD_TYPE GetCommand(TB_Create_Info**,TB_Select_Info**,TB_Insert_Info**,TB_Update_Info**,TB_Delete_Info**);
 //** 功能描述:该模块的主函数,负责所有操作
 char ChUpToLowCase(char);
 //** 功能描述:将一个大写字母换成小写,否则原样返回
 char* FilterQuota(char* strin);
 //** 功能描述:负责将一个字符串中的单引号过滤,如FilterQuota("'abc'") == "abc"
 bool CompStrEver(char* str1,char* str2);
 //** 功能描述:比较两个字符串是否相等,忽略大小写,return 1--相同,0---不同
 void SaveKeyChar(char* str,int* index,char In);
 //** 功能描述:保存关键的由于辨别有意字串的关键字符,如回车,在InitialInput()中调用
 void SetCurLocation(char* str);
 //将当前的路径设置好
 void SetCurRelation(char* str);
 //将当前的表名设置好
 void ShowHelp();
 //显示帮助信息
 void QuitSQL();
 //退出MiniSQL
 void ShowMsg();
 //在屏幕上打印消息
 void GnlTrwErr(int);
 //Generally Throw the Errors,一般性错误,如db不存在

 // void ResetDBinfo();
 //删除当前正在使用的数据库后对有关数据库路径和名称信息的重新设置
/***********************函数声明***********************/
  
#endif// INTEPRETOR_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -