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
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to