Changeset: fb843b124fa9 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fb843b124fa9 Modified Files: monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h sql/backends/monet5/sql_gencode.c Branch: default Log Message:
Concentrate variable renaming code Renaming is now supported directly at MAL level using a text pattern (with 1 %d) and an index. diffs (221 lines): diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -972,16 +972,20 @@ cloneVariable(MalBlkPtr tm, MalBlkPtr mb return res; } +/* generate a new variable name based on a patter with 1 %d argument*/ void -renameVariable(MalBlkPtr mb, int id, str name) +renameVariable(MalBlkPtr mb, int id, str pattern, int newid) { VarPtr v; + str nme; assert(id >=0 && id <mb->vtop); v = getVar(mb, id); if (v->name) GDKfree(v->name); - v->name = name; + nme= GDKmalloc(SMALLBUFSIZ); + snprintf(nme,SMALLBUFSIZ,pattern,newid); + v->name = nme; v->tmpindex = 0; } diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -37,6 +37,7 @@ #define MAL_VAR_WINDOW 32 #define MAXVARS 32 #define MAXLISTING 64*1024 +#define SMALLBUFSIZ 64 typedef struct SYMDEF { struct SYMDEF *peer; /* where to look next */ @@ -265,7 +266,7 @@ mal_export void setVarName(MalBlkPtr mb, mal_export str getRefName(MalBlkPtr mb, int i); mal_export int newVariable(MalBlkPtr mb, str name, malType type); mal_export int cloneVariable(MalBlkPtr dst, MalBlkPtr src, int varid); -mal_export void renameVariable(MalBlkPtr mb, int i, str name); +mal_export void renameVariable(MalBlkPtr mb, int i, str pattern, int newid); mal_export void resetVarName(MalBlkPtr mb, int i); mal_export void copyVariable(MalBlkPtr dst, VarPtr v); mal_export void copyProperties(MalBlkPtr mb, int src, int dst); diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -632,7 +632,7 @@ multiplexN(MalBlkPtr mb, char *mod, char static int dump_joinN(backend *sql, MalBlkPtr mb, stmt *s) { - char *mod, *fimp, *nme; + char *mod, *fimp; InstrPtr q; int op1, op2, op3 = 0; @@ -657,9 +657,7 @@ dump_joinN(backend *sql, MalBlkPtr mb, s s->nr = getDestVar(q); /* rename second result */ - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(q,1), nme); + renameVariable(mb, getArg(q,1), "r1_%d",s->nr); return s->nr; } @@ -789,9 +787,7 @@ static int if (s->flag == RD_UPD) { /* rename second result */ - char *nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(q,1), nme); + renameVariable(mb, getArg(q,1), "r1_%d",s->nr); } } break; @@ -827,9 +823,7 @@ static int if (s->flag == RD_UPD) { /* rename second result */ - char *nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(q,1), nme); + renameVariable(mb, getArg(q,1), "r1_%d",s->nr); } } break; @@ -963,7 +957,6 @@ static int s->nr = getDestVar(q); } break; case st_order:{ - char *nme = GDKmalloc(SMALLBUFSIZ); int l = _dumpstmt(sql, mb, s->op1); int reverse = (s->flag > 0)?0:1; @@ -976,16 +969,10 @@ static int q = pushBit(mb, q, FALSE); s->nr = getDestVar(q); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(q,1), nme); - - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r2_%d", s->nr); - renameVariable(mb, getArg(q,2), nme); + renameVariable(mb, getArg(q,1), "r1_%d",s->nr); + renameVariable(mb, getArg(q,2), "r2_%d",s->nr); } break; case st_reorder:{ - char *nme = GDKmalloc(SMALLBUFSIZ); - int l = _dumpstmt(sql, mb, s->op1); int oids = _dumpstmt(sql, mb, s->op2); int ogrp = _dumpstmt(sql, mb, s->op3); @@ -1002,12 +989,8 @@ static int q = pushBit(mb, q, FALSE); s->nr = getDestVar(q); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(q,1), nme); - - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r2_%d", s->nr); - renameVariable(mb, getArg(q,2), nme); + renameVariable(mb, getArg(q,1), "r1_%d",s->nr); + renameVariable(mb, getArg(q,2), "r2_%d",s->nr); } break; case st_uselect: { bit need_not = FALSE; @@ -1189,7 +1172,7 @@ static int int r1 = -1, r2 = -1, rs = 0; bit anti = (s->flag&ANTI)?TRUE:FALSE; bit swapped = (s->flag&SWAPPED)?TRUE:FALSE; - char *cmd = (s->type == st_uselect2) ? "subselect": "join", *nme; + char *cmd = (s->type == st_uselect2) ? "subselect": "join"; int sub = -1; if (s->op4.stval) @@ -1301,14 +1284,10 @@ static int pushInstruction(mb, r); /* rename second result */ - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(r,0), nme); + renameVariable(mb, getArg(r,0), "r1_%d",s->nr); } else { /* rename second result */ - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(q,1), nme); + renameVariable(mb, getArg(q,1), "r1_%d",s->nr); } break; } @@ -1338,7 +1317,7 @@ static int case st_join:{ int l = _dumpstmt(sql, mb, s->op1); int r = _dumpstmt(sql, mb, s->op2); - char *jt = "join", *nme; + char *jt = "join"; assert(l >= 0 && r >= 0); @@ -1436,13 +1415,10 @@ static int s->nr = getDestVar(q); /* rename second result */ - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); - renameVariable(mb, getArg(q,1), nme); + renameVariable(mb, getArg(q,1), "r1_%d",s->nr); break; } case st_group:{ - char *nme = GDKmalloc(SMALLBUFSIZ); int cnt = 0, ext = 0, grp = 0, o1 = _dumpstmt(sql, mb, s->op1); if (s->op2) { @@ -1463,16 +1439,12 @@ static int s->nr = getDestVar(q); /* rename second result */ - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r1_%d", s->nr); ext = getArg(q,1); - renameVariable(mb, ext, nme); + renameVariable(mb, ext, "r1_%d", s->nr); /* rename 3rd result */ - nme = GDKmalloc(SMALLBUFSIZ); - snprintf(nme, SMALLBUFSIZ, "r2_%d", s->nr); cnt = getArg(q,2); - renameVariable(mb, cnt, nme); + renameVariable(mb, cnt, "r2_%d",s->nr); } break; case st_result:{ @@ -2283,7 +2255,6 @@ backend_callinline(backend *be, Client c if (m->argc) { /* we shouldn't come here as we aren't caching statements */ int argc=0; - char arg[SMALLBUFSIZ]; for (; argc < m->argc; argc++) { atom *a = m->args[argc]; @@ -2291,9 +2262,8 @@ backend_callinline(backend *be, Client c int varid = 0; curInstr = newAssignment(curBlk); - snprintf(arg, SMALLBUFSIZ, "A%d", argc); varid = getDestVar(curInstr); - renameVariable(curBlk, varid, _STRDUP(arg)); + renameVariable(curBlk, varid, "A%d",argc); setVarType(curBlk, varid, type); setVarUDFtype(curBlk,varid); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list