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