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

📄 opt_crack.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 39 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_crack.mx"#include "mal_config.h"#include "opt_crack.h"#include "mal_interpreter.h"	/* for showErrors() */#include "opt_prelude.h"#define match2(X,M,F) ( (X) && getFunctionId(X) && getFunctionId(X)==F && \	getModuleId(X) && getModuleId(X)==M)/* find all algebra select structions in a mal block mb and change them to the corresponding crackers command    */static intOPTcrackImplementation(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	InstrPtr p, *old;	int i, limit, actions=0;#ifdef DEBUG_OPT_CRACK	printf("Crack optimizer started\n");#endif	(void) stk; (void) pci;		limit = mb->stop;	old = mb->stmt;		for (i = 0; i < limit; i++) {		p = old[i];#ifdef DEBUG_OPT_CRACK		printf("limit is at: %d and i is at: %d  ", limit, i);	        printInstruction(GDKout, mb, p, LIST_MAL_ALL);	#endif		/* find and replace algebra select commands with crack select ones*/		if (match2(p, batRef, newRef) ||			match2(p, sqlRef, bindRef)){  				/* add a property can be cracked to every base relation */			if ( getTailType(mb->var[getArg(p,0)]->type)!=TYPE_int &&			     getTailType(mb->var[getArg(p,0)]->type)!=TYPE_dbl &&			     getTailType(mb->var[getArg(p,0)]->type)!=TYPE_lng &&			     getTailType(mb->var[getArg(p,0)]->type)!=TYPE_flt &&			     getTailType(mb->var[getArg(p,0)]->type)!=TYPE_sht &&			     getTailType(mb->var[getArg(p,0)]->type)!=TYPE_chr ) 					continue;			if (getModuleId(p)== sqlRef &&				mb->var[getArg(p,4)]->value.val.ival != 0 ) continue;									setArgProperty(mb,p,0,"canBeCracked","=", TYPE_int, &i);			actions++;		}		if (match2(p, batRef, setWriteModeRef)){ /* propagete the canBeCracked property */			if(fndArgProperty(mb,p,1,"canBeCracked")){				setArgProperty(mb,p,0,"canBeCracked","=", TYPE_int, &i);			actions++;			}		}		if (match2(p, algebraRef, selectRef) ||			match2(p, algebraRef, uselectRef)){ 				if(fndArgProperty(mb,p,1,"canBeCracked"))						setModuleId(p,putName("crackers",8));			actions++;		}		if (p == pci) 			removeInstruction(mb, p);	}	return actions;}#line 111 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_crack.mx"#line 109 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_crack.mx"/* #define _DEBUG_OPTIMIZER_*/str OPTcrack(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme;	str fcnnme;	Module  scope=NULL;	Symbol s= NULL;	lng clk= GDKusec();	int actions = 0;	optimizerInit();	if( p )		removeInstruction(mb, p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"apply crack\n");	printFunction(GDKout,mb,LIST_MAL_ALL);#endif	if( p && p->argc > 1 && getFunctionId(p) != multiplexRef){#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"locate function crack\n");#endif		if( getArgType(mb,p,1) != TYPE_str ||			getArgType(mb,p,2) != TYPE_str ||			!isConstant(mb,getArg(p,1)) ||			!isConstant(mb,getArg(p,2))		) {			char buf[1024];			snprintf(buf,1024, "Optimizer requires constant string arguments\n");			throw(MAL, "optimizer.crack",buf);		}		if( stk != 0){			modnme= (str)getArgValue(stk,p,1);			fcnnme= (str)getArgValue(stk,p,2);		} else {			modnme= getArgDefault(mb,p,1);			fcnnme= getArgDefault(mb,p,2);		}		scope = findModule(MCgetClient()->nspace,putName(modnme,strlen(modnme)) );		if( scope)			s= findSymbolInModule(scope,putName(fcnnme,strlen(fcnnme)));		if( s == NULL) {			char buf[1024];			snprintf(buf,1024, "Could not find %s.%s\n",modnme,fcnnme);			throw(MAL, "optimizer.crack",buf);		}#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"crack %s %d\n",modnme,fcnnme);#endif		mb = s->def;		stk= 0;	} 	if( mb->errors )		return MAL_SUCCEED;	addtoMalBlkHistory(mb);	actions= OPTcrackImplementation(mb,stk,p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"finished crack %d\n",actions);	printFunction(GDKout,mb,LIST_MAL_ALL);#endif    optimizerCheck(mb, "optimizer.crack", actions, GDKusec() - clk,OPT_CHECK_ALL);	return MAL_SUCCEED;}#line 111 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_crack.mx"#line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_crack.mx"

⌨️ 快捷键说明

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