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