Changeset: 1d74391be3ef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1d74391be3ef
Added Files:
        gdk/gdk_cand.c
        
sql/test/BugTracker-2019/Tests/disallow_duplicate_column_aliases.Bug-6723.sql
        
sql/test/BugTracker-2019/Tests/disallow_duplicate_column_aliases.Bug-6723.stable.err
        
sql/test/BugTracker-2019/Tests/disallow_duplicate_column_aliases.Bug-6723.stable.out
        
sql/test/BugTracker-2019/Tests/select_window_function_and_asterisk.Bug-6722.sql
        
sql/test/BugTracker-2019/Tests/select_window_function_and_asterisk.Bug-6722.stable.err
        
sql/test/BugTracker-2019/Tests/select_window_function_and_asterisk.Bug-6722.stable.out
Modified Files:
        clients/Tests/exports.stable.out
        gdk/Makefile.ag
        gdk/gdk.h
        gdk/gdk_batop.c
        gdk/gdk_join.c
        gdk/gdk_select.c
        gdk/gdk_unique.c
        monetdb5/modules/mal/pcre.c
        sql/server/rel_optimizer.c
        sql/storage/bat/bat_storage.c
        sql/test/BugTracker-2008/Tests/auto_coersion_bug.SF-2075157.stable.out
        sql/test/BugTracker-2019/Tests/All
        sql/test/analytics/Tests/analytics09.stable.out
        sql/test/pg_regress/Tests/select_views.stable.out
Branch: context
Log Message:

merged with default


diffs (truncated from 1202 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -106,6 +106,7 @@ dbl BATcalcvariance_population(dbl *avgp
 dbl BATcalcvariance_sample(dbl *avgp, BAT *b);
 BAT *BATcalcxor(BAT *b1, BAT *b2, BAT *s);
 BAT *BATcalcxorcst(BAT *b, const ValRecord *v, BAT *s);
+bool BATcandcontains(BAT *s, oid o);
 gdk_return BATclear(BAT *b, bool force);
 void BATcommit(BAT *b);
 BAT *BATconstant(oid hseq, int tt, const void *val, BUN cnt, role_t role);
diff --git a/gdk/Makefile.ag b/gdk/Makefile.ag
--- a/gdk/Makefile.ag
+++ b/gdk/Makefile.ag
@@ -16,7 +16,8 @@ lib_gdk = {
                gdk_calc.c gdk_calc.h gdk_calc_compare.h gdk_calc_private.h \
                gdk_ssort.c gdk_ssort_impl.h \
                gdk_aggr.c \
-               gdk.h gdk_cand.h gdk_batop.c \
+               gdk.h gdk_batop.c \
+               gdk_cand.h gdk_cand.c \
                gdk_search.c gdk_hash.c gdk_hash.h gdk_tm.c \
                gdk_orderidx.c \
                gdk_align.c gdk_bbp.c gdk_bbp.h \
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2737,6 +2737,7 @@ gdk_export BAT *BATunique(BAT *b, BAT *s
 gdk_export BAT *BATmergecand(BAT *a, BAT *b);
 gdk_export BAT *BATintersectcand(BAT *a, BAT *b);
 gdk_export BAT *BATdiffcand(BAT *a, BAT *b);
+gdk_export bool BATcandcontains(BAT *s, oid o);
 
 gdk_export gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, 
BAT *grps, BUN n, bool asc, bool nilslast, bool distinct)
        __attribute__((__warn_unused_result__));
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -2090,345 +2090,3 @@ BATcount_no_nil(BAT *b)
        }
        return cnt;
 }
-
-/* create a new, dense candidate list with values from `first' up to,
- * but not including, `last' */
-static BAT *
-newdensecand(oid first, oid last)
-{
-       if (last < first)
-               first = last = 0; /* empty range */
-       return BATdense(0, first, last - first);
-}
-
-/* merge two candidate lists and produce a new one
- *
- * candidate lists are VOID-headed BATs with an OID tail which is
- * sorted and unique.
- */
-BAT *
-BATmergecand(BAT *a, BAT *b)
-{
-       BAT *bn;
-       const oid *restrict ap, *restrict bp, *ape, *bpe;
-       oid *restrict p, i;
-       oid af, al, bf, bl;
-       bit ad, bd;
-
-       BATcheck(a, "BATmergecand", NULL);
-       BATcheck(b, "BATmergecand", NULL);
-       assert(ATOMtype(a->ttype) == TYPE_oid);
-       assert(ATOMtype(b->ttype) == TYPE_oid);
-       assert(BATcount(a) <= 1 || a->tsorted);
-       assert(BATcount(b) <= 1 || b->tsorted);
-       assert(BATcount(a) <= 1 || a->tkey);
-       assert(BATcount(b) <= 1 || b->tkey);
-       assert(a->tnonil);
-       assert(b->tnonil);
-
-       /* we can return a if b is empty (and v.v.) */
-       if (BATcount(a) == 0) {
-               return COLcopy(b, b->ttype, false, TRANSIENT);
-       }
-       if (BATcount(b) == 0) {
-               return COLcopy(a, a->ttype, false, TRANSIENT);
-       }
-       /* we can return a if a fully covers b (and v.v) */
-       af = BUNtoid(a, 0);
-       bf = BUNtoid(b, 0);
-       al = BUNtoid(a, BUNlast(a) - 1);
-       bl = BUNtoid(b, BUNlast(b) - 1);
-       ad = (af + BATcount(a) - 1 == al); /* i.e., dense */
-       bd = (bf + BATcount(b) - 1 == bl); /* i.e., dense */
-       if (ad && bd) {
-               /* both are dense */
-               if (af <= bf && bf <= al + 1) {
-                       /* partial overlap starting with a, or b is
-                        * smack bang after a */
-                       return newdensecand(af, al < bl ? bl + 1 : al + 1);
-               }
-               if (bf <= af && af <= bl + 1) {
-                       /* partial overlap starting with b, or a is
-                        * smack bang after b */
-                       return newdensecand(bf, al < bl ? bl + 1 : al + 1);
-               }
-       }
-       if (ad && af <= bf && al >= bl) {
-               return newdensecand(af, al + 1);
-       }
-       if (bd && bf <= af && bl >= al) {
-               return newdensecand(bf, bl + 1);
-       }
-
-       bn = COLnew(0, TYPE_oid, BATcount(a) + BATcount(b), TRANSIENT);
-       if (bn == NULL)
-               return NULL;
-       p = (oid *) Tloc(bn, 0);
-       if (BATtdense(a) && BATtdense(b)) {
-               /* both lists are dense */
-               if (a->tseqbase > b->tseqbase) {
-                       BAT *t = a;
-
-                       a = b;
-                       b = t;
-               }
-               /* a->tseqbase <= b->tseqbase */
-               for (i = a->tseqbase; i < a->tseqbase + BATcount(a); i++)
-                       *p++ = i;
-               for (i = MAX(b->tseqbase, i);
-                    i < b->tseqbase + BATcount(b);
-                    i++)
-                       *p++ = i;
-       } else if (BATtdense(a) || BATtdense(b)) {
-               if (BATtdense(b)) {
-                       BAT *t = a;
-
-                       a = b;
-                       b = t;
-               }
-               /* only a is dense */
-               bp = (const oid *) Tloc(b, 0);
-               bpe = bp + BATcount(b);
-               while (bp < bpe && *bp < a->tseqbase)
-                       *p++ = *bp++;
-               for (i = a->tseqbase; i < a->tseqbase + BATcount(a); i++)
-                       *p++ = i;
-               while (bp < bpe && *bp < i)
-                       bp++;
-               while (bp < bpe)
-                       *p++ = *bp++;
-       } else {
-               /* a and b are both not dense */
-               ap = (const oid *) Tloc(a, 0);
-               ape = ap + BATcount(a);
-               bp = (const oid *) Tloc(b, 0);
-               bpe = bp + BATcount(b);
-               while (ap < ape && bp < bpe) {
-                       if (*ap < *bp)
-                               *p++ = *ap++;
-                       else if (*ap > *bp)
-                               *p++ = *bp++;
-                       else {
-                               *p++ = *ap++;
-                               bp++;
-                       }
-               }
-               while (ap < ape)
-                       *p++ = *ap++;
-               while (bp < bpe)
-                       *p++ = *bp++;
-       }
-
-       /* properties */
-       BATsetcount(bn, (BUN) (p - (oid *) Tloc(bn, 0)));
-       bn->trevsorted = BATcount(bn) <= 1;
-       bn->tsorted = true;
-       bn->tkey = true;
-       bn->tnil = false;
-       bn->tnonil = true;
-       return virtualize(bn);
-}
-
-/* intersect two candidate lists and produce a new one
- *
- * candidate lists are VOID-headed BATs with an OID tail which is
- * sorted and unique.
- */
-BAT *
-BATintersectcand(BAT *a, BAT *b)
-{
-       BAT *bn;
-       const oid *restrict ap, *restrict bp, *ape, *bpe;
-       oid *restrict p;
-       oid af, al, bf, bl;
-
-       BATcheck(a, "BATintersectcand", NULL);
-       BATcheck(b, "BATintersectcand", NULL);
-       assert(ATOMtype(a->ttype) == TYPE_oid);
-       assert(ATOMtype(b->ttype) == TYPE_oid);
-       assert(a->tsorted);
-       assert(b->tsorted);
-       assert(a->tkey);
-       assert(b->tkey);
-       assert(a->tnonil);
-       assert(b->tnonil);
-
-       if (BATcount(a) == 0 || BATcount(b) == 0) {
-               return newdensecand(0, 0);
-       }
-
-       af = BUNtoid(a, 0);
-       bf = BUNtoid(b, 0);
-       al = BUNtoid(a, BUNlast(a) - 1);
-       bl = BUNtoid(b, BUNlast(b) - 1);
-
-       if ((af + BATcount(a) - 1 == al) && (bf + BATcount(b) - 1 == bl)) {
-               /* both lists are dense */
-               return newdensecand(MAX(af, bf), MIN(al, bl) + 1);
-       }
-
-       bn = COLnew(0, TYPE_oid, MIN(BATcount(a), BATcount(b)), TRANSIENT);
-       if (bn == NULL)
-               return NULL;
-       p = (oid *) Tloc(bn, 0);
-       if (BATtdense(a) || BATtdense(b)) {
-               if (BATtdense(b)) {
-                       BAT *t = a;
-
-                       a = b;
-                       b = t;
-               }
-               /* only a is dense */
-               bp = (const oid *) Tloc(b, 0);
-               bpe = bp + BATcount(b);
-               while (bp < bpe && *bp < a->tseqbase)
-                       bp++;
-               while (bp < bpe && *bp < a->tseqbase + BATcount(a))
-                       *p++ = *bp++;
-       } else {
-               /* a and b are both not dense */
-               ap = (const oid *) Tloc(a, 0);
-               ape = ap + BATcount(a);
-               bp = (const oid *) Tloc(b, 0);
-               bpe = bp + BATcount(b);
-               while (ap < ape && bp < bpe) {
-                       if (*ap < *bp)
-                               ap++;
-                       else if (*ap > *bp)
-                               bp++;
-                       else {
-                               *p++ = *ap++;
-                               bp++;
-                       }
-               }
-       }
-
-       /* properties */
-       BATsetcount(bn, (BUN) (p - (oid *) Tloc(bn, 0)));
-       bn->trevsorted = BATcount(bn) <= 1;
-       bn->tsorted = true;
-       bn->tkey = true;
-       bn->tnil = false;
-       bn->tnonil = true;
-       return virtualize(bn);
-}
-
-/* calculate the difference of two candidate lists and produce a new one
- */
-BAT *
-BATdiffcand(BAT *a, BAT *b)
-{
-       BAT *bn;
-       const oid *restrict ap, *restrict bp, *ape, *bpe;
-       oid *restrict p;
-       oid af, al, bf, bl;
-
-       BATcheck(a, "BATdiffcand", NULL);
-       BATcheck(b, "BATdiffcand", NULL);
-       assert(ATOMtype(a->ttype) == TYPE_oid);
-       assert(ATOMtype(b->ttype) == TYPE_oid);
-       assert(a->tsorted);
-       assert(b->tsorted);
-       assert(a->tkey);
-       assert(b->tkey);
-       assert(a->tnonil);
-       assert(b->tnonil);
-
-       if (BATcount(a) == 0)
-               return newdensecand(0, 0);
-       if (BATcount(b) == 0)
-               return COLcopy(a, a->ttype, false, TRANSIENT);
-
-       af = BUNtoid(a, 0);
-       bf = BUNtoid(b, 0);
-       al = BUNtoid(a, BUNlast(a) - 1) + 1;
-       bl = BUNtoid(b, BUNlast(b) - 1) + 1;
-
-       if (bf >= al || bl <= af) {
-               /* no overlap, return a */
-               return COLcopy(a, a->ttype, false, TRANSIENT);
-       }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to