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

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

?? check.c

?? 一個c語言開發的小型的dbms系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
			break;
			}
		case	'<':
		case	'>':
		case	'=':
			{				/*說明已經到了葉節點,該顯示了*/
			error_var=one_select_con_check(dic,ss->st,stack[p]);/*看這個子條件是否正確*/
			if (strcmp(error_var,"")!=0)
			{	
				return(error_var);
			}
			p--;
			if (p>=0)		st_int[p]++;
			break;
			}
		}
	}while(p!=-1);
	return("");
}

char *one_delete_con_check(_dic_type *dic,char *table,_conditions_type *cons)
{						/*檢查一個條件比較式的正確性*/
	char 		left_type,right_type;
	_conditions_type 	*left,*right;
	char 		*error_var;
	_selectedtables_type	*st;	/*虛擬建立一個被選擇的表的鏈,其實只有一個表,是為了函數傳參數*/
	
	st=(_selectedtables_type *)malloc(sizeof(_selectedtables_type));
	st->table=table;
	st->next_st=NULL;

	left=cons->left;
	right=cons->right;
						/*先判斷左半邊是否是正確的字段*/
	error_var=is_a_right_col_used(left->value,left->table,st,dic);
	if (strcmp(error_var,"")!=0)
	{	return(error_var);
	}
	left_type=get_type_of_col(dic,left->table,left->value);	/*獲得字段的類型*/

	if (right->type=='2')			/*表示右節點也是字段*/
	{					/*判斷右半邊是否是正確的字段*/
		error_var=is_a_right_col_used(right->value,right->table,st,dic);
		////////////////////////////////////free st?
		if (strcmp(error_var,"")!=0)
		{	return(error_var);
		}
		right_type=get_type_of_col(dic,right->table,right->value);	/*獲得字段的類型*/
	}
	else
	{	right_type=right->type;		/*如果不是字段,也要獲得字段的類型*/
	}

	if (left_type!=right_type) 		/*左右兩邊的類型不匹配*/
	{	return(ERROR0006);
	}
	
	if ((cons->comp_op=='>' || cons->comp_op=='<') && right_type=='1')	/*企圖用<,>來判斷字符串*/
	{	return(ERROR0007);
	}
    free(st);
	/////////////////////////////////free st??????????
	return("");
}

char *delete_cons_check(_dic_type *dic,_deletestruct_type *ds)
{						/*delete語句中where子句的檢查*/
	_conditions_type *stack[20];		/*堆棧,存放中間節點*/
	int	st_int[20];		/*輔助堆棧,用來標識對應stack堆棧中節點的左右節點的入棧情況*/
	int	p=0;
	char	*error_var;
	stack[p]=ds->cons;
	st_int[p]=0;
	do
	{
		switch (stack[p]->comp_op)
		{case	'a':
		case	'o':
			{
			switch  (st_int[p])
			{case 0 : /*表示沒有子節點入棧了*/
				{p++;
				stack[p]=stack[p-1]->left;
				st_int[p]=0;
				break;
				}
			case 1 :  /*表示左節點入棧了*/
				{p++;		
				stack[p]=stack[p-1]->right;
				st_int[p]=0;
				break;
				}
			case 2 :  /*表示右節點入棧了*/
				{		
				p--;
				if (p>=0) st_int[p]++;
				break;
				}
			}
			break;
			}
		case	'<':
		case	'>':
		case	'=':
			{				/*說明已經到了葉節點,該顯示了*/
			error_var=one_delete_con_check(dic,ds->table,stack[p]);/*看這個子條件是否正確*/
			if (strcmp(error_var,"")!=0)
			{	
				return(error_var);
			}
			p--;
			if (p>=0)		st_int[p]++;
			break;
			}
		}
	}while(p!=-1);
	return("");
}



char *select_errorcheck(_dic_type *dic, _selectstruct_type *ss)
{					/*初步檢查select語句的語義正確性,與數據字典有關的部分*/
	_selectedfields_type *sf1;
	_selectedtables_type *st1;
	char 	*error_var="";

	st1=ss->st;
	do			/*判斷選擇的表名是否是數據字典中已經有的*/
	{
		error_var=is_an_exist_table(dic->tab,dic->tab_num,st1->table);
		if (strcmp(error_var,"")!=0) 
		{	return(error_var); 
		}
		if(st1->next_st==NULL) 	break;
		st1=st1->next_st;
	}while(1);

	sf1=ss->sf;
	if (strcmp(sf1->field,"*")!=0)
	{do
	{		
		st1=ss->st;
		error_var=is_a_right_col_used(sf1->field,sf1->table,st1,dic);
		if (strcmp(error_var,"")!=0)	
		{	return(error_var);
		}
		if (sf1->next_sf==NULL) break;
		sf1=sf1->next_sf;
	}while(1);
	}/*endif*/
	
	if (ss->cons!=NULL)
	{	error_var=select_cons_check(dic,ss);
		if (strcmp(error_var,"")!=0)
		{	return(error_var);
		}
	}
	return("");
}

char *delete_errorcheck(_dic_type *dic,_deletestruct_type *ds)
{					/*初步檢查delete語句的語義正確性,與數據字典有關的部分*/
	char *error_var;
	error_var=is_an_exist_table(dic->tab,dic->tab_num,ds->table);
	if (strcmp(error_var,"")!=0)
	{	return(error_var);
	}

	if (ds->cons!=NULL)
	{	error_var=delete_cons_check(dic,ds);
		if (strcmp(error_var,"")!=0)
		{	return(error_var);
		}
	}
	return("");
}

char *create_fields_check(_createfieldsdef_type *fdef)
{					/*檢查一個字段后面是否有和它同名的字段被創建*/
	_createfieldsdef_type	*fdef1;
	fdef1=fdef->next_fdef;

	if (strlen(fdef->field)>30)	/*字段名稱太長*/
	{	return(ERROR0011);
	}


	while(fdef1!=NULL)
	{
		if (strcmp(fdef->field,fdef1->field)==0)
		{	return(ERROR0010);
		}
		fdef1=fdef1->next_fdef;
	}

	return("");
}

char *create_errorcheck(_dic_type *dic,_createstruct_type *cs)
{						/*初步檢查create語句的語義正確性,與數據字典有關的部分*/
	char *error_var;
	_createfieldsdef_type	*fdef1;
	fdef1=cs->fdef;

	error_var=is_an_exist_table(dic->tab,dic->tab_num,cs->table);
	if (strcmp(error_var,"")==0)	/*如果已經有了這個表名,出錯*/
	{	return(ERROR0008);
	}
	if (strlen(cs->table)>100)		/*表名稱太長*/
	{	return(ERROR0009);
	}
	
	do
	{
		error_var=create_fields_check(fdef1);	/*檢查后面有沒有同名字段*/
		if (strcmp(error_var,"")!=0)
		{	return(error_var);
		}
		fdef1=fdef1->next_fdef;
	}while(fdef1!=NULL);
	return("");
}	


char *drop_errorcheck(_dic_type *dic,_dropstruct_type *drs)
{				/*初步檢查drop語句的語義正確性,與數據字典有關的部分*/
	char *error_var;
	error_var=is_an_exist_table(dic->tab,dic->tab_num,drs->table);
	if (strcmp(error_var,"")!=0)
	{	return(error_var);
	}
	return("");
}



/*-------------------------------------------------------------insert-----not completed---*/	

void	add_insert_fields(_dic_type *dic,_insertstruct_type *is)
{					/*如果沒有列出字段名,就給加進去*/
	_insertfields_type		*ifs1,*ifs_var;
	int	tab_id;
	int	i;
	
	ifs1=is->ifs;	/*利用這個指針,將屬于給出表的所有字段一個個連下去*/

	tab_id=get_tab_id(dic->tab,dic->tab_num,is->table);
	for (i=0;i<dic->col_num;i++)
	{
		if (tab_id==dic->col[i].tab_id) 	/*如果這字段屬于給出表*/
		{		
			ifs_var=(_insertfields_type *)malloc(sizeof(_insertfields_type));
			ifs_var->field=(char *)malloc(sizeof(strlen(dic->col[i].col_name)+1));
			strcpy(ifs_var->field,dic->col[i].col_name);
			ifs_var->next_if=NULL;
			ifs1->next_if=ifs_var;
			ifs1=ifs1->next_if;
		}
	}
	is->ifs=is->ifs->next_if;
//	free(ifs_var->field);
//	free(ifs_var);
	////////////////////////////////////////// free ?

}


char *insert_errorcheck(_dic_type *dic,_insertstruct_type *is)
{									/*初步檢查insert語句的語義正確性,與數據字典有關的部分*/
	char	*error_var;
	_insertfields_type		*ifs1;
	_insertvalues_type		*iv1;
	_col_dic_type 		*col_info;

	ifs1=is->ifs;

	error_var=is_an_exist_table(dic->tab,dic->tab_num,is->table);
	if (strcmp(error_var,"")!=0)	/*如果沒有這個表,出錯*/
	{	return(ERROR0001);
	}

	if (strcmp(ifs1->field,"")==0)			/*如果沒有列出字段名,就先給加進去*/
	{	add_insert_fields(dic,is);
	    ///////////////////////////free is ?????????????
	}

	ifs1=is->ifs;
	iv1=is->iv;

	do 
	{	
		col_info=get_info_of_a_col(dic,is->table,ifs1->field);
		if (col_info==NULL)			/*無返回值表示表中沒有這列*/
		{	return(ERROR0003);
		}
		
//		printf("%c,%d\n",iv1->type,col_info->col_type ); 
		if (col_info->col_type==3 )
		{
			if(is_date(iv1->value) && (iv1->type =='1'))
				iv1->type='3';
			else
				return(ERROR0016);			/*插入日期非法*/
		}
		if (iv1->type!=(col_info->col_type+'0'))
		{	return(ERROR0012);			/*字段和插入值類型不匹配*/
		}

		if (iv1->type=='1' && strlen(iv1->value)>(unsigned int)col_info->col_length)
		{	
	printf("iv1->value=%s,col_info->col_length=%d\n",iv1->value,col_info->col_length );
			return(ERROR0013);			/*插入字符串長度超界*/
		}

		if (iv1->type=='0' && atoi(iv1->value)>32767)
		{	return(ERROR0014);			/*插入數字過大*/
		}

//		if (iv1->type=='3' && is_date(iv1->value))
//		{	return(ERROR0016);			/*插入日期非法*/
//		}		
			
		ifs1=ifs1->next_if;
		iv1=iv1->next_iv;
		if (ifs1==NULL) break;
		if (iv1==NULL) break;
	}while(1);		/*無論是字段結束還是值結束都結束循環*/

	if ((ifs1==NULL && iv1!=NULL) ||(ifs1!=NULL && iv1==NULL))
	{	return(ERROR0015);			/*字段數和插入值數目不等*/
	}	
	return("");

}


void read_dic(struct tab_dic_type *tab,int *tab_num,struct col_dic_type *col,int *col_num)
{							/*讀入數據字典*/
	FILE *fp_tab,*fp_col;
	int i=0;
	fp_tab=fopen("TABLE","rb");
	fp_col=fopen("COLUMN","rb");
	fread(&tab[i],sizeof(struct tab_dic_type),1,fp_tab);
	while (!feof(fp_tab))
	{	fread(&tab[i],sizeof(struct tab_dic_type),1,fp_tab);
//		if(tab[i].tab_name[0]='*')
//			continue;
		i=i+1;
	}
	*tab_num=i-1;
	i=0;
	while (!feof(fp_col))
	{	fread(&col[i],sizeof(struct col_dic_type),1,fp_col);
		i=i+1;
 	}
 	*col_num=i-1;
	fclose(fp_tab);
	fclose(fp_col);
}

	
void selectpro(_selectstruct_type *ss,_dic_type *dic)
{
	select(ss);
}

void createpro(_createstruct_type *cs,_dic_type *dic)	/*用來檢測create語句的語法樹是否正確*/
{
	create(cs);/*建表*/
}

void droppro(_dropstruct_type *drs,_dic_type *dic)	/*用來檢測drop語句的語法樹是否正確*/
{
	drop(drs);/*刪表*/
}

void insertpro(_insertstruct_type *is,_dic_type *dic)	/*用來檢測insert語句的語法樹是否正確*/
{
 //	mean_par(is,dic->tab,dic->tab_num,dic->col,dic->col_num);
	struct tab_dic_type tab[30];
    struct col_dic_type col[300];
    int i,j;
	read_dic(tab,&i,col,&j);
	mean_par(is,tab,i,col,j);
}
void deletepro(_deletestruct_type *ds,_dic_type *dic)	/*用來檢測delete語句的語法樹是否正確*/
{	del(ds);
}

int is_date(char *date)
{
	int i,len,year,month,day;
    char buf[8];
	
	if (strlen(date)!=8)
		return(0);
	for(i=0;i<8;i++)
		if (*(date+i)<'0' || *(date+i)>'9')
			return(0);
	
	strncpy(buf,date,4);
	
	buf[4]='\0';
	year=atoi(buf);
	

	strncpy(buf,date+4,2);
	buf[2]='\0';
	month=atoi(buf);
	if(month<1||month>12)
		return(0);
	strncpy(buf,date+6,2);
	buf[2]='\0';
	day=atoi(buf);
//	printf("%d\n",year);
//	printf("%d\n",month);
//	printf("%d\n",day);
	switch (month)
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		if(day>31 ||day ==0 )
			return(0);
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		if(day>30)
			return(0);
		break;
	case 2:
		if ((year%4!=0) ||(year%100==0 && year%400!=0))
		{
			if (day>28||day ==0)
				return(0);
		}
		else
		{
			if(day>29)
				return(0);
		}
		break;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国内一区二区三区| 亚洲人成亚洲人成在线观看图片| 日本怡春院一区二区| 欧美精品123区| 蜜桃在线一区二区三区| 久久人人超碰精品| 国产精品99久久久久久久vr| 国产精品免费网站在线观看| av在线播放成人| 一区二区在线观看视频| 欧美无砖砖区免费| 日本免费新一区视频| 欧美不卡在线视频| 懂色av一区二区三区免费观看| 国产精品成人午夜| 欧美日韩国产综合久久| 激情综合网激情| 午夜影院久久久| 精品日产卡一卡二卡麻豆| 国产91在线观看丝袜| 亚洲自拍欧美精品| 精品久久国产字幕高潮| www.亚洲色图| 日本女优在线视频一区二区| 久久久精品国产免大香伊| 99re这里只有精品视频首页| 午夜av一区二区| 国产亚洲一区二区三区四区| 99精品国产热久久91蜜凸| 日韩精品国产欧美| 中文字幕不卡在线| 欧美一区二区三区喷汁尤物| av中文字幕在线不卡| 亚洲高清在线视频| 国产精品免费av| 日韩精品一区在线| 91久久精品一区二区二区| 裸体歌舞表演一区二区| 尤物视频一区二区| 久久精品一二三| 欧美日韩日本视频| 99精品视频在线免费观看| 秋霞影院一区二区| 亚洲你懂的在线视频| 精品国产欧美一区二区| 欧美在线看片a免费观看| 国产盗摄一区二区三区| 亚洲成av人片在线| 综合自拍亚洲综合图不卡区| 日韩一级视频免费观看在线| 在线观看视频一区| 国产99久久久精品| 麻豆久久一区二区| 亚洲成人免费看| 中文字幕一区二区三区不卡| 精品国产一区久久| 51久久夜色精品国产麻豆| 色综合久久中文综合久久97 | 国产欧美日韩不卡免费| 在线91免费看| 欧美在线不卡视频| 99re6这里只有精品视频在线观看| 国产在线看一区| 麻豆91在线播放免费| 五月激情综合网| 亚洲午夜久久久久久久久电影院| 成人欧美一区二区三区| 亚洲国产精品成人久久综合一区 | 婷婷久久综合九色国产成人| 亚洲欧洲制服丝袜| 国产精品第一页第二页第三页| 欧美精品一区二| 精品精品欲导航| 91精品国产免费| 欧美男男青年gay1069videost | 久久一区二区三区四区| 欧美成人a视频| 精品国产sm最大网站免费看| 日韩丝袜美女视频| 日韩精品一区二区三区视频在线观看| 91麻豆精品国产91久久久资源速度 | 男女男精品网站| 日韩av电影免费观看高清完整版在线观看| 亚洲在线视频一区| 亚洲福利电影网| 青青草国产精品亚洲专区无| 日本最新不卡在线| 久久国产尿小便嘘嘘| 极品美女销魂一区二区三区免费 | 日韩欧美不卡一区| 精品盗摄一区二区三区| 欧美成人精品二区三区99精品| 日韩欧美一卡二卡| 精品国产一区二区亚洲人成毛片 | 一区二区三区在线免费观看| 一区二区三区波多野结衣在线观看| 一区二区三区日韩| 日韩精品亚洲一区二区三区免费| 日韩vs国产vs欧美| 国产在线视频一区二区三区| 国产成人一级电影| 色婷婷综合五月| 6080日韩午夜伦伦午夜伦| 日韩精品综合一本久道在线视频| 久久这里只有精品6| 亚洲婷婷在线视频| 婷婷综合久久一区二区三区| 奇米色777欧美一区二区| 国产成人aaaa| 欧美中文字幕一区二区三区亚洲| 91精品国产综合久久香蕉麻豆| 26uuu欧美日本| 国产精品影视网| 不卡的av电影在线观看| 欧美日韩一区二区三区高清| 精品少妇一区二区三区视频免付费| 国产精品水嫩水嫩| 日韩激情视频网站| 成人理论电影网| 欧美一区二区三区四区高清| 中文字幕av在线一区二区三区| 亚洲一区二区三区精品在线| 久久超级碰视频| 在线观看区一区二| 国产欧美一区二区精品性| 一区二区三区美女视频| 国产尤物一区二区| 欧美午夜精品理论片a级按摩| 久久精品一二三| 日韩高清在线观看| 99久久777色| 久久久久久综合| 三级不卡在线观看| 91蝌蚪porny成人天涯| 精品久久久久一区二区国产| 一区二区三区在线观看网站| 国产一区二区三区免费观看| 欧美日韩专区在线| 最近日韩中文字幕| 国产一区二区三区免费看| 9191成人精品久久| 亚洲日本乱码在线观看| 国产精品一二三区在线| 欧美一级精品在线| 亚洲高清免费在线| 91在线码无精品| 国产精品无圣光一区二区| 男女视频一区二区| 欧美老人xxxx18| 亚洲无人区一区| 91丝袜美腿高跟国产极品老师| 久久九九久久九九| 精品一区二区三区免费视频| 欧美久久久久中文字幕| 一区二区免费在线播放| 99re热这里只有精品视频| 久久精品一级爱片| 国产精品一区二区你懂的| 日韩欧美在线影院| 奇米四色…亚洲| 欧美一区二区三区婷婷月色| 图片区小说区区亚洲影院| 欧美在线观看视频一区二区三区 | 中文字幕一区av| 国产成人啪免费观看软件 | 国产一区二区不卡在线| 欧美mv日韩mv国产| 国产又粗又猛又爽又黄91精品| 日韩欧美一级二级三级久久久| 日本欧美在线看| 日韩精品中文字幕一区二区三区 | 亚洲午夜久久久久久久久电影网| 91丨九色porny丨蝌蚪| 亚洲男女毛片无遮挡| 在线视频欧美区| 亚洲成人免费视频| 91精品国产日韩91久久久久久| 日韩国产欧美三级| 日韩精品中午字幕| 国产不卡视频在线观看| 国产精品区一区二区三| jiyouzz国产精品久久| 亚洲人成7777| 欧美色综合天天久久综合精品| 亚洲大片在线观看| 欧美xxxxxxxx| 国产成人免费av在线| 亚洲欧洲成人自拍| 欧美日韩午夜影院| 麻豆高清免费国产一区| 国产亚洲一区二区三区| 99久久婷婷国产综合精品电影| 亚洲精品国产精华液| 777欧美精品| 国产一区二区福利视频| 中文字幕一区二区不卡| 欧美二区乱c少妇| 国产一区二区三区免费看| 亚洲欧美影音先锋| 欧美一区二区三区思思人|