Changeset: f9669f624bfa for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f9669f624bfa
Modified Files:
        sql/backends/monet5/sql_gencode.c
        sql/server/sql_atom.c
        sql/server/sql_atom.h
Branch: Jan2014
Log Message:

optimize insert values (),() etc


diffs (70 lines):

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
@@ -739,10 +739,14 @@ static int
                                }
                        } else {
                                char *buf = GDKmalloc(SMALLBUFSIZ);
-
-                               (void) snprintf(buf, SMALLBUFSIZ, "A%d", 
s->flag);
+                               
                                q = newAssignment(mb);
-                               q = pushArgumentId(mb, q, buf);
+                               if (sql->mvc->argc && 
sql->mvc->args[s->flag]->varid >= 0) {
+                                       q = pushArgument(mb, q, 
sql->mvc->args[s->flag]->varid);
+                               } else {
+                                       (void) snprintf(buf, SMALLBUFSIZ, 
"A%d", s->flag);
+                                       q = pushArgumentId(mb, q, buf);
+                               }
                        }
                        s->nr = getDestVar(q);
                } break;
@@ -2228,7 +2232,7 @@ backend_callinline(backend *be, Client c
 
        curInstr = getInstrPtr(curBlk, 0);
 
-       if (m->argc) {          /* we shouldn't come here as we aren't caching 
statements */
+       if (m->argc) {  
                int argc = 0;
 
                for (; argc < m->argc; argc++) {
@@ -2237,7 +2241,7 @@ backend_callinline(backend *be, Client c
                        int varid = 0;
 
                        curInstr = newAssignment(curBlk);
-                       varid = getDestVar(curInstr);
+                       a->varid = varid = getDestVar(curInstr);
                        renameVariable(curBlk, varid, "A%d", argc);
                        setVarType(curBlk, varid, type);
                        setVarUDFtype(curBlk, varid);
@@ -2292,7 +2296,7 @@ backend_dumpproc(backend *be, Client c, 
                        int varid = 0;
 
                        snprintf(arg, SMALLBUFSIZ, "A%d", argc);
-                       varid = newVariable(mb, _STRDUP(arg), type);
+                       a->varid = varid = newVariable(mb, _STRDUP(arg), type);
                        curInstr = pushArgument(mb, curInstr, varid);
                        setVarType(mb, varid, type);
                        setVarUDFtype(mb, 0);
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -32,6 +32,7 @@ atom_create( sql_allocator *sa )
 
        memset(&a->data, 0, sizeof(a->data));
        a->d = dbl_nil;
+       a->varid = -1;
        return a;
 }
 
diff --git a/sql/server/sql_atom.h b/sql/server/sql_atom.h
--- a/sql/server/sql_atom.h
+++ b/sql/server/sql_atom.h
@@ -28,6 +28,7 @@ typedef struct atom {
        sql_subtype tpe;
        ValRecord data;
        dbl d;
+       int varid;/* used during code generation only */
 } atom;
 
 #define atom_null(a) (((atom*)a)->isnull)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to