Changeset: 4052573302cb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4052573302cb
Added Files:
        sql/test/SQLite_regress/sqllogictest/Tests/test1.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test1.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test1.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test2.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test2.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test2.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test3.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test3.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test3.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test4.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test4.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test4.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test5.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test5.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test5.timeout
        sql/test/SQLite_regress/sqllogictest/sqllogictest.py
Removed Files:
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select4.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.timeout
        testing/monet_options.py.in
Modified Files:
        gdk/gdk.h
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_calc.c
        gdk/gdk_hash.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/wlr.c
        sql/include/sql_catalog.h
        sql/rel.txt
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
        sql/storage/bat/bat_storage.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/BugTracker-2013/Tests/rangejoin_optimizer.Bug-3411.stable.out
        sql/test/BugTracker-2018/Tests/All
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-algebra-join-not-in.Bug-6519.sql
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-algebra-join-not-in.Bug-6519.stable.out
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-not-in.Bug-6605.sql
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-not-in.Bug-6605.stable.out
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-having-not-null-not-in.Bug-6557.sql
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-having-not-null-not-in.Bug-6557.stable.out
        sql/test/BugTracker-2019/Tests/cte-union.Bug-6755.sql
        sql/test/BugTracker-2019/Tests/cte-union.Bug-6755.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/All
        sql/test/mergetables/Tests/mergequery.stable.out
        sql/test/mergetables/Tests/part-elim.stable.out
        sql/test/remote/Tests/partition_elim.stable.out
        sql/test/subquery/Tests/subquery2.sql
        sql/test/wlcr/Tests/wlc01.py
        testing/Makefile.ag
        testing/Mtest.py.bat
        testing/Mtest.py.in
        testing/process.py
        tools/merovingian/daemon/forkmserver.c
Branch: grouping-analytics
Log Message:

Merge with Nov2019


diffs (truncated from 2094913 to 300 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2678,6 +2678,7 @@ gdk_export void VIEWbounds(BAT *b, BAT *
 enum prop_t {
        GDK_MIN_VALUE = 3,      /* smallest non-nil value in BAT */
        GDK_MAX_VALUE,          /* largest non-nil value in BAT */
+       GDK_HASH_MASK,          /* last used hash mask */
 };
 
 gdk_export void PROPdestroy(BAT *b);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1087,7 +1087,8 @@ BUNappend(BAT *b, const void *t, bool fo
        do {
                for (prop = b->tprops; prop; prop = prop->next)
                        if (prop->id != GDK_MAX_VALUE &&
-                           prop->id != GDK_MIN_VALUE) {
+                           prop->id != GDK_MIN_VALUE &&
+                           prop->id != GDK_HASH_MASK) {
                                BATrmprop(b, prop->id);
                                break;
                        }
@@ -1168,7 +1169,8 @@ BUNdelete(BAT *b, oid o)
        do {
                for (prop = b->tprops; prop; prop = prop->next)
                        if (prop->id != GDK_MAX_VALUE &&
-                           prop->id != GDK_MIN_VALUE) {
+                           prop->id != GDK_MIN_VALUE &&
+                           prop->id != GDK_HASH_MASK) {
                                BATrmprop(b, prop->id);
                                break;
                        }
@@ -1255,7 +1257,8 @@ BUNinplace(BAT *b, BUN p, const void *t,
                do {
                        for (prop = b->tprops; prop; prop = prop->next)
                                if (prop->id != GDK_MAX_VALUE &&
-                                   prop->id != GDK_MIN_VALUE) {
+                                   prop->id != GDK_MIN_VALUE &&
+                                   prop->id != GDK_HASH_MASK) {
                                        BATrmprop(b, prop->id);
                                        break;
                                }
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -629,7 +629,8 @@ BATappend(BAT *b, BAT *n, BAT *s, bool f
        do {
                for (prop = b->tprops; prop; prop = prop->next)
                        if (prop->id != GDK_MAX_VALUE &&
-                           prop->id != GDK_MIN_VALUE) {
+                           prop->id != GDK_MIN_VALUE &&
+                           prop->id != GDK_HASH_MASK) {
                                BATrmprop(b, prop->id);
                                break;
                        }
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -11481,6 +11481,8 @@ VARcalcxor(ValPtr ret, const ValRecord *
 /* ---------------------------------------------------------------------- */
 /* logical (for type bit) or bitwise (for integral types) OR */
 
+#define or3(a,b)       ((a) == 1 || (b) == 1 ? 1 : is_bit_nil(a) || 
is_bit_nil(b) ? bit_nil : 0)
+
 #define OR(a, b)       ((a) | (b))
 
 static BUN
@@ -11502,21 +11504,9 @@ or_typeswitchloop(const void *lft, int i
                        for (i = start * incr1, j = start * incr2, k = start;
                             k < end; i += incr1, j += incr2, k++) {
                                CHECKCAND((bit *) dst, k, candoff, bit_nil);
-                               /* note that any value not equal to 0
-                                * and not equal to bit_nil (0x80) is
-                                * considered true */
-                               if (((const bit *) lft)[i] & 0x7F ||
-                                   ((const bit *) rgt)[j] & 0x7F) {
-                                       /* either one is true */
-                                       ((bit *) dst)[k] = 1;
-                               } else if (((const bit *) lft)[i] == 0 &&
-                                          ((const bit *) rgt)[j] == 0) {
-                                       /* both are false */
-                                       ((bit *) dst)[k] = 0;
-                               } else {
-                                       ((bit *) dst)[k] = bit_nil;
-                                       nils++;
-                               }
+                               ((bit *) dst)[k] = or3(((const bit *) lft)[i],
+                                                      ((const bit *) rgt)[j]);
+                               nils += is_bit_nil(((bit *) dst)[k]);
                        }
                        CANDLOOP((bit *) dst, k, bit_nil, end, cnt);
                } else {
@@ -11719,6 +11709,8 @@ VARcalcor(ValPtr ret, const ValRecord *l
 /* ---------------------------------------------------------------------- */
 /* logical (for type bit) or bitwise (for integral types) exclusive AND */
 
+#define and3(a,b)      ((a) == 0 || (b) == 0 ? 0 : is_bit_nil(a) || 
is_bit_nil(b) ? bit_nil : 1)
+
 #define AND(a, b)      ((a) & (b))
 
 static BUN
@@ -11740,18 +11732,9 @@ and_typeswitchloop(const void *lft, int 
                        for (i = start * incr1, j = start * incr2, k = start;
                             k < end; i += incr1, j += incr2, k++) {
                                CHECKCAND((bit *) dst, k, candoff, bit_nil);
-                               if (((const bit *) lft)[i] == 0 ||
-                                   ((const bit *) rgt)[j] == 0) {
-                                       /* either one is false */
-                                       ((bit *) dst)[k] = 0;
-                               } else if (!is_bit_nil(((const bit *) lft)[i]) 
&&
-                                          !is_bit_nil(((const bit *) rgt)[j])) 
{
-                                       /* both are true */
-                                       ((bit *) dst)[k] = 1;
-                               } else {
-                                       ((bit *) dst)[k] = bit_nil;
-                                       nils++;
-                               }
+                               ((bit *) dst)[k] = and3(((const bit *) lft)[i],
+                                                       ((const bit *) rgt)[j]);
+                               nils += is_bit_nil(((bit *) dst)[k]);
                        }
                        CANDLOOP((bit *) dst, k, bit_nil, end, cnt);
                } else {
@@ -12762,6 +12745,7 @@ VARcalcrsh(ValPtr ret, const ValRecord *
 #define LTint(a,b)     ((a) < (b))
 #define LTlng(a,b)     ((a) < (b))
 #define LThge(a,b)     ((a) < (b))
+#define LToid(a,b)     ((a) < (b))
 #define LTflt(a,b)     ((a) < (b))
 #define LTdbl(a,b)     ((a) < (b))
 #define LTany(a,b)     ((*atomcmp)(a, b) < 0)
@@ -12770,6 +12754,7 @@ VARcalcrsh(ValPtr ret, const ValRecord *
 #define EQint(a,b)     ((a) == (b))
 #define EQlng(a,b)     ((a) == (b))
 #define EQhge(a,b)     ((a) == (b))
+#define EQoid(a,b)     ((a) == (b))
 #define EQflt(a,b)     ((a) == (b))
 #define EQdbl(a,b)     ((a) == (b))
 #define EQany(a,b)     ((*atomcmp)(a, b) == 0)
@@ -12778,8 +12763,6 @@ VARcalcrsh(ValPtr ret, const ValRecord *
 
 #define less3(a,b,i,t) (is_##t##_nil(a) || is_##t##_nil(b) ? bit_nil : 
LT##t(a, b) || (i && EQ##t(a, b)))
 #define grtr3(a,b,i,t) (is_##t##_nil(a) || is_##t##_nil(b) ? bit_nil : 
LT##t(b, a) || (i && EQ##t(a, b)))
-#define and3(a,b)      (is_bit_nil(a) ? is_bit_nil(b) || (b) ? bit_nil : 0 : 
is_bit_nil(b) ? (a) ? bit_nil : 0 : (a) && (b))
-#define or3(a,b)       (is_bit_nil(a) ? (is_bit_nil(b) || !(b) ? bit_nil : 1) 
: ((a) ? 1 : (is_bit_nil(b) ? bit_nil : (b))))
 #define not3(a)                (is_bit_nil(a) ? bit_nil : !(a))
 
 #define between3(v, lo, linc, hi, hinc, TYPE)  \
@@ -12936,23 +12919,7 @@ BATcalcbetween(BAT *b, BAT *lo, BAT *hi,
            BATtvoid(hi)) {
                bit res;
 
-               if (!BATtdense(b))
-                       res = nils_false ? 0 : bit_nil;
-               else if (!BATtdense(lo) || !BATtdense(hi))
-                       res = bit_nil;
-               else
-                       res = (bit)
-                               ((((b->tseqbase > lo->tseqbase ||
-                                   (linc && b->tseqbase == lo->tseqbase)) &&
-                                  (b->tseqbase < hi->tseqbase ||
-                                   (hinc && b->tseqbase == hi->tseqbase))) ||
-                                 (symmetric &&
-                                  (b->tseqbase > hi->tseqbase ||
-                                   (hinc && b->tseqbase == hi->tseqbase)) &&
-                                  (b->tseqbase < lo->tseqbase ||
-                                   (linc && b->tseqbase == lo->tseqbase))))
-                                ^ anti);
-
+               res = BETWEEN(b->tseqbase, lo->tseqbase, hi->tseqbase, oid);
                return BATconstant(b->hseqbase, TYPE_bit, &res, BATcount(b),
                                   TRANSIENT);
        }
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -227,6 +227,9 @@ BATcheckhash(BAT *b)
                                                close(fd);
                                                h->heap.parentid = 
b->batCacheid;
                                                h->heap.dirty = false;
+                                               BATsetprop(b, GDK_HASH_MASK,
+                                                          TYPE_oid,
+                                                          &(oid){h->mask + 1});
                                                b->thash = h;
                                                ACCELDEBUG fprintf(stderr, 
"#BATcheckhash: reusing persisted hash %s\n", BATgetId(b));
                                                
MT_lock_unset(&GDKhashLock(b->batCacheid));
@@ -379,6 +382,7 @@ BAThash_impl(BAT *b, BAT *s, const char 
        Hash *h = NULL;
        const char *nme = GDKinmemory() ? ":inmemory" : 
BBP_physical(b->batCacheid);
        BATiter bi = bat_iterator(b);
+       PROPrec *prop;
 
        ACCELDEBUG t0 = GDKusec();
        ACCELDEBUG fprintf(stderr, "#BAThash: create hash(" ALGOBATFMT ");\n",
@@ -417,7 +421,14 @@ BAThash_impl(BAT *b, BAT *s, const char 
                /* if key, or if small, don't bother dynamically
                 * adjusting the hash mask */
                mask = HASHmask(cnt);
-       } else {
+       } else if (s == NULL && (prop = BATgetprop(b, GDK_HASH_MASK)) != NULL) {
+               assert(prop->v.vtype == TYPE_oid);
+               mask = prop->v.val.oval;
+               assert((mask & (mask - 1)) == 0); /* power of two */
+               maxmask = HASHmask(cnt);
+               if (mask > maxmask)
+                       mask = maxmask;
+       } else {
                /* dynamic hash: we start with HASHmask(cnt)/64, or,
                 * if cnt large enough, HASHmask(cnt)/256; if there
                 * are too many collisions we try HASHmask(cnt)/64,
@@ -562,6 +573,8 @@ BAThash_impl(BAT *b, BAT *s, const char 
                }
                break;
        }
+       if (s == NULL)
+               BATsetprop(b, GDK_HASH_MASK, TYPE_oid, &(oid){h->mask + 1});
        ((size_t *) h->heap.base)[5] = (size_t) nslots;
 #ifndef NDEBUG
        /* clear unused part of Link array */
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1119,6 +1119,51 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
  *  If the table is cleared, the values RDONLY, RD_INS and RD_UPD_ID and the 
number of deletes will be 0.
  */
 
+static str
+mvc_insert_delta_values(mvc *m, BAT *col1, BAT *col2, BAT *col3, BAT *col4, 
BAT *col5, BAT *col6, BAT *col7, sql_column *c, bit cleared, lng deletes)
+{
+       int level = 0;
+
+       lng inserted = (lng) store_funcs.count_col(m->session->tr, c, 0);
+       lng all = (lng) store_funcs.count_col(m->session->tr, c, 1);
+       lng updates = (lng) store_funcs.count_col_upd(m->session->tr, c);
+       lng readonly = all - inserted;
+
+       assert(all >= inserted);
+
+       if (BUNappend(col1, &c->base.id, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col2, &cleared, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col3, &readonly, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col4, &inserted, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col5, &updates, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col6, &deletes, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       /* compute level using global transaction */
+       if (gtrans) {
+               sql_column *oc = tr_find_column(gtrans, c);
+
+               if (oc) {
+                       for(sql_delta *d = oc->data; d; d = d->next) 
+                               level++;
+               }
+       }
+       if (BUNappend(col7, &level, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       return MAL_SUCCEED;
+}
+
 str
 mvc_delta_values(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
@@ -1135,15 +1180,13 @@ mvc_delta_values(Client cntxt, MalBlkPtr
                *b5 = getArgReference_bat(stk, pci, 4),
                *b6 = getArgReference_bat(stk, pci, 5),
                *b7 = getArgReference_bat(stk, pci, 6);
-       sql_trans *tr;
        sql_schema *s = NULL;
        sql_table *t = NULL;
        sql_column *c = NULL;
        node *n;
        bit cleared;
-       int level = 0;
        BUN nrows = 0;
-       lng all, readonly, inserted, updates, deletes;
+       lng deletes;
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                goto cleanup;
@@ -1211,85 +1254,17 @@ mvc_delta_values(Client cntxt, MalBlkPtr
        }
 
        if (nrows) {
-               tr = m->session->tr;
-               while((tr = tr->parent)) level++;
-
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to