Changeset: 65f85ac24acd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=65f85ac24acd
Modified Files:
        MonetDB.spec
        gdk/gdk_batop.c
        gdk/gdk_calc.c
        gdk/gdk_group.c
        gdk/gdk_join.c
        gdk/gdk_qsort.c
        gdk/gdk_select.c
        gdk/gdk_setop.c
        gdk/gdk_ssort_impl.h
        sql/dump-restore.html
        sql/dump-restore.txt
Branch: default
Log Message:

Merge with Jan2014 branch.


diffs (truncated from 411 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -609,9 +609,11 @@ systemd-tmpfiles --create %{_sysconfdir}
 %doc %{_mandir}/man1/monetdb.1.gz
 %doc %{_mandir}/man1/monetdbd.1.gz
 %if (0%{?fedora} >= 20)
+%dir %{_datadir}/doc/MonetDB-SQL
 %docdir %{_datadir}/doc/MonetDB-SQL
 %{_datadir}/doc/MonetDB-SQL/*
 %else
+%dir %{_datadir}/doc/MonetDB-SQL-%{version}
 %docdir %{_datadir}/doc/MonetDB-SQL-%{version}
 %{_datadir}/doc/MonetDB-SQL-%{version}/*
 %endif
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -2226,6 +2226,7 @@ BATcount_no_nil(BAT *b)
        BUN i, n;
        const void *p, *nil;
        const char *base;
+       int t;
        int (*cmp)(const void *, const void *);
 
        BATcheck(b, "BATcnt");
@@ -2233,7 +2234,12 @@ BATcount_no_nil(BAT *b)
        if (b->T->nonil)
                return n;
        p = Tloc(b, b->U->first);
-       switch (ATOMstorage(b->ttype)) {
+       t = b->ttype;
+       if (t != ATOMstorage(t) &&
+           ATOMnilptr(ATOMstorage(t)) == ATOMnilptr(t) &&
+           BATatoms[ATOMstorage(t)].atomCmp == BATatoms[t].atomCmp)
+               t = ATOMstorage(t);
+       switch (t) {
        case TYPE_void:
                cnt = b->tseqbase == oid_nil ? 0 : n;
                break;
@@ -2285,8 +2291,8 @@ BATcount_no_nil(BAT *b)
                }
                break;
        default:
-               nil = ATOMnilptr(b->ttype);
-               cmp = BATatoms[b->ttype].atomCmp;
+               nil = ATOMnilptr(t);
+               cmp = BATatoms[t].atomCmp;
                if (b->tvarsized) {
                        base = b->T->vheap->base;
                        for (i = 0; i < n; i++)
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -8388,6 +8388,11 @@ BATcalcbetween_intern(const void *src, i
 
        CANDLOOP(dst, l, bit_nil, 0, start);
 
+       if (tp != ATOMstorage(tp) &&
+           ATOMnilptr(ATOMstorage(tp)) == ATOMnilptr(tp) &&
+           BATatoms[ATOMstorage(tp)].atomCmp == BATatoms[tp].atomCmp)
+               tp = ATOMstorage(tp);
+
        switch (tp) {
        case TYPE_bte:
                BETWEEN_LOOP_TYPE(bte);
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -362,6 +362,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                  BAT *b, BAT *g, BAT *e, BAT *h, int subsorted)
 {
        BAT *gn = NULL, *en = NULL, *hn = NULL;
+       int t;
        int (*cmp)(const void *, const void *);
        const oid *grps = NULL;
        oid *ngrps, ngrp, prev = 0;
@@ -543,6 +544,16 @@ BATgroup_internal(BAT **groups, BAT **ex
        BATseqbase(gn, b->hseqbase);
        if (g)
                grps = (const oid *) Tloc(g, BUNfirst(g));
+
+       /* figure out if we can use the storage type also for
+        * comparing values */
+       t = b->ttype;
+       if (t != ATOMstorage(t) &&
+           ATOMnilptr(ATOMstorage(t)) == ATOMnilptr(t) &&
+           BATatoms[ATOMstorage(t)].atomCmp == cmp &&
+           BATatoms[ATOMstorage(t)].atomHash == BATatoms[t].atomHash)
+               t = ATOMstorage(t);
+
        if (((b->tsorted || b->trevsorted) &&
             (g == NULL || g->tsorted || g->trevsorted)) ||
            subsorted) {
@@ -566,7 +577,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                if (histo)
                        cnts[0] = 1;
 
-               switch (ATOMstorage(b->ttype)) {
+               switch (t) {
                case TYPE_bte:
                        GRP_compare_consecutive_values_tpe(bte);
                        break;
@@ -639,7 +650,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                ngrp++;         /* the next group to be assigned */
                gn->tsorted = 1; /* be optimistic */
 
-               switch (ATOMstorage(b->ttype)) {
+               switch (t) {
                case TYPE_bte:
                        GRP_subscan_old_groups_tpe(bte);
                        break;
@@ -678,7 +689,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                hs = b->T->hash;
                gn->tsorted = 1; /* be optimistic */
 
-               switch (ATOMstorage(b->ttype)) {
+               switch (t) {
                case TYPE_bte:
                        GRP_use_existing_hash_table_tpe(bte);
                        break;
@@ -755,7 +766,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                }
                gn->tsorted = 1; /* be optimistic */
 
-               switch (ATOMstorage(b->ttype)) {
+               switch (t) {
                case TYPE_bte:
                        GRP_create_partial_hash_table_tpe(bte);
                        break;
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -1450,7 +1450,14 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT *
                                                break;
                                }
                        } else {
-                               switch (r->htype) {
+                               int t = r->htype;
+                               if (t != ATOMstorage(t) &&
+                                   ATOMnilptr(ATOMstorage(t)) == ATOMnilptr(t) 
&&
+                                   BATatoms[ATOMstorage(t)].atomCmp == 
BATatoms[t].atomCmp &&
+                                   BATatoms[ATOMstorage(t)].atomHash == 
BATatoms[t].atomHash)
+                                       t = ATOMstorage(t);
+
+                               switch (t) {
                                case TYPE_int:
 #if SIZEOF_OID == SIZEOF_INT
                                case TYPE_oid:
@@ -1832,6 +1839,7 @@ bandjoin(BAT *r1, BAT *r2, BAT *l, BAT *
        const oid *rcand = NULL, *rcandend = NULL;
        const char *lvals, *rvals;
        int lwidth, rwidth;
+       int t;
        const void *nil = ATOMnilptr(l->ttype);
        int (*cmp)(const void *, const void *) = BATatoms[l->ttype].atomCmp;
        const char *vl, *vr;
@@ -1865,7 +1873,13 @@ bandjoin(BAT *r1, BAT *r2, BAT *l, BAT *
        assert(sl == NULL || sl->tsorted);
        assert(sr == NULL || sr->tsorted);
 
-       switch (ATOMtype(l->ttype)) {
+       t = ATOMtype(l->ttype);
+       if (t != ATOMstorage(t) &&
+           ATOMnilptr(ATOMstorage(t)) == nil &&
+           BATatoms[ATOMstorage(t)].atomCmp == cmp)
+               t = ATOMstorage(t);
+
+       switch (t) {
        case TYPE_bte:
                if (*(const bte *)c1 == bte_nil ||
                    *(const bte *)c2 == bte_nil ||
@@ -2178,6 +2192,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
        int lwidth, rlwidth, rhwidth;
        const void *nil = ATOMnilptr(l->ttype);
        int (*cmp)(const void *, const void *) = BATatoms[l->ttype].atomCmp;
+       int t;
        const char *vl, *vrl, *vrh;
        const oid *p;
        oid lastr = 0;
@@ -2251,6 +2266,12 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                loff = (wrd) l->tseqbase - (wrd) l->hseqbase;
        }
 
+       t = ATOMtype(l->ttype);
+       if (t != ATOMstorage(t) &&
+           ATOMnilptr(ATOMstorage(t)) == nil &&
+           BATatoms[ATOMstorage(t)].atomCmp == cmp)
+               t = ATOMstorage(t);
+
        /* nested loop implementation for range join */
        for (;;) {
                if (lcand) {
@@ -2316,7 +2337,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                }
                                ro = n++ + rl->hseqbase;
                        }
-                       switch (ATOMtype(l->ttype)) {
+                       switch (t) {
                        case TYPE_bte:
                                if (*(const bte*)vrl == bte_nil ||
                                    *(const bte*)vrh == bte_nil ||
diff --git a/gdk/gdk_qsort.c b/gdk/gdk_qsort.c
--- a/gdk/gdk_qsort.c
+++ b/gdk/gdk_qsort.c
@@ -314,7 +314,12 @@ GDKqsort(void *h, void *t, const void *b
        if (base)
                tpe = TYPE_str; /* we need the default case */
 
-       switch (ATOMstorage(tpe)) {
+       if (tpe != ATOMstorage(tpe) &&
+           ATOMnilptr(ATOMstorage(tpe)) == ATOMnilptr(tpe) &&
+           BATatoms[ATOMstorage(tpe)].atomCmp == BATatoms[tpe].atomCmp)
+               tpe = ATOMstorage(tpe);
+
+       switch (tpe) {
        case TYPE_bte:
                GDKqsort_impl_bte(&buf, h, t, n);
                break;
@@ -361,7 +366,12 @@ GDKqsort_rev(void *h, void *t, const voi
        if (base)
                tpe = TYPE_str; /* we need the default case */
 
-       switch (ATOMstorage(tpe)) {
+       if (tpe != ATOMstorage(tpe) &&
+           ATOMnilptr(ATOMstorage(tpe)) == ATOMnilptr(tpe) &&
+           BATatoms[ATOMstorage(tpe)].atomCmp == BATatoms[tpe].atomCmp)
+               tpe = ATOMstorage(tpe);
+
+       switch (tpe) {
        case TYPE_bte:
                GDKqsort_impl_bte_rev(&buf, h, t, n);
                break;
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -610,6 +610,7 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
 #ifndef NDEBUG
        int (*cmp)(const void *, const void *);
 #endif
+       int t;
        BUN p, q, cnt;
        oid o, *dst;
        /* off must be signed as it can be negative,
@@ -646,6 +647,12 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
        dst = (oid *) Tloc(bn, BUNfirst(bn));
        cnt = 0;
 
+       t = b->ttype;
+       if (t != ATOMstorage(t) &&
+           ATOMnilptr(ATOMstorage(t)) == ATOMnilptr(t) &&
+           BATatoms[ATOMstorage(t)].atomCmp == BATatoms[t].atomCmp)
+               t = ATOMstorage(t);
+
        if (s && !BATtdense(s)) {
 
                assert(s->tsorted);
@@ -661,7 +668,7 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
                /* call type-specific core scan select function */
                assert(b->batCapacity >= BATcount(b));
                assert(s->batCapacity >= BATcount(s));
-               switch (ATOMstorage(b->ttype)) {
+               switch (t) {
                case TYPE_bte:
                        cnt = candscan_bte(scanargs);
                        break;
@@ -703,7 +710,7 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
                }
                candlist = NULL;
                /* call type-specific core scan select function */
-               switch (ATOMstorage(b->ttype)) {
+               switch (t) {
                case TYPE_bte:
                        cnt = fullscan_bte(scanargs);
                        break;
diff --git a/gdk/gdk_setop.c b/gdk/gdk_setop.c
--- a/gdk/gdk_setop.c
+++ b/gdk/gdk_setop.c
@@ -172,42 +172,49 @@
                (void) cmp;                                             \
        }
 #define elim_doubles(a1)                                               \
-       switch (ATOMstorage(b->htype)) {                                \
-       case TYPE_bte:                                                  \
-               elim(a1,loc,_bte,simple_CMP(h,BUNhloc(bi,r),bte));      \
-               break;                                                  \
-       case TYPE_sht:                                                  \
-               elim(a1,loc,_sht,simple_CMP(h,BUNhloc(bi,r),sht));      \
-               break;                                                  \
-       case TYPE_int:                                                  \
-               elim(a1,loc,_int,simple_CMP(h,BUNhloc(bi,r),int));      \
-               break;                                                  \
-       case TYPE_flt:                                                  \
-               elim(a1,loc,_flt,simple_CMP(h,BUNhloc(bi,r),flt));      \
-               break;                                                  \
-       case TYPE_dbl:                                                  \
-               elim(a1,loc,_dbl,simple_CMP(h,BUNhloc(bi,r),dbl));      \
-               break;                                                  \
-       case TYPE_lng:                                                  \
-               elim(a1,loc,_lng,simple_CMP(h,BUNhloc(bi,r),lng));      \
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to