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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list