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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? catalog.cpp

?? 實現一個精簡型單用戶SQL引擎(DBMS)MiniSQL
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		}//end while
	}//end if
	
	//if there is default column
	else{
		column = head;
		len = 0;
		while(column!=NULL){
			raw = info.head;
			while(raw != NULL){
				if(strcmp(raw->ColumnName,column->ColumnName) == 0){
					cell->ColLength = column->StoredLength;
					cell->ColType = column->ColType;
					cell->PriorLength = len;
					switch(column->ColType){
					case I:
						cell->value.IntValue = raw->value.IntValue;
						break;
					case F:
						cell->value.FloatValue = raw->value.FloatValue;
						break;
					case C:
						cell->value.pCharValue = raw->value.pCharValue;
						break;
					default:
						throw 1010;		//Error1010: Unknown type!
					}
					break;
				}
				raw = raw->next;
			}//end inner while
			//give the column that user don't default value
			if(raw == NULL){
				cell->ColLength = column->StoredLength;
				cell->ColType = column->ColType;
				cell->PriorLength = len;
				switch(column->ColType){
				case I:
					cell->value.IntValue = 0;
					break;
				case F:
					cell->value.FloatValue = 0.0;
					break;
				case C:
					cell->value.pCharValue = NULL;
					break;
				default:
					throw 1010;			//Error1010: Unknown type!
				}
			}//end if
			len += column->StoredLength;
			column = (Column_Info*)column->ColumnPtr.FileNext.MemAddr();
			
			if(column != NULL){
				cell->next = new Cell_Info;
				cell = cell->next;
			}
		}//end outer while
	}//end else

	return;
}

//---------------------------------------------------------------------------------------
//update
void HCatalog::Update(TB_Update_Info& info, Condition_Info& index, Rec_Info& record)
{
	//locate current table
    char temp[289];
	sprintf(temp,"%s%s.dbf",CurLocation,CurRelationName);
	_M_File CurrentTable = Buffer[temp];

	Update_Column* col;
	Update_Condition* cond;
	col = info.ColumnHead;
	cond = info.ConditionHead;

	Column_Info* column;
    //check validation
	while(col != NULL){
		if(!Exist_Column(col->ColumnName))
			throw 1008;		//Error1008: Column demanded has not existed yet!
		column = Find_Column(col->ColumnName);
		if(column->IsPrimary == 1)
			throw 1018;		//Error1018: Update denied on primary key!
		if(!Check_Type(column,col->ColType))
			throw 1012;		//Error1012: Type mismatch!
		if(col->ColType == C)
			if(!Check_Length(column,&col->value))
				throw 1013;	//Error1013: Length Invalid for type char!
		if(!Check_Value(column,&col->value))
			throw 1014;		//Error1014: Invalid Value!
		col = col->next;
	}

	Table_Info* table;
	table = (Table_Info*)CurrentTable.GetCataPoint().MemAddr();
	if(info.ConditionNum != table->KeyAttrNum)
		throw 1019;		//Error1019: Information Inadequate for selection(Every attribute should be included)!
	for(; cond!=NULL; cond=cond->next){
		column = this->Find_Column(cond->PrimaryKey);
		if(column == NULL)
			throw 1007;				//Error1007: Primary Key demanded has not existed yet!
		if(!this->Check_Key(column))
			throw 1011;				//Error1011: Not a select based on primary key!
		if(!this->Check_Type(column,cond->ColType))
			throw 1012;				//Error1012: Type mismatch!
    if(cond->OperType == BETWEEN){
      if(!Check_Key_Validation(cond->ColType,&(cond->max),&(cond->min)))
        throw 1020;       //Error1020: Result is null!
    }
		if(cond->ColType == C){	//check if the length is correct if the column is char type
			switch(cond->OperType){
			case L:
			case LE:
				if(!Check_Length(column,&(cond->max)))
					throw 1013;		//Error1013: Length Invalid for type char!
				else 
					break;
			case B:
			case BE:
				if(!Check_Length(column,&(cond->min)))
					throw 1013;		//Error1013: Length Invalid for type char!
				else
					break;
			case E:
			case NE:
			case BETWEEN:
					if(!Check_Length(column,&(cond->max)) || !Check_Length(column,&(cond->min)))
						throw 1013;		//Error1013: Length Invalid for type char!
					else 
						break;
			default:
				throw 1009;			//Error1009: Unknown relation operator!
			}//end switch
		}//end if
	}//end for

	//form information for index select
	Column_Info* head; 
	head = (Column_Info*)table->KeyPtr.FileKey.MemAddr();
	column = head;
	int count = table->KeyAttrNum;
	pKey_Attr pkey1,pkey2,pminkey,pmaxkey,pkey3,pkey4;
	pminkey = new Key_Attr;
	pkey1 = pminkey;  //min 
	pkey3 = pkey1;    //save pkey1
	pmaxkey = new Key_Attr;
	pkey2 = pmaxkey;  //max
	pkey4 = pkey2;    //save pkey2
	//organize information
    while((column!=NULL) && (count!=0)){
		//if this column is primary key
        if(column->IsPrimary == 1){
			//find the corresponding column
            for(cond = info.ConditionHead; cond!=NULL; cond=cond->next){
				if(strcmp(cond->PrimaryKey,column->ColumnName)==0){		 
					switch (cond->ColType){
					case I:
						pkey1->value.IntValue = cond->min.IntValue;
						pkey2->value.IntValue = cond->max.IntValue;
						break;
					case F:
						pkey1->value.FloatValue = cond->min.FloatValue;
						pkey2->value.FloatValue = cond->max.FloatValue;
						break;
					case C:
						pkey1->value.pCharValue = cond->min.pCharValue;
						pkey2->value.pCharValue = cond->max.pCharValue;
						break;
					default:
						throw 1010;				//Error1010: Unknown type!
					}//end switch
					break;
				}//end if
			}//end for
		
			if(cond==NULL)
				switch(column->ColType){
				case I:
					pkey1->value.IntValue = 1;
					pkey2->value.IntValue = 0;
					break;
				case F:
					pkey1->value.FloatValue = 1.0;
					pkey2->value.FloatValue = 0.0;
					break;
				case C:
					strcpy(pkey1->value.pCharValue,"b");
					strcpy(pkey2->value.pCharValue,"a");
					break;
				default:
					throw 1010;				//Error1010: Unknown type!
				}//end switch
			
			pkey3 = pkey1;
			pkey4 = pkey2;
			pkey1->next = new Key_Attr;
			pkey1 = pkey1->next;
			pkey2->next = new Key_Attr;
			pkey2 = pkey2->next;
			count--;
		}//end if
		
		column = (Column_Info*)column->ColumnPtr.FileNext.MemAddr();
	}//end while
	
	pkey3->next = NULL;
	pkey4->next = NULL;
	delete pkey1;
	delete pkey2;

	index.max = pmaxkey;
	index.min = pminkey;
	if(info.ConditionHead == NULL)
        index.OperType = ALL;
    else
        index.OperType = info.ConditionHead->OperType;
	
	
	//form information for record update
	Cell_Info* cell = new Cell_Info;
	Cell_Info* cell1 = cell;
	record.head = cell;
	record.ColNum = info.ColumnNum;
    record.RecordLength = table->RecordLength;
	column = head;
	int len = 0;    //for prior length
	while(column!=NULL){
		col = info.ColumnHead;
		//find the corresponding column
        for(;col!=NULL;col=col->next){
			if(strcmp(col->ColumnName,column->ColumnName)==0){
				cell->ColLength = column->StoredLength;
				cell->ColType = column->ColType;
				cell->PriorLength = len;
				switch(column->ColType){
				case I:
					cell->value.IntValue = col->value.IntValue;
					break;
				case F:
					cell->value.FloatValue = col->value.FloatValue;
					break;
				case C:
					cell->value.pCharValue = col->value.pCharValue;
					break;
				default:
					throw 1010;				//Error1010: Unknown type!
				}
				cell->next = new Cell_Info;
				cell1 = cell;
				cell = cell->next;
				break;
			}
		}
		len += column->StoredLength;
		column = (Column_Info*)column->ColumnPtr.FileNext.MemAddr();
	}//end while
	cell1->next = NULL;
	delete cell;

	return;
}

//----------------------------------------------------------------------------------------------
//delete
void HCatalog::Delete(TB_Delete_Info& info, Condition_Info& index)
{
	//locate current table
    char temp[289];
	sprintf(temp,"%s%s.dbf",CurLocation,CurRelationName);
	_M_File CurrentTable = Buffer[temp];
	
	Delete_Condition* cond=info.head;
	Column_Info* column;

	Table_Info* table;
	table = (Table_Info*)CurrentTable.GetCataPoint().MemAddr();
	//check validation
    if(info.ConditionNum != table->KeyAttrNum)
		throw 1019;		//Error1019: Information Inadequate for selection(Every attribute should be included)!
	
	for(; cond!=NULL; cond=cond->next){
		column = this->Find_Column(cond->PrimaryKey);
		if(column == NULL)
			throw 1007;				//Error1007: Primary Key demanded has not existed yet!
		if(!this->Check_Key(column))
			throw 1011;				//Error1011: Not a select based on primary key!
		if(!this->Check_Type(column,cond->ColType))
			throw 1012;				//Error1012: Type mismatch!
        if(cond->OperType == BETWEEN){
            if(!Check_Key_Validation(cond->ColType,&(cond->max),&(cond->min)))
                throw 1020;       //Error1020: Result is null!
        }
		if(cond->ColType == C){	//check if the length is correct if the column is char type 
			switch(cond->OperType){
			case L:
			case LE:
				if(!Check_Length(column,&(cond->max)))
					throw 1013;		//Error1013: Length Invalid for type char!
				else 
					break;
			case B:
			case BE:
				if(!Check_Length(column,&(cond->min)))
					throw 1013;		//Error1013: Length Invalid for type char!
				else
					break;
			case E:
			case NE:
			case BETWEEN:
					if(!Check_Length(column,&(cond->max)) || !Check_Length(column,&(cond->min)))
						throw 1013;		//Error1013: Length Invalid for type char!
					else 
						break;
			default:
				throw 1009;			//Error1009: Unknown relation operator!
			}//end switch
		}//end if
	}//end for

	//organize information for index
    Column_Info* head; 
	head = (Column_Info*)table->KeyPtr.FileKey.MemAddr();
	column = head;
	int count = table->KeyAttrNum;
	pKey_Attr pkey1,pkey2,pminkey,pmaxkey,pkey3,pkey4;
	pminkey = new Key_Attr;
	pkey1 = pminkey;    //min
	pkey3 = pkey1;      //save pkey1
	pmaxkey = new Key_Attr;
	pkey2 = pmaxkey;    //max 
	pkey4 = pkey2;      //save pkey2
	//organzie information
    while((column!=NULL) && (count!=0)){
		//if this column is  primary key
        if(column->IsPrimary == 1){
            //find the corresponding column
			for(cond = info.head; cond!=NULL; cond=cond->next){
				if(strcmp(cond->PrimaryKey,column->ColumnName)==0){		 
					switch (cond->ColType){
					case I:
						pkey1->value.IntValue = cond->min.IntValue;
						pkey2->value.IntValue = cond->max.IntValue;
						break;
					case F:
						pkey1->value.FloatValue = cond->min.FloatValue;
						pkey2->value.FloatValue = cond->max.FloatValue;
						break;
					case C:
						pkey1->value.pCharValue = cond->min.pCharValue;
						pkey2->value.pCharValue = cond->max.pCharValue;
						break;
					default:
						throw 1010;				//Error1010: Unknown type!
					}//end switch
					break;
				}//end if
			}//end for
		
			//if no constraint
            if(cond==NULL)
				switch(column->ColType){
				case I:
					pkey1->value.IntValue = 1;
					pkey2->value.IntValue = 0;
					break;
				case F:
					pkey1->value.FloatValue = 1.0;
					pkey2->value.FloatValue = 0.0;
					break;
				case C:
					strcpy(pkey1->value.pCharValue,"b");
					strcpy(pkey2->value.pCharValue,"a");
					break;
				default:
					throw 1010;				//Error1010: Unknown type!
				}//end switch
			
			pkey3 = pkey1;
			pkey4 = pkey2;
			pkey1->next = new Key_Attr;
			pkey1 = pkey1->next;
			pkey2->next = new Key_Attr;
			pkey2 = pkey2->next;
			count--;
		}//end if
		
		column = (Column_Info*)column->ColumnPtr.FileNext.MemAddr();
	}//end while
	
	pkey3->next = NULL;
	pkey4->next = NULL;
	delete pkey1;
	delete pkey2;

	index.max = pmaxkey;
	index.min = pminkey;
	if(info.head == NULL)
        index.OperType = ALL;
    else
        index.OperType = info.head->OperType;
	
	
	return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲美洲综合色网| 极品少妇一区二区| 一区二区三区中文字幕在线观看| 国产日韩欧美激情| 国产亚洲美州欧州综合国 | 26uuuu精品一区二区| 6080国产精品一区二区| 欧美三级欧美一级| 在线成人午夜影院| 777xxx欧美| 日韩欧美亚洲另类制服综合在线| 51精品国自产在线| 日韩美女视频在线| 久久婷婷国产综合国色天香 | 亚洲免费观看视频| 亚洲丝袜精品丝袜在线| 亚洲视频免费在线| 亚洲一区二区免费视频| 午夜久久久久久电影| 日韩激情一区二区| 久久99这里只有精品| 国产精品综合网| 国产suv一区二区三区88区| 成人黄页在线观看| 91国产精品成人| 欧美老年两性高潮| 久久人人爽爽爽人久久久| 久久久久国产精品厨房| 国产精品久久久久久久久图文区| 亚洲精品网站在线观看| 亚洲福利电影网| 九色|91porny| 成人app下载| 欧美精选午夜久久久乱码6080| 制服丝袜日韩国产| 久久精品一二三| 一区二区三区蜜桃网| 日本不卡视频一二三区| 国产精品一区二区免费不卡 | 欧美男男青年gay1069videost| 欧美一区二区三区四区高清| 久久久久国产精品麻豆| 亚洲精品日韩专区silk| 蜜桃精品在线观看| 91亚洲精品一区二区乱码| 欧美午夜精品一区二区蜜桃 | 亚洲国产毛片aaaaa无费看| 男人的天堂亚洲一区| 国产99久久久国产精品免费看| 91免费看`日韩一区二区| 欧美一区二区视频网站| 国产精品污www在线观看| 亚洲一区二区三区四区中文字幕| 精品一区二区三区在线观看 | 日韩视频在线观看一区二区| 久久精品一区八戒影视| www.欧美.com| 欧美日韩国产综合视频在线观看| 久久综合久色欧美综合狠狠| 亚洲男女毛片无遮挡| 精品一区二区三区在线观看国产| 91视频在线观看| 26uuu精品一区二区在线观看| 亚洲欧美另类久久久精品2019| 美女网站在线免费欧美精品| 91啪在线观看| 国产日韩欧美不卡在线| 五月综合激情日本mⅴ| eeuss鲁片一区二区三区在线看| 日韩欧美www| 一区二区三区精品在线观看| 国产凹凸在线观看一区二区| 欧美一级欧美一级在线播放| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 日日摸夜夜添夜夜添精品视频| 成人的网站免费观看| 7777精品伊人久久久大香线蕉经典版下载 | 午夜精品久久久久久久99樱桃| 国产成人av自拍| 欧美一级片免费看| 亚洲动漫第一页| 99久久久免费精品国产一区二区| 欧美大片拔萝卜| 视频一区二区欧美| 91传媒视频在线播放| 中文字幕综合网| 成人国产电影网| 国产无一区二区| 国内精品在线播放| 欧美成人a∨高清免费观看| 日韩黄色免费网站| 欧美体内she精视频| 91丨国产丨九色丨pron| 国产农村妇女毛片精品久久麻豆| 美女被吸乳得到大胸91| 欧美三级蜜桃2在线观看| 一个色综合av| 日本二三区不卡| 一区二区三区免费看视频| 91美女在线视频| 亚洲人成在线播放网站岛国| 国产精品视频九色porn| 国产成人综合网站| 国产丝袜欧美中文另类| 国产精品亚洲а∨天堂免在线| 精品奇米国产一区二区三区| 美女脱光内衣内裤视频久久影院| 日韩欧美一区二区视频| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩的一区二区| 亚洲午夜电影网| 欧美三级资源在线| 午夜精彩视频在线观看不卡| 欧美色图激情小说| 亚洲h动漫在线| 91精品国产高清一区二区三区| 奇米综合一区二区三区精品视频| 日韩欧美国产一二三区| 精彩视频一区二区| 久久久99精品免费观看不卡| 成人黄色小视频| 亚洲最大的成人av| 91精品国产高清一区二区三区| 美女视频网站久久| 国产女人水真多18毛片18精品视频| 成人免费高清在线| 亚洲精品日产精品乱码不卡| 亚洲综合精品久久| 欧美猛男男办公室激情| 美女精品自拍一二三四| 国产午夜亚洲精品羞羞网站| va亚洲va日韩不卡在线观看| 亚洲小说欧美激情另类| 欧美xingq一区二区| 成人一区二区视频| 一区二区欧美在线观看| 欧美一区二区三区免费| 国产精品一区在线观看你懂的| 中文字幕字幕中文在线中不卡视频| 日本大香伊一区二区三区| 蜜臀精品一区二区三区在线观看| 久久午夜电影网| 91国在线观看| 另类综合日韩欧美亚洲| 中文字幕成人在线观看| 色88888久久久久久影院野外 | 99久久国产综合精品女不卡| 亚洲高清视频的网址| 久久无码av三级| 91久久国产综合久久| 美女一区二区视频| 亚洲图片激情小说| 欧美一区二区三区不卡| eeuss鲁片一区二区三区在线观看| 五月天欧美精品| 国产精品日韩精品欧美在线| 欧美老肥妇做.爰bbww| 成人精品国产一区二区4080| 日日摸夜夜添夜夜添精品视频 | 国产成人精品免费在线| 亚洲午夜成aⅴ人片| 久久久久久久久一| 欧美日韩免费观看一区二区三区| 国产一区二区导航在线播放| 一区二区三区视频在线看| 精品福利一二区| 欧美日韩视频在线一区二区 | 制服丝袜中文字幕亚洲| 97国产一区二区| 精品亚洲aⅴ乱码一区二区三区| 一区二区三区在线看| 国产天堂亚洲国产碰碰| 欧美一二三在线| 欧美色欧美亚洲另类二区| 成人精品国产免费网站| 久久99精品国产麻豆婷婷| 樱花影视一区二区| 中文字幕二三区不卡| 日韩欧美国产系列| 欧美性高清videossexo| 成人一区二区三区| 精品一区精品二区高清| 午夜精品福利久久久| 亚洲欧美日韩国产另类专区| 久久久www成人免费无遮挡大片| 欧美剧情片在线观看| 色妹子一区二区| 成人晚上爱看视频| 国产在线视视频有精品| 日韩av网站免费在线| 亚洲sss视频在线视频| 亚洲在线观看免费视频| 亚洲欧美中日韩| 国产精品丝袜91| 国产亚洲欧美一级| 久久久久久一二三区| 久久精品国产在热久久| 青青草精品视频| 日韩国产一二三区| 午夜欧美一区二区三区在线播放|