Changeset: feed22b1846b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=feed22b1846b
Added Files:
        gdk/gdk_join_legacy.c
Modified Files:
        gdk/Makefile.ag
        gdk/gdk_join.c
Branch: default
Log Message:

Moved legacy join code to separate file.


diffs (truncated from 628 to 300 lines):

diff --git a/gdk/Makefile.ag b/gdk/Makefile.ag
--- a/gdk/Makefile.ag
+++ b/gdk/Makefile.ag
@@ -37,7 +37,7 @@ lib_gdk = {
                gdk_calc.c gdk_calc.h gdk_calc_compare.h gdk_calc_private.h \
                gdk_aggr.c gdk_group.c gdk_mapreduce.c gdk_mapreduce.h \
                gdk_imprints.c gdk_imprints.h \
-               gdk_join.c \
+               gdk_join.c gdk_join_legacy.c \
                bat.feps bat1.feps bat2.feps \
                libbat.rc
        LIBS = ../common/options/libmoptions \
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3063,294 +3063,3 @@ BATproject(BAT *l, BAT *r)
        BBPreclaim(bn);
        return NULL;
 }
-
-/* backward compatible interfaces */
-
-/* Return a subset of l where head elements occur as head element in r. */
-BAT *
-BATsemijoin(BAT *l, BAT *r)
-{
-       BAT *lmap;
-       BAT *res1, *res2;
-       BAT *bn;
-
-       if (BATcount(l) == 0)
-               return BATcopy(l, l->htype, l->ttype, 0);
-       if (BATcount(r) == 0) {
-               bn = BATnew(l->htype, l->ttype, 0);
-               if (BAThdense(l))
-                       BATseqbase(bn, l->hseqbase);
-               if (BATtdense(l))
-                       BATseqbase(BATmirror(bn), l->tseqbase);
-               return bn;
-       }
-
-       if (BAThdense(l) && BAThdense(r)) {
-               oid lo = l->hseqbase, hi = lo + BATcount(l);
-
-               if (lo < r->hseqbase)
-                       lo = r->hseqbase;
-               if (hi > r->hseqbase + BATcount(r))
-                       hi = r->hseqbase + BATcount(r);
-               if (hi < lo)
-                       hi = lo;
-               return BATslice(l, lo - l->hseqbase, hi - l->hseqbase);
-       }
-
-       /* l is [any_1,any_2]; r is [any_1,any_3] */
-       l = BATmirror(l);
-       r = BATmirror(r);
-       /* now: l is [any_2,any_1], r is [any_3,any_1] */
-       if (!BAThdense(l) || !BAThdense(r)) {
-               /* l is [any_2,any_1] */
-               lmap = BATmirror(BATmark(l, 0));
-               /* lmap is [dense1,any_2] */
-               l = BATmirror(BATmark(BATmirror(l), 0));
-               /* l is [dense1,any_1] */
-               /* r is [any_3,any_1] */
-               r = BATmirror(BATmark(BATmirror(r), 0));
-               /* r is [dense2,any_1] */
-       } else {
-               /* l is [dense1,any_1] (i.e. any_2==dense1) */
-               lmap = NULL;
-               BBPfix(l->batCacheid);
-               /* r is [dense2,any_1] */
-               BBPfix(r->batCacheid);
-       }
-       if (BATsubsemijoin(&res1, &res2, l, r, NULL, NULL, 0, BATcount(l)) == 
GDK_FAIL) {
-               if (lmap)
-                       BBPunfix(lmap->batCacheid);
-               BBPunfix(l->batCacheid);
-               BBPunfix(r->batCacheid);
-               return NULL;
-       }
-       BBPunfix(res2->batCacheid);
-       BBPunfix(r->batCacheid);
-       if (lmap) {
-               /* res1 is [dense,sub(dense1)] */
-               bn = BATproject(res1, lmap);
-               BBPunfix(lmap->batCacheid);
-               lmap = NULL;
-               /* bn is [dense,any_2] */
-               res2 = BATproject(res1, l);
-               /* res2 is [dense,any_1] */
-               BBPunfix(res1->batCacheid);
-               res1 = bn;
-               /* res1 is [dense,any_2] */
-       } else {
-               /* res1 is [dense,sub(dense1)] */
-               res2 = BATproject(res1, l);
-               /* res2 is [dense,any_1] */
-       }
-       BBPunfix(l->batCacheid);
-       res2 = BATmirror(res2);
-       /* res2 is [any_1,dense] */
-       bn = VIEWcreate(res2, res1);
-       /* bn is [any_1,any_2] */
-       BBPunfix(res1->batCacheid);
-       BBPunfix(res2->batCacheid);
-       return bn;
-}
-
-static BAT *
-do_batjoin(BAT *l, BAT *r, BAT *r2, int op,
-          const void *c1, const void *c2, int li, int hi, BUN estimate,
-          gdk_return (*joinfunc)(BAT **, BAT **, BAT *, BAT *, BAT *, BAT *,
-                                 int, BUN),
-          gdk_return (*thetajoin)(BAT **, BAT **, BAT *, BAT *, BAT *, BAT *,
-                                  int, int, BUN),
-          gdk_return (*bandjoin)(BAT **, BAT **, BAT *, BAT *, BAT *, BAT *,
-                                 const void *, const void *, int, int, BUN),
-          gdk_return (*rangejoin)(BAT **, BAT **, BAT *, BAT *, BAT *,
-                                  BAT *, BAT *, int, int, BUN),
-
-          const char *name)
-{
-       BAT *lmap, *rmap;
-       BAT *res1, *res2;
-       BAT *bn;
-       gdk_return ret;
-
-       ALGODEBUG {
-               if (r2)
-                       fprintf(stderr, "#Legacy %s(l=%s#"BUNFMT"[%s,%s]%s%s%s,"
-                               "rl=%s#" BUNFMT "[%s,%s]%s%s%s,"
-                               "rh=%s#" BUNFMT "[%s,%s]%s%s%s)\n", name,
-                               BATgetId(l), BATcount(l),
-                               ATOMname(l->htype), ATOMname(l->ttype),
-                               BAThdense(l) ? "-hdense" : "",
-                               l->tsorted ? "-sorted" : "",
-                               l->trevsorted ? "-revsorted" : "",
-                               BATgetId(r), BATcount(r),
-                               ATOMname(r->htype), ATOMname(r->ttype),
-                               BAThdense(r) ? "-hdense" : "",
-                               r->tsorted ? "-sorted" : "",
-                               r->trevsorted ? "-revsorted" : "",
-                               BATgetId(r2), BATcount(r2),
-                               ATOMname(r2->htype), ATOMname(r2->ttype),
-                               BAThdense(r2) ? "-hdense" : "",
-                               r2->tsorted ? "-sorted" : "",
-                               r2->trevsorted ? "-revsorted" : "");
-               else
-                       fprintf(stderr, "#Legacy %s(l=%s#"BUNFMT"[%s,%s]%s%s%s,"
-                               "r=%s#" BUNFMT "[%s,%s]%s%s%s)\n", name,
-                               BATgetId(l), BATcount(l),
-                               ATOMname(l->htype), ATOMname(l->ttype),
-                               BAThdense(l) ? "-hdense" : "",
-                               l->tsorted ? "-sorted" : "",
-                               l->trevsorted ? "-revsorted" : "",
-                               BATgetId(r), BATcount(r),
-                               ATOMname(r->htype), ATOMname(r->ttype),
-                               BAThdense(r) ? "-hdense" : "",
-                               r->tsorted ? "-sorted" : "",
-                               r->trevsorted ? "-revsorted" : "");
-       }
-       /* note that in BATrangejoin, we join on the *tail* of r and r2 */
-       if (r2 == NULL)
-               r = BATmirror(r);
-       /* r is [any_3,any_2] */
-       if (!BAThdense(l) || !BAThdense(r)) {
-               /* l is [any_1,any_2] */
-               lmap = BATmirror(BATmark(l, 0));
-               /* lmap is [dense1,any_1] */
-               l = BATmirror(BATmark(BATmirror(l), 0));
-               /* l is [dense1,any_2] */
-               /* r is [any_3,any_2] */
-               rmap = BATmirror(BATmark(r, 0));
-               /* rmap is [dense2,any_3] */
-               r = BATmirror(BATmark(BATmirror(r), 0));
-               /* r is [dense2,any_2] */
-       } else {
-               /* l is [dense1,any_2] */
-               lmap = NULL;
-               BBPfix(l->batCacheid);
-               /* r is [dense2,any_2] */
-               rmap = NULL;
-               BBPfix(r->batCacheid);
-       }
-       if (joinfunc) {
-               assert(thetajoin == NULL);
-               assert(bandjoin == NULL);
-               assert(rangejoin == NULL);
-               assert(r2 == NULL);
-               assert(c1 == NULL);
-               assert(c2 == NULL);
-               ret = (*joinfunc)(&res1, &res2, l, r, NULL, NULL, 0, estimate);
-       } else if (thetajoin) {
-               assert(bandjoin == NULL);
-               assert(rangejoin == NULL);
-               assert(r2 == NULL);
-               assert(c1 == NULL);
-               assert(c2 == NULL);
-               ret = (*thetajoin)(&res1, &res2, l, r, NULL, NULL, op, 0, 
estimate);
-       } else if (bandjoin) {
-               assert(rangejoin == NULL);
-               assert(r2 == NULL);
-               ret = (*bandjoin)(&res1, &res2, l, r, NULL, NULL, c1, c2, li, 
hi, estimate);
-       } else {
-               assert(rangejoin != NULL);
-               assert(r2 != NULL);
-               assert(c1 == NULL);
-               assert(c2 == NULL);
-               ret = (*rangejoin)(&res1, &res2, l, r, r2, NULL, NULL, li, hi, 
estimate);
-       }
-       if (ret == GDK_FAIL) {
-               BBPunfix(l->batCacheid);
-               BBPunfix(r->batCacheid);
-               if (lmap)
-                       BBPunfix(lmap->batCacheid);
-               if (rmap)
-                       BBPunfix(rmap->batCacheid);
-               return NULL;
-       }
-       if (lmap) {
-               bn = BATproject(res1, lmap);
-               BBPunfix(res1->batCacheid);
-               BBPunfix(lmap->batCacheid);
-               res1 = bn;
-               /* res1 is [dense,any_1] */
-               lmap = NULL;
-               bn = BATproject(res2, rmap);
-               BBPunfix(res2->batCacheid);
-               BBPunfix(rmap->batCacheid);
-               res2 = bn;
-               /* res2 is [dense,any_3] */
-               rmap = NULL;
-       }
-       bn = VIEWcreate(BATmirror(res1), res2);
-       /* bn is [any_1,any_3] */
-       BBPunfix(l->batCacheid);
-       BBPunfix(r->batCacheid);
-       BBPunfix(res1->batCacheid);
-       BBPunfix(res2->batCacheid);
-       return bn;
-}
-
-/* join [any_1,any_2] with [any_2,any_3], return [any_1,any_3] */
-BAT *
-BATjoin(BAT *l, BAT *r, BUN estimate)
-{
-       return do_batjoin(l, r, NULL, 0, NULL, NULL, 0, 0, estimate,
-                         BATsubjoin, NULL, NULL, NULL, "BATjoin");
-}
-
-/* join [any_1,any_2] with [any_2,any_3], return [any_1,any_3];
- * return value is in order of left input */
-BAT *
-BATleftjoin(BAT *l, BAT *r, BUN estimate)
-{
-       return do_batjoin(l, r, NULL, 0, NULL, NULL, 0, 0, estimate,
-                         BATsubleftjoin, NULL, NULL, NULL, "BATleftjoin");
-}
-
-/* join [any_1,any_2] with [any_2,any_3], return [any_1,any_3] */
-BAT *
-BATthetajoin(BAT *l, BAT *r, int op, BUN estimate)
-{
-       if (op == JOIN_EQ)
-               return do_batjoin(l, r, NULL, 0, NULL, NULL, 0, 0, estimate,
-                                 BATsubjoin, NULL, NULL, NULL, "BATthetajoin");
-       return do_batjoin(l, r, NULL, op, NULL, NULL, 0, 0, estimate, NULL,
-                         BATsubthetajoin, NULL, NULL, "BATthetajoin");
-}
-
-/* join [any_1,any_2] with [any_2,any_3], return [any_1,any_3];
- * if there is no match for a tuple in l, return nil in tail */
-BAT *
-BATouterjoin(BAT *l, BAT *r, BUN estimate)
-{
-       return do_batjoin(l, r, NULL, 0, NULL, NULL, 0, 0, estimate,
-                         BATsubouterjoin, NULL, NULL, NULL, "BATouterjoin");
-}
-
-/* join [any_1,any_2] with [any_2,any_3], return [any_1,any_3];
- * if there is no match for a tuple in l, return nil in tail */
-BAT *
-BATleftfetchjoin(BAT *l, BAT *r, BUN estimate)
-{
-       return do_batjoin(l, r, NULL, 0, NULL, NULL, 0, 0, estimate,
-                         BATsubleftfetchjoin, NULL, NULL, NULL,
-                         "BATleftfetchjoin");
-}
-
-BAT *
-BATantijoin(BAT *l, BAT *r)
-{
-       return do_batjoin(l, r, NULL, JOIN_NE, NULL, NULL, 0, 0,
-                         (BUN) MIN((lng) BATcount(l) * BATcount(r), BUN_MAX),
-                         NULL, BATsubthetajoin, NULL, NULL, "BATantijoin");
-}
-
-BAT *
-BATbandjoin(BAT *l, BAT *r, const void *c1, const void *c2, bit li, bit hi)
-{
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to