Update of /cvsroot/monetdb/sql/src/server
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv6054/src/server

Modified Files:
      Tag: Nov2009
        rel_bin.mx sql_statement.mx 
Log Message:
implemented 2 new stmts (joinN and selectN)
needed for the bugs related to like-joins.


Index: rel_bin.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_bin.mx,v
retrieving revision 1.93.2.1
retrieving revision 1.93.2.2
diff -u -d -r1.93.2.1 -r1.93.2.2
--- rel_bin.mx  6 Oct 2009 13:32:27 -0000       1.93.2.1
+++ rel_bin.mx  22 Nov 2009 20:29:14 -0000      1.93.2.2
@@ -562,6 +562,18 @@
                                }
                                return lstmt;
                        }
+                        if (left && right && re->card > CARD_ATOM && 
!is_select) {
+                                /* create l and r, gen operator func */
+                                char *like = (e->flag == cmp_like || e->flag 
== cmp_notlike)?"like":"ilike";
+                                int anti = (e->flag == cmp_notlike || e->flag 
== cmp_notilike);
+                                sql_subtype *s = sql_bind_localtype("str");
+                                sql_subfunc *f = 
sql_bind_func3(sql->session->schema, like, s, s, s);
+
+                                stmt *j = 
stmt_joinN(stmt_list(append(create_stmt_list(),l)), 
stmt_list(append(append(create_stmt_list(),r),r2)), f);
+                                if (is_anti(e) || anti)
+                                        j->flag |= ANTI;
+                                return j;
+                        }
                        return stmt_likeselect(l, r, r2, (comp_type)e->flag);
                }
                if (left && right && re->card > CARD_ATOM && !is_select) {

Index: sql_statement.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_statement.mx,v
retrieving revision 1.190
retrieving revision 1.190.2.1
diff -u -d -r1.190 -r1.190.2.1
--- sql_statement.mx    4 Aug 2009 07:24:43 -0000       1.190
+++ sql_statement.mx    22 Nov 2009 20:29:14 -0000      1.190.2.1
@@ -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,
@@ -221,9 +224,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
@@ -232,6 +233,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);
@@ -242,6 +247,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);
@@ -359,13 +368,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);
@@ -620,6 +632,7 @@
                case st_union:
                case st_join:
                case st_join2:
+               case st_joinN:
                case st_outerjoin:
                case st_derive:
                case st_unique:
@@ -746,8 +759,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);
@@ -755,7 +770,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:
@@ -860,6 +875,7 @@
                case st_union:
                case st_join:
                case st_join2:
+               case st_joinN:
                case st_outerjoin:
                case st_derive:
                case st_unique:
@@ -974,8 +990,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)
@@ -984,7 +1002,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;
                }
@@ -1546,6 +1564,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);
@@ -1575,6 +1607,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);
@@ -1719,6 +1764,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)
@@ -2072,7 +2130,6 @@
        return s;
 }
 
-
 sql_subtype *
 tail_type(stmt *st)
 {
@@ -2082,6 +2139,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);
@@ -2098,8 +2156,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:
@@ -2177,13 +2237,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:
@@ -2234,8 +2297,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:
@@ -2293,6 +2358,7 @@
        case st_const:
        case st_join:
        case st_join2:
+       case st_joinN:
        case st_outerjoin:
        case st_derive:
        case st_rs_column:
@@ -2308,8 +2374,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:
@@ -2368,6 +2436,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);
@@ -2381,8 +2450,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:
@@ -2426,6 +2497,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);
@@ -2438,8 +2510,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:
@@ -2636,7 +2710,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:
@@ -2651,8 +2725,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:
@@ -2800,6 +2874,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;
@@ -2812,6 +2889,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

Reply via email to