📄 opt_crack.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 + -