MonetDB: default - Plug the holes

2021-02-05 Thread Pedro Ferreira
Changeset: 4615a9380486 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4615a9380486
Modified Files:
sql/backends/monet5/sql_result.c
Branch: default
Log Message:

Plug the holes


diffs (97 lines):

diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -934,10 +934,13 @@ mvc_export_prepare_columnar(stream *out,
BAT* bschema= COLnew(0, TYPE_str, nrows, TRANSIENT);
BAT* btable = COLnew(0, TYPE_str, nrows, TRANSIENT);
BAT* bcolumn= COLnew(0, TYPE_str, nrows, TRANSIENT);
-
node *n;
sql_subtype *t;
sql_arg *a;
+
+   if (!btype || !bdigits || !bscale || !bschema || !btable || !bcolumn)
+   goto bailout;
+
if (r && is_project(r->op) && r->exps) {
for (n = r->exps->h; n; n = n->next) {
const char *name, *rname, *schema = NULL;
@@ -1095,9 +1098,10 @@ mvc_export_prepare(backend *b, stream *o
}
 
if (b->client->protocol == PROTOCOL_COLUMNAR) {
-   if (mnstr_flush(out, MNSTR_FLUSH_DATA) < 0) return -1;
-   mvc_export_prepare_columnar(out, q, nrows, r);
-
+   if (mnstr_flush(out, MNSTR_FLUSH_DATA) < 0)
+   return -1;
+   if (mvc_export_prepare_columnar(out, q, nrows, r) < 0)
+   return -1;
}
else {
if (r && is_project(r->op) && r->exps) {
@@ -1384,11 +1388,9 @@ mvc_export_row(backend *b, stream *s, re
 }
 
 static int
-mvc_export_table_columnar(stream *s, res_table *t, BAT *order) {
+mvc_export_table_columnar(stream *s, res_table *t) {
int i;
 
-   (void) order;
-
if (!t)
return -1;
if (!s)
@@ -1400,12 +1402,9 @@ mvc_export_table_columnar(stream *s, res
if (!c->b)
break;
 
-   BAT* b = BATdescriptor(c->b);
-   if (b == NULL) {
-   while (--i >= 1)
-   BBPunfix(b->batCacheid);
+   BAT *b = BATdescriptor(c->b);
+   if (b == NULL)
return -1;
-   }
 
mvc_export_binary_bat(s, b);
 
@@ -1979,26 +1978,29 @@ mvc_export_result(backend *b, stream *s,
if (t->tsep) {
if (header) {
/* need header */
-   mvc_export_head(b, s, t->id, TRUE, TRUE, starttime, 
maloptimizer);
+   if (mvc_export_head(b, s, t->id, TRUE, TRUE, starttime, 
maloptimizer) < 0)
+   return -1;
}
return mvc_export_file(b, s, t);
}
 
if (!json) {
-   mvc_export_head(b, s, res_id, TRUE, TRUE, starttime, 
maloptimizer);
+   if (mvc_export_head(b, s, res_id, TRUE, TRUE, starttime, 
maloptimizer) < 0)
+   return -1;
}
 
assert(t->order);
 
+   if (b->client->protocol == PROTOCOL_COLUMNAR) {
+   if (mnstr_flush(s, MNSTR_FLUSH_DATA) < 0)
+   return -1;
+   return mvc_export_table_columnar(s, t);
+   }
+
order = BATdescriptor(t->order);
if (!order)
return -1;
 
-   if (b->client->protocol == PROTOCOL_COLUMNAR) {
-   if (mnstr_flush(s, MNSTR_FLUSH_DATA) < 0) return -1;
-   return mvc_export_table_columnar(s, t, order);
-   }
-
count = m->reply_size;
if (m->reply_size != -2 && (count <= 0 || count >= t->nr_rows)) {
count = t->nr_rows;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Get this to compile for 32 bit Windows on Win...

2021-02-05 Thread Sjoerd Mullender
Changeset: 50982ad585c5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=50982ad585c5
Modified Files:
common/utils/matomic.h
Branch: default
Log Message:

Get this to compile for 32 bit Windows on Windows 7 with VS 2017.


diffs (38 lines):

diff --git a/common/utils/matomic.h b/common/utils/matomic.h
--- a/common/utils/matomic.h
+++ b/common/utils/matomic.h
@@ -175,6 +175,7 @@ ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE
 #define ATOMIC_INIT(var, val)  (*(var) = (val))
 #define ATOMIC_DESTROY(var)((void) 0)
 
+#ifdef DECLSPEC_NOINITALL
 #define ATOMIC_GET(var)
_InlineInterlockedExchangeAdd64(var, 0)
 #define ATOMIC_SET(var, val)   _InlineInterlockedExchange64(var, 
(ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_XCG(var, val)   _InlineInterlockedExchange64(var, 
(ATOMIC_BASE_TYPE) (val))
@@ -193,6 +194,26 @@ ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE
 #define ATOMIC_SUB(var, val)   _InlineInterlockedExchangeAdd64(var, 
-(ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_INC(var)_InlineInterlockedIncrement64(var)
 #define ATOMIC_DEC(var)_InlineInterlockedDecrement64(var)
+#else
+#define ATOMIC_GET(var)_InterlockedExchangeAdd64(var, 
0)
+#define ATOMIC_SET(var, val)   _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_XCG(var, val)   _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) 
(val))
+static inline bool
+ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE *exp, ATOMIC_BASE_TYPE des)
+{
+   ATOMIC_BASE_TYPE old;
+   old = _InterlockedCompareExchange64(var, des, *exp);
+   if (old == *exp)
+   return true;
+   *exp = old;
+   return false;
+}
+#define ATOMIC_CAS(var, exp, des)  ATOMIC_CAS(var, exp, (ATOMIC_BASE_TYPE) 
(des))
+#define ATOMIC_ADD(var, val)   _InterlockedExchangeAdd64(var, 
(ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_SUB(var, val)   _InterlockedExchangeAdd64(var, 
-(ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_INC(var)_InterlockedIncrement64(var)
+#define ATOMIC_DEC(var)_InterlockedDecrement64(var)
+#endif
 
 #endif
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Another merge, sorry for the incovenience

2021-02-05 Thread Pedro Ferreira
Changeset: 340698edbfb6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=340698edbfb6
Modified Files:
sql/server/rel_unnest.c
Branch: default
Log Message:

Another merge, sorry for the incovenience


diffs (31 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3409,25 +3409,8 @@ rewrite_values(visitor *v, sql_rel *rel)
if (rel_is_ref(rel)) { /* need extra project */
rel->l = rel_project(v->sql->sa, rel->l, rel->exps);
rel->exps = rel_projections(v->sql, rel->l, NULL, 1, 1);
-   if (!list_empty(rel->r)) { /* propagate order by exps */
-   list *nexps = sa_list(v->sql->sa);
-   for (node *en = ((list*)rel->r)->h; en; en = en->next) {
-   sql_exp *e = en->data, *ne = 
exps_find_exp(((sql_rel*)rel->l)->exps, e);
-
-   assert(ne);
-   ne = exp_ref(v->sql, ne);
-   if (is_ascending(e))
-   set_ascending(ne);
-   else
-   set_descending(ne);
-   if (nulls_last(e))
-   set_nulls_last(ne);
-   else
-   set_nulls_first(ne);
-   list_append(nexps, ne);
-   }
-   rel->r = nexps;
-   }
+   ((sql_rel*)rel->l)->r = rel->r; /* propagate order by exps */
+   rel->r = NULL;
return rel;
}
sql_exp *e = rel->exps->h->data;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Oct2020 - Better solution, avoid copying

2021-02-05 Thread Pedro Ferreira
Changeset: fee6e762c7d3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fee6e762c7d3
Modified Files:
sql/server/rel_unnest.c
Branch: Oct2020
Log Message:

Better solution, avoid copying


diffs (31 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3270,25 +3270,8 @@ rewrite_values(visitor *v, sql_rel *rel)
if (rel_is_ref(rel)) { /* need extra project */
rel->l = rel_project(v->sql->sa, rel->l, rel->exps);
rel->exps = rel_projections(v->sql, rel->l, NULL, 1, 1);
-   if (!list_empty(rel->r)) { /* propagate order by exps */
-   list *nexps = sa_list(v->sql->sa);
-   for (node *en = ((list*)rel->r)->h; en; en = en->next) {
-   sql_exp *e = en->data, *ne = 
exps_find_exp(((sql_rel*)rel->l)->exps, e);
-
-   assert(ne);
-   ne = exp_ref(v->sql, ne);
-   if (is_ascending(e))
-   set_ascending(ne);
-   else
-   set_descending(ne);
-   if (nulls_last(e))
-   set_nulls_last(ne);
-   else
-   set_nulls_first(ne);
-   list_append(nexps, ne);
-   }
-   rel->r = nexps;
-   }
+   ((sql_rel*)rel->l)->r = rel->r; /* propagate order by exps */
+   rel->r = NULL;
return rel;
}
sql_exp *e = rel->exps->h->data;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Merged with Oct2020

2021-02-05 Thread Pedro Ferreira
Changeset: c08c6c533e87 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c08c6c533e87
Modified Files:
sql/server/rel_unnest.c
Branch: default
Log Message:

Merged with Oct2020


diffs (29 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3409,6 +3409,25 @@ rewrite_values(visitor *v, sql_rel *rel)
if (rel_is_ref(rel)) { /* need extra project */
rel->l = rel_project(v->sql->sa, rel->l, rel->exps);
rel->exps = rel_projections(v->sql, rel->l, NULL, 1, 1);
+   if (!list_empty(rel->r)) { /* propagate order by exps */
+   list *nexps = sa_list(v->sql->sa);
+   for (node *en = ((list*)rel->r)->h; en; en = en->next) {
+   sql_exp *e = en->data, *ne = 
exps_find_exp(((sql_rel*)rel->l)->exps, e);
+
+   assert(ne);
+   ne = exp_ref(v->sql, ne);
+   if (is_ascending(e))
+   set_ascending(ne);
+   else
+   set_descending(ne);
+   if (nulls_last(e))
+   set_nulls_last(ne);
+   else
+   set_nulls_first(ne);
+   list_append(nexps, ne);
+   }
+   rel->r = nexps;
+   }
return rel;
}
sql_exp *e = rel->exps->h->data;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Oct2020 - Fix for sql_dump test on default, ie don't fo...

2021-02-05 Thread Pedro Ferreira
Changeset: e89938ab6c1a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e89938ab6c1a
Modified Files:
sql/server/rel_unnest.c
Branch: Oct2020
Log Message:

Fix for sql_dump test on default, ie don't forget to propagate order by columns 
at rewrite_values


diffs (29 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3270,6 +3270,25 @@ rewrite_values(visitor *v, sql_rel *rel)
if (rel_is_ref(rel)) { /* need extra project */
rel->l = rel_project(v->sql->sa, rel->l, rel->exps);
rel->exps = rel_projections(v->sql, rel->l, NULL, 1, 1);
+   if (!list_empty(rel->r)) { /* propagate order by exps */
+   list *nexps = sa_list(v->sql->sa);
+   for (node *en = ((list*)rel->r)->h; en; en = en->next) {
+   sql_exp *e = en->data, *ne = 
exps_find_exp(((sql_rel*)rel->l)->exps, e);
+
+   assert(ne);
+   ne = exp_ref(v->sql, ne);
+   if (is_ascending(e))
+   set_ascending(ne);
+   else
+   set_descending(ne);
+   if (nulls_last(e))
+   set_nulls_last(ne);
+   else
+   set_nulls_first(ne);
+   list_append(nexps, ne);
+   }
+   rel->r = nexps;
+   }
return rel;
}
sql_exp *e = rel->exps->h->data;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Unexport a bunch of stuff that doesn't need t...

2021-02-05 Thread Sjoerd Mullender
Changeset: 6ccbd65c0197 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6ccbd65c0197
Removed Files:
monetdb5/modules/kernel/status.h
monetdb5/modules/mal/bbp.h
monetdb5/modules/mal/mal_io.h
monetdb5/modules/mal/mal_mapi.h
monetdb5/modules/mal/oltp.h
monetdb5/modules/mal/profiler.h
monetdb5/modules/mal/tokenizer.h
Modified Files:
clients/Tests/exports.stable.out
monetdb5/modules/kernel/CMakeLists.txt
monetdb5/modules/kernel/bat5.c
monetdb5/modules/kernel/bat5.h
monetdb5/modules/kernel/group.c
monetdb5/modules/kernel/group.h
monetdb5/modules/kernel/status.c
monetdb5/modules/mal/CMakeLists.txt
monetdb5/modules/mal/bbp.c
monetdb5/modules/mal/mal_io.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/manifold.c
monetdb5/modules/mal/manifold.h
monetdb5/modules/mal/oltp.c
monetdb5/modules/mal/orderidx.c
monetdb5/modules/mal/orderidx.h
monetdb5/modules/mal/profiler.c
monetdb5/modules/mal/querylog.c
monetdb5/modules/mal/querylog.h
monetdb5/modules/mal/tokenizer.c
monetdb5/modules/mal/wlc.c
monetdb5/modules/mal/wlc.h
monetdb5/optimizer/opt_oltp.h
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql_scenario.c
Branch: default
Log Message:

Unexport a bunch of stuff that doesn't need to be exported.


diffs (truncated from 3018 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
@@ -706,117 +706,19 @@ str AUTHresolveUser(str *ret, oid uid);
 str AUTHsetPassword(Client c, const char *username, const char *passwd);
 str AUTHunlockVault(const char *password);
 str BATinfo(BAT **key, BAT **val, const bat bid);
-str BKCappend_cand_force_wrap(bat *r, const bat *bid, const bat *uid, const 
bat *sid, const bit *force);
-str BKCappend_cand_wrap(bat *r, const bat *bid, const bat *uid, const bat 
*sid);
-str BKCappend_force_wrap(bat *r, const bat *bid, const bat *uid, const bit 
*force);
-str BKCappend_val_force_wrap(bat *r, const bat *bid, const void *u, const bit 
*force);
-str BKCappend_val_wrap(bat *r, const bat *bid, const void *u);
-str BKCappend_wrap(bat *r, const bat *bid, const bat *uid);
-str BKCattach(bat *ret, const int *tt, const char *const *heapfile);
-str BKCbat_inplace(bat *r, const bat *bid, const bat *rid, const bat *uid);
-str BKCbat_inplace_force(bat *r, const bat *bid, const bat *rid, const bat 
*uid, const bit *force);
-str BKCbun_inplace(bat *r, const bat *bid, const oid *id, const void *t);
-str BKCbun_inplace_force(bat *r, const bat *bid, const oid *id, const void *t, 
const bit *force);
-str BKCdelete(bat *r, const bat *bid, const oid *h);
-str BKCdelete_all(bat *r, const bat *bid);
-str BKCdelete_multi(bat *r, const bat *bid, const bat *sid);
-str BKCdensebat(bat *ret, const lng *size);
-str BKCdiffcand(bat *ret, const bat *aid, const bat *bid);
-str BKCgetAccess(str *res, const bat *bid);
-str BKCgetBBPname(str *ret, const bat *bid);
-str BKCgetCapacity(lng *res, const bat *bid);
-str BKCgetColumnType(str *res, const bat *bid);
-str BKCgetKey(bit *ret, const bat *bid);
-str BKCgetRole(str *res, const bat *bid);
-str BKCgetSequenceBase(oid *r, const bat *bid);
-str BKCgetSize(lng *tot, const bat *bid);
-str BKCinfo(bat *ret1, bat *ret2, const bat *bid);
-str BKCintersectcand(bat *ret, const bat *aid, const bat *bid);
-str BKCisPersistent(bit *res, const bat *bid);
-str BKCisSorted(bit *res, const bat *bid);
-str BKCisSortedReverse(bit *res, const bat *bid);
-str BKCisSynced(bit *ret, const bat *bid1, const bat *bid2);
-str BKCisTransient(bit *res, const bat *bid);
-str BKCmergecand(bat *ret, const bat *aid, const bat *bid);
 str BKCmirror(bat *ret, const bat *bid);
 str BKCnewBAT(bat *res, const int *tt, const BUN *cap, role_t role);
 str BKCreuseBAT(bat *ret, const bat *bid, const bat *did);
-str BKCreuseBATmap(bat *ret, const bat *bid, const bat *did);
-str BKCsave(bit *res, const char *const *input);
-str BKCsave2(void *r, const bat *bid);
-str BKCsetAccess(bat *res, const bat *bid, const char *const *param);
-str BKCsetColumn(void *r, const bat *bid, const char *const *tname);
-str BKCsetHash(bit *ret, const bat *bid);
-str BKCsetImprints(bit *ret, const bat *bid);
 str BKCsetName(void *r, const bat *bid, const char *const *s);
 str BKCsetPersistent(void *r, const bat *bid);
-str BKCsetTransient(void *r, const bat *bid);
 str BKCshrinkBAT(bat *ret, const bat *bid, const bat *did);
 ssize_t BLOBtostr(str *tostr, size_t *l, const void *pin, bool external);
 str CLTsessions(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTshutdown(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-str CMDbbp(bat *ID, bat *NS, bat *TT, bat *CNT, bat *REFCNT, bat 

MonetDB: default - Added test for bug 7055. It is not a bug beca...

2021-02-05 Thread Pedro Ferreira
Changeset: a0bfa0d245db for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a0bfa0d245db
Modified Files:
sql/test/miscellaneous/Tests/declared_tables.test
Branch: default
Log Message:

Added test for bug 7055. It is not a bug because is not yet in production


diffs (35 lines):

diff --git a/sql/test/miscellaneous/Tests/declared_tables.test 
b/sql/test/miscellaneous/Tests/declared_tables.test
--- a/sql/test/miscellaneous/Tests/declared_tables.test
+++ b/sql/test/miscellaneous/Tests/declared_tables.test
@@ -41,3 +41,31 @@ NULL
 statement ok
 DROP FUNCTION testtruncate
 
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE TABLE foo (i INT)
+
+statement ok
+CREATE FUNCTION cnt() RETURNS INT BEGIN RETURN SELECT COUNT(*) FROM foo; END
+
+statement ok
+CREATE FUNCTION func () RETURNS TABLE(i int)
+BEGIN
+TRUNCATE foo;
+INSERT INTO foo VALUES (1);
+INSERT INTO foo VALUES ((SELECT COUNT(*) FROM foo)+1);
+INSERT INTO foo SELECT cnt()+1;
+RETURN foo;
+END
+
+query I rowsort
+SELECT * FROM func()
+
+1
+2
+3
+
+statement ok
+ROLLBACK
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Approved output

2021-02-05 Thread Pedro Ferreira
Changeset: fdbb5a46b1c3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fdbb5a46b1c3
Modified Files:
sql/test/analytics/Tests/analytics20.stable.out
Branch: default
Log Message:

Approved output


diffs (25 lines):

diff --git a/sql/test/analytics/Tests/analytics20.stable.out 
b/sql/test/analytics/Tests/analytics20.stable.out
--- a/sql/test/analytics/Tests/analytics20.stable.out
+++ b/sql/test/analytics/Tests/analytics20.stable.out
@@ -40,8 +40,8 @@ stdout of test 'analytics20` in director
 % .prepare,.prepare,   .prepare,   .prepare,   .prepare,   
.prepare # table_name
 % type,digits, scale,  schema, table,  column # name
 % varchar, int,int,str,str,str # type
-% 7,   2,  1,  0,  2,  2 # length
-[ "varchar",   0,  0,  "", "%1",   "%1"]
+% 7,   3,  1,  0,  2,  2 # length
+[ "varchar",   64, 0,  "", "%1",   "%1"]
 [ "bigint",64, 0,  NULL,   NULL,   NULL]
 #exec  1(2);
 % sys.%1 # table_name
@@ -62,8 +62,8 @@ stdout of test 'analytics20` in director
 % .prepare,.prepare,   .prepare,   .prepare,   .prepare,   
.prepare # table_name
 % type,digits, scale,  schema, table,  column # name
 % varchar, int,int,str,str,str # type
-% 7,   2,  1,  0,  2,  2 # length
-[ "varchar",   0,  0,  "", "%2",   "%2"]
+% 7,   3,  1,  0,  2,  2 # length
+[ "varchar",   64, 0,  "", "%2",   "%2"]
 [ "int",   32, 0,  NULL,   NULL,   NULL]
 #exec  2(2);
 % sys.%2 # table_name
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Merged with Oct2020

2021-02-05 Thread Pedro Ferreira
Changeset: afbe79587c5b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=afbe79587c5b
Removed Files:
sql/test/SQLancer/Tests/sqlancer09.sql
sql/test/SQLancer/Tests/sqlancer10.sql
Modified Files:
sql/common/sql_types.c
sql/server/sql_semantic.c
sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.test
sql/test/SQLancer/Tests/sqlancer09.test
sql/test/SQLancer/Tests/sqlancer10.test
sql/test/subquery/Tests/subquery6.test
Branch: default
Log Message:

Merged with Oct2020


diffs (truncated from 364 to 300 lines):

diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -505,7 +505,7 @@ sql_dup_subfunc(sql_allocator *sa, sql_f
} else if (r->scale)
scale = r->scale;
}
-   if (member && f->fix_scale == INOUT)
+   if (member && (f->fix_scale == INOUT || 
r->type->eclass == EC_ANY))
digits = member->digits;
if (IS_ANALYTIC(f) && mscale)
scale = mscale;
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -266,8 +266,10 @@ static sql_subfunc *
scale = member->scale;
}
/* same type as the input */
-   if (r->type->eclass == EC_ANY && member)
+   if (r->type->eclass == EC_ANY && member) {
r = member;
+   digits = member->digits;
+   }
if (!EC_SCALE(r->type->eclass))
scale = 0;
res = sql_create_subtype(sa, r->type, digits, scale);
@@ -955,14 +957,14 @@ result_datatype(sql_subtype *super, sql_
char *tpe = "varchar";
unsigned int digits = 0;
if (!EC_VARCHAR(lclass)) {
-   tpe = r->type->sqlname;
-   digits = (!l->digits)?0:r->digits;
+   tpe = r->type->sqlname;
+   digits = (!l->digits)?0:r->digits;
} else if (!EC_VARCHAR(rclass)) {
-   tpe = l->type->sqlname;
-   digits = (!r->digits)?0:l->digits;
+   tpe = l->type->sqlname;
+   digits = (!r->digits)?0:l->digits;
} else { /* both */
-   tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
-   digits = 
(!l->digits||!r->digits)?0:sql_max(l->digits, r->digits);
+   tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
+   digits = (!l->digits||!r->digits)?0:sql_max(l->digits, 
r->digits);
}
sql_find_subtype(super, tpe, digits, 0);
/* case b blob */
@@ -976,30 +978,38 @@ result_datatype(sql_subtype *super, sql_
char *tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
unsigned int digits = sql_max(l->digits, r->digits);
unsigned int scale = sql_max(l->scale, r->scale);
-   if (l->type->radix == 10 || r->type->radix == 10) {
-   digits = 0;
-   /* change to radix 10 */
-   if (l->type->radix == 2 && r->type->radix == 10) {
-   digits = bits2digits(l->type->digits);
-   digits = sql_max(r->digits, digits);
-   scale = r->scale;
-   } else if (l->type->radix == 10 && r->type->radix == 2) 
{
-   digits = bits2digits(r->type->digits);
-   digits = sql_max(l->digits, digits);
-   scale = l->scale;
+
+   if (l->type->radix == 10 && r->type->radix == 10) {
+   digits = scale + (sql_max(l->digits - l->scale, 
r->digits - r->scale));
+#ifdef HAVE_HGE
+   if (digits > 39) {
+   digits = 39;
+#else
+   if (digits > 19) {
+   digits = 19;
+#endif
+   scale = MIN(scale, digits - 1);
}
+   } else if (l->type->radix == 2 && r->type->radix == 10) { /* 
change to radix 10 */
+   digits = bits2digits(l->type->digits);
+   digits = sql_max(r->digits, digits);
+   scale = r->scale;
+   } else if (l->type->radix == 10 && r->type->radix == 2) { /* 

MonetDB: Oct2020 - Use digits from member on aggregates too

2021-02-05 Thread Pedro Ferreira
Changeset: 09a6da4fe701 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=09a6da4fe701
Modified Files:
sql/common/sql_types.c
Branch: Oct2020
Log Message:

Use digits from member on aggregates too


diffs (15 lines):

diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -462,8 +462,10 @@ static sql_subfunc *
scale = member->scale;
}
/* same type as the input */
-   if (r->type->eclass == EC_ANY && member)
+   if (r->type->eclass == EC_ANY && member) {
r = member;
+   digits = member->digits;
+   }
if (!EC_SCALE(r->type->eclass))
scale = 0;
res = sql_create_subtype(sa, r->type, digits, scale);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Make sure this compiles on Windows too.

2021-02-05 Thread Sjoerd Mullender
Changeset: b3fa989a5bef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b3fa989a5bef
Modified Files:
clients/mapiclient/CMakeLists.txt
clients/mapiclient/ReadlineTools.c
clients/mapiclient/dotmonetdb.c
Branch: default
Log Message:

Make sure this compiles on Windows too.


diffs (33 lines):

diff --git a/clients/mapiclient/CMakeLists.txt 
b/clients/mapiclient/CMakeLists.txt
--- a/clients/mapiclient/CMakeLists.txt
+++ b/clients/mapiclient/CMakeLists.txt
@@ -94,6 +94,7 @@ target_link_libraries(stethoscope
   stream
   mapi
   mprompt
+  mutils
   $<$:${GETOPT_LIB}>
   $<$:ws2_32>)
 
diff --git a/clients/mapiclient/ReadlineTools.c 
b/clients/mapiclient/ReadlineTools.c
--- a/clients/mapiclient/ReadlineTools.c
+++ b/clients/mapiclient/ReadlineTools.c
@@ -18,6 +18,7 @@
 #include 
 #include 
 #include "ReadlineTools.h"
+#define LIBMUTILS 1
 #include "mutils.h"
 
 #ifdef HAVE_STRINGS_H
diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c
--- a/clients/mapiclient/dotmonetdb.c
+++ b/clients/mapiclient/dotmonetdb.c
@@ -8,6 +8,7 @@
 
 #include "monetdb_config.h"
 #include "dotmonetdb.h"
+#define LIBMUTILS 1
 #include "mutils.h"
 #include 
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Avoid use of static variable for Windows read...

2021-02-05 Thread Sjoerd Mullender
Changeset: f7937bd7d80b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f7937bd7d80b
Modified Files:
common/utils/mutils.c
common/utils/mutils.h
Branch: default
Log Message:

Avoid use of static variable for Windows readdir.
And no need to expose the contents of struct DIR.


diffs (58 lines):

diff --git a/common/utils/mutils.c b/common/utils/mutils.c
--- a/common/utils/mutils.c
+++ b/common/utils/mutils.c
@@ -272,6 +272,14 @@ winerror(int e)
}
 }
 
+struct DIR {
+   wchar_t *dir_name;
+   int just_opened;
+   HANDLE find_file_handle;
+   void *find_file_data;
+   struct dirent result;
+};
+
 DIR *
 opendir(const char *dirname)
 {
@@ -360,7 +368,6 @@ basename(const wchar_t *file_name)
 struct dirent *
 readdir(DIR *dir)
 {
-   static struct dirent result;
char *base;
 
if (dir == NULL) {
@@ -376,11 +383,11 @@ readdir(DIR *dir)
base = wchartoutf8(basename(((LPWIN32_FIND_DATAW) 
dir->find_file_data)->cFileName));
if (base == NULL)
return NULL;
-   strcpy_len(result.d_name, base, sizeof(result.d_name));
+   strcpy_len(dir->result.d_name, base, sizeof(dir->result.d_name));
free(base);
-   result.d_namelen = (int) strlen(result.d_name);
+   dir->result.d_namelen = (int) strlen(dir->result.d_name);
 
-   return 
+   return >result;
 }
 
 void
diff --git a/common/utils/mutils.h b/common/utils/mutils.h
--- a/common/utils/mutils.h
+++ b/common/utils/mutils.h
@@ -44,12 +44,7 @@
 
 #include 
 
-struct DIR {
-   wchar_t *dir_name;
-   int just_opened;
-   HANDLE find_file_handle;
-   void *find_file_data;
-};
+struct DIR;
 
 typedef struct DIR DIR;
 struct dirent {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Make objectversion::state an atomic variable.

2021-02-05 Thread Aris Koning
Changeset: 24890aacf41f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=24890aacf41f
Modified Files:
sql/storage/objectset.c
Branch: default
Log Message:

Make objectversion::state  an atomic variable.


diffs (105 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -24,7 +24,7 @@ struct versionhead ;
 
 typedef struct objectversion {
ulng ts;
-   bte state;
+   ATOMIC_TYPE state;
sql_base *b; // base of underlying sql object
struct objectset* os;
struct objectversion*name_based_older;
@@ -312,14 +312,12 @@ objectversion_destroy(sqlstore *store, o
 }
 
 static bte os_atmc_get_state(objectversion *ov) {
-   // ATOMIC GET
-   bte state = ov->state;
+   bte state = (bte) ATOMIC_GET(>state);
return state;
 }
 
 static void os_atmc_set_state(objectversion *ov, bte state) {
-   // ATOMIC SET
-   ov->state = state;
+   ATOMIC_SET(>state, state);
 }
 
 static void
@@ -387,9 +385,8 @@ os_rollback(objectversion *ov, sqlstore 
 static inline void
 try_to_mark_deleted_for_destruction(sqlstore* store, objectversion *ov)
 {
-   //TODO ATOMIC CAS
-   if (ov->state == deleted) {
-   ov->state = under_destruction;
+   ATOMIC_BASE_TYPE expected_deleted = deleted;
+   if (ATOMIC_CAS(>state, _deleted, under_destruction)) {
 
if (!ov->name_based_newer || 
(os_atmc_get_state(ov->name_based_newer) & rollbacked)) { // TODO: This gives 
race conditions with os_rollback.
os_remove_name_based_chain(ov->os, store, 
ov->name_based_head);
@@ -407,7 +404,6 @@ try_to_mark_deleted_for_destruction(sqls
 
ov->ts = store_get_timestamp(store)+1;
}
-   //END ATOMIC CAS
 }
 
 static void
@@ -717,18 +713,14 @@ os_add_name_based(objectset *os, struct 
/* Since our parent oo is comitted deleted 
objectversion, we might have a conflict with
* another transaction that tries to clean up oo or also 
wants to add a new objectversion.
*/
-   //TODO ATOMIC CAS
-   if (oo->state == deleted) {
-   oo->state = under_resurrection;
-   }
-   else {
+   ATOMIC_BASE_TYPE expected_deleted = deleted;
+   if (!ATOMIC_CAS(>state, _deleted, 
under_destruction)) {
return -1; /*conflict with cleaner or 
write-write conflict*/
}
-   // END ATOMIC CAS
}
 
/* new object with same name within transaction, should have a 
delete in between */
-   assert(!(state == active && oo->ts == ov->ts && !(ov->state & 
deleted)));
+   assert(!(state == active && oo->ts == ov->ts && 
!(os_atmc_get_state(ov) & deleted)));
 
MT_lock_set(>ht_lock);
ov->name_based_head = oo->name_based_head;
@@ -767,22 +759,17 @@ os_add_id_based(objectset *os, struct sq
 
assert(ov != oo); // Time loops are not allowed
 
-   //TODO ATOMIC GET
-   bte state = oo->state;
+   bte state = os_atmc_get_state(oo);
if (state != active) {
// This can only happen if the parent oo was a comitted 
deleted at some point.
assert(state == deleted || state == under_destruction 
|| state == under_resurrection);
/* Since our parent oo is comitted deleted 
objectversion, we might have a conflict with
* another transaction that tries to clean up oo or also 
wants to add a new objectversion.
*/
-   //TODO ATOMIC CAS
-   if (oo->state == deleted) {
-   oo->state = under_resurrection;
-   }
-   else {
+   ATOMIC_BASE_TYPE expected_deleted = deleted;
+   if (!ATOMIC_CAS(>state, _deleted, 
under_resurrection)) {
return -1; /*conflict with cleaner or 
write-write conflict*/
}
-   // END ATOMIC CAS
}
 
MT_lock_set(>ht_lock);
@@ -794,7 +781,6 @@ os_add_id_based(objectset *os, struct sq
if (oo) {
oo->id_based_newer = ov;
// if the parent was originally deleted, we restore it 
to that state.
-   oo->state = state;
os_atmc_set_state(oo, state);
}
MT_lock_unset(>ht_lock);
___
checkin-list mailing list
checkin-list@monetdb.org

MonetDB: Oct2020 - Add more digits when converting from numeric ...

2021-02-05 Thread Pedro Ferreira
Changeset: 8c21324a4af8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c21324a4af8
Modified Files:
sql/server/sql_semantic.c
sql/test/SQLancer/Tests/sqlancer09.stable.err
sql/test/SQLancer/Tests/sqlancer09.stable.out
sql/test/SQLancer/Tests/sqlancer10.stable.err
sql/test/SQLancer/Tests/sqlancer10.stable.out
Branch: Oct2020
Log Message:

Add more digits when converting from numeric types to char types and approved 
ouput. We have more strict conversion rules on set operations, so the error is 
right


diffs (103 lines):

diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -302,8 +302,19 @@ supertype(sql_subtype *super, sql_subtyp
sql_find_subtype(, tpe, 0, 0);
} else {
/* for strings use the max of both */
-   digits = EC_VARCHAR(eclass) ? sql_max(idigits, rdigits) :
-sql_max(idigits - i->scale, rdigits - 
r->scale);
+   if (eclass == EC_CHAR) {
+   if (i->type->eclass == EC_NUM)
+   idigits++; /* add '-' */
+   else if (i->type->eclass == EC_DEC || i->type->eclass 
== EC_FLT)
+   idigits+=2; /* add '-' and '.' TODO for 
floating-points maybe more is needed */
+   if (r->type->eclass == EC_NUM)
+   rdigits++;
+   else if (r->type->eclass == EC_DEC || r->type->eclass 
== EC_FLT)
+   rdigits+=2;
+   digits = sql_max(idigits, rdigits);
+   } else {
+   digits = sql_max(idigits - i->scale, rdigits - 
r->scale);
+   }
sql_find_subtype(, tpe, digits+scale, scale);
}
*super = lsuper;
diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.err 
b/sql/test/SQLancer/Tests/sqlancer09.stable.err
--- a/sql/test/SQLancer/Tests/sqlancer09.stable.err
+++ b/sql/test/SQLancer/Tests/sqlancer09.stable.err
@@ -9,11 +9,7 @@ MAPI  = (monetdb) /var/tmp/mtest-133412/
 QUERY = INSERT INTO t2 VALUES (COALESCE(1 BETWEEN 2 AND 3, 1));
 ERROR = !INSERT INTO: PRIMARY KEY constraint 't2.t2_c0_pkey' violated
 CODE  = 40002
-MAPI  = (monetdb) /var/tmp/mtest-349169/.s.monetdb.38512
-QUERY = values (0.51506835), (2), (least('a', 0.5667308));
-ERROR = !value too long for type (var)char(8)
-CODE  = 22001
-MAPI  = (monetdb) /var/tmp/mtest-307586/.s.monetdb.36528
+MAPI  = (monetdb) /var/tmp/mtest-417038/.s.monetdb.32277
 QUERY = select 1 from v74 cross join v84 join (values ('b'), ('a'), (1)) as 
sub0 on (v84.vc0)^(-9223372036854775807) is not null;
 ERROR = !overflow in calculation 1XOR-9223372036854775807.
 CODE  = 22003
diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.out 
b/sql/test/SQLancer/Tests/sqlancer09.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer09.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer09.stable.out
@@ -167,6 +167,14 @@ stdout of test 'sqlancer09` in directory
 % 1 # length
 [ 0]
 #ROLLBACK;
+#values (0.51506835), (2), (least('a', 0.5667308));
+% .%1 # table_name
+% %1 # name
+% decimal # type
+% 20 # length
+[ 0.51506835   ]
+[ 2.   ]
+[ 0.56673080   ]
 #START TRANSACTION;
 #CREATE TABLE "sys"."t2" ("c0" BIGINT,"c1" BIGINT,"c2" REAL);
 #COPY 21 RECORDS INTO "sys"."t2" FROM stdin USING DELIMITERS E'\t',E'\n','"';
diff --git a/sql/test/SQLancer/Tests/sqlancer10.stable.err 
b/sql/test/SQLancer/Tests/sqlancer10.stable.err
--- a/sql/test/SQLancer/Tests/sqlancer10.stable.err
+++ b/sql/test/SQLancer/Tests/sqlancer10.stable.err
@@ -5,6 +5,10 @@ stderr of test 'sqlancer10` in directory
 # 13:59:46 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-215607" "--port=30526"
 # 13:59:46 >  
 
+MAPI  = (monetdb) /var/tmp/mtest-485092/.s.monetdb.38732
+QUERY = (select v3.vc0 from v3) intersect (select greatest('-1115800120', 
v7.vc0) from v7);
+ERROR = !types char(18,0) and decimal(20,2) are not equal
+CODE  = 42000
 
 # 13:59:46 >  
 # 13:59:46 >  "Done."
diff --git a/sql/test/SQLancer/Tests/sqlancer10.stable.out 
b/sql/test/SQLancer/Tests/sqlancer10.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer10.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer10.stable.out
@@ -66,6 +66,26 @@ stdout of test 'sqlancer10` in directory
 % tinyint # type
 % 1 # length
 #ROLLBACK;
+#START TRANSACTION;
+#create view v3(vc0, vc1) as (values (0.67,NULL),(18.50, 3),(0.70, 6));
+#create view v7(vc0) as (values (8505133838.114197),(NULL));
+#ROLLBACK;
+#START TRANSACTION;
+#CREATE TABLE t1(c0 int);
+#CREATE VIEW v4(vc0) AS ((SELECT NULL FROM t1 AS l0t1) UNION ALL (SELECT 
true));
+#INSERT INTO t1(c0) VALUES(12), (2), (6), (3), (1321), (10), (8), (1), (2), 
(3), (9);
+[ 11   ]
+#DELETE FROM t1 WHERE true;
+[ 11   ]
+#INSERT INTO t1(c0) VALUES(9), (1), (3), (2), (5);
+[ 5]
+#SELECT 1 

MonetDB: default - Approve

2021-02-05 Thread Joeri van Ruth
Changeset: 12751a4640cf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=12751a4640cf
Modified Files:
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out

monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows
sql/test/mapi/Tests/sql_int128.test
Branch: default
Log Message:

Approve


diffs (190 lines):

diff --git 
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out 
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
--- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
+++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
@@ -24,8 +24,8 @@ function user.main():void;
 X_88:ptr := sql.append_exec(X_85:ptr, X_28:bat[:int]);
 X_91:ptr := sql.append_exec(X_90:ptr, X_29:bat[:int]);
 X_94:ptr := sql.append_exec(X_93:ptr, X_30:bat[:int]);
+X_40:int := sql.append_finish(X_86:int, X_88:ptr, X_91:ptr, X_94:ptr);
 X_42:lng := aggr.count(X_30:bat[:int]);
-X_40:int := sql.append_finish(X_86:int, X_88:ptr, X_91:ptr, X_94:ptr);
 sql.affectedRows(X_40:int, X_42:lng);
 end user.main;
 #inline   actions= 0 time=1 usec 
@@ -87,8 +87,8 @@ function user.main():void;
 X_89:ptr := sql.append_exec(X_86:ptr, X_28:bat[:int]);
 X_92:ptr := sql.append_exec(X_91:ptr, X_29:bat[:int]);
 X_95:ptr := sql.append_exec(X_94:ptr, X_30:bat[:int]);
+X_40:int := sql.append_finish(X_87:int, X_89:ptr, X_92:ptr, X_95:ptr);
 X_42:lng := aggr.count(X_30:bat[:int]);
-X_40:int := sql.append_finish(X_87:int, X_89:ptr, X_92:ptr, X_95:ptr);
 sql.affectedRows(X_40:int, X_42:lng);
 end user.main;
 #inline   actions= 0 time=0 usec 
diff --git 
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows
 
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows
--- 
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows
+++ 
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows
@@ -25,8 +25,8 @@ function user.main():void;
 X_88:ptr := sql.append_exec(X_85:ptr, X_28:bat[:int]);
 X_91:ptr := sql.append_exec(X_90:ptr, X_29:bat[:int]);
 X_94:ptr := sql.append_exec(X_93:ptr, X_30:bat[:int]);
+X_40:int := sql.append_finish(X_86:int, X_88:ptr, X_91:ptr, X_94:ptr);
 X_42:lng := aggr.count(X_30:bat[:int]);
-X_40:int := sql.append_finish(X_86:int, X_88:ptr, X_91:ptr, X_94:ptr);
 sql.affectedRows(X_40:int, X_42:lng);
 end user.main;
 #inline   actions= 0 time=0 usec 
@@ -68,8 +68,8 @@ function user.main():void;
 X_88:ptr := sql.append_exec(X_85:ptr, X_28:bat[:int]);
 X_91:ptr := sql.append_exec(X_90:ptr, X_29:bat[:int]);
 X_94:ptr := sql.append_exec(X_93:ptr, X_30:bat[:int]);
+X_40:int := sql.append_finish(X_86:int, X_88:ptr, X_91:ptr, X_94:ptr);
 X_42:lng := aggr.count(X_30:bat[:int]);
-X_40:int := sql.append_finish(X_86:int, X_88:ptr, X_91:ptr, X_94:ptr);
 sql.affectedRows(X_40:int, X_42:lng);
 end user.main;
 #inline   actions= 0 time=1 usec 
@@ -128,8 +128,8 @@ function user.main():void;
 X_89:ptr := sql.append_exec(X_86:ptr, X_28:bat[:int]);
 X_92:ptr := sql.append_exec(X_91:ptr, X_29:bat[:int]);
 X_95:ptr := sql.append_exec(X_94:ptr, X_30:bat[:int]);
+X_40:int := sql.append_finish(X_87:int, X_89:ptr, X_92:ptr, X_95:ptr);
 X_42:lng := aggr.count(X_30:bat[:int]);
-X_40:int := sql.append_finish(X_87:int, X_89:ptr, X_92:ptr, X_95:ptr);
 sql.affectedRows(X_40:int, X_42:lng);
 end user.main;
 #inline   actions= 0 time=0 usec 
@@ -172,8 +172,8 @@ function user.main():void;
 X_89:ptr := sql.append_exec(X_86:ptr, X_28:bat[:int]);
 X_92:ptr := sql.append_exec(X_91:ptr, X_29:bat[:int]);
 X_95:ptr := sql.append_exec(X_94:ptr, X_30:bat[:int]);
+X_40:int := sql.append_finish(X_87:int, X_89:ptr, X_92:ptr, X_95:ptr);
 X_42:lng := aggr.count(X_30:bat[:int]);
-X_40:int := sql.append_finish(X_87:int, X_89:ptr, X_92:ptr, X_95:ptr);
 sql.affectedRows(X_40:int, X_42:lng);
 end user.main;
 #inline   actions= 0 time=0 usec 
diff --git a/sql/test/mapi/Tests/sql_int128.test 
b/sql/test/mapi/Tests/sql_int128.test
--- a/sql/test/mapi/Tests/sql_int128.test
+++ b/sql/test/mapi/Tests/sql_int128.test
@@ -16,18 +16,18 @@ querylog.define
 1
 sql.mvc
 1
-sql.update_prep
-1
 sql.tid
 1
 algebra.project
 1
+sql.update_prep
+1
 sql.update_exec
 1
+sql.append_finish
+1
 aggr.count
 1
-sql.append_finish
-1
 sql.affectedRows
 1
 
@@ -40,18 +40,18 @@ querylog.define
 1
 sql.mvc
 1
-sql.update_prep
-1
 sql.tid
 1
 algebra.project
 1
+sql.update_prep
+1
 sql.update_exec
 1
+sql.append_finish
+1
 aggr.count
 1
-sql.append_finish
-1
 sql.affectedRows
 1
 
@@ -64,20 +64,20 @@ querylog.define
 1
 sql.mvc
 1
-sql.update_prep
-1
 sql.tid
 1
 sql.bind
 2
 algebra.projection
 2
+sql.update_prep
+1
 

MonetDB: default - Make opt_parappend a lot less ambitious

2021-02-05 Thread Joeri van Ruth
Changeset: 2191e791ee62 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2191e791ee62
Modified Files:
monetdb5/optimizer/opt_parappend.c
Branch: default
Log Message:

Make opt_parappend a lot less ambitious


diffs (137 lines):

diff --git a/monetdb5/optimizer/opt_parappend.c 
b/monetdb5/optimizer/opt_parappend.c
--- a/monetdb5/optimizer/opt_parappend.c
+++ b/monetdb5/optimizer/opt_parappend.c
@@ -20,11 +20,9 @@ typedef struct parstate {
InstrPtr finish_stmt;
 } parstate;
 
-static str transform(parstate *state, Client cntxt, MalBlkPtr mb, InstrPtr 
importTable, const char *execRef, const char *prepRef, int *actions);
-static int setup_append_prep(parstate *state, Client cntxt, MalBlkPtr mb, 
InstrPtr old, const char *prepRef);
+static str transform(parstate *state, MalBlkPtr mb, InstrPtr importTable, 
const char *execRef, const char *prepRef, int *actions);
+static int setup_append_prep(parstate *state, MalBlkPtr mb, InstrPtr old, 
const char *prepRef);
 static void flush_finish_stmt(parstate *state, MalBlkPtr mb);
-static void pull_prep_towards_beginning(Client cntxt, MalBlkPtr mb, InstrPtr 
instr);
-static bool needs_chain_var(parstate *state, InstrPtr instr);
 
 
 str
@@ -68,13 +66,11 @@ OPTparappendImplementation(Client cntxt,
for (size_t i = 0; i < old_stop; i++) {
InstrPtr p = old_mb_stmt[i];
if (p->modname == sqlRef && p->fcnname == appendRef) {
-   msg = transform(, cntxt, mb, p, 
putName("append_exec"), putName("append_prep"), );
+   msg = transform(, mb, p, putName("append_exec"), 
putName("append_prep"), );
} else if (p->modname == sqlRef && p->fcnname == updateRef) {
-   msg = transform(, cntxt, mb, p, 
putName("update_exec"), putName("update_prep"), );
+   msg = transform(, mb, p, putName("update_exec"), 
putName("update_prep"), );
} else {
-   if (p->barrier != 0 || mayhaveSideEffects(cntxt, mb, p, 
false) || needs_chain_var(, p)) {
-   flush_finish_stmt(, mb);
-   }
+   flush_finish_stmt(, mb);
pushInstruction(mb, p);
}
if (msg != MAL_SUCCEED)
@@ -115,7 +111,7 @@ end:
 }
 
 static str
-transform(parstate *state, Client cntxt, MalBlkPtr mb, InstrPtr old, const 
char *opRef, const char *prepRef, int *actions)
+transform(parstate *state, MalBlkPtr mb, InstrPtr old, const char *opRef, 
const char *prepRef, int *actions)
 {
int sname_var;
int tname_var;
@@ -158,7 +154,7 @@ transform(parstate *state, Client cntxt,
 
*actions += 1;
 
-   int cookie_var = setup_append_prep(state, cntxt, mb, old, prepRef);
+   int cookie_var = setup_append_prep(state, mb, old, prepRef);
 
int ret_cookie = newTmpVariable(mb, TYPE_ptr);
InstrPtr e = newFcnCall(mb, sqlRef, opRef);
@@ -175,7 +171,7 @@ transform(parstate *state, Client cntxt,
 }
 
 static int
-setup_append_prep(parstate *state, Client cntxt, MalBlkPtr mb, InstrPtr old, 
const char *prepRef)
+setup_append_prep(parstate *state, MalBlkPtr mb, InstrPtr old, const char 
*prepRef)
 {
// take the old instruction apart
assert(old->retc == 1);
@@ -253,8 +249,6 @@ setup_append_prep(parstate *state, Clien
setReturnArgument(f, chain_out_var);
f = pushArgument(mb, f, chain);
state->finish_stmt = f;
-
-   pull_prep_towards_beginning(cntxt, mb, p);
} else {
// Append to existing first, to ensure there is room
prep_stmt = pushArgument(mb, prep_stmt, cname_var);
@@ -284,66 +278,3 @@ flush_finish_stmt(parstate *state, MalBl
state->prep_stmt = NULL;
state->finish_stmt = NULL;
 }
-
-
-static bool
-can_swap_prep_with(Client cntxt, MalBlkPtr mb, InstrPtr prep, InstrPtr other)
-{
-   if (mayhaveSideEffects(cntxt, mb, other, false)) {
-   // probably not safe to pull it across a side effect, and 
chainflow wouldn't benefit anyway
-   return false;
-   }
-
-   if (other->barrier != 0) {
-   // be wary of control flow
-   return false;
-   }
-
-   int chain_var = getArg(prep, prep->retc);
-   for (int i = 0; i < other->retc; i++) {
-   int other_ret = getArg(other, i);
-   if (chain_var == other_ret) {
-   // it defines the chain var we use, we must not violate 
causality
-   return false;
-   }
-   }
-
-   return true; // okay
-}
-
-static bool
-needs_chain_var(parstate *state, InstrPtr instr)
-{
-   if (state->finish_stmt == NULL)
-   return false;
-
-   int chain_var = getArg(state->finish_stmt, 0);
-
-   for (int i = 0; i < instr->argc; i++) {
-   int var = getArg(instr, i);
-   

MonetDB: default - Should never happen, i.e. change to assert.

2021-02-05 Thread Aris Koning
Changeset: c648e5c63246 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c648e5c63246
Modified Files:
sql/storage/objectset.c
Branch: default
Log Message:

Should never happen, i.e. change to assert.


diffs (16 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -726,9 +726,9 @@ os_add_name_based(objectset *os, struct 
}
// END ATOMIC CAS
}
-   if (state == active && oo->ts == ov->ts && !(ov->state & 
deleted)) {
-   return -1; /* new object with same name within 
transaction, should have a delete in between */
-   }
+
+   /* new object with same name within transaction, should have a 
delete in between */
+   assert(!(state == active && oo->ts == ov->ts && !(ov->state & 
deleted)));
 
MT_lock_set(>ht_lock);
ov->name_based_head = oo->name_based_head;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Port to Cygwin.

2021-02-05 Thread Sjoerd Mullender
Changeset: 186c2b953b20 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=186c2b953b20
Modified Files:
clients/mapiclient/ReadlineTools.c
clients/mapiclient/dotmonetdb.c
Branch: default
Log Message:

Port to Cygwin.


diffs (112 lines):

diff --git a/clients/mapiclient/ReadlineTools.c 
b/clients/mapiclient/ReadlineTools.c
--- a/clients/mapiclient/ReadlineTools.c
+++ b/clients/mapiclient/ReadlineTools.c
@@ -18,12 +18,13 @@
 #include 
 #include 
 #include "ReadlineTools.h"
+#include "mutils.h"
 
 #ifdef HAVE_STRINGS_H
 #include/* for strncasecmp */
 #endif
 
-#ifndef WIN32
+#ifndef NATIVE_WIN32
 /* for umask */
 #include 
 #include 
@@ -309,10 +310,6 @@ readline_show_error(const char *msg) {
 #define BUFFER_SIZE 1024
 #endif
 
-#ifdef WIN32
-#define unlink _unlink
-#endif
-
 static int
 invoke_editor(int cnt, int key) {
char editor_command[BUFFER_SIZE];
@@ -325,14 +322,14 @@ invoke_editor(int cnt, int key) {
(void) cnt;
(void) key;
 
-#ifdef WIN32
+#ifdef NATIVE_WIN32
char *mytemp;
char template[] = "mclient_temp_XX";
if ((mytemp = _mktemp(template)) == NULL) {
readline_show_error("invoke_editor: Cannot create temp file\n");
goto bailout;
}
-   if ((fp = fopen(mytemp, "r+")) == NULL) {
+   if ((fp = MT_fopen(mytemp, "r+")) == NULL) {
// Notify the user that we cannot create temp file
readline_show_error("invoke_editor: Cannot create temp file\n");
goto bailout;
@@ -408,7 +405,7 @@ invoke_editor(int cnt, int key) {
}
 
fclose(fp);
-   unlink(template);
+   MT_remove(template);
 
return 0;
 
@@ -416,7 +413,7 @@ bailout:
if (fp)
fclose(fp);
free(read_buff);
-   unlink(template);
+   MT_remove(template);
return 1;
 }
 
@@ -462,7 +459,7 @@ init_readline(Mapi mid, const char *lang
case ENOENT:
/* history file didn't exist, so try to create
 * it and then try again */
-   if ((f = fopen(_history_file, "w")) == NULL) {
+   if ((f = MT_fopen(_history_file, "w")) == NULL) 
{
/* failed to create, don't
 * bother saving */
_save_history = 0;
diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c
--- a/clients/mapiclient/dotmonetdb.c
+++ b/clients/mapiclient/dotmonetdb.c
@@ -8,6 +8,7 @@
 
 #include "monetdb_config.h"
 #include "dotmonetdb.h"
+#include "mutils.h"
 #include 
 
 void
@@ -30,7 +31,7 @@ parse_dotmonetdb(DotMonetdb *dotfile)
if ((cfile = getenv("DOTMONETDBFILE")) == NULL) {
/* no environment variable: use a default */
cfile = ".monetdb";
-   if ((config = fopen(cfile, "r")) == NULL) {
+   if ((config = MT_fopen(cfile, "r")) == NULL) {
const char *xdg = getenv("XDG_CONFIG_HOME");
const char *home = getenv("HOME");
int len = -1;
@@ -39,15 +40,15 @@ parse_dotmonetdb(DotMonetdb *dotfile)
len = snprintf(buf, sizeof(buf), "%s%cmonetdb", 
xdg, DIR_SEP);
else if (home != NULL)
len = snprintf(buf, sizeof(buf), 
"%s%c.config%cmonetdb", home, DIR_SEP, DIR_SEP);
-   if (len == -1 || len >= FILENAME_MAX || (config = 
fopen(buf, "r")) == NULL) {
+   if (len == -1 || len >= FILENAME_MAX || (config = 
MT_fopen(buf, "r")) == NULL) {
if (home) {
len = snprintf(buf, sizeof(buf), 
"%s%c.monetdb", home, DIR_SEP);
if (len >= 0 && len < FILENAME_MAX)
-   config = fopen(buf, "r");
+   config = MT_fopen(buf, "r");
}
}
}
-   } else if (*cfile != 0 && (config = fopen(cfile, "r")) == NULL) {
+   } else if (*cfile != 0 && (config = MT_fopen(cfile, "r")) == NULL) {
fprintf(stderr, "failed to open file '%s': %s\n",
cfile, strerror(errno));
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - merged

2021-02-05 Thread Niels Nes
Changeset: 838b6359c17b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=838b6359c17b
Branch: default
Log Message:

merged


diffs (20 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -391,14 +391,14 @@ try_to_mark_deleted_for_destruction(sqls
if (ov->state == deleted) {
ov->state = under_destruction;
 
-   if (!ov->name_based_newer || 
(os_atmc_get_state(ov->name_based_newer) & rollbacked)) {
+   if (!ov->name_based_newer || 
(os_atmc_get_state(ov->name_based_newer) & rollbacked)) { // TODO: This gives 
race conditions with os_rollback.
os_remove_name_based_chain(ov->os, store, 
ov->name_based_head);
}
else {
ov->name_based_newer->name_based_older = NULL;
}
 
-   if (!ov->id_based_newer || 
(os_atmc_get_state(ov->id_based_newer) & rollbacked)) {
+   if (!ov->id_based_newer || 
(os_atmc_get_state(ov->id_based_newer) & rollbacked)) { // TODO: This gives 
race conditions with os_rollback.
os_remove_id_based_chain(ov->os, store, 
ov->id_based_head);
}
else {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - use ATOMIC_PTR_TYPE to make it compile with s...

2021-02-05 Thread Niels Nes
Changeset: 1039153ec2be for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1039153ec2be
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_statement.c
sql/include/sql_catalog.h
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_table.c
sql/storage/store.c
Branch: default
Log Message:

use ATOMIC_PTR_TYPE to make it compile with sanitizer (or optimization I guess)


diffs (truncated from 969 to 300 lines):

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
@@ -1359,7 +1359,7 @@ mvc_insert_delta_values(mvc *m, BAT *col
}
/* compute level using global transaction */
if (c) {
-   for(sql_delta *d = c->data; d; d = d->next)
+   for(sql_delta *d = ATOMIC_PTR_GET(>data); d; d = 
d->next)
level++;
}
if (BUNappend(col7, , false) != GDK_SUCCEED) {
@@ -3823,7 +3823,7 @@ sql_rowid(Client cntxt, MalBlkPtr mb, Ma
if( b == NULL)
throw(SQL,"sql.rowid", SQLSTATE(HY005) "Cannot access column 
descriptor");
/* UGH (move into storage backends!!) */
-   d = c->data;
+   d = ATOMIC_PTR_GET(>data);
*rid = d->ibase + BATcount(b);
BBPunfix(b->batCacheid);
return MAL_SUCCEED;
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -843,7 +843,7 @@ mvc_import_table(Client cntxt, BAT ***ba
for (n = t->columns.set->h, i = 0; n; n = n->next, i++) 
{
sql_column *c = n->data;
BAT *b = 
store->storage_api.bind_col(m->session->tr, c, RDONLY);
-   sql_delta *d = c->data;
+   sql_delta *d = ATOMIC_PTR_GET(>data);
 
if ( b == NULL)
sql_error(m, 500, "failed to bind to 
delta column");
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -429,7 +429,7 @@ stmt_vars(backend *be, const char *varna
return NULL;
}
 
-   t->data = l;
+   ATOMIC_PTR_SET(>data, l);
/*
s->op2 = (stmt*)l;
s->op3 = (stmt*)t;
@@ -532,9 +532,9 @@ stmt_tid(backend *be, sql_table *t, int 
MalBlkPtr mb = be->mb;
InstrPtr q;
 
-   if (!t->s && t->data) { /* declared table */
+   if (!t->s && ATOMIC_PTR_GET(>data)) { /* declared table */
stmt *s = stmt_create(be->mvc->sa, st_tid);
-   int *l = t->data;
+   int *l = ATOMIC_PTR_GET(>data);
 
if (s == NULL) {
return NULL;
@@ -584,9 +584,9 @@ stmt_bat(backend *be, sql_column *c, int
InstrPtr q;
 
/* for read access tid.project(col) */
-   if (!c->t->s && c->t->data) { /* declared table */
+   if (!c->t->s && ATOMIC_PTR_GET(>t->data)) { /* declared table */
stmt *s = stmt_create(be->mvc->sa, st_bat);
-   int *l = c->t->data;
+   int *l = ATOMIC_PTR_GET(>t->data);
 
if (s == NULL) {
return NULL;
@@ -708,8 +708,8 @@ stmt_append_col(backend *be, sql_column 
if (b->nr < 0)
return NULL;
 
-   if (!c->t->s && c->t->data) { /* declared table */
-   int *l = c->t->data;
+   if (!c->t->s && ATOMIC_PTR_GET(>t->data)) { /* declared table */
+   int *l = ATOMIC_PTR_GET(>t->data);
 
if (c->colnr == 0) { /* append to tid column */
q = newStmt(mb, sqlRef, growRef);
@@ -798,8 +798,8 @@ stmt_update_col(backend *be, sql_column 
if (tids->nr < 0 || upd->nr < 0)
return NULL;
 
-   if (!c->t->s && c->t->data) { /* declared table */
-   int *l = c->t->data;
+   if (!c->t->s && ATOMIC_PTR_GET(>t->data)) { /* declared table */
+   int *l = ATOMIC_PTR_GET(>t->data);
 
q = newStmt(mb, batRef, replaceRef);
q = pushArgument(mb, q, l[c->colnr+1]);
@@ -883,8 +883,8 @@ stmt_delete(backend *be, sql_table *t, s
if (tids->nr < 0)
return NULL;
 
-   if (!t->s && t->data) { /* declared table */
-   int *l = t->data;
+   if (!t->s && ATOMIC_PTR_GET(>data)) { /* declared table */
+   int *l = ATOMIC_PTR_GET(>data);
 
q = newStmt(mb, batRef, deleteRef);
q = pushArgument(mb, q, l[0]);
@@ -2968,8 +2968,8 @@ stmt_table_clear(backend *be, sql_table 
MalBlkPtr mb = be->mb;
  

MonetDB: Oct2020 - If the result type of the function is any, ov...

2021-02-05 Thread Pedro Ferreira
Changeset: 29f26ee98e36 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29f26ee98e36
Modified Files:
sql/common/sql_types.c
sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out
sql/test/SQLancer/Tests/sqlancer09.sql
sql/test/SQLancer/Tests/sqlancer10.sql
sql/test/analytics/Tests/analytics02.stable.out
sql/test/analytics/Tests/analytics03.stable.out
sql/test/subquery/Tests/subquery6.stable.out
Branch: Oct2020
Log Message:

If the result type of the function is any, override the output number of digits 
with the input type. But there's another sqlancer bug with cast between strings 
and decimals :(


diffs (119 lines):

diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -569,7 +569,7 @@ sql_dup_subfunc(sql_allocator *sa, sql_f
} else if (r->scale)
scale = r->scale;
}
-   if (member && f->fix_scale == INOUT)
+   if (member && (f->fix_scale == INOUT || 
r->type->eclass == EC_ANY))
digits = member->digits;
if (IS_ANALYTIC(f) && mscale)
scale = mscale;
diff --git 
a/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out 
b/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out
--- a/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out
+++ b/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out
@@ -78,7 +78,7 @@ stdout of test 'outer-join-varchar.Bug-6
 % table_name,  column_name,type,   type_digits # name
 % varchar, varchar,varchar,int # type
 % 6,   4,  7,  2 # length
-[ "dummy6","key",  "varchar",  0   ]
+[ "dummy6","key",  "varchar",  32  ]
 [ "dummy6","val4", "int",  32  ]
 [ "dummy6","val5", "int",  32  ]
 #create table dummy7 as select "key", val as "val4", val as "val5" from dummy4 
natural full outer join dummy5;
@@ -88,7 +88,7 @@ stdout of test 'outer-join-varchar.Bug-6
 % table_name,  column_name,type,   type_digits # name
 % varchar, varchar,varchar,int # type
 % 6,   4,  7,  2 # length
-[ "dummy7","key",  "varchar",  0   ]
+[ "dummy7","key",  "varchar",  32  ]
 [ "dummy7","val4", "int",  32  ]
 [ "dummy7","val5", "int",  32  ]
 #create table dummy8 as select dummy4."key" as "key4", dummy5."key" as "key5", 
dummy4.val as "val4", dummy5.val as "val5" from dummy4 full outer join dummy5 
ON dummy4."key" = dummy5."key";
diff --git a/sql/test/SQLancer/Tests/sqlancer09.sql 
b/sql/test/SQLancer/Tests/sqlancer09.sql
--- a/sql/test/SQLancer/Tests/sqlancer09.sql
+++ b/sql/test/SQLancer/Tests/sqlancer09.sql
@@ -184,7 +184,7 @@ 239480113   NULLNULL
 
 create view v2(vc0, vc1, vc2) as (values (+ 
(0.51506835))&(-2)))<<(scale_down(least(31552,
 0.3), cast(1500294098 as int,
-((- (((44257622)-(0.6>=(least(-15958291, -1534974396))), case - 
(sql_min(0.632858,
+((- (((44257622)-(0.6>=(least(-3, -4))), case - (sql_min(0.632858,
 0.3)) when 0.5)^(0.4)))+(((0.4)/(5
 then sql_max(cast(5293 as decimal), ((0.5)-
 (0.5))) end),(charindex(r'934079707', r'35305325'), not (false),
diff --git a/sql/test/SQLancer/Tests/sqlancer10.sql 
b/sql/test/SQLancer/Tests/sqlancer10.sql
--- a/sql/test/SQLancer/Tests/sqlancer10.sql
+++ b/sql/test/SQLancer/Tests/sqlancer10.sql
@@ -53,6 +53,12 @@ select 1 from v6, v2 join (values (0.54)
 ROLLBACK;
 
 START TRANSACTION;
+create view v3(vc0, vc1) as (values (0.67,NULL),(18.50, 3),(0.70, 6));
+create view v7(vc0) as (values (8505133838.114197),(NULL));
+(select v3.vc0 from v3) intersect (select greatest('-1115800120', v7.vc0) from 
v7);
+ROLLBACK;
+
+START TRANSACTION;
 CREATE TABLE t1(c0 int);
 CREATE VIEW v4(vc0) AS ((SELECT NULL FROM t1 AS l0t1) UNION ALL (SELECT true));
 INSERT INTO t1(c0) VALUES(12), (2), (6), (3), (1321), (10), (8), (1), (2), 
(3), (9);
diff --git a/sql/test/analytics/Tests/analytics02.stable.out 
b/sql/test/analytics/Tests/analytics02.stable.out
--- a/sql/test/analytics/Tests/analytics02.stable.out
+++ b/sql/test/analytics/Tests/analytics02.stable.out
@@ -58,8 +58,8 @@ stdout of test 'analytics02` in director
 % .prepare,.prepare,   .prepare,   .prepare,   .prepare,   
.prepare # table_name
 % type,digits, scale,  schema, table,  column # name
 % varchar, int,int,str,str,str # type
-% 7,   2,  1,  0,  2,  2 # length
-[ "varchar",   0,  0,  "", "%7",   "%7"]
+% 7,   3,  1,  0,  2,  2 # length
+[ "varchar",   64, 0,  "", "%7",   "%7"]
 [ "bigint",64, 0,  NULL,   NULL,   NULL  

MonetDB: default - Add TODO's.

2021-02-05 Thread Aris Koning
Changeset: 1de4923d2c89 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1de4923d2c89
Modified Files:
sql/storage/objectset.c
Branch: default
Log Message:

Add TODO's.


diffs (20 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -391,14 +391,14 @@ try_to_mark_deleted_for_destruction(sqls
if (ov->state == deleted) {
ov->state = under_destruction;
 
-   if (!ov->name_based_newer || 
(os_atmc_get_state(ov->name_based_newer) & rollbacked)) {
+   if (!ov->name_based_newer || 
(os_atmc_get_state(ov->name_based_newer) & rollbacked)) { // TODO: This gives 
race conditions with os_rollback.
os_remove_name_based_chain(ov->os, store, 
ov->name_based_head);
}
else {
ov->name_based_newer->name_based_older = NULL;
}
 
-   if (!ov->id_based_newer || 
(os_atmc_get_state(ov->id_based_newer) & rollbacked)) {
+   if (!ov->id_based_newer || 
(os_atmc_get_state(ov->id_based_newer) & rollbacked)) { // TODO: This gives 
race conditions with os_rollback.
os_remove_id_based_chain(ov->os, store, 
ov->id_based_head);
}
else {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - merged

2021-02-05 Thread Niels Nes
Changeset: a0da4f7ad01f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a0da4f7ad01f
Branch: default
Log Message:

merged


diffs (34 lines):

diff --git a/sql/test/Dependencies/Tests/dependency_DBobjects.test 
b/sql/test/Dependencies/Tests/dependency_DBobjects.test
--- a/sql/test/Dependencies/Tests/dependency_DBobjects.test
+++ b/sql/test/Dependencies/Tests/dependency_DBobjects.test
@@ -298,7 +298,7 @@ DEP_INDEX
 query TTT rowsort
 SELECT c.name, f.name, 'DEP_FUNC' from sys.functions as f, sys.columns as c, 
sys.dependencies as dep where c.id = dep.id AND f.id = dep.depend_id AND 
dep.depend_type = 7 ORDER BY c.name, f.name
 
-372 values hashing to 78fd640e374ca620ee5f10465e0caf4a
+366 values hashing to cccf8f0385098793ac0698438837609a
 
 query TTT rowsort
 SELECT c.name, tri.name, 'DEP_TRIGGER' from sys.columns as c, sys.triggers as 
tri, sys.dependencies as dep where dep.id = c.id AND dep.depend_id =tri.id AND 
dep.depend_type = 8 order by c.name, tri.name
@@ -511,4 +511,3 @@ DROP TABLE t1
 statement ok
 DROP TABLE t3
 
-
diff --git a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test 
b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
--- a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
+++ b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
@@ -190,7 +190,7 @@ SELECT c.name, i.name, 'DEP_INDEX' from 
 query TTT rowsort
 SELECT c.name, f.name, 'DEP_FUNC' from sys.functions as f, sys.columns as c, 
sys.dependencies as dep where c.id = dep.id AND f.id = dep.depend_id AND 
dep.depend_type = 7 ORDER BY c.name, f.name
 
-357 values hashing to 443639bbb626f6beccc4d57730d3beb9
+351 values hashing to 0357ee3f8bc7b05468e46a56d104a4e9
 
 query TTT rowsort
 SELECT c.name, tri.name, 'DEP_TRIGGER' from sys.columns as c, sys.objects as 
tri, sys.dependencies as dep where dep.id = c.id AND dep.depend_id =tri.id AND 
dep.depend_type = 8 order by c.name, tri.name
@@ -325,4 +325,3 @@ query TTT rowsort
 SELECT k.name, fk.name, 'DEP_FKEY' from sys.keys as k, sys.keys as fk where 
fk.rkey = k.id order by k.name, fk.name
 
 
-
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - only try CAS once, incase of persistent delta...

2021-02-05 Thread Niels Nes
Changeset: df149909b644 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=df149909b644
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:

only try CAS once, incase of persistent delta's, ie only first writter should 
succeed.


diffs (142 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -48,6 +48,8 @@ static int tc_gc_col( sql_store Store, s
 static int tc_gc_idx( sql_store Store, sql_change *c, ulng commit_ts, ulng 
oldest);
 static int tc_gc_del( sql_store Store, sql_change *c, ulng commit_ts, ulng 
oldest);
 
+static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
+
 /* used for communication between {append,update}_prepare and 
{append,update}_execute */
 struct prep_exec_cookie {
sql_delta *delta;
@@ -69,8 +71,6 @@ make_cookie(sql_allocator *sa, sql_delta
return cookie;
 }
 
-static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
-
 static sql_delta *
 temp_dup_delta(ulng tid, int type)
 {
@@ -741,6 +741,34 @@ dup_bat(sql_trans *tr, sql_table *t, sql
return dup_delta( tr, obat, bat, type, c_isnew, isTempTable(t), t->sz);
 }
 
+static int
+destroy_delta(sql_delta *b)
+{
+   int ok = LOG_OK;
+
+   if (--b->refcnt > 0)
+   return LOG_OK;
+   if (b->next)
+   ok = destroy_delta(b->next);
+   if (b->name)
+   _DELETE(b->name);
+   if (b->ibid)
+   temp_destroy(b->ibid);
+   if (b->uibid)
+   temp_destroy(b->uibid);
+   if (b->uvbid)
+   temp_destroy(b->uvbid);
+   if (b->bid)
+   temp_destroy(b->bid);
+   if (b->cached)
+   bat_destroy(b->cached);
+   b->bid = b->ibid = b->uibid = b->uvbid = 0;
+   b->name = NULL;
+   b->cached = NULL;
+   _DELETE(b);
+   return ok;
+}
+
 static sql_delta *
 bind_col_data(sql_trans *tr, sql_column *c)
 {
@@ -763,9 +791,13 @@ bind_col_data(sql_trans *tr, sql_column 
if(dup_bat(tr, c->t, obat, bat, c->type.type->localtype, isNew(c)) == 
LOG_ERR)
return NULL;
bat->ts = tr->tid;
-   do {
-   bat->next = obat;
-   } while(!ATOMIC_PTR_CAS(>data, >next, bat));
+   /* only one writer else abort */
+   bat->next = obat;
+   if (!ATOMIC_PTR_CAS(>data, >next, bat)) {
+   bat->next = NULL;
+   destroy_delta(bat);
+   return NULL;
+   }
return bat;
 }
 
@@ -833,9 +865,13 @@ bind_idx_data(sql_trans *tr, sql_idx *i)
if(dup_bat(tr, i->t, obat, bat, (oid_index(i->type))?TYPE_oid:TYPE_lng, 
isNew(i)) == LOG_ERR)
return NULL;
bat->ts = tr->tid;
-   do {
-   bat->next = obat;
-   } while(!ATOMIC_PTR_CAS(>data, >next, bat));
+   /* only one writer else abort */
+   bat->next = obat;
+   if (!ATOMIC_PTR_CAS(>data, >next, bat)) {
+   bat->next = NULL;
+   destroy_delta(bat);
+   return NULL;
+   }
return bat;
 }
 
@@ -1162,9 +1198,13 @@ bind_del_data(sql_trans *tr, sql_table *
bat->refcnt = 1;
dup_dbat(tr, obat, bat, isNew(t), isTempTable(t));
bat->ts = tr->tid;
-   do {
-   bat->next = obat;
-   } while(!ATOMIC_PTR_CAS(>data, >next, bat));
+   /* only one writer else abort */
+   bat->next = obat;
+   if (!ATOMIC_PTR_CAS(>data, >next, bat)) {
+   bat->next = NULL;
+   destroy_dbat(bat);
+   return NULL;
+   }
return bat;
 }
 
@@ -1975,34 +2015,6 @@ log_destroy_delta(sql_trans *tr, sql_del
 }
 
 static int
-destroy_delta(sql_delta *b)
-{
-   int ok = LOG_OK;
-
-   if (--b->refcnt > 0)
-   return LOG_OK;
-   if (b->next)
-   ok = destroy_delta(b->next);
-   if (b->name)
-   _DELETE(b->name);
-   if (b->ibid)
-   temp_destroy(b->ibid);
-   if (b->uibid)
-   temp_destroy(b->uibid);
-   if (b->uvbid)
-   temp_destroy(b->uvbid);
-   if (b->bid)
-   temp_destroy(b->bid);
-   if (b->cached)
-   bat_destroy(b->cached);
-   b->bid = b->ibid = b->uibid = b->uvbid = 0;
-   b->name = NULL;
-   b->cached = NULL;
-   _DELETE(b);
-   return ok;
-}
-
-static int
 destroy_col(sqlstore *store, sql_column *c)
 {
(void)store;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Oct2020 - When computing the resulting decimal type, do...

2021-02-05 Thread Pedro Ferreira
Changeset: 084cd72813c8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=084cd72813c8
Modified Files:
sql/server/sql_semantic.c
sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: Oct2020
Log Message:

When computing the resulting decimal type, don't upcast to largest available 
every time


diffs (91 lines):

diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -185,14 +185,14 @@ result_datatype(sql_subtype *super, sql_
char *tpe = "varchar";
unsigned int digits = 0;
if (!EC_VARCHAR(lclass)) {
-   tpe = r->type->sqlname;
-   digits = (!l->digits)?0:r->digits;
+   tpe = r->type->sqlname;
+   digits = (!l->digits)?0:r->digits;
} else if (!EC_VARCHAR(rclass)) {
-   tpe = l->type->sqlname;
-   digits = (!r->digits)?0:l->digits;
+   tpe = l->type->sqlname;
+   digits = (!r->digits)?0:l->digits;
} else { /* both */
-   tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
-   digits = 
(!l->digits||!r->digits)?0:sql_max(l->digits, r->digits);
+   tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
+   digits = (!l->digits||!r->digits)?0:sql_max(l->digits, 
r->digits);
}
sql_find_subtype(super, tpe, digits, 0);
/* case b blob */
@@ -206,30 +206,38 @@ result_datatype(sql_subtype *super, sql_
char *tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
unsigned int digits = sql_max(l->digits, r->digits);
unsigned int scale = sql_max(l->scale, r->scale);
-   if (l->type->radix == 10 || r->type->radix == 10) {
-   digits = 0;
-   /* change to radix 10 */
-   if (l->type->radix == 2 && r->type->radix == 10) {
-   digits = bits2digits(l->type->digits);
-   digits = sql_max(r->digits, digits);
-   scale = r->scale;
-   } else if (l->type->radix == 10 && r->type->radix == 2) 
{
-   digits = bits2digits(r->type->digits);
-   digits = sql_max(l->digits, digits);
-   scale = l->scale;
+
+   if (l->type->radix == 10 && r->type->radix == 10) {
+   digits = scale + (sql_max(l->digits - l->scale, 
r->digits - r->scale));
+#ifdef HAVE_HGE
+   if (digits > 39) {
+   digits = 39;
+#else
+   if (digits > 19) {
+   digits = 19;
+#endif
+   scale = MIN(scale, digits - 1);
}
+   } else if (l->type->radix == 2 && r->type->radix == 10) { /* 
change to radix 10 */
+   digits = bits2digits(l->type->digits);
+   digits = sql_max(r->digits, digits);
+   scale = r->scale;
+   } else if (l->type->radix == 10 && r->type->radix == 2) { /* 
change to radix 10 */
+   digits = bits2digits(r->type->digits);
+   digits = sql_max(l->digits, digits);
+   scale = l->scale;
}
sql_find_subtype(super, tpe, digits, scale);
/* case d approximate numeric */
} else if (EC_APPNUM(lclass) || EC_APPNUM(rclass)) {
if (!EC_APPNUM(lclass)) {
-   *super = *r;
+   *super = *r;
} else if (!EC_APPNUM(rclass)) {
-   *super = *l;
+   *super = *l;
} else { /* both */
-   char *tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
-   unsigned int digits = sql_max(l->digits, 
r->digits); /* bits precision */
-   sql_find_subtype(super, tpe, digits, 0);
+   char *tpe = (l->type->base.id > 
r->type->base.id)?l->type->sqlname:r->type->sqlname;
+   unsigned int digits = sql_max(l->digits, r->digits); /* 
bits precision */
+   sql_find_subtype(super, tpe, digits, 0);
}
/* now its getting serious, ie e any 'case e' datetime data type */
/* 'case f' interval types */
diff --git a/sql/test/miscellaneous/Tests/simple_selects.stable.out 

MonetDB: default - small cleanup and initial atomics

2021-02-05 Thread Niels Nes
Changeset: 70ff34dcd93c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=70ff34dcd93c
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:

small cleanup and initial atomics


diffs (282 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -11,6 +11,8 @@
 #include "bat_utils.h"
 #include "sql_string.h"
 #include "gdk_atoms.h"
+#include "gdk_atoms.h"
+#include "matomic.h"
 
 /*
  * The sql data is stored using 2 structure
@@ -96,17 +98,6 @@ temp_delta(sql_delta *d, ulng tid)
return d;
 }
 
-static sql_delta *
-get_delta(sql_delta *d, ulng tid, int type, int is_temp)
-{
-   if (is_temp) {
-   d = temp_delta(d, tid);
-   if (!d)
-   return temp_dup_delta(tid, type);
-   }
-   return d;
-}
-
 static sql_dbat *
 temp_dup_dbat(ulng tid)
 {
@@ -129,85 +120,87 @@ temp_dbat(sql_dbat *d, ulng tid)
return d;
 }
 
-static sql_dbat *
-get_dbat(sql_dbat *d, ulng tid, int is_temp)
+static sql_delta *
+timestamp_delta( sql_trans *tr, sql_delta *d)
 {
-   if (is_temp) {
-   d = temp_dbat(d, tid);
-   if (!d)
-   return temp_dup_dbat(tid);
-   }
+   while (d->next && d->ts != tr->tid && (!tr->parent || 
!tr_version_of_parent(tr, d->ts)) && d->ts > tr->ts)
+   d = d->next;
return d;
 }
 
 static sql_delta *
-timestamp_delta( sql_trans *tr, sql_delta *d, int type, int is_temp)
+temp_col_timestamp_delta( sql_trans *tr, sql_column *c)
 {
-   assert(!is_temp);
-   if (is_temp)
-   return get_delta(d, tr->tid, type, is_temp);
-   while (d->next && d->ts != tr->tid && (!tr->parent || 
!tr_version_of_parent(tr, d->ts)) && d->ts > tr->ts)
-   d = d->next;
+   assert(isTempTable(c->t));
+   sql_delta *d = temp_delta(c->data, tr->tid);
+   if (!d) {
+   d = temp_dup_delta(tr->tid, c->type.type->localtype);
+   do {
+   d->next = c->data;
+   } while(!ATOMIC_PTR_CAS(>data, >next, d)); /* set c->data 
= d, when c->data == d->next else d->next = c->data */
+   }
return d;
 }
 
 sql_delta *
 col_timestamp_delta( sql_trans *tr, sql_column *c)
 {
-   int is_temp = isTempTable(c->t);
-   if (is_temp) {
-   sql_delta *d = temp_delta(c->data, tr->tid);
-   if (!d) {
-   d = temp_dup_delta(tr->tid, c->type.type->localtype);
-   d->next = c->data;
-   c->data = d;
-   }
-   return d;
+   if (isTempTable(c->t))
+   return temp_col_timestamp_delta(tr, c);
+   return timestamp_delta( tr, c->data);
+}
+
+static sql_delta *
+temp_idx_timestamp_delta( sql_trans *tr, sql_idx *i)
+{
+   assert(isTempTable(i->t));
+   sql_delta *d = temp_delta(i->data, tr->tid);
+   if (!d) {
+   int type = oid_index(i->type)?TYPE_oid:TYPE_lng;
+   d = temp_dup_delta(tr->tid, type);
+   do {
+   d->next = i->data;
+   } while(!ATOMIC_PTR_CAS(>data, >next, d)); /* set i->data 
= d, when i->data == d->next else d->next = i->data */
}
-   return timestamp_delta( tr, c->data, c->type.type->localtype, is_temp);
+   return d;
 }
 
 static sql_delta *
 idx_timestamp_delta( sql_trans *tr, sql_idx *i)
 {
-   int type = oid_index(i->type)?TYPE_oid:TYPE_lng;
-   int is_temp = isTempTable(i->t);
-   if (is_temp) {
-   sql_delta *d = temp_delta(i->data, tr->tid);
-   if (!d) {
-   d = temp_dup_delta(tr->tid, type);
-   d->next = i->data;
-   i->data = d;
-   }
-   return d;
-   }
-   return timestamp_delta( tr, i->data, type, is_temp);
+   if (isTempTable(i->t))
+   return temp_idx_timestamp_delta(tr, i);
+   return timestamp_delta( tr, i->data);
 }
 
 static sql_dbat *
-timestamp_dbat( sql_trans *tr, sql_dbat *d, int is_temp)
+timestamp_dbat( sql_trans *tr, sql_dbat *d)
 {
-   if (is_temp)
-   return get_dbat(d, tr->tid, is_temp);
while (d->next && d->ts != tr->tid && (!tr->parent || 
!tr_version_of_parent(tr, d->ts)) && d->ts > tr->ts)
d = d->next;
return d;
 }
 
 static sql_dbat *
+temp_tab_timestamp_dbat( sql_trans *tr, sql_table *t)
+{
+   assert(isTempTable(t));
+   sql_dbat *d = temp_dbat(t->data, tr->tid);
+   if (!d) {
+   d = temp_dup_dbat(tr->tid);
+   do {
+   d->next = t->data;
+   } while(!ATOMIC_PTR_CAS(>data, >next, d)); /* set t->data 
= d, when t->data == d->next else d->next = t->data */
+   }
+   return d;
+}
+
+static sql_dbat *
 tab_timestamp_dbat( 

MonetDB: default - Fix read-after-free.

2021-02-05 Thread Aris Koning
Changeset: cd781d43018f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cd781d43018f
Modified Files:
sql/storage/objectset.c
Branch: default
Log Message:

Fix read-after-free.


diffs (60 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -391,14 +391,14 @@ try_to_mark_deleted_for_destruction(sqls
if (ov->state == deleted) {
ov->state = under_destruction;
 
-   if (!ov->name_based_newer) {
+   if (!ov->name_based_newer || 
(os_atmc_get_state(ov->name_based_newer) & rollbacked)) {
os_remove_name_based_chain(ov->os, store, 
ov->name_based_head);
}
else {
ov->name_based_newer->name_based_older = NULL;
}
 
-   if (!ov->id_based_newer) {
+   if (!ov->id_based_newer || 
(os_atmc_get_state(ov->id_based_newer) & rollbacked)) {
os_remove_id_based_chain(ov->os, store, 
ov->id_based_head);
}
else {
@@ -713,16 +713,16 @@ os_add_name_based(objectset *os, struct 
bte state = os_atmc_get_state(oo);
if (state != active) {
// This can only happen if the parent oo was a comitted 
deleted at some point.
-   assert(state == deleted || state == under_destruction);
+   assert(state == deleted || state == under_destruction 
|| state == under_resurrection);
/* Since our parent oo is comitted deleted 
objectversion, we might have a conflict with
-   * another transaction that tries to clean up oo.
+   * another transaction that tries to clean up oo or also 
wants to add a new objectversion.
*/
//TODO ATOMIC CAS
if (oo->state == deleted) {
oo->state = under_resurrection;
}
else {
-   return -1; /*conflict with cleaner*/
+   return -1; /*conflict with cleaner or 
write-write conflict*/
}
// END ATOMIC CAS
}
@@ -771,16 +771,16 @@ os_add_id_based(objectset *os, struct sq
bte state = oo->state;
if (state != active) {
// This can only happen if the parent oo was a comitted 
deleted at some point.
-   assert(state == deleted || state == under_destruction);
+   assert(state == deleted || state == under_destruction 
|| state == under_resurrection);
/* Since our parent oo is comitted deleted 
objectversion, we might have a conflict with
-   * another transaction that tries to clean up oo.
+   * another transaction that tries to clean up oo or also 
wants to add a new objectversion.
*/
//TODO ATOMIC CAS
if (oo->state == deleted) {
oo->state = under_resurrection;
}
else {
-   return -1; /*conflict with cleaner*/
+   return -1; /*conflict with cleaner or 
write-write conflict*/
}
// END ATOMIC CAS
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Re-converted test. Use right type for floatin...

2021-02-05 Thread Pedro Ferreira
Changeset: 4bf986377bfa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4bf986377bfa
Modified Files:
sql/backends/monet5/generator/Tests/generator02.test
Branch: default
Log Message:

Re-converted test. Use right type for floating-points


diffs (62 lines):

diff --git a/sql/backends/monet5/generator/Tests/generator02.test 
b/sql/backends/monet5/generator/Tests/generator02.test
--- a/sql/backends/monet5/generator/Tests/generator02.test
+++ b/sql/backends/monet5/generator/Tests/generator02.test
@@ -9,16 +9,16 @@ 6.400
 8.000
 9.600
 
-query T rowsort
+query R rowsort
 select * from generate_series(cast(0.0 as real),cast(10.0 as real),cast(1.6 as 
real))
 
-0.0
-1.6
-3.2
-4.8
-6.4
-8.0
-9.6
+0.000
+1.600
+3.200
+4.800
+6.400
+8.000
+9.600
 
 query R rowsort
 select * from generate_series(cast(0.0 as double),cast(10.0 as 
double),cast(1.6 as double))
@@ -50,13 +50,13 @@ 0.100
 1.870
 3.640
 
-query T rowsort
+query R rowsort
 select * from generate_series(cast(0.1 as real),cast(10.0 as real),cast(1.77 
as real))
 where value <5.0
 
-0.1
-1.87
-3.639
+0.100
+1.870
+3.640
 
 query R rowsort
 select * from generate_series(cast(0.1 as double),cast(10.0 as 
double),cast(1.77 as double))
@@ -81,12 +81,12 @@ where value <7.0 and value >3.0
 4.000
 5.900
 
-query T rowsort
+query R rowsort
 select * from generate_series(cast(0.2 as real),cast(10.0 as real),cast(1.9 as 
real)) as v
 where value <7.0 and value >3.0
 
-4.0
-5.896
+4.000
+5.900
 
 query R rowsort
 select * from generate_series(cast(0.2 as double),cast(10.0 as 
double),cast(1.9 as double)) as v
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list