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