Changeset: 3cc21b190d96 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3cc21b190d96
Modified Files:
        gdk/gdk_join.c
Branch: Jun2020
Log Message:

merged


diffs (86 lines):

diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3363,38 +3363,52 @@ leftjoin(BAT **r1p, BAT **r2p, BAT *l, B
                        }
                        if (semi)
                                r1->tkey = true;
-                       BAT *ob;
-                       rc = BATsort(&tmp, r2p ? &ob : NULL, NULL,
-                                    r1, NULL, NULL, false, false, false);
-                       BBPunfix(r1->batCacheid);
-                       if (rc != GDK_SUCCEED) {
-                               if (r2)
+                       if (!VIEWtparent(r1) &&
+                           r1->ttype == TYPE_oid &&
+                           BBP_refs(r1->batCacheid) == 1 &&
+                           (r2 == NULL ||
+                            (!VIEWtparent(r2) &&
+                             BBP_refs(r2->batCacheid) == 1 &&
+                             r2->ttype == TYPE_oid))) {
+                               /* in-place sort if we can */
+                               if (r2) {
+                                       GDKqsort(r1->theap.base, r2->theap.base,
+                                                NULL, r1->batCount, r1->twidth,
+                                                r2->twidth, TYPE_oid, false,
+                                                false);
+                                       r2->tsorted = false;
+                                       r2->trevsorted = false;
+                                       *r2p = r2;
+                               } else {
+                                       GDKqsort(r1->theap.base, NULL, NULL,
+                                                r1->batCount, r1->twidth, 0,
+                                                TYPE_oid, false, false);
+                               }
+                               r1->tsorted = true;
+                               r1->trevsorted = false;
+                               *r1p = r1;
+                       } else {
+                               BAT *ob;
+                               rc = BATsort(&tmp, r2p ? &ob : NULL, NULL,
+                                            r1, NULL, NULL, false, false, 
false);
+                               BBPunfix(r1->batCacheid);
+                               if (rc != GDK_SUCCEED) {
+                                       if (r2)
+                                               BBPunfix(r2->batCacheid);
+                                       return rc;
+                               }
+                               *r1p = r1 = tmp;
+                               if (r2p) {
+                                       tmp = BATproject(ob, r2);
                                        BBPunfix(r2->batCacheid);
-                               return rc;
+                                       BBPunfix(ob->batCacheid);
+                                       if (tmp == NULL) {
+                                               BBPunfix(r1->batCacheid);
+                                               return GDK_FAIL;
+                                       }
+                                       *r2p = tmp;
+                               }
                        }
-                       *r1p = r1 = tmp;
-                       if (r2p) {
-                               tmp = BATproject(ob, r2);
-                               BBPunfix(r2->batCacheid);
-                               BBPunfix(ob->batCacheid);
-                               if (tmp == NULL) {
-                                       BBPunfix(r1->batCacheid);
-                                       return GDK_FAIL;
-                               }
-                               *r2p = tmp;
-                       }
-#if 0
-#ifndef NDEBUG
-                       BAT *x1;
-                       canditer_reset(&lci);
-                       canditer_reset(&rci);
-                       hashjoin(&x1, NULL, l, r, &lci, &rci, nil_matches, 
false, false, false, false, false, estimate, t0, false, rhash, prhash, func);
-                       assert(x1->batCount == r1->batCount);
-                       for (BUN x = 0; x < x1->batCount; x++)
-                               assert(BUNtoid(r1, x) == BUNtoid(x1, x));
-                       BBPunfix(x1->batCacheid);
-#endif
-#endif
                        return GDK_SUCCEED;
                }
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to