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

📄 eval0proc.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
字号:
/******************************************************Executes SQL stored procedures and their control structures(c) 1998 Innobase OyCreated 1/20/1998 Heikki Tuuri*******************************************************/#include "eval0proc.h"#ifdef UNIV_NONINL#include "eval0proc.ic"#endif/**************************************************************************Performs an execution step of an if-statement node. */que_thr_t*if_step(/*====*/				/* out: query thread to run next or NULL */	que_thr_t*	thr)	/* in: query thread */{	if_node_t*	node;	elsif_node_t*	elsif_node;	ut_ad(thr);		node = thr->run_node;	ut_ad(que_node_get_type(node) == QUE_NODE_IF);	if (thr->prev_node == que_node_get_parent(node)) {		/* Evaluate the condition */		eval_exp(node->cond);		if (eval_node_get_ibool_val(node->cond)) {			/* The condition evaluated to TRUE: start execution			from the first statement in the statement list */			thr->run_node = node->stat_list;		} else if (node->else_part) {			thr->run_node = node->else_part;		} else if (node->elsif_list) {			elsif_node = node->elsif_list;			for (;;) {				eval_exp(elsif_node->cond);				if (eval_node_get_ibool_val(elsif_node->cond)) {					/* The condition evaluated to TRUE:					start execution from the first					statement in the statement list */					thr->run_node = elsif_node->stat_list;					break;				}				elsif_node = que_node_get_next(elsif_node);				if (elsif_node == NULL) {					thr->run_node = NULL;					break;				}			}		} else {			thr->run_node = NULL;		}	} else {		/* Move to the next statement */		ut_ad(que_node_get_next(thr->prev_node) == NULL);		thr->run_node = NULL;	}	if (thr->run_node == NULL) {		thr->run_node = que_node_get_parent(node);	}		return(thr);} /**************************************************************************Performs an execution step of a while-statement node. */que_thr_t*while_step(/*=======*/				/* out: query thread to run next or NULL */	que_thr_t*	thr)	/* in: query thread */{	while_node_t*	node;	ut_ad(thr);		node = thr->run_node;	ut_ad(que_node_get_type(node) == QUE_NODE_WHILE);	ut_ad((thr->prev_node == que_node_get_parent(node))			|| (que_node_get_next(thr->prev_node) == NULL));	/* Evaluate the condition */	eval_exp(node->cond);	if (eval_node_get_ibool_val(node->cond)) {		/* The condition evaluated to TRUE: start execution		from the first statement in the statement list */		thr->run_node = node->stat_list;	} else {		thr->run_node = que_node_get_parent(node);	}	return(thr);} /**************************************************************************Performs an execution step of an assignment statement node. */que_thr_t*assign_step(/*========*/				/* out: query thread to run next or NULL */	que_thr_t*	thr)	/* in: query thread */{	assign_node_t*	node;	ut_ad(thr);		node = thr->run_node;	ut_ad(que_node_get_type(node) == QUE_NODE_ASSIGNMENT);	/* Evaluate the value to assign */	eval_exp(node->val);	eval_node_copy_val(node->var->alias, node->val);		thr->run_node = que_node_get_parent(node);	return(thr);} /**************************************************************************Performs an execution step of a for-loop node. */que_thr_t*for_step(/*=====*/				/* out: query thread to run next or NULL */	que_thr_t*	thr)	/* in: query thread */{	for_node_t*	node;	que_node_t*	parent;	lint		loop_var_value;	ut_ad(thr);		node = thr->run_node;		ut_ad(que_node_get_type(node) == QUE_NODE_FOR);	parent = que_node_get_parent(node);	if (thr->prev_node != parent) {		/* Move to the next statement */		thr->run_node = que_node_get_next(thr->prev_node);		if (thr->run_node != NULL) {			return(thr);		}		/* Increment the value of loop_var */				loop_var_value = 1 + eval_node_get_int_val(node->loop_var);	} else {		/* Initialize the loop */		eval_exp(node->loop_start_limit);		eval_exp(node->loop_end_limit);		loop_var_value = eval_node_get_int_val(node->loop_start_limit);		node->loop_end_value = eval_node_get_int_val(							node->loop_end_limit);	}	/* Check if we should do another loop */	if (loop_var_value > node->loop_end_value) {		/* Enough loops done */		thr->run_node = parent;	} else {		eval_node_set_int_val(node->loop_var, loop_var_value);		thr->run_node = node->stat_list;	}	return(thr);} /**************************************************************************Performs an execution step of a return-statement node. */que_thr_t*return_step(/*========*/				/* out: query thread to run next or NULL */	que_thr_t*	thr)	/* in: query thread */{	return_node_t*	node;	que_node_t*	parent;	ut_ad(thr);		node = thr->run_node;		ut_ad(que_node_get_type(node) == QUE_NODE_RETURN);	parent = node;	while (que_node_get_type(parent) != QUE_NODE_PROC) {		parent = que_node_get_parent(parent);	}	ut_a(parent);	thr->run_node = que_node_get_parent(parent);	return(thr);}

⌨️ 快捷键说明

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