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