Changeset: 1d43b02fbcb1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1d43b02fbcb1
Modified Files:
MonetDB/src/gdk/gdk_storage.mx
sql/src/server/rel_bin.mx
Branch: default
Log Message:
merge from Jun2010
diffs (160 lines):
diff -r 0a6a45c2a2b0 -r 1d43b02fbcb1 MonetDB/src/gdk/gdk_storage.mx
--- a/MonetDB/src/gdk/gdk_storage.mx Tue Aug 10 16:58:06 2010 +0200
+++ b/MonetDB/src/gdk/gdk_storage.mx Wed Aug 11 01:29:16 2010 +0200
@@ -760,21 +760,31 @@
view and heap.base of views are not necessarily
aligned */
size_t *lo = (size_t *) (((size_t) base + sizeof(size_t) - 1) &
(~(sizeof(size_t) - 1)));
- size_t *hi = (size_t *) (base + touch);
- for (hi -= 8 * page; lo <= hi; lo += 8 * page) {
- /* try to trigger loading of multiple pages
- without blocking */
- v0 += lo[0 * page];
- v1 += lo[1 * page];
- v2 += lo[2 * page];
- v3 += lo[3 * page];
- v4 += lo[4 * page];
- v5 += lo[5 * page];
- v6 += lo[6 * page];
- v7 += lo[7 * page];
- }
- for (hi += 7 * page; lo <= hi; lo += page)
- v0 += *lo;
+ size_t *hi = (size_t *) (base + touch), *hi8 = NULL, hi1 = NULL;
+ /* page size: [bytes] -> [sizeof(size_t)]
+ * to make sure we touch each page,
+ * not only 1 in sizeof(size_t) pages */
+ page /= sizeof(size_t);
+ hi8 = hi - 8 * page;
+ hi1 = hi - page;
+ /* detect address underrun */
+ if (hi8 < hi)
+ for (; lo <= hi8; lo += 8 * page) {
+ /* try to trigger loading of multiple pages
+ without blocking */
+ v0 += lo[0 * page];
+ v1 += lo[1 * page];
+ v2 += lo[2 * page];
+ v3 += lo[3 * page];
+ v4 += lo[4 * page];
+ v5 += lo[5 * page];
+ v6 += lo[6 * page];
+ v7 += lo[7 * page];
+ }
+ /* detect address underrun */
+ if (hi1 < hi)
+ for (; lo <= hi1; lo += page)
+ v0 += *lo;
}
IODEBUG THRprintf(GDKout,
"#BATpreload(%s->%s,preload=%d,sz=%dMB,touch=%dMB,%s)
= %dms \n",
diff -r 0a6a45c2a2b0 -r 1d43b02fbcb1 sql/src/server/rel_bin.mx
--- a/sql/src/server/rel_bin.mx Tue Aug 10 16:58:06 2010 +0200
+++ b/sql/src/server/rel_bin.mx Wed Aug 11 01:29:16 2010 +0200
@@ -935,7 +935,6 @@
stmt *c = n->data;
char *rnme = table_name(c);
char *nme = column_name(c);
- //stmt *s = stmt_join(stmt_dup(jl), column(c), cmp_equal);
stmt *s = stmt_project(stmt_dup(jl), column(c) );
/* as append isn't save, we append to a new copy */
@@ -955,7 +954,6 @@
stmt *c = n->data;
char *rnme = table_name(c);
char *nme = column_name(c);
- //stmt *s = stmt_join(stmt_dup(jr), column(c), cmp_equal);
stmt *s = stmt_project(stmt_dup(jr), column(c) );
/* as append isn't save, we append to a new copy */
@@ -1060,7 +1058,6 @@
stmt *c = n->data;
char *rnme = table_name(c);
char *nme = column_name(c);
- //stmt *s = stmt_join(stmt_dup(join), column(c), cmp_equal);
stmt *s = stmt_project(stmt_dup(join), column(c));
s = stmt_alias(s, rnme, nme);
@@ -1789,7 +1786,6 @@
if (col->nrcols == 0) /* constant */
col = stmt_const(sel, col);
else
- //col = stmt_join(sel, col, cmp_equal);
col = stmt_project(sel, col);
list_append(l, col);
}
@@ -1952,20 +1948,12 @@
if (n) {
stmt *limit = NULL, *p, *j;
- //sql_exp *lmt = le;
if (le)
l = exp_bin(sql, le, NULL, NULL, NULL, NULL);
if (oe)
o = exp_bin(sql, oe, NULL, NULL, NULL, NULL);
-/*
- if (!le) {
- l = o;
- o = stmt_atom_wrd(0);
- }
-*/
-
if (!le)
l = stmt_atom_wrd_nil();
if (!o)
@@ -1980,22 +1968,15 @@
sc = column(sc);
limit = stmt_limit(stmt_alias(sc, tname, cname), o, l,
0);
- //if (lmt) {
- n = n->next;
- list_append(newl, limit);
- //}
+ n = n->next;
+ list_append(newl, limit);
}
/* reduce pivot */
j = find_projection_join(limit);
if (j && 0) {
p = find_pivot(j);
-/*
- if (!lmt)
- p = stmt_diff(stmt_dup(p), stmt_dup(limit));
- else
-*/
- p = stmt_semijoin(stmt_dup(p), stmt_dup(limit));
+ p = stmt_semijoin(stmt_dup(p), stmt_dup(limit));
for ( ; n; n = n->next) {
stmt *s = column(stmt_dup(n->data));
stmt *prj = find_projection_join(s);
@@ -2010,24 +1991,13 @@
for ( ; n; n = n->next) {
stmt *s;
-/*
- if (!lmt)
- s =
stmt_diff(column(stmt_dup(n->data)), stmt_dup(limit));
- else
-*/
- s =
stmt_semijoin(column(stmt_dup(n->data)), stmt_dup(limit));
+ s = stmt_semijoin(column(stmt_dup(n->data)),
stmt_dup(limit));
list_append(newl, s);
}
}
if (order) {
-/*
- if (!lmt) {
- order = stmt_diff(order, limit);
- } else {
-*/
- stmt_destroy(order);
- order = limit;
-// }
+ stmt_destroy(order);
+ order = limit;
}
}
stmt_destroy(sub);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list