Changeset: d251ff794b70 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d251ff794b70 Modified Files: gdk/gdk_join.c Branch: Mar2025 Log Message:
Simplify tests.
diffs (83 lines):
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2810,7 +2810,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT **r3
break; \
} \
HASHLOOPBODY(); \
- if (semi && !max_one) \
+ if (semi) \
break; \
} \
} else if (rci->tpe != cand_dense) { \
@@ -2825,7 +2825,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT **r3
break; \
} \
HASHLOOPBODY(); \
- if (semi && !max_one) \
+ if (semi) \
break; \
} \
} \
@@ -2841,7 +2841,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT **r3
} \
ro = (oid) (rb - roff + rseq); \
HASHLOOPBODY(); \
- if (semi && !max_one) \
+ if (semi) \
break; \
} \
} \
@@ -3083,6 +3083,16 @@ hashjoin(BAT **r1p, BAT **r2p, BAT **r3p
goto bailout;
}
+ /* from here on, semi is used to bail out early from the
+ * collision lists; if right is key, it's effectively a
+ * semi-join, and max_one is automatically satisfied; otherwise,
+ * we need to continue looking if max_one is specified to make
+ * sure there is only one match */
+ if (r->tkey)
+ semi = true;
+ else if (max_one)
+ semi = false;
+
r1 = *r1p;
r2 = r2p ? *r2p : NULL;
r3 = r3p ? *r3p : NULL;
@@ -3143,7 +3153,7 @@ hashjoin(BAT **r1p, BAT **r2p, BAT **r3p
break;
}
HASHLOOPBODY();
- if (semi && !max_one)
+ if (semi)
break;
}
} else if (hsh == NULL) {
@@ -3159,7 +3169,7 @@ hashjoin(BAT **r1p, BAT **r2p, BAT **r3p
break;
}
HASHLOOPBODY();
- if (semi && !max_one)
+ if (semi)
break;
}
}
@@ -3175,7 +3185,7 @@ hashjoin(BAT **r1p, BAT **r2p, BAT **r3p
break;
}
HASHLOOPBODY();
- if (semi && !max_one)
+ if (semi)
break;
}
}
@@ -3191,7 +3201,7 @@ hashjoin(BAT **r1p, BAT **r2p, BAT **r3p
}
ro = (oid) (rb - roff + rseq);
HASHLOOPBODY();
- if (semi && !max_one)
+ if (semi)
break;
}
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]
