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

📄 opt_qep.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 107 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"#include "mal_config.h"#include "opt_qep.h"static QEPQEPnew(int p, int c){	QEP qep;	qep = (QEP) GDKmalloc( sizeof(struct QEPrecord));	qep->mb= NULL;	qep->p = NULL;	qep->plimit = p;	if( p )		qep->parents = (QEP*) GDKzalloc( sizeof(QEP) * p);	qep->climit = c;	if( c)		qep->children = (QEP *) GDKzalloc( sizeof(QEP) * c);	return qep;}static QEPQEPnewNode(MalBlkPtr mb,InstrPtr p){	QEP q;	q= QEPnew(p->retc,p->argc-p->retc+1);	q->mb= mb;	q->p = p;	return q;}static QEPQEPexpandChildren(QEP qep, int extra){	int i;	/*extend node */	qep->children = (QEP*) GDKrealloc( (char*) qep->children, 				sizeof(QEP) * (qep->climit + extra));	for(i=qep->climit;i <qep->climit + extra; i++)		qep->children[i]=0;	qep->climit = qep->climit + extra;	return qep;}#if 0static QEPQEPfree(QEP qep){	GDKfree(qep->children);	GDKfree(qep->parents);	GDKfree(qep);	return NULL;}#endif#line 156 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"#if 0static QEPQEPdelete(QEP qep, int pos){	int i;	QEP q= NULL;	for(i=0; i<qep->climit && qep->children[i]; i++){		if(pos-- == 0) q = qep->children[i];		if( pos <0 ) qep->children[i]= qep->children[i+1];		if( i< qep->climit-1) q->children[i]= NULL;	}	return q;}#endifQEPQEPappend(QEP qep, QEP child){	int i;	for( i=0; i< qep->climit-1; i++)		if( qep->children[i] == NULL)			break;	if(qep->climit== 0 || qep->children[i]!= NULL )		qep= QEPexpandChildren(qep,MAXCHILD);	qep->children[i]= child;	if( child) 		child->parents[0]= qep;	return qep;}#if 0static QEPQEPinsert(QEP qep, int pos, QEP child){	int i;	QEP q= NULL, qn; 	for( i=0; i< qep->climit; i++){		if( pos-- == 0){			q= qep->children[i];			qep->children[i]= child;			child->parents[0] =qep;		}		if( pos < 0 && i<qep->climit-1){			qn= qep->children[i+1];			qep->children[i+1] = q;			q= qn;		}	}	if( q != NULL)		qep = QEPappend(qep,q);	return qep;}#endif#line 209 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"#define LEAFNODE 2#define TOPNODE 3static QEPQEPbuilt(MalBlkPtr mb){	QEP qroot= NULL, q= NULL, *vq;	InstrPtr p;	int i, j, k, *status;	vq= (QEP*) GDKmalloc( mb->vtop * sizeof(QEP));	status= (int*) GDKmalloc( mb->vtop * sizeof(int));	for(i=0; i<mb->vtop; i++) {		status[i]= 0;		vq[i] = 0;	}	for(i=1; i< mb->stop-1; i++){		p= getInstrPtr(mb,i);		q= QEPnewNode(mb,p);		for( k=p->retc; k<p->argc; k++) 		if( ! isConstant(mb, getArg(p,k)) ){			status[getArg(p,k)]= LEAFNODE;			if( vq[getArg(p,k)] )				QEPappend(q, vq[getArg(p,k)]);		}		for( k=0; k<p->retc; k++){			if(	vq[getArg(p,k)] == 0)				vq[getArg(p,k)] = q;			status[getArg(p,k)]= TOPNODE;		}	}#line 244 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"	qroot= QEPnew(MAXPARENT,mb->stop);	for(i=1; i< mb->stop-1; i++){		p= getInstrPtr(mb,i);			k=0;		if( p->barrier){			k++;			q= QEPnewNode(mb,p);		} else		for( j=0; j< p->retc; j++)		if( status[getArg(p,j)] == TOPNODE){			q= vq[getArg(p,j)];			k++;			break;		}		if(k)			QEPappend(qroot,q);	}	GDKfree(vq);	GDKfree(status);	return qroot;}#line 270 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"static voidQEPdump(stream *f, QEP qep, int indent){	int i,inc = 0;	str s;	if( qep->p){		for(i=0;i<indent; i++) stream_printf(f," ");		s= instruction2str(qep->mb,qep->p,0);		stream_printf(f,"%s\n",s+1);		GDKfree(s);		inc = 4;	}	for(i=0; i< qep->climit; i++)	if( qep->children[i])		QEPdump(f,qep->children[i], indent+ inc);}static intOPTdumpQEPImplementation(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	QEP qep;	(void) stk;	(void) p;	qep= QEPbuilt(mb);	QEPdump(GDKout,qep,0);	return 1;}#line 299 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"#line 297 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"/* #define _DEBUG_OPTIMIZER_*/str OPTdumpQEP(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 dumpQEP\n");	printFunction(GDKout,mb,LIST_MAL_ALL);#endif	if( p && p->argc > 1 && getFunctionId(p) != multiplexRef){#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"locate function dumpQEP\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.dumpQEP",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.dumpQEP",buf);		}#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"dumpQEP %s %d\n",modnme,fcnnme);#endif		mb = s->def;		stk= 0;	} 	if( mb->errors )		return MAL_SUCCEED;	addtoMalBlkHistory(mb);	actions= OPTdumpQEPImplementation(mb,stk,p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"finished dumpQEP %d\n",actions);	printFunction(GDKout,mb,LIST_MAL_ALL);#endif    optimizerCheck(mb, "optimizer.dumpQEP", actions, GDKusec() - clk,OPT_CHECK_ALL);	return MAL_SUCCEED;}#line 299 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"#line 301 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_qep.mx"

⌨️ 快捷键说明

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