亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? intepretor.cpp

?? 實(shí)現(xiàn)一個(gè)精簡型單用戶SQL引擎(DBMS)MiniSQL
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
}
void Create_Column::SetColValfloat(EOPE_TYPE optype,float fMin,float fMax)
{
/***************************************************************** 
將Create_Column()里未根據(jù)實(shí)際初始的min.FloatValue,max.FloatValue初始一下
****************************************************************/
  OperType = optype;
  min.FloatValue = fMin;
  max.FloatValue = fMax;
}

/***************************************************************** 
** 輸 出: ---  表示一個(gè)完整的有關(guān)Insert操作的參數(shù)類
** 功能描述:負(fù)責(zé)Insert命令的所有操作
** 全局變量: PassCommon()
****************************************************************/ 
TB_Insert_Info* Ch_csVstrBlk::CH_Insert()
{
  char* strTableName = 0;						//<--- 所要插入的表名
  TB_Insert_Info* tbReturn = 0;
  pIns_Col	pHead = 0;
  int iValNum = 0;								//<--- 鏈表長度

  //<--- 取得insert插入值列表
  PassCommon("into");
  strTableName = GetTBName();           //<--- 取得表名
  if(!CheckTB(strTableName))
		GnlTrwErr(NOSUCHTB);            //<--- 檢驗(yàn)輸入的該table是否存在
  SetCurRelation(strTableName);         //<--- 保存表名
  PassCommon("values");
  PassCommon("(");
  pHead = GetInsValList(iValNum);       //<--- 取得插入值序列
  PassCommon(")");
  PassCommon(";");
  tbReturn = new TB_Insert_Info(strTableName,pHead,iValNum);

  return tbReturn;
}

pIns_Col Ch_csVstrBlk::GetInsValList(int& iValNum)
{
    pIns_Col pHead = 0,pTail,pTemp = 0;
	Column_Type			ColType;				//<--- 此字段的類型
	COLVAL		value;
	int FirstTime = 1;

	do{
	iValNum++;
	if(!FirstTime)                              //<--- 不是第一個(gè)值
	  PassCommon(",");                          //<--- 各值以" , "相隔
	else 
		FirstTime = 0;
	SetColValFStr(ColType,value);

	pTemp = new Ins_Col("*",ColType,value);     //<--- 設(shè)置好各個(gè)列值
    if(pHead == 0)
    {pHead = pTemp;
     pTail = pTemp;
    }
   else{
	 pTail->next = pTemp;
	 pTail = pTemp;}
	}
	while(CompStrEver(StrNow->str,","));

	return pHead;
}


/***************************************************************** 
** 輸 出: ---  表示一個(gè)完整的有關(guān)Select操作的參數(shù)類,負(fù)責(zé)Select命令的所有操作
** 全局變量: PassCommon()ThrowStrErr()GetSelColList()CheckTB()
GnlTrwErr()SetCurRelation()TB_Select_Info()GetCondList()
****************************************************************/ 
TB_Select_Info* Ch_csVstrBlk::CH_Select()
{
  char* strTableName = 0;
  TB_Select_Info* tbReturn = 0;
  pSel_Col	pSel_ColHead = 0;
  pSel_Cond pCond_Head = 0;
  int iColNum = 0;
  int iCondNum = 0;
  bool NotEnd = 1;

  if(CompStrEver(StrNow->str,"from"))
    ThrowStrErr(NOCOL,iNumNowInVstr);
  else
    pSel_ColHead = GetSelColList(iColNum);
  //<--- 取得select 列名列表
  PassCommon("from");
  strTableName = GetTBName();
  //<--- 得到表名
  if(!CheckTB(strTableName))
		GnlTrwErr(NOSUCHTB);           //<--- 檢驗(yàn)輸入的該table是否存在

  SetCurRelation(strTableName);        //<--- 保存表名
  if(CompStrEver(StrNow->str,";"))
    {iCondNum = 0;pCond_Head = 0;}
  else
    {PassCommon("where");
    pCond_Head = GetCondList(iCondNum);} //<--- 得到條件鏈表
  tbReturn = new TB_Select_Info(strTableName,iColNum,pSel_ColHead,iCondNum,pCond_Head);

  return tbReturn;
}


//功能描述:得到select,update,delete,insert中有關(guān)條件的描述信息的列表--->
pSel_Cond  Ch_csVstrBlk::GetCondList(int& iCondNum)
{
	pSel_Cond pHead = 0,pTail,pTemp = 0;
	int FirstTime = 1;
    char				PriKey[NAMEMAXLEN];				        //<--- 主鍵名	
	COLVAL		        tmax;						            //<--- 上限
	COLVAL		        tmin;						            //<--- 下限
	COLVAL              tColVal;
	Column_Type			tColType;
	Operator_Type		tOperType;					            //<--- 關(guān)系運(yùn)算符
	do{
	iCondNum++;
	if(!FirstTime)
	  PassCommon("and");
	else 
		FirstTime = 0;
	strcpy(PriKey,StrNow->str);
	NextStr();                      //<--- 獲得第一個(gè)條件的列名
	tOperType = GetOptype();        //<--- 得到操作類型
	if(tOperType == BETWEEN)
	{
		PassCommon("between");
		SetColValFStr(tColType,tmin);
		PassCommon("and");
        SetColValFStr(tColType,tmax);
        }
     
	else
	{SetColValFStr(tColType,tColVal);
	SetMin_Max(tColVal,tmin,tmax,tOperType,tColType);}
	
	pTemp = new TSelect_Condition(PriKey,tmin,tmax,tColType,tOperType);
    if(pHead == 0)
    {pHead = pTemp;
     pTail = pTemp;
    }
   else{
	 pTail->next = pTemp;
	 pTail = pTemp;}


	}while(CompStrEver(StrNow->str,"and"));

	return pHead;
}


//<--- 功能描述:得到有關(guān)一個(gè)輸入的字串為和類型(I,C,F)及對相應(yīng)的tColVal賦值
void Ch_csVstrBlk::SetColValFStr(ECOL_TYPE& coltype,COLVAL& tColVal,bool next)
{
	int i = 0;
	bool NotFind = 1;
	char* strTemp = StrNow->str;
	if(strTemp[0] == '\'')
		{strTemp = FilterQuota(StrNow->str);
		 coltype = C;
		 tColVal.pCharValue = strTemp;
		}
	else
	{
		for(i = 0;strTemp[i] !='\0' && NotFind;i++)
			if(strTemp[i] == '.')           //<--- 存在點(diǎn)號,則說明是float
				NotFind = 0;
		if(NotFind == 0)
		{
			tColVal.FloatValue = atof(StrNow->str);
			coltype = F;
		}
		else
		{
			tColVal.IntValue = atoi(StrNow->str);
			coltype = I;
		}
	}
	if(next)
		NextStr();                          //<--- 轉(zhuǎn)到下一個(gè)條件上
}

//<--- 功能描述:得到select中關(guān)于字段(列名)的列表
pSel_Col Ch_csVstrBlk::GetSelColList(int& i)
{
	pSel_Col pHead = 0,pTail,pTemp = 0;
	pHead = new Sel_Col(StrNow->str);
	pTail = pHead;                          //<--- 得到第一個(gè)列名
	i++;
	NextStr();
	while(!CompStrEver(StrNow->str,"from")) //<--- 當(dāng)不是from(應(yīng)該是" , ")時(shí),說明還有列名
	{
		PassCommon(",");
		pTemp = new Sel_Col(StrNow->str);
		NextStr();
	  	pTail->next = pTemp;
		pTail = pTemp;
		i++;                                //<--- 計(jì)算列名的數(shù)量
}
return pHead;		
}

/***************************************************************** 
** 輸 出: ---  表示一個(gè)完整的有關(guān)Update操作的參數(shù)類,負(fù)責(zé)Update命令的所有操作
** 全局變量: PassCommon()
****************************************************************/ 
TB_Update_Info* Ch_csVstrBlk::CH_Update()
{
  char* strTableName = 0;	               //<--- 要執(zhí)行修改的表名
  Update_Column*		pUpd_ColHead = 0;  //<--- 所要修改的字段及其值的鏈表
  pConds 	pCond_Head = 0;                //<--- 修改的范圍的查詢條件鏈表
  int		iColNum = 0;		           //<--- 字段數(shù)
  int		iCondNum = 0;		           //<--- 條件數(shù)
  TB_Update_Info* tbReturn = 0;
  strTableName = GetTBName();              //<--- 得到表名
  if(!CheckTB(strTableName))
		GnlTrwErr(NOSUCHTB);               //<--- 檢驗(yàn)輸入的該table是否存在
  SetCurRelation(strTableName);            //<--- 保存表名
  PassCommon("set");                       //<--- 過濾set,進(jìn)入取得列名鏈表階段
  pUpd_ColHead = GetUpdColList(iColNum);
  PassCommon("where");
  pCond_Head = GetCondList(iCondNum);      //<--- 得到條件鏈表
  tbReturn = new TB_Update_Info(strTableName,pUpd_ColHead,iColNum,pCond_Head,iCondNum);
 
  return tbReturn;
}


pUpd_Col Ch_csVstrBlk::GetUpdColList(int &iColNum)
//<--- 得到update中要重新設(shè)值的列名
{	pUpd_Col pHead = 0,pTail = 0,pTemp = 0;
	char				ColName[NAMEMAXLEN];		  //<--- 字段名
	Column_Type			ColType;			          //<--- 此字段的類型
	COLVAL		value;
	int FirstTime = 1;
	do{
	iColNum++;
	if(!FirstTime)
	  PassCommon(",");
	else 
		FirstTime = 0;
	strcpy(ColName,StrNow->str);
	NextStr();
	PassCommon("=");
    SetColValFStr(ColType,value);                     //<--- 對該字段的新值和列的值類型賦值
	pTemp = new TUpdate_Column(ColName,ColType,value);//<--- 生成該字段
    if(pHead == 0)
    {pHead = pTemp;
     pTail = pTemp;
    }
   else{
	 pTail->next = pTemp;
	 pTail = pTemp;}                                  //<--- 鏈到鏈表中
	}while(CompStrEver(StrNow->str,","));             //<--- 如果以','結(jié)尾,說明可能是多個(gè)列同時(shí)更新值
    return pHead;
}


TB_Delete_Info* Ch_csVstrBlk::CH_Delete()
{  char*    strTableName = 0;	    //<--- 要執(zhí)行修改的表名
   pConds   pCond_Head = 0;			//<--- 所要修改的字段及其值的鏈表
   int		iCondNum = 0;		    //<--- 條件數(shù)
   TB_Delete_Info* tbReturn = 0;
   PassCommon("from");
   strTableName = GetTBName();      //<--- 取得表名
   if(!CheckTB(strTableName))
		GnlTrwErr(NOSUCHTB);        //<--- 檢驗(yàn)輸入的該table是否存在
   SetCurRelation(strTableName);    //<--- 保存表名
   PassCommon("where");
   pCond_Head = GetCondList(iCondNum);//<--- 得到條件列表
   tbReturn = new TB_Delete_Info(strTableName,pCond_Head,iCondNum);

   return tbReturn;

}

void Ch_csVstrBlk::ChoseDatabase()
{
	if(CompStrEver(StrNow->str,";"))
		ThrowStrErr(COMMON,iNumNowInVstr);//<--- 可能漏輸database name
	char* dbname = StrNow->str;
	NextStr();
	PassCommon(";");                      //<--- 在database name后不能有其他的輸入
	if(!CheckDB(dbname))
		GnlTrwErr(NOSUCHDB);              //<--- 檢驗(yàn)輸入的該database是否存在
	SetCurLocation(dbname);               //<--- 根據(jù)該輸入設(shè)置好當(dāng)前路徑
	strcpy(CurDB,dbname);                 //<--- 設(shè)置好當(dāng)前的數(shù)據(jù)庫
	ShowTable();
}


void Ch_csVstrBlk::DropTB()
{
    if(CompStrEver(StrNow->str,";"))
        ThrowStrErr(COMMON,iNumNowInVstr);//<--- 可能漏輸database name
    if(CompStrEver(CurDB,""))
	    GnlTrwErr(NODBUSED);              //<--- 如果該數(shù)據(jù)庫不存在,則出錯(cuò)
	char* tbname = StrNow->str;
	NextStr();
	PassCommon(";");                      //<--- 在table name后不能有其他的輸入
	if(!CheckTB(tbname))
		GnlTrwErr(NOSUCHTB);              //<--- 檢驗(yàn)輸入的該table是否存在
    SetCurRelation(tbname);               //<--- 保存表名

}
	  
void Ch_csVstrBlk::DropDB()
{
	if(CompStrEver(StrNow->str,";"))
		ThrowStrErr(COMMON,iNumNowInVstr);//<--- 可能漏輸database name
	char* dbname = StrNow->str;
	NextStr();
	PassCommon(";");                      //<--- 在database name后不能有其他的輸入
	if(!CheckDB(dbname))
		GnlTrwErr(NOSUCHDB);              //<--- 檢驗(yàn)輸入的該database是否存在
    SetCurLocation(dbname);               //<--- 根據(jù)該輸入設(shè)置好當(dāng)前路徑
    strcpy(CurDB,dbname);                 //<--- 設(shè)置好當(dāng)前的數(shù)據(jù)庫
}

// 創(chuàng)建一個(gè)數(shù)據(jù)庫--->
void Ch_csVstrBlk::NewDB()
{
	if(CompStrEver(StrNow->str,";"))
		ThrowStrErr(COMMON,iNumNowInVstr);            //<--- 可能漏輸database name
	char* dbname = StrNow->str;
	NextStr();
	PassCommon(";");                                  //<--- 在database name后不能有其他的輸入
	if(CheckDB(dbname))
		GnlTrwErr(SUCHDBEXIST);                       //<--- 檢驗(yàn)輸入的該database是否存在
	CreateDB(dbname);

}

 /***********************普通函數(shù)***********************/
char* FilterQuota(char* strin)
{
// 將字符串中的''給消去 如'aaa'->aaa --->
	char* strTemp = new char[NAMEMAXLEN];
	int i = 0;
	if(strin[0] != '\'')
		strcpy(strTemp,strin);
	else
	{	for(;strin[i+1]!='\'';i++)
			strTemp[i] = strin[i+1];
		strTemp[i] = '\0';}
	
	return strTemp;
}

 bool CompStrEver(char* str1,char* str2)
/***************************************************************** 
** 功能描述: 
比較兩個(gè)字符串是否相等,忽略大小寫,return 1--相同,0--- 不同
****************************************************************/ 
{  char a,b;
   bool IsSame,NotEnd;
   int i = 0;
   do{
      a = ChUpToLowCase(str1[i]);
      b = ChUpToLowCase(str2[i++]);
      IsSame = (a==b);
      NotEnd = (a!='\0');
    }while(IsSame&&NotEnd);
   if (IsSame == 1)
     return 1;          
   //<--- IsSame == 1,則說明NotEnd == 0,即比較的結(jié)果是str1與str2相等
   else
     return 0;
 }

 void SaveKeyChar(char* str,int* index,char in)
/***************************************************************** 
** 輸 入: str,index,in 
** str--- 目標(biāo)字符串?dāng)?shù)組 
** index---  字符所要保存的位置
** in---  所要保存的字符
** 功能描述: 
保存關(guān)鍵的由于辨別有意字串的關(guān)鍵字符,如回車,在InitialInput()中調(diào)用
****************************************************************/
{
  if(str[*index-1] != 0)
    str[(*index)++] = 0;
  str[(*index)++] = in;
  str[(*index)++] = 0;
}

 // 將一個(gè)大寫字母換成小寫,否則原樣返回 --->
 char ChUpToLowCase(char chIn)
 {
   if(chIn >= 'A' && chIn <= 'Z')
     chIn += 32;
   return chIn;
 }

// 將當(dāng)前的路徑設(shè)置好 --->
 void SetCurLocation(char* str)
 {
	strcpy(CurLocation,"..\\data\\");
	strcat(CurLocation,str);
	strcat(CurLocation,"\\");
 }

 // 將當(dāng)前的表名設(shè)置好 --->
void SetCurRelation(char* str)
 {
	strcpy(CurRelationName,str);
 }

void ShowHelp()
{//<--- 幫助提示信息
std::cout<<"\n\
help        Display this text\
\n\
create      used like \n\
            'create table tablename(valuename type notnull);'\
\n\
select      used like \n\
            'select columnname from tablename where check straint;'\
\n\
delete      used like \n\
            'delete columnname from tablename where check straint;'\
\n\
update      used like \n\
            'update tablename set columnname = columnvalue where check straint;'\
\n\
insert      used like \n\
            'insert into tablename(values);'\
\n\
use         Use another database. used like'use dbname;'\
\n\
showdb      Show all the databases in the MiniSQL\
\n\
showtable   Show all the tables in the current db,\n\
            so you must specify a db first!\
\n\
drop        drop the table if you like,but you must use some db first & specify the table name,like\n\
            'drop tablename;'\
\n\
dropdb      drop the database if you like,you must specify one database,like\n\
            'dropdb dbname;'\
\n\
Exit        Quit mysql,The Same As command quit \n\
\n\
quit        Quit mysql\n"<<'\n';

}

void QuitSQL()
{
	std::cout<<"Thank you for your using MiniSQL!"<<'\n'<<"See you!"<<'\n';
}

void ShowMsg(char* str)
{
	std::cout<<str<<'\n';
}

//<--- Throw the General Errors,一般性錯(cuò)誤,如db不存在
void GnlTrwErr(int ErrType)
{
	GnlErrInfo eErrTemp;	
    eErrTemp.iErrType = ErrType;
	throw(eErrTemp);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区在线观看| 久久综合一区二区| 色哟哟日韩精品| 色综合一个色综合亚洲| 成人ar影院免费观看视频| 成人美女视频在线观看18| 国产精品白丝jk白祙喷水网站 | 另类综合日韩欧美亚洲| 婷婷成人激情在线网| 蜜臀av性久久久久蜜臀av麻豆 | 波多野结衣在线一区| 懂色中文一区二区在线播放| 成人夜色视频网站在线观看| 成人高清免费观看| 9i看片成人免费高清| 91麻豆蜜桃一区二区三区| 色婷婷综合五月| 欧美日韩在线播放一区| 91麻豆精品国产| 欧美大尺度电影在线| 久久久久国产成人精品亚洲午夜 | 精久久久久久久久久久| 国产精品综合二区| 99re这里只有精品6| 欧美伊人精品成人久久综合97| 欧美性xxxxxx少妇| 欧美一级爆毛片| 国产亚洲综合色| 最新不卡av在线| 亚洲国产日产av| 国产一区二区三区四区五区美女 | gogogo免费视频观看亚洲一| 在线看不卡av| 日韩女优av电影| 亚洲国产精品二十页| 一区二区三区在线免费播放 | 色综合久久综合| 正在播放亚洲一区| 久久久亚洲精品一区二区三区| 国产精品日产欧美久久久久| 亚洲成a人v欧美综合天堂下载 | 精品噜噜噜噜久久久久久久久试看| 久久久美女艺术照精彩视频福利播放| 亚洲欧洲精品一区二区三区不卡| 亚洲18女电影在线观看| 激情欧美一区二区| 99精品视频一区二区| 51久久夜色精品国产麻豆| 欧美高清在线精品一区| 婷婷久久综合九色综合绿巨人| 国产精品自拍一区| 欧美日韩精品二区第二页| 国产视频一区二区在线观看| 亚洲第一成年网| 成人伦理片在线| 欧美一区二区免费观在线| 中文字幕在线一区| 麻豆成人91精品二区三区| 日本乱码高清不卡字幕| 久久久久国色av免费看影院| 丝袜亚洲另类欧美综合| av在线不卡电影| 精品国产露脸精彩对白| 亚洲国产日韩av| 成人精品国产免费网站| 日韩三级电影网址| 亚洲狠狠爱一区二区三区| 国产suv一区二区三区88区| 69av一区二区三区| 亚洲黄色av一区| 福利电影一区二区三区| 日韩免费高清视频| 五月天久久比比资源色| 色视频欧美一区二区三区| 久久女同互慰一区二区三区| 日精品一区二区| 日本福利一区二区| 国产精品国产三级国产普通话蜜臀| 久久不见久久见免费视频1| 欧美色图免费看| 亚洲欧美偷拍卡通变态| 丁香婷婷综合激情五月色| 欧美一级精品在线| 亚洲午夜免费电影| 色综合天天性综合| 国产精品女人毛片| 国产不卡视频一区| 久久久久久电影| 国产又黄又大久久| 欧美成人激情免费网| 免费人成网站在线观看欧美高清| 欧美高清激情brazzers| 亚洲国产精品一区二区久久恐怖片 | 欧美一区二区视频在线观看| 亚洲一区二区三区影院| 色哟哟一区二区三区| 亚洲免费资源在线播放| 91免费视频网址| 国内成人自拍视频| 欧美大片免费久久精品三p| 日韩中文字幕亚洲一区二区va在线 | 男女男精品视频| 8x8x8国产精品| 日日摸夜夜添夜夜添国产精品 | 亚洲精品一区二区三区99 | 精品久久久久久亚洲综合网 | 欧美日韩一区小说| 亚洲成a天堂v人片| 7799精品视频| 蜜臀av性久久久久av蜜臀妖精| 日韩欧美视频一区| 韩国av一区二区| 国产欧美日韩另类视频免费观看| 国产精品一线二线三线| 久久久精品影视| av日韩在线网站| 亚洲精品乱码久久久久久黑人| 色94色欧美sute亚洲线路一ni| 亚洲一二三四久久| 欧美顶级少妇做爰| 韩国av一区二区三区四区| 国产日韩亚洲欧美综合| 91在线你懂得| 五月天视频一区| 久久免费视频一区| 成人开心网精品视频| 伊人开心综合网| 欧美一区二区三区视频免费播放| 久久国产视频网| 中文字幕欧美国产| 色婷婷精品久久二区二区蜜臂av| 五月激情综合网| 久久一区二区视频| 99国产精品一区| 肉色丝袜一区二区| 久久久久久黄色| 色狠狠桃花综合| 久久精品国产免费| 亚洲欧美一区二区视频| 欧美日韩中文字幕精品| 久久电影国产免费久久电影| 国产人伦精品一区二区| 欧美私人免费视频| 国产毛片精品一区| 夜夜嗨av一区二区三区中文字幕| 6080午夜不卡| 高清在线成人网| 亚洲伦理在线免费看| 日韩精品在线网站| 99视频有精品| 蜜臀av国产精品久久久久 | 国产999精品久久| 亚洲乱码国产乱码精品精可以看| 欧美高清精品3d| 不卡的电影网站| 久久精品国内一区二区三区| 国产精品高清亚洲| 日韩精品一区二区三区三区免费| 99久久精品99国产精品| 精品综合久久久久久8888| 亚洲精品自拍动漫在线| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩欧美一区二区在线视频| 91在线视频免费91| 国产一区二区视频在线播放| 亚洲午夜精品在线| 中文欧美字幕免费| 欧美一区二区三区免费在线看 | 国产精品―色哟哟| 欧美一区二区播放| 在线观看av一区| www.日韩大片| 国产专区欧美精品| 奇米影视在线99精品| 亚洲午夜免费电影| 亚洲天堂久久久久久久| 国产欧美一区二区三区在线老狼 | 一区二区不卡在线播放| 亚洲国产激情av| 日韩欧美一区二区三区在线| 色国产精品一区在线观看| 国产成人精品免费网站| 午夜精品一区二区三区免费视频| 亚洲视频免费观看| 国产精品免费视频观看| 精品国产91洋老外米糕| 欧美一级片在线看| 欧美精品国产精品| 91视视频在线观看入口直接观看www | 精品日韩成人av| 欧美一区二区在线免费播放| 欧美在线观看一二区| 成人v精品蜜桃久久一区| 国产精品羞羞答答xxdd| 青娱乐精品视频| 日产欧产美韩系列久久99| 午夜免费久久看| 亚洲精品久久久蜜桃| 亚洲欧美一区二区三区极速播放| 久久精品亚洲乱码伦伦中文|