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

Better size extrapolation for result bat in mergejoin.
This hopefully fixes bug 3466.  It certainly makes that Roberto's
example runs on my system (where it didn't in the original version).


diffs (18 lines):

diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -1050,8 +1050,12 @@ mergejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                 * we need to add nl * nr values in the results */
                if (BATcount(r1) + nl * nr > BATcapacity(r1)) {
                        /* make some extra space by extrapolating how
-                        * much more we need */
-                       BUN newcap = BATcount(r1) + nl * nr * (lcand ? (BUN) 
(lcandend + 1 - lcand) : lend + 1 - lstart);
+                        * much more we need (used part of l divided
+                        * by total length of l, multiplied by amount
+                        * generated so far) */
+                       BUN newcap = (BUN) ((lcand ? (double) (lcandend + 1 - 
lcand) / BATcount(sl) : (double) (lend + 1 - lstart) / lend) * (BATcount(r1) + 
nl * nr));
+                       if (newcap < nl * nr + BATcount(r1))
+                               newcap = nl * nr + BATcount(r1) + 1024;
                        BATsetcount(r1, BATcount(r1));
                        BATsetcount(r2, BATcount(r2));
                        r1 = BATextend(r1, newcap);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to