Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv6264/src/backends/monet5

Modified Files:
      Tag: Nov2009
        sql_gencode.mx sql_scenario.mx 
Log Message:
more leak fixing
more like join fixing


Index: sql_scenario.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_scenario.mx,v
retrieving revision 1.356.2.14
retrieving revision 1.356.2.15
diff -u -d -r1.356.2.14 -r1.356.2.15
--- sql_scenario.mx     12 Nov 2009 00:20:47 -0000      1.356.2.14
+++ sql_scenario.mx     22 Nov 2009 20:30:17 -0000      1.356.2.15
@@ -315,7 +315,8 @@
        optimizer= GDKgetenv("sql_optimizer");
        if (optimizer == NULL)
                optimizer= "default_pipe";
-       SQLglobal("optimizer", setOptimizers(optimizer));
+       SQLglobal("optimizer", optimizer=setOptimizers(optimizer));
+       GDKfree(optimizer);
        SQLglobal("trace","show,ticks,stmt");
 
        typename = "sec_interval";

Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_gencode.mx,v
retrieving revision 1.336.2.4
retrieving revision 1.336.2.5
diff -u -d -r1.336.2.4 -r1.336.2.5
--- sql_gencode.mx      11 Nov 2009 08:43:01 -0000      1.336.2.4
+++ sql_gencode.mx      22 Nov 2009 20:30:17 -0000      1.336.2.5
@@ -300,28 +300,42 @@
        return 0;
 }
 
-void
-dump_1(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
+static int
+_dump_1(MalBlkPtr mb, char *mod, char *name, int o1)
 {
        InstrPtr q;
-       int o1 = _dumpstmt(sql, mb, s->op1.stval);
 
        q = newStmt2(mb, mod, name);
        q = pushArgument(mb, q, o1);
-       s->nr = getDestVar(q);
+       return getDestVar(q);
 }
 
-void
-dump_2(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
+static void
+dump_1(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
 {
-       InstrPtr q;
        int o1 = _dumpstmt(sql, mb, s->op1.stval);
-       int o2 = _dumpstmt(sql, mb, s->op2.stval);
+
+       s->nr = _dump_1(mb, mod, name, o1);
+}
+
+static int
+_dump_2( MalBlkPtr mb, char *mod, char *name, int o1, int o2) 
+{
+       InstrPtr q;
 
        q = newStmt2(mb, mod, name);
        q = pushArgument(mb, q, o1);
        q = pushArgument(mb, q, o2);
-       s->nr = getDestVar(q);
+       return getDestVar(q);
+}
+
+static void
+dump_2(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
+{
+       int o1 = _dumpstmt(sql, mb, s->op1.stval);
+       int o2 = _dumpstmt(sql, mb, s->op2.stval);
+
+       s->nr = _dump_2(mb, mod, name, o1, o2);
 }
 
 InstrPtr
@@ -340,6 +354,36 @@
 }
 
 InstrPtr
+dump_crossproduct(MalBlkPtr mb, int l, int r)
+{
+       int z;
+       InstrPtr q;
+
+       q = newStmt1(mb, calcRef, "int");
+       q = pushInt(mb, q, 0);
+       z = getDestVar(q);
+
+       q = newStmt2(mb, algebraRef, projectRef);
+       q = pushArgument(mb, q, r);
+       q = pushArgument(mb, q, z);
+       r = getDestVar(q);
+
+       q = newStmt2(mb, batRef, reverseRef);
+       q = pushArgument(mb, q, r);
+       r = getDestVar(q);
+
+       q = newStmt2(mb, algebraRef, projectRef);
+       q = pushArgument(mb, q, l);
+       q = pushArgument(mb, q, z);
+       l = getDestVar(q);
+
+       q = newStmt2(mb, algebraRef, joinRef);
+       q = pushArgument(mb, q, l);
+       q = pushArgument(mb, q, r);
+       return q;
+}
+
+InstrPtr
 multiplexN(MalBlkPtr mb, char *mod, char *name)
 {
        InstrPtr q = NULL;
@@ -349,6 +393,85 @@
        return q;
 }
 
+int
+dump_joinN(backend *sql, MalBlkPtr mb, stmt *s)
+{
+       char *mod = sql_func_mod(s->op4.funcval->func);
+       char *fimp = sql_func_imp(s->op4.funcval->func);
+       node *n;
+       InstrPtr q;
+       int l, r, k;
+       int need_not = (s->flag & ANTI);
+
+       /* dump left and right operands */
+       (void)_dumpstmt(sql, mb, s->op1.stval);
+       (void)_dumpstmt(sql, mb, s->op2.stval);
+
+       /* find left and right columns (need more work) */
+       l = ((stmt*)s->op1.stval->op1.lval->h->data)->nr;
+       r = ((stmt*)s->op2.stval->op1.lval->h->data)->nr;
+
+       q = dump_crossproduct(mb, l, r);
+       k = getDestVar(q);
+
+       /* split */
+       q = newStmt2(mb, algebraRef, markHRef);
+       q = pushArgument(mb, q, k);
+       q = pushOid(mb, q, 0);
+       r = getDestVar(q);
+
+       q = newStmt2(mb, algebraRef, markTRef);
+       q = pushArgument(mb, q, k);
+       q = pushOid(mb, q, 0);
+       l = getDestVar(q);
+
+       l = _dump_1(mb, batRef, reverseRef, l );
+
+       /* join left columns */
+       for (n = s->op1.stval->op1.lval->h; n; n = n->next) {
+               stmt *op = n->data;
+
+               if (op->nrcols)
+                       op->nr = _dump_2(mb, algebraRef, joinRef, l, op->nr);
+       }
+       /* join right columns */
+       for (n = s->op2.stval->op1.lval->h; n; n = n->next) {
+               stmt *op = n->data;
+
+               if (op->nrcols)
+                       op->nr = _dump_2(mb, algebraRef, joinRef, r, op->nr);
+       }
+
+       /* execute multiplexed function */
+       q = newStmt(mb, "mal","multiplex");
+       setVarType(mb,getArg(q,0), newBatType(TYPE_oid, TYPE_bit));
+       setVarUDFtype(mb,getArg(q,0));
+       q = pushStr(mb, q, mod);
+       q = pushStr(mb, q, fimp);
+       for (n = s->op1.stval->op1.lval->h; n; n = n->next) {
+               stmt *op = n->data;
+               q = pushArgument(mb, q, op->nr);
+       }
+       for (n = s->op2.stval->op1.lval->h; n; n = n->next) {
+               stmt *op = n->data;
+               q = pushArgument(mb, q, op->nr);
+       }
+       k = getDestVar(q);
+
+       /* filter qualifying tuples, return oids of h and tail */
+       q = newStmt2(mb, algebraRef, uselectRef);
+       q = pushArgument(mb, q, k);
+       q = pushBit(mb, q, !need_not);
+       k = getDestVar(q);
+
+       k = _dump_1(mb, batRef, mirrorRef, k);
+       k = _dump_2(mb, algebraRef, joinRef, k, l);
+       k = _dump_1(mb, batRef, reverseRef, k);
+       k = _dump_2(mb, algebraRef, joinRef, k, r);
+       return k;
+}
+
+
 InstrPtr
 pushSchema(MalBlkPtr mb, InstrPtr q, sql_table *t)
 {
@@ -650,7 +773,7 @@
                        if (s->nrcols == 0) { 
                                q = newStmt1(mb, algebraRef, "find");
                                q = pushArgument(mb, q, l);
-                               pushOid(mb,q,0);
+                               q = pushOid(mb,q,0);
                                l = getDestVar(q);
                        }
                        s->nr = l;
@@ -734,6 +857,7 @@
                                        showException(SQL,"sql","Unknown 
operator");
                                }
 
+                               /* select on join */
                                q = newStmt2(mb, batRef, mirrorRef );
                                q = pushArgument(mb, q, l);
                                hml = getDestVar(q);
@@ -747,13 +871,14 @@
                                q = pushArgument(mb, q, tmr);
                                j = getDestVar(q);
 
-                               q = newStmt1(mb, algebraRef, "markH");
+                               q = newStmt2(mb, algebraRef, markHRef);
                                q = pushArgument(mb, q, j);
                                q = pushOid(mb, q, 0);
                                mhj = getDestVar(q);
 
                                q = newStmt2(mb, algebraRef, markTRef);
                                q = pushArgument(mb, q, j);
+                               q = pushOid(mb, q, 0);
                                mtj = getDestVar(q);
 
                                q = newStmt2(mb, batRef, reverseRef );
@@ -891,6 +1016,13 @@
                                (s->flag&ANTI ? antiuselectRef : uselectRef) :
                                joinRef;
 
+                       if (s->op2.stval->nrcols > 0 &&
+                          (s->type == st_select2 || s->type == st_uselect)) {
+                               /* We need to add a range function to m5 */
+                               /* range(a,l,h,lb:bit,hb:bit):bat[:any,:bit] */
+                               assert(0);
+                               break;
+                       }
                        /* if st_join2 try to convert to bandjoin */
                        /* ie check if we substract/add a constant, to the
                           same column */
@@ -954,6 +1086,14 @@
                        s->nr = getDestVar(q);
                }
                        break;
+               case st_uselectN:
+               case st_selectN: {
+                       assert(0);
+                       break;
+               }
+               case st_joinN:
+                       s->nr = dump_joinN(sql, mb, s);
+                       break;
                case st_semijoin:{
                        dump_2(sql, mb, s, algebraRef, semijoinRef);
                }
@@ -1019,33 +1159,11 @@
                                break;
                        case cmp_all:   /* aka cross table */
                        {
-                               int z;
-
                                q = newStmt2(mb, batRef, reverseRef);
                                q = pushArgument(mb, q, r);
                                r = getDestVar(q);
 
-                               q = newStmt1(mb, calcRef, "int");
-                               q = pushInt(mb, q, 0);
-                               z = getDestVar(q);
-
-                               q = newStmt2(mb, algebraRef, projectRef);
-                               q = pushArgument(mb, q, r);
-                               q = pushArgument(mb, q, z);
-                               r = getDestVar(q);
-
-                               q = newStmt2(mb, batRef, reverseRef);
-                               q = pushArgument(mb, q, r);
-                               r = getDestVar(q);
-
-                               q = newStmt2(mb, algebraRef, projectRef);
-                               q = pushArgument(mb, q, l);
-                               q = pushArgument(mb, q, z);
-                               l = getDestVar(q);
-
-                               q = newStmt2(mb, algebraRef, joinRef);
-                               q = pushArgument(mb, q, l);
-                               q = pushArgument(mb, q, r);
+                               q = dump_crossproduct(mb, l, r);
                                break;
                        }
                        case cmp_project: 


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to