Changeset: 965f038c396f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=965f038c396f
Modified Files:
        monetdb5/extras/jaql/jaqlgencode.c
Branch: Oct2012
Log Message:

j_top: fix doc startoid and avoid inplace tuple mods


diffs (74 lines):

diff --git a/monetdb5/extras/jaql/jaqlgencode.c 
b/monetdb5/extras/jaql/jaqlgencode.c
--- a/monetdb5/extras/jaql/jaqlgencode.c
+++ b/monetdb5/extras/jaql/jaqlgencode.c
@@ -6449,12 +6449,18 @@ dumptree(jc *j, Client cntxt, MalBlkPtr 
                                MALCOMMENT(mb, "} j_sort");
                        } break;
                        case j_top:
+                               MALCOMMENT(mb, "j_top(%lld) {", t->nval - 1);
+
                                q = newInstruction(mb, ASSIGNsymbol);
                                setModuleId(q, algebraRef);
                                setFunctionId(q, putName("selectH", 7));
                                q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
                                q = pushArgument(mb, q, j->j1);
-                               q = pushOid(mb, q, 0);
+                               if (j->startoid == 0) {
+                                       q = pushOid(mb, q, 0);
+                               } else {
+                                       q = pushArgument(mb, q, j->startoid);
+                               }
                                a = getArg(q, 0);
                                pushInstruction(mb, q);
                                q = newInstruction(mb, ASSIGNsymbol);
@@ -6495,22 +6501,41 @@ dumptree(jc *j, Client cntxt, MalBlkPtr 
                                q = pushWrd(mb, q, (wrd)(t->nval - 1));
                                b = getArg(q, 0);
                                pushInstruction(mb, q);
+
+                               /* start a new top array for results */
+                               e = dumpnextid(mb, j->j1);
+                               dumpbatwritable(j, mb, 1);
+                               q = newInstruction(mb, ASSIGNsymbol);
+                               setModuleId(q, batRef);
+                               setFunctionId(q, insertRef);
+                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
+                               q = pushArgument(mb, q, j->j1);
+                               q = pushArgument(mb, q, e);
+                               q = pushBte(mb, q, 'a');
+                               j->j1 = getArg(q, 0);
+                               pushInstruction(mb, q);
+                               j->startoid = e;
+
+                               /* add members new top array */
                                q = newInstruction(mb, ASSIGNsymbol);
                                setModuleId(q, algebraRef);
-                               setFunctionId(q, putName("sdifference", 11));
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, a);
+                               setFunctionId(q, projectRef);
+                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
+                               q = pushArgument(mb, q, e);
                                q = pushArgument(mb, q, b);
-                               b = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, putName("sdifference", 11));
+                               g = getArg(q, 0);
+                               pushInstruction(mb, q);
+                               dumpbatwritable(j, mb, 5);
+                               q = newInstruction(mb, ASSIGNsymbol);
+                               setModuleId(q, batRef);
+                               setFunctionId(q, insertRef);
                                q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
                                q = pushArgument(mb, q, j->j5);
-                               q = pushArgument(mb, q, b);
+                               q = pushArgument(mb, q, g);
                                j->j5 = getArg(q, 0);
                                pushInstruction(mb, q);
+
+                               MALCOMMENT(mb, "} j_top(%lld)", t->nval - 1);
                                break;
                        case j_func: {
                                enum treetype coltypes[MAXJAQLARG];
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to