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

📄 opt_partitionedquery.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 84 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"#include "mal_config.h"#include "opt_partitionedQuery.h"#include "mal_interpreter.h"	/* for showErrors() */extern int OPTvalidFlowNetwork(MalBlkPtr mb, int *first, int *last, int varid);#line 98 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"static strOPTreplacement(MalBlkPtr mb, int *first, int *last, int varid){	InstrPtr *old, p;	int i, limit, actions = 0;	int idx = -1, bid = -1;	int pcf, pcl;	lng clk= GDKusec();	setLifespan(mb);	old = mb->stmt;	limit = mb->stop;	newMalBlkStmt(mb, limit + 10);#ifdef DEBUG_OPT_PARTITIONED	stream_printf(GDKout, "variable replacement '%s'", getVarName(mb, varid));	stream_printf(GDKout, " instructions %d-%d ", *first, *last);	stream_printf(GDKout, " lifespan %d-%d\n", mb->var[varid]->beginLifespan, mb->var[varid]->endLifespan);#endif	/* copy prelude into place */	for (i = 0; i < *first; i++)		pushInstruction(mb, old[i]);	actions++;	/* barrier (idx,bid):= partitions.newIterator(var); */	p = newInstruction(mb,ASSIGNsymbol);	setModuleId(p, putName("partitions", 10));	setFunctionId(p, putName("newIterator", 11));	p->barrier = BARRIERsymbol;	idx = newTmpVariable(mb, TYPE_int);	pushReturn(mb, p, idx);	bid = newTmpVariable(mb, getVarType(mb, varid));	pushReturn(mb, p, bid);	pushArgument(mb, p, varid);	pushInstruction(mb, p);	pcf = mb->stop;	for (i = *first; i <= *last; i++)		pushInstruction(mb, old[i]);	pcl = mb->stop;#line 143 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"	/* finalize the loop */	/* redo (idx,bid):= partitions.hasMoreElements(var); */	p = newInstruction(mb,REDOsymbol);	setModuleId(p, putName("partitions", 10));	setFunctionId(p, putName("hasMoreElements", 15));	pushReturn(mb, p, idx);	pushReturn(mb, p, bid);	pushArgument(mb, p, varid);	pushInstruction(mb, p);	/* exit (idx,bid) */	p = newInstruction(mb,EXITsymbol);	pushReturn(mb, p, idx);	pushReturn(mb, p, bid);	pushInstruction(mb, p);	*first = mb->stop;	/* copy the rest of the program back into place */	for (; i < limit; i++)		pushInstruction(mb, old[i]);	GDKfree(old);	*last = mb->stop - 1;	/* now replace variable with the alias bid */	if (bid != -1)		replaceAlias(mb, pcf, pcl, varid, bid);	/* and have to check the baked program */	optimizerCheck(mb,"partitionedQuery",1,GDKusec()-clk,OPT_CHECK_ALL);	return MAL_SUCCEED;}#line 179 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"static strOPTneedsExpansion(MalBlkPtr mb, int varid){	int tpe;	int first, last;	str msg = 0;	tpe = getVarType(mb, varid);	if (isaBatType(tpe) && getHeadType(tpe) == TYPE_oid) {		first = 1;		last = mb->stop - 2;		printf("start first=%d last=%d \n", first, last);		for (; first < mb->stop && last < mb->stop;) {			if (OPTvalidFlowNetwork(mb, &first, &last, varid)) {				printf("replace first=%d last=%d \n", first, last);				msg = OPTreplacement(mb, &first, &last, varid);				if (msg)					return msg;			} else {				first = last;				last = mb->stop - 1;			}			printf("first=%d last=%d \n", first, last);		}	}	return MAL_SUCCEED;}#line 211 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"static intOPTpartitionedQueryImplementation(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	int i;	InstrPtr p;	(void) stk;	(void) pci;	p = getInstrPtr(mb, 0);	for (i = p->retc; i < p->argc; i++) {		OPTneedsExpansion(mb, p->argv[i]);	}	return 0; /* optimizer administration alread handled */}#line 228 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"#line 241 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"intOPTvalidFlowNetwork(MalBlkPtr mb, int *first, int *last, int varid){	int i, k = 0, iocount = 0;	InstrPtr p;	for (i = *first; i <= *last; i++) {		p = getInstrPtr(mb, i);		for (k = 0; k < p->retc; k++)			if (getArg(p, k) == varid) {				*first = i + 1;				return 0;			}		for (k = p->retc; k < p->argc; k++)			if (getArg(p, k) == varid)				break;		if (k < p->argc)			break;		if (i == *last) {			*last = mb->stop;			return 0;		}	}	*first = i;	for (; i <= *last; i++) {		p = getInstrPtr(mb, i);		if (getFunctionId(p) && strncmp(getFunctionId(p), "print", 5) == 0)			iocount++;		else if (p->barrier)			iocount++;		else if (p->token == ENDsymbol)			iocount++;		if (iocount > 1) {			*last = i - 1;			return TRUE;		}	}	return iocount > 0;}#line 285 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"#line 283 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"/* #define _DEBUG_OPTIMIZER_*/str OPTpartitionedQuery(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 partitionedQuery\n");	printFunction(GDKout,mb,LIST_MAL_ALL);#endif	if( p && p->argc > 1 && getFunctionId(p) != multiplexRef){#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"locate function partitionedQuery\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.partitionedQuery",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.partitionedQuery",buf);		}#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"partitionedQuery %s %d\n",modnme,fcnnme);#endif		mb = s->def;		stk= 0;	} 	if( mb->errors )		return MAL_SUCCEED;	addtoMalBlkHistory(mb);	actions= OPTpartitionedQueryImplementation(mb,stk,p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"finished partitionedQuery %d\n",actions);	printFunction(GDKout,mb,LIST_MAL_ALL);#endif    optimizerCheck(mb, "optimizer.partitionedQuery", actions, GDKusec() - clk,OPT_CHECK_ALL);	return MAL_SUCCEED;}#line 285 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"#line 287 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_partitionedQuery.mx"

⌨️ 快捷键说明

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