Changeset: 9f649a98fbf2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9f649a98fbf2
Modified Files:
        sql/src/server/rel_bin.c
        sql/src/server/sql_rel2bin.c
Branch: default
Log Message:

merging changes from oct2010 branch


diffs (69 lines):

diff -r 88baa725fd26 -r 9f649a98fbf2 
java/src/nl/cwi/monetdb/jdbc/MonetResultSet.java
--- a/java/src/nl/cwi/monetdb/jdbc/MonetResultSet.java  Wed Nov 10 17:13:37 
2010 +0100
+++ b/java/src/nl/cwi/monetdb/jdbc/MonetResultSet.java  Wed Nov 10 20:47:51 
2010 +0100
@@ -2269,7 +2269,7 @@
         */
        private int getJavaType(String sqltype) throws SQLException {
                int type = MonetDriver.getJavaType(sqltype);
-               if 
(((MonetConnection)statement.getConnection()).getBlobAsBinary()) {
+               if (statement != null && 
((MonetConnection)statement.getConnection()).getBlobAsBinary()) {
                        if (type == Types.BLOB)
                                type = Types.BINARY;
                }
diff -r 88baa725fd26 -r 9f649a98fbf2 sql/src/server/rel_bin.c
--- a/sql/src/server/rel_bin.c  Wed Nov 10 17:13:37 2010 +0100
+++ b/sql/src/server/rel_bin.c  Wed Nov 10 20:47:51 2010 +0100
@@ -869,7 +869,7 @@
                                idx = 1;
                        if (!join) {
                                join = s;
-                       } else if (s->type != st_join && s->type != st_join2) {
+                       } else if (s->type != st_join && s->type != st_join2 && 
s->type != st_joinN) {
                                /* handle select expressions */
                                /*assert(0);*/
                                if (s->h == join->h) {
diff -r 88baa725fd26 -r 9f649a98fbf2 sql/src/server/sql_rel2bin.c
--- a/sql/src/server/sql_rel2bin.c      Wed Nov 10 17:13:37 2010 +0100
+++ b/sql/src/server/sql_rel2bin.c      Wed Nov 10 20:47:51 2010 +0100
@@ -729,6 +729,14 @@
 }
 
 static stmt *
+_project( stmt *o, stmt *v )
+{
+       if (v->nrcols == 0)
+               return stmt_dup(v);
+       return stmt_project(stmt_dup(o), stmt_dup(v));
+}
+
+static stmt *
 reljoin( mvc *sql, stmt *rj, list *l2 )
 {
        node *n = l2->h;
@@ -756,11 +764,21 @@
                stmt *rd = (j->type == st_join)?stmt_reverse(o2):o2;
 
                if (j->type == st_joinN) {
-                       /* make single list will columns/values, 
-                          call function 
-                          Then same als lower
-                        */
-                        assert(0);
+                       stmt *cmp;
+                       list *ol,*nl = create_stmt_list();
+                       node *m;
+
+                       ol = j->op1.stval->op1.lval;
+                       for (m = ol->h; m; m = m->next) 
+                               list_append(nl, _project(l, m->data));
+                       ol = j->op2.stval->op1.lval;
+                       for (m = ol->h; m; m = m->next) 
+                               list_append(nl, _project(r, m->data));
+                       /* find function */
+                       cmp = stmt_uselect( stmt_Nop( stmt_list(nl), 
j->op4.funcval), stmt_bool(1), cmp_equal);
+                       /* TODO semijoin may break order */
+                       l = stmt_semijoin(stmt_dup(l), stmt_dup(cmp));
+                       r = stmt_semijoin(stmt_dup(r), cmp);
                } else if (j->type == st_join2) {
                        stmt *le = stmt_project(l, ld );
                        stmt *re = stmt_project(r, rd );
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to