Update of /cvsroot/monetdb/sql/src/server
In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv28928/src/server
Modified Files:
sql_statement.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_statement.mx,1.190.2.1
implemented 2 new stmts (joinN and selectN)
needed for the bugs related to like-joins.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Index: sql_statement.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_statement.mx,v
retrieving revision 1.192
retrieving revision 1.193
diff -u -d -r1.192 -r1.193
--- sql_statement.mx 27 Oct 2009 06:38:13 -0000 1.192
+++ sql_statement.mx 28 Nov 2009 19:57:42 -0000 1.193
@@ -77,14 +77,17 @@
st_atom,
st_select,
st_select2,
+ st_selectN,
st_uselect,
st_uselect2,
+ st_uselectN,
st_semijoin,
st_relselect,
st_releqjoin,
st_join,
st_join2,
+ st_joinN,
st_outerjoin,
st_diff,
st_union,
@@ -220,9 +223,7 @@
extern stmt *stmt_atom_lng(lng l);
extern stmt *stmt_bool(int b);
extern stmt *stmt_select(stmt *op1, stmt *op2, comp_type cmptype);
-extern stmt *stmt_likeselect(stmt *op1, stmt *op2, stmt *op3, comp_type
cmptype);
extern stmt *stmt_uselect(stmt *op1, stmt *op2, comp_type cmptype);
-
/* cmp
0 == l < x < h
1 == l < x <= h
@@ -231,6 +232,10 @@
*/
extern stmt *stmt_select2(stmt *op1, stmt *op2, stmt *op3, int cmp);
extern stmt *stmt_uselect2(stmt *op1, stmt *op2, stmt *op3, int cmp);
+extern stmt *stmt_selectN(stmt *l, stmt *r, sql_subfunc *op);
+extern stmt *stmt_uselectN(stmt *l, stmt *r, sql_subfunc *op);
+extern stmt *stmt_likeselect(stmt *op1, stmt *op2, stmt *op3, comp_type
cmptype);
+
extern stmt *stmt_semijoin(stmt *op1, stmt *op2);
extern stmt *stmt_relselect_init(void);
@@ -241,6 +246,10 @@
extern stmt *stmt_releqjoin1(list *joins);
extern stmt *stmt_releqjoin2(list *l1, list *l2);
extern stmt *stmt_join(stmt *op1, stmt *op2, comp_type cmptype);
+
+/* generic join operator, with a left and right statement list */
+extern stmt *stmt_joinN(stmt *l, stmt *r, sql_subfunc *op);
+
extern stmt *stmt_join2(stmt *l, stmt *ra, stmt *rb, int cmp);
extern stmt *stmt_project(stmt *op1, stmt *op2);
extern stmt *stmt_outerjoin(stmt *op1, stmt *op2, comp_type cmptype);
@@ -360,13 +369,16 @@
ST(select);
ST(select2);
ST(uselect);
+ ST(selectN);
ST(uselect2);
+ ST(uselectN);
ST(semijoin);
ST(relselect);
ST(releqjoin);
ST(join);
ST(join2);
+ ST(joinN);
ST(outerjoin);
ST(diff);
ST(union);
@@ -610,6 +622,7 @@
case st_union:
case st_join:
case st_join2:
+ case st_joinN:
case st_outerjoin:
case st_derive:
case st_unique:
@@ -736,8 +749,10 @@
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_semijoin:
if (s->op1.stval)
stmt_destroy(s->op1.stval);
@@ -745,7 +760,7 @@
stmt_destroy(s->op2.stval);
if (s->op3.stval)
stmt_destroy(s->op3.stval);
- if (s->op4.stval)
+ if (s->type != st_selectN && s->type != st_uselectN &&
s->op4.stval)
stmt_destroy(s->op4.stval);
break;
default:
@@ -850,6 +865,7 @@
case st_union:
case st_join:
case st_join2:
+ case st_joinN:
case st_outerjoin:
case st_derive:
case st_unique:
@@ -964,8 +980,10 @@
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_semijoin:
case st_connection:
if (s->op1.stval)
@@ -974,7 +992,7 @@
push(s->op2.stval);
if (s->op3.stval)
push(s->op3.stval);
- if (s->op4.stval)
+ if (s->type != st_selectN && s->type != st_uselectN &&
s->op4.stval)
push(s->op4.stval);
break;
}
@@ -1536,6 +1554,20 @@
}
stmt *
+stmt_selectN(stmt *op1, stmt *op2, sql_subfunc *op)
+{
+ stmt *s = stmt_create(st_selectN);
+
+ s->op1.stval = op1;
+ s->op2.stval = op2;
+ s->op4.funcval = op;
+ s->nrcols = (op1->nrcols==2)?2:1;
+ s->h = stmt_dup(s->op1.stval->h);
+ s->t = stmt_dup(s->op1.stval->t);
+ return s;
+}
+
+stmt *
stmt_uselect(stmt *op1, stmt *op2, comp_type cmptype)
{
stmt *s = stmt_create(st_uselect);
@@ -1565,6 +1597,19 @@
}
stmt *
+stmt_uselectN(stmt *op1, stmt *op2, sql_subfunc *op)
+{
+ stmt *s = stmt_create(st_uselectN);
+
+ s->op1.stval = op1;
+ s->op2.stval = op2;
+ s->op4.funcval = op;
+ s->nrcols = (op1->nrcols==2)?2:1;
+ s->h = stmt_dup(s->op1.stval->h);
+ return s;
+}
+
+stmt *
stmt_semijoin(stmt *op1, stmt *op2)
{
stmt *s = stmt_create(st_semijoin);
@@ -1709,6 +1754,19 @@
return s;
}
+stmt *
+stmt_joinN(stmt *l, stmt *r, sql_subfunc *op)
+{
+ stmt *s = stmt_create(st_joinN);
+
+ s->op1.stval = l;
+ s->op2.stval = r;
+ s->op4.funcval = op;
+ s->nrcols = 2;
+ s->h = stmt_dup(l->h);
+ s->t = stmt_dup(r->h);
+ return s;
+}
stmt *
stmt_outerjoin(stmt *op1, stmt *op2, comp_type cmptype)
@@ -2062,7 +2120,6 @@
return s;
}
-
sql_subtype *
tail_type(stmt *st)
{
@@ -2072,6 +2129,7 @@
case st_outerjoin:
return tail_type(st->op2.stval);
case st_join2:
+ case st_joinN:
/* The tail type of a join2 is the head of the second operant!,
ie should be 'oid' */
return head_type(st->op2.stval);
@@ -2088,8 +2146,10 @@
case st_diff:
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_limit:
case st_semijoin:
case st_unique:
@@ -2167,13 +2227,16 @@
case st_diff:
case st_join:
case st_join2:
+ case st_joinN:
case st_outerjoin:
case st_semijoin:
case st_mirror:
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_column:
case st_append:
case st_gen_group:
@@ -2224,8 +2287,10 @@
case st_Nop:
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_atom:
return 0;
case st_unop:
@@ -2283,6 +2348,7 @@
case st_const:
case st_join:
case st_join2:
+ case st_joinN:
case st_outerjoin:
case st_derive:
case st_rs_column:
@@ -2298,8 +2364,10 @@
case st_gen_group:
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_limit:
case st_semijoin:
case st_diff:
@@ -2358,6 +2426,7 @@
case st_const:
case st_join:
case st_join2:
+ case st_joinN:
case st_outerjoin:
case st_derive:
return table_name(st->op2.stval);
@@ -2371,8 +2440,10 @@
case st_gen_group:
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_limit:
case st_semijoin:
case st_diff:
@@ -2416,6 +2487,7 @@
case st_const:
case st_join:
case st_join2:
+ case st_joinN:
case st_outerjoin:
case st_derive:
return schema_name(st->op2.stval);
@@ -2428,8 +2500,10 @@
case st_gen_group:
case st_select:
case st_select2:
+ case st_selectN:
case st_uselect:
case st_uselect2:
+ case st_uselectN:
case st_limit:
case st_semijoin:
case st_diff:
@@ -2626,7 +2700,7 @@
case st_aggr:
case st_unop: case st_binop: case st_Nop:
case st_diff: case st_union:
- case st_join: case st_join2: case st_outerjoin:
+ case st_join: case st_join2: case st_joinN: case st_outerjoin:
case st_derive:
case st_unique:
case st_alias:
@@ -2641,8 +2715,8 @@
case st_group: case st_group_ext:
- case st_select: case st_select2:
- case st_uselect: case st_uselect2:
+ case st_select: case st_select2: case st_selectN:
+ case st_uselect: case st_uselect2: case st_uselectN:
case st_semijoin:
case st_export:
@@ -2790,6 +2864,9 @@
case st_select2:
case st_uselect2:
dump3(s, "select", nr); break;
+ case st_selectN:
+ case st_uselectN:
+ dump2(s, "selectN", nr); break;
case st_semijoin: dump2(s, "semijoin", nr); break;
case st_diff: dump2(s, "diff", nr); break;
case st_union: dump2(s, "union", nr); break;
@@ -2802,6 +2879,8 @@
break;
case st_join2:
dump3(s, "join", nr); break;
+ case st_joinN:
+ dump2(s, "joinN", nr); break;
case st_group: dump1(s, "group", nr); break;
case st_group_ext: dump1(s, "extent", nr); break;
case st_derive: dump2(s, "derive", nr); break;
------------------------------------------------------------------------------
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