Update of /cvsroot/monetdb/sql/src/server
In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv28898/src/server

Modified Files:
        sql_rel2bin.mx 
Log Message:
propagated changes of Sunday Nov 22 2009 - Saturday Nov 28 2009
from the Nov2009 branch to the development trunk

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2009/11/22 - nielsnes: src/server/sql_rel2bin.mx,1.139.2.2
  more leak fixing
  more like join fixing
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Index: sql_rel2bin.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_rel2bin.mx,v
retrieving revision 1.140
retrieving revision 1.141
diff -u -d -r1.140 -r1.141
--- sql_rel2bin.mx      12 Nov 2009 08:39:43 -0000      1.140
+++ sql_rel2bin.mx      28 Nov 2009 19:57:38 -0000      1.141
@@ -55,6 +55,7 @@
                return tail_column(st->op2.stval);
 
        case st_join2:
+       case st_joinN:
                return tail_column(st->op2.stval);
        case st_releqjoin:
                return tail_column(st->op2.lval->h->data);
@@ -63,8 +64,10 @@
 
        case st_select:
        case st_select2:
+       case st_selectN:
        case st_uselect:
        case st_uselect2:
+       case st_uselectN:
        case st_semijoin:
        case st_limit:
 
@@ -136,13 +139,16 @@
 
        case st_select:
        case st_select2:
+       case st_selectN:
        case st_uselect:
        case st_uselect2:
+       case st_uselectN:
        case st_semijoin:
        case st_limit:
 
        case st_join:
        case st_join2:
+       case st_joinN:
        case st_outerjoin:
        case st_diff:
        case st_union:
@@ -755,30 +761,46 @@
                r = stmt_mark(stmt_dup(res), 4);
                n = n->next;
        }
+       /* TODO also handle joinN */
        for (; n; n = n->next) {
                stmt *j = n->data;
                stmt *ld = stmt_dup(j->op1.stval);
                stmt *o2 = stmt_dup(j->op2.stval);
-               stmt *rd = (j->type != st_join2)?stmt_reverse(o2):o2;
-               stmt *le = stmt_project(l, ld );
-               stmt *re = stmt_project(r, rd );
+               stmt *rd = (j->type == st_join)?stmt_reverse(o2):o2;
 
-               if (j->type == st_join2) {
+               if (j->type == st_joinN) {
+                       /* make single list will columns/values, 
+                          call function 
+                          Then same als lower
+                        */
+                        assert(0);
+               } else if (j->type == st_join2) {
+                       stmt *le = stmt_project(l, ld );
+                       stmt *re = stmt_project(r, rd );
                        comp_type c1 = j->flag&2 ? cmp_gte : cmp_gt;
                        comp_type c2 = j->flag&1 ? cmp_lte : cmp_lt;
-                       stmt *r2 = stmt_join(stmt_dup(r), 
stmt_dup(j->op3.stval), cmp_equal);
+                       stmt *r2 = stmt_project(stmt_dup(r), 
stmt_dup(j->op3.stval));
                        stmt *cmp1 = stmt_uselect(le, re, c1);
                        stmt *cmp2 = stmt_uselect(stmt_dup(le), r2, c2);
+               
 
                        stmt *cmp = stmt_semijoin(cmp1, cmp2);
+                       /* use a single uselect2 ? */
+               /*
+                       stmt *cmp = stmt_uselect2(le, re, r2, 
(comp_type)j->flag);
+               */
 
                        /* TODO semijoin may break order */
                        l = stmt_semijoin(stmt_dup(l), stmt_dup(cmp));
                        r = stmt_semijoin(stmt_dup(r), cmp);
                } else {
+                       stmt *le = stmt_project(l, ld );
+                       stmt *re = stmt_project(r, rd );
+                       /* TODO force scan select ? */
                        stmt *cmp = stmt_uselect(le, re, (comp_type)j->flag);
 
-                       /* TODO semijoin may break order */
+                       /* TODO semijoin may break order, 
+                               ie maybe do a mirror + project */
                        l = stmt_semijoin(stmt_dup(l), stmt_dup(cmp));
                        r = stmt_semijoin(stmt_dup(r), cmp);
                }
@@ -1150,12 +1172,15 @@
        case st_limit: 
        case st_join:
        case st_join2:
+       case st_joinN:
 
        case st_reverse:
        case st_select:
        case st_select2:
+       case st_selectN:
        case st_uselect:
        case st_uselect2: 
+       case st_uselectN: 
 
        case st_temp:
        case st_diff:


------------------------------------------------------------------------------
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