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

Reply via email to