Changeset: 49a18d39a7c4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=49a18d39a7c4
Modified Files:
        gdk/gdk_join.c
Branch: default
Log Message:

Move key check to correct place (when searching for end of equals).


diffs (53 lines):

diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -872,6 +872,23 @@ mergejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                 * value in r that is >= v; the
                                 * difference is the number of values
                                 * equal v */
+                               /* look ahead a little (rscan) in r to
+                                * see whether we're better off doing
+                                * a binary search */
+                               if (rscan < rend - rstart &&
+                                   rordering * cmp(v, VALUE(r, rend - rscan - 
1)) < 0) {
+                                       /* value too far away in r:
+                                        * use binary search */
+                                       rend = binsearch(NULL, 0, r->ttype, 
rvals, rvars,
+                                                        rwidth, rstart,
+                                                        rend - rscan, v, cmp,
+                                                        rordering, 1);
+                               } else {
+                                       /* scan r for v */
+                                       while (rstart < rend &&
+                                              rordering * cmp(v, VALUE(r, rend 
- 1)) < 0)
+                                               rend--;
+                               }
                                /* if r is key, there is zero or one
                                 * match, otherwise look ahead a
                                 * little (rscan) in r to see whether
@@ -884,24 +901,7 @@ mergejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                rend--;
                                        }
                                } else if (rscan < rend - rstart &&
-                                          rordering * cmp(v, VALUE(r, rend - 
rscan - 1)) < 0) {
-                                       /* value too far away in r:
-                                        * use binary search */
-                                       rend = binsearch(NULL, 0, r->ttype, 
rvals, rvars,
-                                                        rwidth, rstart,
-                                                        rend - rscan, v, cmp,
-                                                        rordering, 1);
-                               } else {
-                                       /* scan r for v */
-                                       while (rstart < rend &&
-                                              rordering * cmp(v, VALUE(r, rend 
- 1)) < 0)
-                                               rend--;
-                               }
-                               /* look ahead a little (rscan) in r to
-                                * see whether we're better off doing
-                                * a binary search */
-                               if (rscan < rend - rstart &&
-                                   cmp(v, VALUE(r, rend - rscan - 1)) == 0) {
+                                          cmp(v, VALUE(r, rend - rscan - 1)) 
== 0) {
                                        nr = binsearch(NULL, 0, r->ttype, 
rvals, rvars, rwidth, rstart, rend - rscan, v, cmp, rordering, 0);
                                        nr = rend - nr;
                                        rend -= nr;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to