Changeset: dfca5ce4fa09 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dfca5ce4fa09
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/server/rel_select.c
        sql/server/sql_parser.y
Branch: default
Log Message:

Merge with Jan2014 branch.


diffs (139 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1802,7 +1802,7 @@ rel2bin_semijoin( mvc *sql, sql_rel *rel
 }
 
 static stmt *
-rel2bin_distinct(mvc *sql, stmt *s)
+rel2bin_distinct(mvc *sql, stmt *s, stmt **distinct)
 {
        node *n;
        stmt *g = NULL, *grp = NULL, *ext = NULL, *cnt = NULL;
@@ -1842,6 +1842,8 @@ rel2bin_distinct(mvc *sql, stmt *s)
                list_append(rl, stmt_project(sql->sa, ext, t));
        }
 
+       if (distinct)
+               *distinct = ext;
        s = stmt_list(sql->sa, rl);
        return s;
 }
@@ -1903,7 +1905,7 @@ rel2bin_union( mvc *sql, sql_rel *rel, l
        }
 
        if (need_distinct(rel)) 
-               sub = rel2bin_distinct(sql, sub);
+               sub = rel2bin_distinct(sql, sub, NULL);
        return sub;
 }
 
@@ -2042,7 +2044,7 @@ rel2bin_except( mvc *sql, sql_rel *rel, 
        }
 
        if (need_distinct(rel))
-               sub = rel2bin_distinct(sql, sub);
+               sub = rel2bin_distinct(sql, sub, NULL);
        return sub;
 }
 
@@ -2168,7 +2170,7 @@ rel2bin_inter( mvc *sql, sql_rel *rel, l
        }
 
        if (need_distinct(rel))
-               sub = rel2bin_distinct(sql, sub);
+               sub = rel2bin_distinct(sql, sub, NULL);
        return sub;
 }
 
@@ -2266,7 +2268,10 @@ rel2bin_project( mvc *sql, sql_rel *rel,
                        assert(0);
                        return NULL;
                }
-               if (sub && sub->nrcols >= 1 && s->nrcols == 0)
+               /* single value with limit */
+               if (topn && rel->r && sub && sub->nrcols == 0)
+                       s = const_column(sql->sa, s);
+               else if (sub && sub->nrcols >= 1 && s->nrcols == 0)
                        s = stmt_const(sql->sa, bin_first_column(sql->sa, sub), 
s);
                        
                s = stmt_rename(sql, rel, exp, s);
@@ -2323,11 +2328,11 @@ rel2bin_project( mvc *sql, sql_rel *rel,
                sub = stmt_list(sql->sa, npl);
        }
        if (need_distinct(rel)) {
-               psub = rel2bin_distinct(sql, psub);
+               stmt *distinct = NULL;
+               psub = rel2bin_distinct(sql, psub, &distinct);
                /* also rebuild sub as multiple orderby expressions may use the 
sub table (ie aren't part of the result columns) */
                if (sub) {
                        list *npl = sa_list(sql->sa);
-                       stmt *distinct = stmt_mirror(sql->sa, 
psub->op4.lval->h->data);
                        
                        pl = sub->op4.lval;
                        for ( n=pl->h ; n; n = n->next) 
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -2648,6 +2648,21 @@ bat2return(MalStkPtr stk, InstrPtr pci, 
        }
 }
 
+#ifdef WIN32
+static void
+fix_windows_newline(unsigned char *s)
+{
+       char *p = NULL;
+       int c = '\r';
+
+       if (s && (p=strchr((char*)s, c)) != NULL && p[1] == '\n') {
+               for(; p[1]; p++) 
+                       p[0] = p[1];
+               p[0] = 0;
+       }
+}
+#endif
+
 /* str mvc_import_table_wrap(int *res, str *sname, str *tname, unsigned char* 
*T, unsigned char* *R, unsigned char* *S, unsigned char* *N, str *fname, lng 
*sz, lng *offset); */
 str
 mvc_import_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
@@ -2705,6 +2720,11 @@ mvc_import_table_wrap(Client cntxt, MalB
 #else
        s = bstream_create(ss, 0x2000000);
 #endif
+#ifdef WIN32
+       fix_windows_newline(tsep);
+       fix_windows_newline(rsep);
+       fix_windows_newline(ssep);
+#endif
        if (s != NULL) {
                b = mvc_import_table(cntxt, be->mvc, s, *sname, *tname, (char 
*) tsep, (char *) rsep, (char *) ssep, (char *) ns, *sz, *offset, *locked);
                bstream_destroy(s);
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3108,7 +3108,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
                                e = exp_compare(sql->sa,  e, r, cmp_equal);
                                rel = rel_select(sql->sa, rel, e);
                        }
-                       if (l_is_value)
+                       if (l_is_value && outer)
                                rel = rel_crossproduct(sql->sa, outer, rel, 
op_join);
                        rel = rel_project(sql->sa, rel, rel_projections(sql, 
outer, NULL, 1, 1));
                        set_processed(rel);
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -2503,7 +2503,11 @@ opt_using:
 opt_nr:
     /* empty */                        { $$ = NULL; }
  |  poslng RECORDS             { $$ = append_lng(append_lng(L(), $1), 0); }
- |  poslng OFFSET poslng RECORDS       { $$ = append_lng(append_lng(L(), $1), 
$3); }
+ |  OFFSET poslng              { $$ = append_lng(append_lng(L(), -1), $2); }
+ |  poslng OFFSET poslng RECORDS       
+                               { $$ = append_lng(append_lng(L(), $1), $3); }
+ |  poslng RECORDS OFFSET poslng       
+                               { $$ = append_lng(append_lng(L(), $1), $4); }
  ;
 
 opt_null_string:
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to