MonetDB: Oct2020 - Real fix for SQLancer bug, add missing 'key' ...

2021-01-04 Thread Pedro Ferreira
Changeset: 045d372a3f76 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=045d372a3f76
Modified Files:
sql/backends/monet5/sql_statement.c
sql/test/SQLancer/Tests/sqlancer09.sql
Branch: Oct2020
Log Message:

Real fix for SQLancer bug, add missing 'key' property set for statements 
generated from comparisons, as they are now allowed in projections


diffs (39 lines):

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
@@ -1406,6 +1406,7 @@ stmt_genselect(backend *be, stmt *lops, 
s->op1 = lops;
s->op2 = rops;
s->op3 = sub;
+   s->key = lops->nrcols == 0 && rops->nrcols == 0;
s->flag = cmp_filter;
s->nrcols = lops->nrcols;
s->nr = getDestVar(q);
@@ -1570,6 +1571,7 @@ stmt_uselect(backend *be, stmt *op1, stm
s->op2 = op2;
s->op3 = sub;
s->flag = cmptype;
+   s->key = op1->nrcols == 0 && op2->nrcols == 0;
s->nrcols = op1->nrcols;
s->nr = getDestVar(q);
s->q = q;
@@ -1823,6 +1825,7 @@ stmt_uselect2(backend *be, stmt *op1, st
s->op4.stval = sub;
s->flag = cmp;
s->nrcols = op1->nrcols;
+   s->key = op1->nrcols == 0 && op2->nrcols == 0 && op3->nrcols == 
0;
s->nr = getDestVar(q);
s->q = q;
s->cand = sub;
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
@@ -90,6 +90,8 @@ WHEN TRUE THEN 1702709680 WHEN r'TRUE' T
 WHEN (UUID 'baF49A5B-1862-19aa-E6F8-b3C5A7F4b1FF') BETWEEN SYMMETRIC (UUID 
'63A9aBBe-87b1-683a-2c68-eCd5cC7FE7E9') 
 AND (UUID '82eb84EF-dF3D-a45e-f92b-E42BdfFEB1B9') THEN - (1129823324) END) 
WHEN MATCHED THEN DELETE;
 
+create or replace view v0(vc0) as (values (1 between 1 and 2));
+
 SELECT 1 FROM (SELECT 1 FROM v0) AS v0(v0) inner join t1 ON 1 BETWEEN 2 AND 1;
 -- Disable rel_simplify_ifthenelse optimizer
 SELECT 1 FROM (SELECT 1 FROM v0) AS v0(v0) inner join t1 ON 1 BETWEEN 2 AND 
(CASE WHEN 1 BETWEEN 2 AND 3 THEN 2 END);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - make sure we don't return deleted objects

2021-01-04 Thread Niels Nes
Changeset: ce563fff6122 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce563fff6122
Modified Files:
sql/server/sql_semantic.c
Branch: nospare
Log Message:

make sure we don't return deleted objects


diffs (107 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
@@ -308,7 +308,7 @@ sql_find_func_internal(mvc *sql, list *f
for (; he; he = he->chain) {
sql_func *f = he->value;
 
-   if (f->type != type && f->type != filt)
+   if (f->base.deleted || (f->type != type && 
f->type != filt))
continue;
if ((res = func_cmp(sql->sa, f, fname, nrargs)) 
!= NULL) {
MT_lock_unset(>ht_lock);
@@ -327,7 +327,7 @@ sql_find_func_internal(mvc *sql, list *f
for (; n; n = n->next) {
sql_func *f = n->data;
 
-   if (f->type != type && f->type != filt)
+   if (f->base.deleted || (f->type != type && 
f->type != filt))
continue;
if ((res = func_cmp(sql->sa, f, fname, nrargs)) 
!= NULL)
return res;
@@ -397,7 +397,7 @@ sql_bind_member_internal(mvc *sql, list 
for (; n; n = n->next) {
sql_func *f = n->data;
 
-   if (!f->res && !IS_FILT(f))
+   if (f->base.deleted || (!f->res && !IS_FILT(f)))
continue;
if (strcmp(f->base.name, fname) == 0 && f->type == type 
&& list_length(f->ops) == nrargs) {
sql_subtype *ft = &((sql_arg *) 
f->ops->h->data)->type;
@@ -466,7 +466,6 @@ sql_bind_func__(mvc *sql, list *ff, cons
 
if (ff) {
node *n;
-   //for (node *n = ff->h; n; n = n->next) {
sql_base_loop( ff, n) {
sql_func *f = n->data;
 
@@ -504,8 +503,9 @@ sql_bind_func_result_internal(mvc *sql, 
 {
sql_subtype *tp = sql_bind_localtype("bit");
 
-   if (ff)
-   for (node *n = ff->h; n; n = n->next) {
+   if (ff) {
+   node *n;
+   sql_base_loop( ff, n) {
sql_func *f = n->data;
sql_arg *firstres = NULL;
 
@@ -515,6 +515,7 @@ sql_bind_func_result_internal(mvc *sql, 
if (strcmp(f->base.name, fname) == 0 && f->type == type 
&& (is_subtype(>type, res) || firstres->type.type->eclass == EC_ANY) 
&& list_cmp(f->ops, ops, (fcmp) _subtype_cmp) == 0)
return (type == F_AGGR) ? _dup_subaggr(sql->sa, 
f, NULL) : sql_dup_subfunc(sql->sa, f, ops, NULL);
}
+   }
return NULL;
 }
 
@@ -562,8 +563,9 @@ sql_resolve_function_with_undefined_para
 {
sql_ftype filt = (type == F_FUNC)?F_FILT:type;
 
-   if (ff)
-   for (node *n = ff->h; n; n = n->next) {
+   if (ff) {
+   node *n;
+   sql_base_loop( ff, n) {
sql_func *f = n->data;
 
if (f->type != type && f->type != filt)
@@ -573,6 +575,7 @@ sql_resolve_function_with_undefined_para
return (type == F_AGGR) ? 
_dup_subaggr(sql->sa, f, NULL) : sql_dup_subfunc(sql->sa, f, ops, NULL);
}
}
+   }
return NULL;
 }
 
@@ -610,7 +613,7 @@ sql_find_funcs_internal(mvc *sql, list *
for (sql_hash_e *he = 
ff->ht->buckets[key&(ff->ht->size-1)]; he; he = he->chain) {
sql_func *f = he->value;
 
-   if (f->type != type && f->type != filt)
+   if (f->base.deleted || (f->type != type && 
f->type != filt))
continue;
if ((fres = func_cmp(sql->sa, f, fname, nrargs 
)) != NULL) {
if (!res)
@@ -619,7 +622,8 @@ sql_find_funcs_internal(mvc *sql, list *
}
}
} else {
-   for (node *n = ff->h; n; n = n->next) {
+   node *n;
+   sql_base_loop( ff, n) {
sql_func *f = n->data;
 
if (f->type != type && f->type != filt)
@@ -677,7 +681,8 @@ sql_find_funcs_by_name_internal(mvc *sql
}
}
} else {
-   for (node *n = ff->h; n; n = n->next) {
+   node *n;
+   

MonetDB: nospare - make sure the old also doesn't point back to ...

2021-01-04 Thread Niels Nes
Changeset: 6c419aa67036 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6c419aa67036
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

make sure the old also doesn't point back to the removed (rollback-ed) object


diffs (12 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -225,6 +225,8 @@ base_destroy(sqlstore *store, sql_base *
if (older && commit_ts) {
base_destroy(store, older, commit_ts, l1, l2);
older = NULL;
+   } else if (older) {
+   older->newer = newer;
}
b->older = NULL;
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Oct2020 - A projection may not have a left relation

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

A projection may not have a left relation


diffs (13 lines):

diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -159,7 +159,8 @@ rel_copy(mvc *sql, sql_rel *i, int deep)
break;
case op_project:
case op_groupby:
-   rel->l = rel_copy(sql, i->l, deep);
+   if (i->l)
+   rel->l = rel_copy(sql, i->l, deep);
if (i->r) {
if (!deep) {
rel->r = list_dup(i->r, (fdup) NULL);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - handling temp's

2021-01-04 Thread Niels Nes
Changeset: 0ac105cce932 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0ac105cce932
Modified Files:
sql/backends/monet5/sql_scenario.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

handling temp's


diffs (139 lines):

diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -244,6 +244,8 @@ SQLprepareClient(Client c, int login)
goto bailout;
}
} else {
+   assert(0);
+#if 0
be = c->sqlcontext;
m = be->mvc;
/* Only reset if there is no active transaction which
@@ -256,6 +258,7 @@ SQLprepareClient(Client c, int login)
goto bailout;
}
backend_reset(be);
+#endif
}
if (m->session->tr)
reset_functions(m->session->tr);
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -448,6 +448,7 @@ extern void sql_trans_drop_obj_priv(sql_
 typedef struct sqlstore {
int catalog_version;/* software version of the catalog */
sql_catalog *cat;   /* the catalog of persistent tables 
(what to do with tmp tables ?) */
+   sql_schema *tmp;/* keep pointer to default (empty) tmp 
schema */
MT_Lock lock;   /* lock protecting concurrent writes 
(not reads, ie use rcu) */
list *active;   /* list of running transactions */
ATOMIC_TYPE nr_active;  /* count number of transactions */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2161,6 +2161,7 @@ store_load(sqlstore *store, sql_allocato
p = s;
/* now the same tables for temporaries */
s = bootstrap_create_schema(tr, "tmp", ROLE_SYSADMIN, 
USER_MONETDB);
+   store->tmp = s;
} else {
s = NULL;
}
@@ -3476,26 +3477,6 @@ sql_trans_rollback(sql_trans *tr)
list_destroy(tr->changes);
tr->changes = NULL;
}
-   /*
-   for (node *n = tr->cat->schemas.set->h; n; ) {
-   node *nxt = n->next;
-   sql_schema *s = n->data;
-
-   if (s != tr->tmp)
-   cs_del(>cat->schemas, n, s->base.flags);
-   else {
-   n->data = NULL;
-   list_remove_node(tr->cat->schemas.set, n);
-   }
-   n = nxt;
-   }
-   list_destroy(tr->cat->schemas.dset);
-   tr->cat->schemas.dset=NULL;
-   if (tr->moved_tables) {
-   list_destroy(tr->moved_tables);
-   tr->moved_tables = NULL;
-   }
-   */
 }
 
 sql_trans *
@@ -3532,7 +3513,8 @@ sql_trans_create_(sqlstore *store, sql_t
tr->cat = store->cat;
if (!tr->cat)
store->cat = tr->cat = SA_ZNEW(tr->sa, sql_catalog);
-   tr->tmp = find_sql_schema(tr, "tmp");
+   //tr->tmp = find_sql_schema(tr, "tmp");
+   tr->tmp = store->tmp;
tr->parent = parent;
TRC_DEBUG(SQL_STORE, "New transaction: %p\n", tr);
return tr;
@@ -5092,16 +5074,19 @@ sql_trans_drop_table(sql_trans *tr, sql_
if (sys_drop_table(tr, t, drop_action))
return -1;
 
-   sql_table *dt = SA_ZNEW(tr->sa, sql_table);
-   *dt = *t;
-   dt->base.ts = tr->tid;
-   dt->base.deleted = 1;
-   dt->base.older = >base;
-   t->base.newer = >base;
-   trans_add(tr, >base, dt->data, _gc_table, _log_table);
-   list_update_data(s->tables.set, n, dt);
+   if (isTempTable(t)) {
+   cs_del(>tables, n, t->base.flags);
+   } else {
+   sql_table *dt = SA_ZNEW(tr->sa, sql_table);
+   *dt = *t;
+   dt->base.ts = tr->tid;
+   dt->base.deleted = 1;
+   dt->base.older = >base;
+   t->base.newer = >base;
+   trans_add(tr, >base, dt->data, _gc_table, _log_table);
+   list_update_data(s->tables.set, n, dt);
//n->data = dt;
-   //cs_del(>tables, n, t->base.flags);
+   }
 
/* todo use changes list instead of dropped and moved_tables */
if (drop_action == DROP_CASCADE_START && tr->dropped) {
@@ -6134,16 +6119,6 @@ sql_session_reset(sql_session *s, int ac
if (!s->tr || !def_schema_name)
return 0;
 
-   /*
-   if (s->tr->tmp && s->tr->tmp->tables.set) {
-   for (node *n = s->tr->tmp->tables.set->h; n; n = n->next) {
-   sql_table *t = n->data;
-
-   if (isGlobal(t) && isKindOfTable(t))
-   

MonetDB: nospare - handle truncate

2021-01-04 Thread Niels Nes
Changeset: 5c88a2c664c8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5c88a2c664c8
Modified Files:
sql/backends/monet5/sql.c
sql/include/sql_catalog.h
sql/storage/bat/bat_storage.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

handle truncate


diffs (truncated from 380 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
@@ -1443,7 +1443,7 @@ mvc_delta_values(Client cntxt, MalBlkPtr
 
if (nrows) {
if (tname) {
-   cleared = (t->cleared != 0);
+   cleared = 0;//(t->cleared != 0);
deletes = (lng) 
store->storage_api.count_del(m->session->tr, t);
if (cname) {
if ((msg=mvc_insert_delta_values(m, col1, col2, 
col3, col4, col5, col6, col7, c, cleared, deletes)) != NULL)
@@ -1459,7 +1459,7 @@ mvc_delta_values(Client cntxt, MalBlkPtr
for (n = s->tables.set->h; n ; n = n->next) {
t = (sql_table *) n->data;
if (isTable(t)) {
-   cleared = (t->cleared != 0);
+   cleared = 0;//(t->cleared != 0);
deletes = (lng) 
store->storage_api.count_del(m->session->tr, t);
 
for (node *nn = t->columns.set->h; nn ; 
nn = nn->next) {
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -666,7 +666,6 @@ typedef struct sql_table {
list *members;
int drop_action;/* only needed for alter drop table */
 
-   int cleared;/* cleared in the current transaction */
void *data;
struct sql_schema *s;
struct sql_table *po;   /* the outer transactions table */
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
@@ -21,10 +21,6 @@ static int tc_gc_del( sqlstore *store, s
 
 static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
 
-static MT_Lock destroy_lock = MT_LOCK_INITIALIZER(destroy_lock);
-sql_dbat *tobe_destroyed_dbat = NULL;
-sql_delta *tobe_destroyed_delta = NULL;
-
 sql_delta *
 timestamp_delta( sql_trans *tr, sql_delta *d)
 {
@@ -1846,17 +1842,6 @@ static int
 cleanup(void)
 {
int ok = LOG_OK;
-
-   MT_lock_set(_lock);
-   if (tobe_destroyed_delta) {
-   ok = destroy_bat(tobe_destroyed_delta);
-   tobe_destroyed_delta = NULL;
-   }
-   if (ok == LOG_OK && tobe_destroyed_dbat) {
-   ok = destroy_dbat(NULL, tobe_destroyed_dbat);
-   tobe_destroyed_dbat = NULL;
-   }
-   MT_lock_unset(_lock);
return ok;
 }
 
@@ -1942,9 +1927,7 @@ clear_delta(sql_trans *tr, sql_delta *ba
if (bat->bid) {
b = temp_descriptor(bat->bid);
if (b) {
-   assert(!isEbat(b));
sz += BATcount(b);
-   /* for transactions we simple switch to ibid only */
temp_destroy(bat->bid);
bat->bid = 0;
bat_destroy(b);
@@ -1979,10 +1962,12 @@ clear_delta(sql_trans *tr, sql_delta *ba
 static BUN
 clear_col(sql_trans *tr, sql_column *c)
 {
-   sql_delta *delta;
+   sql_delta *delta, *odelta = c->data;
 
if ((delta = bind_col_data(tr, c)) == NULL)
return BUN_NONE;
+   if (delta && !inTransaction(tr, c->t) && odelta != delta)
+   trans_add(tr, >base, delta, _gc_col, _update_col);
if (delta)
return clear_delta(tr, delta);
return 0;
@@ -1991,12 +1976,14 @@ clear_col(sql_trans *tr, sql_column *c)
 static BUN
 clear_idx(sql_trans *tr, sql_idx *i)
 {
-   sql_delta *delta;
+   sql_delta *delta, *odelta = i->data;
 
if (!isTable(i->t) || (hash_index(i->type) && list_length(i->columns) 
<= 1) || !idx_has_column(i->type))
return 0;
if ((delta = bind_idx_data(tr, i)) == NULL)
return BUN_NONE;
+   if (delta && !inTransaction(tr, i->t) && odelta != delta)
+   trans_add(tr, >base, delta, _gc_idx, _update_idx);
if (delta)
return clear_delta(tr, delta);
return 0;
@@ -2031,15 +2018,50 @@ clear_dbat(sql_trans *tr, sql_dbat *bat)
 static BUN
 clear_del(sql_trans *tr, sql_table *t)
 {
-   sql_dbat *bat;
+   sql_dbat *bat, *obat = t->data;
 
if ((bat = bind_del_data(tr, t)) == NULL)
return BUN_NONE;
+
+   if (!inTransaction(tr, t) && obat != bat)
+   trans_add(tr, >base, bat, _gc_del, _update_del);
return 

MonetDB: copybinary - Merge branch 'default' into 'copybinary'

2021-01-04 Thread Joeri van Ruth
Changeset: be48d737fb56 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=be48d737fb56
Modified Files:
clients/Tests/exports.stable.out
clients/mapiclient/mhelp.c
common/stream/stream.h
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
sql/backends/monet5/sql.c
sql/server/rel_updates.c
sql/server/sql_parser.y
sql/storage/bat/bat_storage.c
sql/storage/store.c
testing/sqltest.py
Branch: copybinary
Log Message:

Merge branch 'default' into 'copybinary'


diffs (truncated from 4590 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -187,6 +187,8 @@ need this package, but you will also nee
 package, and most likely also %{name}-SQL-server5, as well as one or
 more client packages.
 
+%ldconfig_scriptlets
+
 %files
 %license COPYING
 %defattr(-,root,root)
@@ -572,6 +574,7 @@ used from the MAL level.
 %files -n MonetDB5-server-devel
 %defattr(-,root,root)
 %{_includedir}/monetdb/mal*.h
+%{_includedir}/monetdb/mel.h
 %{_libdir}/libmonetdb5.so
 %{_libdir}/pkgconfig/monetdb5.pc
 
@@ -635,6 +638,24 @@ configuration.
 %docdir %{_datadir}/doc/MonetDB-SQL
 %{_datadir}/doc/MonetDB-SQL/*
 
+%package SQL-server5-devel
+Summary: MonetDB5 SQL server modules
+Group: Applications/Databases
+Requires: %{name}-SQL-server5%{?_isa} = %{version}-%{release}
+Requires: MonetDB5-server-devel%{?_isa} = %{version}-%{release}
+
+%description SQL-server5-devel
+MonetDB is a database management system that is developed from a
+main-memory perspective with use of a fully decomposed storage model,
+automatic index management, extensibility of data types and search
+accelerators.  It also has an SQL front end.
+
+This package contains files needed to develop SQL extensions.
+
+%files SQL-server5-devel
+%defattr(-,root,root)
+%{_includedir}/monetdb/sql*.h
+
 %package embedded
 Summary: MonetDB as an embedded library
 Group: Applications/Databases
@@ -847,10 +868,6 @@ sed -i 's|/var/run|/run|' \
 %{buildroot}%{_unitdir}/monetdbd.service
 %endif
 
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
 %changelog
 * Wed Nov 18 2020 Sjoerd Mullender  - 11.39.7-20201118
 - Rebuilt.
diff --git a/NT/mksqlwxs.py b/NT/mksqlwxs.py
--- a/NT/mksqlwxs.py
+++ b/NT/mksqlwxs.py
@@ -173,9 +173,10 @@ def main():
 print(r'')
 print(r'  ')
 id = comp(extend, id, 16,
-  sorted([r'include\monetdb\{}'.format(x) for x in filter(lambda 
x: (x.startswith('gdk') or x.startswith('monet') or x.startswith('mal')) and 
x.endswith('.h'), os.listdir(os.path.join(sys.argv[3], 'include', 'monetdb')))] 
+
+  sorted([r'include\monetdb\{}'.format(x) for x in filter(lambda 
x: (x.startswith('gdk') or x.startswith('monet') or x.startswith('mal') or 
x.startswith('sql')) and x.endswith('.h'), os.listdir(os.path.join(sys.argv[3], 
'include', 'monetdb')))] +
  [r'include\monetdb\mapi.h',
   r'include\monetdb\matomic.h',
+  r'include\monetdb\mel.h',
   r'include\monetdb\mstring.h',
   r'include\monetdb\stream.h',
   r'include\monetdb\stream_socket.h']),
diff --git a/buildtools/coverity_model.c b/buildtools/coverity_model.c
--- a/buildtools/coverity_model.c
+++ b/buildtools/coverity_model.c
@@ -20,8 +20,13 @@
  * author: Sjoerd Mullender
  */
 
+int
+rand(void)
+{
+   /* ignore */
+}
+
 typedef enum { GDK_FAIL, GDK_SUCCEED } gdk_return;
-typedef struct {} *MalBlkPtr;
 
 void
 GDKfree(void *blk)
@@ -51,7 +56,8 @@ GDKzalloc(size_t size)
 {
void *p = GDKmalloc(size);
if (p) {
-   for (size_t i = 0; i < size; i++)
+   size_t i;
+   for (i = 0; i < size; i++)
((char *) p)[i] = 0;
}
return p;
@@ -136,6 +142,24 @@ GDKmremap(const char *path, int mode, vo
return p;
 }
 
+typedef struct {} *MalBlkPtr;
+enum malexception {
+   MAL,
+   ILLARG /*,
+   OUTOFBNDS,
+   IO,
+   INVCRED,
+   OPTIMIZER,
+   STKOF,
+   SYNTAX,
+   TYPE,
+   LOADER,
+   PARSE,
+   ARITH,
+   PERMD,
+   SQL */
+};
+
 char *
 createException(enum malexception type, const char *fcn, const char *format, 
...)
 {
@@ -177,8 +201,8 @@ freeException(char *p)
 char *
 concatErrors(char *err1, const char *err2)
 {
+   char *p;
freeException(err1);
-   char *p;
p = __coverity_alloc_nosize__();
__coverity_mark_as_afm_allocated__(p, "freeException");
return p;
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
@@ -1307,7 +1307,7 @@ str io_stdin(Client cntxt, MalBlkPtr mb,
 str io_stdout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 int isBlocking(InstrPtr p);
 int 

MonetDB: nospare - added more cleanup code

2021-01-04 Thread Niels Nes
Changeset: 6c7ee21b1d97 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6c7ee21b1d97
Modified Files:
sql/server/sql_semantic.c
sql/storage/store.c
Branch: nospare
Log Message:

added more cleanup code


diffs (116 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
@@ -464,8 +464,10 @@ sql_bind_func__(mvc *sql, list *ff, cons
if (ops && ops->h)
input_type = ops->h->data;
 
-   if (ff)
-   for (node *n = ff->h; n; n = n->next) {
+   if (ff) {
+   node *n;
+   //for (node *n = ff->h; n; n = n->next) {
+   sql_base_loop( ff, n) {
sql_func *f = n->data;
 
if (f->type != type && f->type != filt)
@@ -473,6 +475,7 @@ sql_bind_func__(mvc *sql, list *ff, cons
if (strcmp(f->base.name, fname) == 0 && 
list_cmp(f->ops, ops, (fcmp) _subtype_cmp) == 0)
return (type == F_AGGR) ? _dup_subaggr(sql->sa, 
f, input_type) : sql_dup_subfunc(sql->sa, f, ops, NULL);
}
+   }
return NULL;
 }
 
@@ -665,7 +668,7 @@ sql_find_funcs_by_name_internal(mvc *sql
for (sql_hash_e *he = 
ff->ht->buckets[key&(ff->ht->size-1)]; he; he = he->chain) {
sql_func *f = he->value;
 
-   if (f->type != type)
+   if (f->base.deleted || f->type != type)
continue;
if (strcmp(f->base.name, fname) == 0) {
if (!res)
@@ -677,7 +680,7 @@ sql_find_funcs_by_name_internal(mvc *sql
for (node *n = ff->h; n; n = n->next) {
sql_func *f = n->data;
 
-   if (f->type != type)
+   if (f->base.deleted || f->type != type)
continue;
if (strcmp(f->base.name, fname) == 0) {
if (!res)
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -290,6 +290,25 @@ tc_gc_func(sqlstore *store, sql_change *
 }
 
 static int
+tc_gc_trigger(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
+{
+   sql_trigger *t = (sql_trigger*)change->obj;
+
+   (void)store;
+   if (t->base.deleted || !commit_ts) {
+   if (t->base.ts < oldest || (t->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+   int ok = LOG_OK;
+   base_destroy(store, >base, commit_ts, 
t->t->triggers.set, t->t->s->triggers);
+   if (ok == LOG_OK)
+   return 1; /* handled */
+   else
+   return LOG_ERR;
+   }
+   }
+   return 0;
+}
+
+static int
 tc_gc_key(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
 {
sql_key *k = (sql_key*)change->obj;
@@ -4313,7 +4332,7 @@ sql_trans_create_func(sql_trans *tr, sql
sqlid id = next_oid(tr->store);
store->table_api.table_insert(tr, sysarg, , >base.id, 
a->name, a->type.type->sqlname, >type.digits, >type.scale, >inout, 
);
}
-   trans_add(tr, >base, NULL, NULL, NULL);
+   trans_add(tr, >base, NULL, _gc_func, NULL);
return t;
 }
 
@@ -5491,7 +5510,7 @@ sql_trans_create_ukey(sql_trans *tr, sql
list_append(t->s->keys, nk);
 
store->table_api.table_insert(tr, syskey, >base.id, >base.id, 
>type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *) 
nk)->rkey->k.base.id : ,  );
-   trans_add(tr, >base, NULL, NULL, NULL);
+   trans_add(tr, >base, NULL, _gc_key, NULL);
return nk;
 }
 
@@ -5539,7 +5558,7 @@ sql_trans_create_fkey(sql_trans *tr, sql
store->table_api.table_insert(tr, syskey, >base.id, >base.id, 
>type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *) 
nk)->rkey->k.base.id : , );
 
sql_trans_create_dependency(tr, ((sql_fkey *) nk)->rkey->k.base.id, 
nk->base.id, FKEY_DEPENDENCY);
-   trans_add(tr, >base, NULL, NULL, NULL);
+   trans_add(tr, >base, NULL, _gc_key, NULL);
return (sql_fkey*) nk;
 }
 
@@ -5756,7 +5775,7 @@ sql_trans_create_idx(sql_trans *tr, sql_
store->storage_api.create_idx(tr, ni);
if (!isDeclaredTable(t))
store->table_api.table_insert(tr, sysidx, >base.id, 
>base.id, >type, ni->base.name);
-   trans_add(tr, >base, NULL, NULL, NULL);
+   trans_add(tr, >base, NULL, _gc_idx, NULL);
return ni;
 }
 
@@ -5885,7 +5904,7 @@ sql_trans_create_trigger(sql_trans *tr, 
store->table_api.table_insert(tr, systrigger, >base.id, 
ni->base.name, >base.id, 

MonetDB: nospare - add sequence cleanup code

2021-01-04 Thread Niels Nes
Changeset: b0aab0889b81 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b0aab0889b81
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

add sequence cleanup code


diffs (85 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -252,6 +252,25 @@ base_destroy(sqlstore *store, sql_base *
 }
 
 static int
+tc_gc_sequence(sqlstore *store, sql_change *change, ulng commit_ts, ulng 
oldest)
+{
+   sql_sequence *s = (sql_sequence*)change->obj;
+
+   (void)store;
+   if (s->base.deleted || !commit_ts) {
+   if (s->base.ts < oldest || (s->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+   int ok = LOG_OK;
+   base_destroy(store, >base, commit_ts, 
s->s->seqs.set, NULL);
+   if (ok == LOG_OK)
+   return 1; /* handled */
+   else
+   return LOG_ERR;
+   }
+   }
+   return 0;
+}
+
+static int
 tc_gc_func(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
 {
sql_func *f = (sql_func*)change->obj;
@@ -292,13 +311,13 @@ tc_gc_key(sqlstore *store, sql_change *c
 static int
 tc_gc_column(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
 {
-   sql_column *i = (sql_column*)change->obj;
+   sql_column *c = (sql_column*)change->obj;
 
(void)store;
-   if (i->base.deleted || !commit_ts) {
-   if (i->base.ts < oldest || (i->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+   if (c->base.deleted || !commit_ts) {
+   if (c->base.ts < oldest || (c->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
int ok = LOG_OK;
-   base_destroy(store, >base, commit_ts, 
i->t->columns.set, NULL);
+   base_destroy(store, >base, commit_ts, 
c->t->columns.set, NULL);
if (ok == LOG_OK)
return 1; /* handled */
else
@@ -1470,28 +1489,6 @@ load_schema(sql_trans *tr, sqlid id, oid
return s;
 }
 
-#if 0
-static sql_trans *
-create_trans(sql_allocator *sa)
-{
-   sql_trans *tr = ZNEW(sql_trans);
-   sql_catalog *cat = SA_ZNEW(sa, sql_catalog);
-
-   if (!tr || !cat)
-   return NULL;
-
-   tr->sa = sa;
-   tr->cat = cat;
-   tr->name = NULL;
-   tr->status = 0;
-
-   tr->parent = NULL;
-
-   cs_new(>cat->schemas, tr->sa, (fdestroy) _destroy);
-   return tr;
-}
-#endif
-
 void
 sql_trans_update_schemas(sql_trans* tr)
 {
@@ -5984,7 +5981,7 @@ sql_trans_create_sequence(sql_trans *tr,
if (bedropped)
sql_trans_create_dependency(tr, seq->base.id, seq->base.id, 
BEDROPPED_DEPENDENCY);
 
-   trans_add(tr, >base, NULL, NULL, NULL);
+   trans_add(tr, >base, NULL, _gc_sequence, NULL);
return seq;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - initial idx dropping + some more cleanup

2021-01-04 Thread Niels Nes
Changeset: feff66a5a094 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=feff66a5a094
Modified Files:
sql/include/sql_catalog.h
sql/server/rel_rel.c
sql/storage/store.c
Branch: nospare
Log Message:

initial idx dropping + some more cleanup


diffs (55 lines):

diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -724,6 +724,8 @@ typedef struct sql_session {
backend_stack stk;
 } sql_session;
 
+#define sql_base_loop(l, n) for (n=l->h; n; n=n->next) if 
(!((sql_base*)n->data)->deleted)
+
 //extern void schema_destroy(sql_schema *s);
 //extern void table_destroy(sql_table *t);
 extern void column_destroy(sql_column *c);
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -802,7 +802,7 @@ rel_basetable(mvc *sql, sql_table *t, co
 
if (isRemote(t))
tname = mapiuri_table(t->query, sql->sa, tname);
-   for (cn = t->columns.set->h; cn; cn = cn->next) {
+   sql_base_loop(t->columns.set, cn) {
sql_column *c = cn->data;
sql_exp *e = exp_alias(sa, atname, c->base.name, tname, 
c->base.name, >type, CARD_MULTI, c->null, 0);
 
@@ -823,7 +823,7 @@ rel_basetable(mvc *sql, sql_table *t, co
append(rel->exps, exp_alias(sa, atname, TID, tname, TID, 
sql_bind_localtype("oid"), CARD_MULTI, 0, 1));
 
if (t->idxs.set) {
-   for (cn = t->idxs.set->h; cn; cn = cn->next) {
+   sql_base_loop(t->idxs.set, cn) {
sql_exp *e;
sql_idx *i = cn->data;
sql_subtype *t = sql_bind_localtype("lng"); /* hash 
"lng" */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -5835,9 +5835,17 @@ sql_trans_drop_idx(sql_trans *tr, sql_sc
if (!isTempTable(i->t))
sys_drop_idx(tr, i, drop_action);
 
+   sql_idx *di = SA_ZNEW(tr->sa, sql_idx);
+   *di = *i;
+   di->base.ts = tr->tid;
+   di->base.deleted = 1;
+   di->base.older = >base;
+   i->base.newer = >base;
+   trans_add(tr, >base, di->data, _gc_idx, NULL);
n = cs_find_name(>t->idxs, i->base.name);
if (n)
-   cs_del(>t->idxs, n, i->base.flags);
+   list_update_data(i->t->idxs.set, n, di);
+   //cs_del(>t->idxs, n, i->base.flags);
 
if (drop_action == DROP_CASCADE_START && tr->dropped) {
list_destroy(tr->dropped);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


monetdb-java: embedded - Java 8 vs 9 fixes

2021-01-04 Thread Pedro Ferreira
Changeset: 1d10d4759108 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=1d10d4759108
Modified Files:
src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
src/main/java/nl/cwi/monetdb/mcl/connection/mapi/AbstractSocket.java
src/main/java/nl/cwi/monetdb/mcl/connection/mapi/OldMapiSocket.java
src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiProtocol.java

src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiStartOfHeaderParser.java

src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiTupleLineParser.java
Branch: embedded
Log Message:

Java 8 vs 9 fixes


diffs (185 lines):

diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java 
b/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
@@ -19,6 +19,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.net.URL;
+import java.nio.Buffer;
 import java.nio.CharBuffer;
 import java.sql.*;
 import java.text.SimpleDateFormat;
@@ -1454,7 +1455,7 @@ public class MonetPreparedStatement
e.getMessage(), "M1M25");
}
// We have to rewind the buffer, because otherwise toString() 
returns "".
-   buf.rewind();
+   ((Buffer)buf).rewind();
setString(parameterIndex, buf.toString());
}
 
diff --git 
a/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/AbstractSocket.java 
b/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/AbstractSocket.java
--- a/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/AbstractSocket.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/AbstractSocket.java
@@ -158,7 +158,7 @@ public abstract class AbstractSocket imp
if(read == 0) {
throw new IOException("The server has reached EOF!");
}
-   this.stringsDecoded.clear();
+   ((Buffer)this.stringsDecoded).clear();
this.utf8Decoder.reset();
this.utf8Decoder.decode(this.bufferIn, 
this.stringsDecoded,true);
this.utf8Decoder.flush(this.stringsDecoded);
@@ -173,7 +173,7 @@ public abstract class AbstractSocket imp
 * @throws IOException If an error in the underlying connection happened
 */
public CharBuffer readLine(CharBuffer lineBuffer) throws IOException {
-   lineBuffer.clear();
+   ((Buffer)lineBuffer).clear();
boolean found = false;
char[] sourceArray = this.stringsDecoded.array();
int sourcePosition = this.stringsDecoded.position();
@@ -184,7 +184,7 @@ public abstract class AbstractSocket imp
 
while(!found) {
if(sourcePosition >= sourceLimit) {
-   this.stringsDecoded.position(sourcePosition);
+   
((Buffer)this.stringsDecoded).position(sourcePosition);
this.readToInputBuffer();
sourceArray = this.stringsDecoded.array();
sourcePosition = 0;
@@ -202,8 +202,8 @@ public abstract class AbstractSocket imp
destinationArray[destinationPosition++] = c;
}
}
-   this.stringsDecoded.position(sourcePosition);
-   lineBuffer.position(destinationPosition);
+   ((Buffer)this.stringsDecoded).position(sourcePosition);
+   ((Buffer)lineBuffer).position(destinationPosition);
((Buffer)lineBuffer).flip();
return lineBuffer;
}
@@ -228,8 +228,8 @@ public abstract class AbstractSocket imp
this.utf8Encoder.flush(this.bufferOut);
written += this.writeFromBufferOut(this.bufferOut);
 
-   this.stringsEncoded.clear();
-   this.bufferOut.clear();
+   ((Buffer)this.stringsEncoded).clear();
+   ((Buffer)this.bufferOut).clear();
if(written == 0) {
throw new IOException("The query could not be sent to 
the server!");
} else {
@@ -253,14 +253,14 @@ public abstract class AbstractSocket imp
 
for (int i = 0; i < limit; i++) {
if (destinationPosition >= destinationCapacity) {
-   
this.stringsEncoded.position(destinationPosition);
+   
((Buffer)this.stringsEncoded).position(destinationPosition);
this.writeToOutputBuffer(false);
destinationArray = this.stringsEncoded.array();
destinationPosition = 0;
   

MonetDB: nospare - merged with default

2021-01-04 Thread Niels Nes
Changeset: 7d767181bdc6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7d767181bdc6
Modified Files:
sql/server/rel_schema.c
sql/server/sql_privileges.c
Branch: nospare
Log Message:

merged with default


diffs (72 lines):

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
@@ -117,7 +117,7 @@ end user.main;
 % clob # type
 % 235 # length
 function user.main():void;
-X_1:void := querylog.define("explain copy into ttt from 
E\\'tmp/xyz\\';":str, "user_0":str, 22:int);
+querylog.define("explain copy into ttt from E\\'tmp/xyz\\';":str, 
"user_0":str, 22:int);
 X_4:int := sql.mvc();
 (X_28:bat[:int], X_29:bat[:int], X_30:bat[:int]) := 
sql.copy_from(0x0049B72361C0:ptr, "|":str, "\n":str, nil:str, "null":str, 
"\\tmp/xyz":str, -1:lng, 0:lng, 0:int, 0:int, nil:str, 0:int, 1:int);
 X_32:int := sql.append(X_4:int, "sys":str, "ttt":str, 
"averylongcolumnnametomakeitlargee":str,
 X_28:bat[:int]);
@@ -159,7 +159,7 @@ end user.main;
 % clob # type
 % 235 # length
 function user.main():void;
-X_1:void := querylog.define("explain copy into ttt from 
\\'Z:/tmp/xyz\\';":str, "user_0":str, 22:int);
+querylog.define("explain copy into ttt from \\'Z:/tmp/xyz\\';":str, 
"user_0":str, 22:int);
 X_4:int := sql.mvc();
 (X_28:bat[:int], X_29:bat[:int], X_30:bat[:int]) := 
sql.copy_from(0x0049B72361C0:ptr, "|":str, "\n":str, nil:str, "null":str, 
"Z:/tmp/xyz":str, -1:lng, 0:lng, 0:int, 0:int, nil:str, 0:int, 1:int);
 X_32:int := sql.append(X_4:int, "sys":str, "ttt":str, 
"averylongcolumnnametomakeitlargee":str,
 X_28:bat[:int]);
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -1349,6 +1349,8 @@ sql_drop_table(sql_query *query, dlist *
}
return NULL;
}
+   if (isDeclaredTable(t))
+   return sql_error(sql, 02, SQLSTATE(42000) "DROP TABLE: cannot 
drop a declared table");
 
return rel_drop(sql->sa, ddl_drop_table, t->s->base.name, tname, nr, 
if_exists);
 }
@@ -1680,6 +1682,8 @@ rel_grant_or_revoke_table(mvc *sql, dlis
 
if (!(t = find_table_or_view_on_scope(sql, NULL, sname, tname, err, 
false)))
return NULL;
+   if (isDeclaredTable(t))
+   return sql_error(sql, 02, SQLSTATE(42000) "Cannot %s on a 
declared table", err);
for (dnode *gn = grantees->h; gn; gn = gn->next) {
char *grantee = gn->data.sval;
 
@@ -1815,6 +1819,8 @@ rel_create_index(mvc *sql, char *iname, 
 
if (!(t = find_table_or_view_on_scope(sql, NULL, sname, tname, "CREATE 
INDEX", false)))
return NULL;
+   if (isDeclaredTable(t))
+   return sql_error(sql, 02, SQLSTATE(42000) "CREATE INDEX: cannot 
create index on a declared table");
if (!mvc_schema_privs(sql, t->s))
return sql_error(sql, 02, SQLSTATE(42000) "CREATE INDEX: access 
denied for %s to schema '%s'", get_string_global_var(sql, "current_user"), 
t->s->base.name);
if ((i = mvc_bind_idx(sql, t->s, iname)))
diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -136,6 +136,8 @@ sql_grant_table_privs( mvc *sql, char *g
 
if (!(t = find_table_or_view_on_scope(sql, NULL, sname, tname, "GRANT", 
false)))
throw(SQL,"sql.grant_table", "%s", sql->errstr);
+   if (isDeclaredTable(t))
+   throw(SQL,"sql.grant_table", SQLSTATE(42000) "GRANT: cannot 
grant on a declared table");
 
allowed = schema_privs(grantor, t->s);
 
@@ -272,6 +274,8 @@ sql_revoke_table_privs( mvc *sql, char *
 
if (!(t = find_table_or_view_on_scope(sql, NULL, sname, tname, 
"REVOKE", false)))
throw(SQL,"sql.revoke_table","%s", sql->errstr);
+   if (isDeclaredTable(t))
+   throw(SQL,"sql.revoke_table", SQLSTATE(42000) "REVOKE: cannot 
revoke on a declared table");
 
allowed = schema_privs(grantor, t->s);
if (!allowed)
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - handle first alter's

2021-01-04 Thread Niels Nes
Changeset: 9a784a7f358c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9a784a7f358c
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

handle first alter's


diffs (81 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -233,15 +233,21 @@ base_destroy(sqlstore *store, sql_base *
else if (newer && older)
newer->older = older;
 
+   if (newer) /* nothing to remove */
+   return;
if (l1) {
node *bn = list_find(l1, b, NULL);
if (bn)
list_remove_node(l1, bn);
+   if (older)
+   list_append(l1, older);
}
if (l2) {
node *bn = list_find(l2, b, NULL);
if (bn)
list_remove_node(l2, bn);
+   if (older)
+   list_append(l2, older);
}
 }
 
@@ -284,6 +290,25 @@ tc_gc_key(sqlstore *store, sql_change *c
 }
 
 static int
+tc_gc_column(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
+{
+   sql_column *i = (sql_column*)change->obj;
+
+   (void)store;
+   if (i->base.deleted || !commit_ts) {
+   if (i->base.ts < oldest || (i->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+   int ok = LOG_OK;
+   base_destroy(store, >base, commit_ts, 
i->t->columns.set, NULL);
+   if (ok == LOG_OK)
+   return 1; /* handled */
+   else
+   return LOG_ERR;
+   }
+   }
+   return 0;
+}
+
+static int
 tc_gc_idx(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
 {
sql_idx *i = (sql_idx*)change->obj;
@@ -5241,6 +5266,7 @@ sql_column *
 sql_trans_alter_null(sql_trans *tr, sql_column *col, int isnull)
 {
sqlstore *store = tr->store;
+
if (col->null != isnull) {
sql_schema *syss = find_sql_schema(tr, 
isGlobal(col->t)?"sys":"tmp");
sql_table *syscolumn = find_sql_table(tr, syss, "_columns");
@@ -5250,7 +5276,20 @@ sql_trans_alter_null(sql_trans *tr, sql_
if (is_oid_nil(rid))
return NULL;
store->table_api.column_update_value(tr, 
find_sql_column(syscolumn, "null"), rid, );
-   col->null = isnull;
+   /* change */
+   sql_column *cc = SA_ZNEW(tr->sa, sql_column);
+   *cc = *col;
+   cc->base.ts = tr->tid;
+   cc->base.older = >base;
+   col->base.newer = >base;
+   trans_add(tr, >base, cc->data, _gc_column, NULL);
+   node *n = list_find_base_id(col->t->columns.set, col->base.id);
+   if (n) {
+   assert(n->data == col);
+   list_update_data(col->t->columns.set, n, cc);
+   }
+   cc->null = isnull;
+   col = cc;
}
return col;
 }
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - handle some more objects (destructions) keys/...

2021-01-04 Thread Niels Nes
Changeset: 9c7d70442261 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9c7d70442261
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

handle some more objects (destructions) keys/idxs and funcs


diffs (143 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -211,6 +211,97 @@ table_destroy(sqlstore *store, sql_table
cs_destroy(>columns);
 }
 
+/* todo add destroy callback, to clean the object it self */
+static void
+base_destroy(sqlstore *store, sql_base *b, ulng commit_ts, list *l1, list *l2)
+{
+   sql_base *older = b->older;
+   sql_base *newer = b->newer;
+
+   assert(b->refcnt == 1);
+   if (--(b->refcnt) > 0)
+   return;
+
+   if (older && commit_ts) {
+   base_destroy(store, older, commit_ts, l1, l2);
+   older = NULL;
+   }
+   b->older = NULL;
+
+   if (newer && commit_ts)
+   newer->older = NULL;
+   else if (newer && older)
+   newer->older = older;
+
+   if (l1) {
+   node *bn = list_find(l1, b, NULL);
+   if (bn)
+   list_remove_node(l1, bn);
+   }
+   if (l2) {
+   node *bn = list_find(l2, b, NULL);
+   if (bn)
+   list_remove_node(l2, bn);
+   }
+}
+
+static int
+tc_gc_func(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
+{
+   sql_func *f = (sql_func*)change->obj;
+
+   (void)store;
+   if (f->base.deleted || !commit_ts) {
+   if (f->base.ts < oldest || (f->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+   int ok = LOG_OK;
+   base_destroy(store, >base, commit_ts, 
f->s->funcs.set, NULL);
+   if (ok == LOG_OK)
+   return 1; /* handled */
+   else
+   return LOG_ERR;
+   }
+   }
+   return 0;
+}
+
+static int
+tc_gc_key(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
+{
+   sql_key *k = (sql_key*)change->obj;
+
+   (void)store;
+   if (k->base.deleted || !commit_ts) {
+   if (k->base.ts < oldest || (k->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+   int ok = LOG_OK;
+   base_destroy(store, >base, commit_ts, 
k->t->keys.set, k->t->s->keys);
+   if (ok == LOG_OK)
+   return 1; /* handled */
+   else
+   return LOG_ERR;
+   }
+   }
+   return 0;
+}
+
+static int
+tc_gc_idx(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
+{
+   sql_idx *i = (sql_idx*)change->obj;
+
+   (void)store;
+   if (i->base.deleted || !commit_ts) {
+   if (i->base.ts < oldest || (i->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+   int ok = LOG_OK;
+   base_destroy(store, >base, commit_ts, 
i->t->idxs.set, i->t->s->idxs);
+   if (ok == LOG_OK)
+   return 1; /* handled */
+   else
+   return LOG_ERR;
+   }
+   }
+   return 0;
+}
+
 static int
 tc_gc_table(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
 {
@@ -3044,6 +3135,7 @@ sql_trans_copy_key( sql_trans *tr, sql_t
nk->base.ts = tr->tid;
assert( nk->type != fkey || ((sql_fkey*)nk)->rkey);
store->table_api.table_insert(tr, syskey, >base.id, >base.id, 
>type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *) 
nk)->rkey->k.base.id : , );
+   trans_add(tr, >base, NULL, _gc_key, NULL);
 
if (nk->type == fkey)
sql_trans_create_dependency(tr, ((sql_fkey *) 
nk)->rkey->k.base.id, nk->base.id, FKEY_DEPENDENCY);
@@ -3100,6 +3192,7 @@ sql_trans_copy_idx( sql_trans *tr, sql_t
}
list_append(t->s->idxs, ni);
cs_add(>idxs, ni, TR_NEW);
+   trans_add(tr, >base, NULL, _gc_idx, NULL);
 
if (isDeclaredTable(i->t))
if (!isDeclaredTable(t) && isTable(ni->t) && idx_has_column(ni->type))
@@ -4198,6 +4291,7 @@ sql_trans_create_func(sql_trans *tr, sql
sqlid id = next_oid(tr->store);
store->table_api.table_insert(tr, sysarg, , >base.id, 
a->name, a->type.type->sqlname, >type.digits, >type.scale, >inout, 
);
}
+   trans_add(tr, >base, NULL, NULL, NULL);
return t;
 }
 
@@ -4224,7 +4318,16 @@ sql_trans_drop_func(sql_trans *tr, sql_s
}
 
sys_drop_func(tr, func, DROP_CASCADE);
-   cs_del(>funcs, n, func->base.flags);
+
+   sql_func *df = SA_ZNEW(tr->sa, sql_func);
+   *df = *func;
+   df->base.ts = tr->tid;
+   df->base.deleted = 1;
+   

MonetDB: nospare - handle a few more object creations

2021-01-04 Thread Niels Nes
Changeset: 688a8347a815 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=688a8347a815
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

handle a few more object creations


diffs (83 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -239,11 +239,27 @@ tc_commit_table_(sql_trans *tr, sql_tabl
for (node* n = t->columns.set->h; n; n = n->next) {
sql_column *c = n->data;
c->base.ts = commit_ts;
+   c->base.flags = 0;
}
if (t->idxs.set) {
for (node* n = t->idxs.set->h; n; n = n->next) {
sql_idx *i = n->data;
i->base.ts = commit_ts;
+   i->base.flags = 0;
+   }
+   }
+   if (t->keys.set) {
+   for (node* n = t->keys.set->h; n; n = n->next) {
+   sql_key *k = n->data;
+   k->base.ts = commit_ts;
+   k->base.flags = 0;
+   }
+   }
+   if (t->triggers.set) {
+   for (node* n = t->triggers.set->h; n; n = n->next) {
+   sql_trigger *ti = n->data;
+   ti->base.ts = commit_ts;
+   ti->base.flags = 0;
}
}
return LOG_OK;
@@ -3513,8 +3529,10 @@ sql_trans_commit(sql_trans *tr)
 
if (c->log && ok == LOG_OK)
ok = c->log(tr, c, commit_ts, oldest);
-   else
+   else {
c->obj->ts = commit_ts;
+   c->obj->flags = 0;
+   }
}
if (ok == LOG_OK && store->prev_oid != store->obj_id)
ok = store->logger_api.log_sequence(store, OBJ_SID, 
store->obj_id);
@@ -5334,6 +5352,7 @@ sql_trans_create_ukey(sql_trans *tr, sql
list_append(t->s->keys, nk);
 
store->table_api.table_insert(tr, syskey, >base.id, >base.id, 
>type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *) 
nk)->rkey->k.base.id : ,  );
+   trans_add(tr, >base, NULL, NULL, NULL);
return nk;
 }
 
@@ -5381,6 +5400,7 @@ sql_trans_create_fkey(sql_trans *tr, sql
store->table_api.table_insert(tr, syskey, >base.id, >base.id, 
>type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *) 
nk)->rkey->k.base.id : , );
 
sql_trans_create_dependency(tr, ((sql_fkey *) nk)->rkey->k.base.id, 
nk->base.id, FKEY_DEPENDENCY);
+   trans_add(tr, >base, NULL, NULL, NULL);
return (sql_fkey*) nk;
 }
 
@@ -5597,6 +5617,7 @@ sql_trans_create_idx(sql_trans *tr, sql_
store->storage_api.create_idx(tr, ni);
if (!isDeclaredTable(t))
store->table_api.table_insert(tr, sysidx, >base.id, 
>base.id, >type, ni->base.name);
+   trans_add(tr, >base, NULL, NULL, NULL);
return ni;
 }
 
@@ -5717,6 +5738,7 @@ sql_trans_create_trigger(sql_trans *tr, 
store->table_api.table_insert(tr, systrigger, >base.id, 
ni->base.name, >base.id, >time, >orientation,
 >event, 
(ni->old_name)?ni->old_name:nilptr, (ni->new_name)?ni->new_name:nilptr,
 
(ni->condition)?ni->condition:nilptr, ni->statement);
+   trans_add(tr, >base, NULL, NULL, NULL);
return ni;
 }
 
@@ -5812,6 +5834,7 @@ sql_trans_create_sequence(sql_trans *tr,
if (bedropped)
sql_trans_create_dependency(tr, seq->base.id, seq->base.id, 
BEDROPPED_DEPENDENCY);
 
+   trans_add(tr, >base, NULL, NULL, NULL);
return seq;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - keep temp schema/tables tree isolated

2021-01-04 Thread Niels Nes
Changeset: 31cf095ca125 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=31cf095ca125
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

keep temp schema/tables tree isolated


diffs (107 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3390,14 +3390,91 @@ sql_trans_create_(sqlstore *store, sql_t
return tr;
 }
 
+static sql_column *
+column_dup(sql_trans *tr, sql_column *oc, sql_table *t)
+{
+   sqlstore *store = tr->store;
+   sql_allocator *sa = tr->sa;
+   sql_column *c = SA_ZNEW(sa, sql_column);
+
+   base_init(sa, >base, oc->base.id, 0, oc->base.name);
+   c->type = oc->type;
+   c->def = NULL;
+   if (oc->def)
+   c->def = sa_strdup(sa, oc->def);
+   c->null = oc->null;
+   c->colnr = oc->colnr;
+   c->unique = oc->unique;
+   c->t = t;
+   c->storage_type = NULL;
+   if (oc->storage_type)
+   c->storage_type = sa_strdup(sa, oc->storage_type);
+
+   if (isTable(c->t))
+   store->storage_api.create_col(tr, c);
+   return c;
+}
+
+static sql_table *
+table_dup(sql_trans *tr, sql_table *ot, sql_schema *s)
+{
+   sqlstore *store = tr->store;
+   sql_allocator *sa = tr->sa;
+   sql_table *t = SA_ZNEW(sa, sql_table);
+   node *n;
+
+   base_init(sa, >base, ot->base.id, 0, ot->base.name);
+   t->type = ot->type;
+   t->system = ot->system;
+   t->bootstrap = ot->bootstrap;
+   t->persistence = ot->persistence;
+   t->commit_action = ot->commit_action;
+   t->access = ot->access;
+   t->query = (ot->query) ? sa_strdup(sa, ot->query) : NULL;
+   t->properties = ot->properties;
+
+   cs_new(>columns, sa, (fdestroy) _destroy);
+   //cs_new(>keys, sa, (fdestroy) _destroy);
+   //cs_new(>idxs, sa, (fdestroy) _destroy);
+   //cs_new(>triggers, sa, (fdestroy) _destroy);
+
+   t->pkey = NULL;
+
+   t->s = s;
+   t->sz = ot->sz;
+   t->cleared = 0;
+
+   if (ot->columns.set)
+   for (n = ot->columns.set->h; n; n = n->next)
+   cs_add(>columns, column_dup(tr, n->data, t), 0);
+   /*
+   if (ot->idxs.set)
+   for (n = ot->idxs.set->h; n; n = n->next)
+   cs_add(>idxs, idx_dup(tr, n->data, t), 0);
+   if (ot->keys.set)
+   for (n = ot->keys.set->h; n; n = n->next)
+   cs_add(>keys, key_dup(tr, n->data, t), 0);
+   if (ot->triggers.set)
+   for (n = ot->triggers.set->h; n; n = n->next)
+   cs_add(>triggers, trigger_dup(tr, n->data, t), 0);
+   */
+   if (isTable(t))
+   store->storage_api.create_del(tr, t);
+   return t;
+}
+
 static sql_schema *
 schema_dup(sql_trans *tr, sql_schema *s)
 {
sql_schema *ns = SA_ZNEW(tr->sa, sql_schema);
 
*ns = *s;
+   cs_new(>tables, tr->sa, (fdestroy) NULL);
+   if (s->tables.set)
+   for (node *n = s->tables.set->h; n; n=n->next)
+   cs_add(>tables, table_dup(tr, n->data, s), 0);
ns->base.ts = tr->tid;
-   ns->base.older = >base;
+   //ns->base.older = >base;
/* only needed for persistent */
if (tr->tmp != s)
s->base.newer = >base;
@@ -5836,6 +5913,10 @@ sql_session_create(sqlstore *store, sql_
if (!s->tr) {
return NULL;
}
+   if (s->tr->tmp) {
+   s->tr->active = 1;
+   s->tr->tmp = schema_dup(s->tr, s->tr->tmp);
+   }
s->schema_name = NULL;
s->tr->active = 0;
if (!sql_session_reset(s, ac)) {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - small cleanup (ie delay setting ts)

2021-01-04 Thread Niels Nes
Changeset: 63a757e22c91 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=63a757e22c91
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: nospare
Log Message:

small cleanup (ie delay setting ts)


diffs (40 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
@@ -1897,7 +1897,7 @@ log_destroy_del(sql_trans *tr, sql_chang
sql_table *t = (sql_table*)change->obj;
assert(!isTempTable(t));
sql_dbat *dbat = t->data;
-   assert(dbat->ts == tr->tid || (t->base.ts == commit_ts && commit_ts == 
oldest));
+   assert(dbat->ts == tr->tid || t->base.ts == tr->tid || (t->base.ts == 
commit_ts && commit_ts == oldest));
dbat->ts = commit_ts;
ok = log_destroy_dbat(tr, t->data, t->bootstrap?0:LOG_TAB, t->base.id);
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -256,11 +256,11 @@ tc_log_table(sql_trans *tr, sql_change *
sql_table *t = (sql_table*)change->obj;
sqlstore *store = tr->store;
 
+   change->obj->ts = commit_ts;
if (isTable(t) && !isTempTable(t)) {
if (t->base.deleted) {
ok = store->storage_api.log_destroy_del(tr, change, 
commit_ts, oldest);
} else { /* new table ? */
-   change->obj->ts = commit_ts;
ok = store->storage_api.log_create_del(tr, change, 
commit_ts, oldest);
if (ok == LOG_OK)
return tc_commit_table_(tr, t, commit_ts, 
oldest);
@@ -3434,9 +3434,10 @@ sql_trans_commit(sql_trans *tr)
for(node *n=tr->changes->h; n && ok == LOG_OK; n = n->next) {
sql_change *c = n->data;
 
-   c->obj->ts = commit_ts;
if (c->log && ok == LOG_OK)
ok = c->log(tr, c, commit_ts, oldest);
+   else
+   c->obj->ts = commit_ts;
}
if (ok == LOG_OK && store->prev_oid != store->obj_id)
ok = store->logger_api.log_sequence(store, OBJ_SID, 
store->obj_id);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - initial steps for

2021-01-04 Thread Niels Nes
Changeset: 97c62b87bcdb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=97c62b87bcdb
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/include/sql_catalog.h
sql/server/sql_mvc.c
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_storage.h
sql/storage/bat/bat_table.c
sql/storage/sql_catalog.c
sql/storage/sql_storage.h
sql/storage/store.c
sql/test/BugTracker-2010/Tests/All
Branch: nospare
Log Message:

initial steps for
- temp schema (just keep the temp schema copied (not the tables))
- savepoints, keep eye on the recursive (parent) transaction.


diffs (truncated from 1109 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1325,10 +1325,11 @@ exp_bin(backend *be, sql_exp *e, stmt *l
 static stmt *
 stmt_col( backend *be, sql_column *c, stmt *del, int part)
 {
+   sql_trans *tr = be->mvc->session->tr;
stmt *sc = stmt_bat(be, c, RDONLY, part);
 
if (isTable(c->t) && c->t->access != TABLE_READONLY &&
-  (!isNew(c) || !isNew(c->t) /* alter */) &&
+  (!isNew(c) || !inTransaction(tr, c) || !isNew(c->t) /* alter */) &&
   (c->t->persistence == SQL_PERSIST || c->t->s) && 
!c->t->commit_action) {
stmt *i = stmt_bat(be, c, RD_INS, 0);
stmt *u = stmt_bat(be, c, RD_UPD_ID, part);
@@ -1344,10 +1345,11 @@ stmt_col( backend *be, sql_column *c, st
 static stmt *
 stmt_idx( backend *be, sql_idx *i, stmt *del, int part)
 {
+   sql_trans *tr = be->mvc->session->tr;
stmt *sc = stmt_idxbat(be, i, RDONLY, part);
 
if (isTable(i->t) && i->t->access != TABLE_READONLY &&
-  (!isNew(i) || !isNew(i->t) /* alter */) &&
+  (!isNew(i) || !inTransaction(tr, i) || !isNew(i->t) /* alter */) &&
   (i->t->persistence == SQL_PERSIST || i->t->s) && 
!i->t->commit_action) {
stmt *ic = stmt_idxbat(be, i, RD_INS, 0);
stmt *u = stmt_idxbat(be, i, RD_UPD_ID, part);
@@ -4056,6 +4058,7 @@ static stmt *
 update_check_ukey(backend *be, stmt **updates, sql_key *k, stmt *tids, stmt 
*idx_updates, int updcol)
 {
mvc *sql = be->mvc;
+   //sql_trans *tr = sql->session->tr;
char *msg = NULL;
stmt *res = NULL;
 
@@ -4076,7 +4079,7 @@ update_check_ukey(backend *be, stmt **up
This is done using a relation join and a count (which
should be zero)
*/
-   if (!isNew(k)) {
+   if (!isNew(k) /*|| !inTransaction(tr, k)*/) {
stmt *nu_tids = stmt_tdiff(be, dels, tids, NULL); /* 
not updated ids */
list *lje = sa_list(sql->sa);
list *rje = sa_list(sql->sa);
@@ -4189,7 +4192,7 @@ update_check_ukey(backend *be, stmt **up
stmt *s = NULL, *h = NULL, *o;
 
/* s should be empty */
-   if (!isNew(k)) {
+   if (!isNew(k) /*|| !inTransaction(tr, k)*/) {
stmt *nu_tids = stmt_tdiff(be, dels, tids, NULL); /* 
not updated ids */
assert (updates);
 
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
@@ -2353,10 +2353,10 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
throw(SQL, "sql.tid", SQLSTATE(42S02) "Table missing 
%s.%s",sname,tname);
c = t->columns.set->h->data;
 
-   sqlstore *store = m->session->tr->store;
+   sqlstore *store = m->store;
nr = store->storage_api.count_col(tr, c, 1);
 
-   if (isTable(t) && t->access == TABLE_WRITABLE && (!isNew(t) /* alter */ 
) &&
+   if (isTable(t) && t->access == TABLE_WRITABLE && (!isNew(t) /* alter */ 
|| !inTransaction(tr, t)) &&
t->persistence == SQL_PERSIST && !t->commit_action)
inr = store->storage_api.count_col(tr, c, 0);
nr -= inr;
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -68,7 +68,7 @@ table_has_updates(sql_trans *tr, sql_tab
if ( b == 0)
return -1;
cnt |= BATcount(b) > 0;
-   if (isTable(t) && t->access != TABLE_READONLY && (!isNew(t) /* 
alter */ ) &&
+   if (isTable(t) && t->access != TABLE_READONLY && (!isNew(t) /* 
alter */ /*|| !inTransaction(tr, t)*/) &&
t->persistence == SQL_PERSIST && !t->commit_action)
cnt |= store->storage_api.count_col(tr, c, 0) > 0;
BBPunfix(b->batCacheid);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ 

MonetDB: nospare - add commit of idx's

2021-01-04 Thread Niels Nes
Changeset: 9b641084c1d9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9b641084c1d9
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: nospare
Log Message:

add commit of idx's
more cleanup..


diffs (58 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
@@ -1889,9 +1889,11 @@ log_destroy_idx_(sql_trans *tr, sql_idx 
 
int ok = LOG_OK;
assert(!isTempTable(i->t));
-   sql_delta *delta = i->data;
-   delta->ts = commit_ts;
-   ok = log_destroy_delta(tr, i->data, i->t->bootstrap?0:LOG_IDX, 
i->base.id);
+   if (i->data) {
+   sql_delta *delta = i->data;
+   delta->ts = commit_ts;
+   ok = log_destroy_delta(tr, i->data, i->t->bootstrap?0:LOG_IDX, 
i->base.id);
+   }
return ok;
 }
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -238,6 +238,12 @@ tc_commit_table_(sql_trans *tr, sql_tabl
sql_column *c = n->data;
c->base.ts = commit_ts;
}
+   if (t->idxs.set) {
+   for (node* n = t->idxs.set->h; n; n = n->next) {
+   sql_idx *i = n->data;
+   i->base.ts = commit_ts;
+   }
+   }
return LOG_OK;
 }
 
@@ -3379,20 +3385,13 @@ sql_trans_create_(sqlstore *store, sql_t
 
if (name)
tr->name = sa_strdup(tr->sa, name);
-   if (parent)
-   fprintf(stderr, "implement savepoints again\n");
tr->cat = store->cat;
if (!tr->cat)
store->cat = tr->cat = SA_ZNEW(tr->sa, sql_catalog);
-   /* TODO for temp schema, find and recreate content with new transaction 
id */
tr->tmp = find_sql_schema(tr, "tmp");
-   /*
-   if (gtrans) {
-   tr = trans_dup((parent) ? parent : gtrans, name);
-   TRC_DEBUG(SQL_STORE, "New transaction: %p\n", tr);
-   }
-   tr->store = store;
-   */
+   if (!parent)
+   tr->parent = parent;
+   TRC_DEBUG(SQL_STORE, "New transaction: %p\n", tr);
return tr;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - merged with default

2021-01-04 Thread Niels Nes
Changeset: 23951c4d7c2b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=23951c4d7c2b
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_statement.c
Branch: nospare
Log Message:

merged with default


diffs (truncated from 1711 to 300 lines):

diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -54,7 +54,7 @@ SQLhelp sqlhelp1[] = {
 "",
 "ALTER SCHEMA [ IF EXISTS ] ident RENAME TO ident",
 "ident",
-"See also 
https://www.monetdb.org/Documentation/SQLreference/TableDefinitions/AlterStatement"},
+"See also 
https://www.monetdb.org/Documentation/SQLReference/DataDefinition/SchemaDefinitions"},
{"ALTER SEQUENCE",
 "",
 "ALTER SEQUENCE qname [ AS seq_int_datatype] [ RESTART [WITH intval]] 
[INCREMENT BY intval]\n"
@@ -191,7 +191,7 @@ SQLhelp sqlhelp1[] = {
 "",
 "CREATE REPLICA TABLE [ IF NOT EXISTS ] qname table_source",
 NULL,
-"See also 
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/TransactionReplication"},
+"See also 
https://www.monetdb.org/Documentation/SQLReference/TableDefinitions"},
{"CREATE ROLE",
 "Create a new role. You can grant privileges to a role and next\n"
 "grant a role (or multiple roles) to specific users",
@@ -246,7 +246,7 @@ SQLhelp sqlhelp1[] = {
 "RETURNS function_return_data_type\n"
 "EXTERNAL NAME ident ',' ident",
 "qname,param,function_return_data_type,ident",
-"See also 
https://www.monetdb.org/Documentation/SQLreference/ProgrammingSQL/Functions"},
+"See also 
https://www.monetdb.org/Documentation/SQLReference/DataManipulation/WindowFunctions"},
{"CURRENT_DATE",
 "Pseudo column or function to get the current date",
 "CURRENT_DATE [ '(' ')' ]",
@@ -291,7 +291,7 @@ SQLhelp sqlhelp1[] = {
 "Debug a SQL statement using MAL debugger",
 "DEBUG statement",
 NULL,
-
"https://www.monetdb.org/Documentation/SQLreference/RuntimeFeatures/Debug"},
+"See also 
https://www.monetdb.org/Documentation/SQLreference/RuntimeFeatures/Debug"},
{"DECLARE",
 "Define a local variable",
 "DECLARE ident_list data_type",
diff --git a/common/stream/stream.h b/common/stream/stream.h
--- a/common/stream/stream.h
+++ b/common/stream/stream.h
@@ -232,7 +232,6 @@ stream_export stream *bs_stream(stream *
 typedef enum {
PROTOCOL_AUTO = 0, // unused
PROTOCOL_9 = 1, // mal_mapi.c, mal_client.c;
-   PROTOCOL_10 = 2, // mal_mapi.c, sql_result.c
PROTOCOL_COLUMNAR = 3 // sql_result.c
 } protocol_version;
 
diff --git a/common/utils/mcrypt.c b/common/utils/mcrypt.c
--- a/common/utils/mcrypt.c
+++ b/common/utils/mcrypt.c
@@ -45,7 +45,6 @@ mcrypt_getHashAlgorithms(void)
 * desire.
 */
static const char *algorithms =
-   "PROT10"
 #ifdef HAVE_RIPEMD160_UPDATE
",RIPEMD160"
 #endif
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
@@ -17,7 +17,7 @@
 % clob # type
 % 235 # length
 function user.main():void;
-X_1:void := querylog.define("explain copy into ttt from 
\\'/tmp/xyz\\';":str, "sequential_pipe":str, 22:int);
+querylog.define("explain copy into ttt from \\'/tmp/xyz\\';":str, 
"sequential_pipe":str, 22:int);
 X_4:int := sql.mvc();
 (X_28:bat[:int], X_29:bat[:int], X_30:bat[:int]) := 
sql.copy_from(0x7fc1401da5c0:ptr, "|":str, "\n":str, nil:str, "null":str, 
"/tmp/xyz":str, -1:lng, 0:lng, 0:int, 0:int, nil:str, 0:int, 1:int);
 X_32:int := sql.append(X_4:int, "sys":str, "ttt":str, 
"averylongcolumnnametomakeitlargee":str,
 X_28:bat[:int]);
@@ -77,7 +77,7 @@ end user.main;
 % clob # type
 % 235 # length
 function user.main():void;
-X_1:void := querylog.define("explain copy into ttt from 
\\'/tmp/xyz\\';":str, "user_0":str, 22:int);
+querylog.define("explain copy into ttt from \\'/tmp/xyz\\';":str, 
"user_0":str, 22:int);
 X_4:int := sql.mvc();
 (X_28:bat[:int], X_29:bat[:int], X_30:bat[:int]) := 
sql.copy_from(0x7fc1401da5c0:ptr, "|":str, "\n":str, nil:str, "null":str, 
"/tmp/xyz":str, -1:lng, 0:lng, 0:int, 0:int, nil:str, 0:int, 1:int);
 X_32:int := sql.append(X_4:int, "sys":str, "ttt":str, 

MonetDB: nospare - removed leftover SNAPSHOT code

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

removed leftover SNAPSHOT code


diffs (38 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
@@ -12,8 +12,6 @@
 #include "sql_string.h"
 #include "gdk_atoms.h"
 
-#define SNAPSHOT_MINSIZE ((BUN) 1024*128)
-
 #define inTransaction(tr, obj) (((sql_base*)obj)->ts == tr->tid)
 
 static int log_update_col( sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
@@ -2122,16 +2120,8 @@ tr_log_delta( sql_trans *tr, sql_delta *
 
/* any inserts */
if (BUNlast(ins) > 0) {
-   assert(ATOMIC_GET(>nr_active)>0);
-   if (BUNlast(ins) > ins->batInserted &&
-   (cbat->ibase || BATcount(ins) <= SNAPSHOT_MINSIZE))
+   if (BUNlast(ins) > ins->batInserted)
ok = log_bat(store->logger, ins, cbat->name, tpe, id);
-   if (ok == GDK_SUCCEED &&
-   !cbat->ibase && BATcount(ins) > SNAPSHOT_MINSIZE) {
-   /* log new snapshot */
-   if ((ok = logger_add_bat(store->logger, ins, 
cbat->name, tpe, id)) == GDK_SUCCEED)
-   ok = log_bat_persists(store->logger, ins, 
cbat->name, tpe, id);
-   }
}
bat_destroy(ins);
 
@@ -2168,7 +2158,6 @@ tr_log_dbat(sql_trans *tr, sql_dbat *fdb
if(!db)
return LOG_ERR;
if (BUNlast(db) > 0) {
-   assert(ATOMIC_GET(>nr_active)>0);
if (BUNlast(db) > db->batInserted)
ok = log_bat(store->logger, db, fdb->dname, tpe, id);
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - adapted interface of find_sql_table* function...

2021-01-04 Thread Niels Nes
Changeset: a6f4d2ee4a53 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a6f4d2ee4a53
Modified Files:
sql/backends/monet5/sql_upgrades.c
sql/backends/monet5/sql_user.c
sql/common/sql_list.c
sql/include/sql_catalog.h
sql/server/rel_distribute.c
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/sql_mvc.c
sql/server/sql_partition.c
sql/server/sql_privileges.c
sql/storage/bat/bat_storage.c
sql/storage/sql_catalog.c
sql/storage/store.c
sql/storage/store_dependency.c
Branch: nospare
Log Message:

adapted interface of find_sql_table* functions, all will need the transaction.


diffs (truncated from 1826 to 300 lines):

diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -2852,7 +2852,7 @@ SQLupgrades(Client c, mvc *m)
m->errstr[0] = '\0';
sqlstore *store = m->session->tr->store;
if (f && sql_privilege(m, ROLE_PUBLIC, f->func->base.id, PRIV_EXECUTE) 
!= PRIV_EXECUTE) {
-   sql_table *privs = find_sql_table(s, "privileges");
+   sql_table *privs = find_sql_table(m->session->tr, s, 
"privileges");
int pub = ROLE_PUBLIC, p = PRIV_EXECUTE, zero = 0;
 
store->table_api.table_insert(m->session->tr, privs, 
>func->base.id, , , , );
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -45,7 +45,7 @@ monet5_drop_user(ptr _mvc, str user)
return FALSE;
}
sys = find_sql_schema(m->session->tr, "sys");
-   users = find_sql_table(sys, "db_user_info");
+   users = find_sql_table(m->session->tr, sys, "db_user_info");
users_name = find_sql_column(users, "name");
 
sqlstore *store = m->session->tr->store;
@@ -176,8 +176,8 @@ monet5_create_user(ptr _mvc, str user, s
return ret;
 
user_id = store_next_oid(m->session->tr->store);
-   db_user_info = find_sql_table(s, "db_user_info");
-   auths = find_sql_table(s, "auths");
+   db_user_info = find_sql_table(m->session->tr, s, "db_user_info");
+   auths = find_sql_table(m->session->tr, s, "auths");
store->table_api.table_insert(m->session->tr, db_user_info, user, 
fullname, _id, schema_path);
store->table_api.table_insert(m->session->tr, auths, _id, user, 
);
return NULL;
@@ -316,7 +316,7 @@ monet5_schema_has_user(ptr _mvc, sql_sch
mvc *m = (mvc *) _mvc;
oid rid;
sql_schema *sys = find_sql_schema(m->session->tr, "sys");
-   sql_table *users = find_sql_table(sys, "db_user_info");
+   sql_table *users = find_sql_table(m->session->tr, sys, "db_user_info");
sql_column *users_schema = find_sql_column(users, "default_schema");
sqlid schema_id = s->base.id;
 
@@ -407,7 +407,7 @@ monet5_alter_user(ptr _mvc, str user, st
sqlstore *store = m->session->tr->store;
if (schema_id) {
sql_schema *sys = find_sql_schema(m->session->tr, "sys");
-   sql_table *info = find_sql_table(sys, "db_user_info");
+   sql_table *info = find_sql_table(m->session->tr, sys, 
"db_user_info");
sql_column *users_name = find_sql_column(info, "name");
sql_column *users_schema = find_sql_column(info, 
"default_schema");
 
@@ -420,7 +420,7 @@ monet5_alter_user(ptr _mvc, str user, st
 
if (schema_path) {
sql_schema *sys = find_sql_schema(m->session->tr, "sys");
-   sql_table *info = find_sql_table(sys, "db_user_info");
+   sql_table *info = find_sql_table(m->session->tr, sys, 
"db_user_info");
sql_column *users_name = find_sql_column(info, "name");
sql_column *sp = find_sql_column(info, "schema_path");
 
@@ -447,9 +447,9 @@ monet5_rename_user(ptr _mvc, str olduser
str err;
oid rid;
sql_schema *sys = find_sql_schema(m->session->tr, "sys");
-   sql_table *info = find_sql_table(sys, "db_user_info");
+   sql_table *info = find_sql_table(m->session->tr, sys, "db_user_info");
sql_column *users_name = find_sql_column(info, "name");
-   sql_table *auths = find_sql_table(sys, "auths");
+   sql_table *auths = find_sql_table(m->session->tr, sys, "auths");
sql_column *auths_name = find_sql_column(auths, "name");
 
if ((err = AUTHchangeUsername(c, olduser, newuser)) !=MAL_SUCCEED) {
@@ -485,10 +485,10 @@ monet5_schema_user_dependencies(ptr _tra
sql_trans *tr = (sql_trans *) _trans;
sql_schema *s = find_sql_schema(tr, "sys");
 
-   sql_table *auths = find_sql_table(s, "auths");
+   sql_table *auths = find_sql_table(tr, s, "auths");
sql_column *auth_name = find_sql_column(auths, 

MonetDB: nospare - make sure we use the ibat on new tables

2021-01-04 Thread Niels Nes
Changeset: e726045821ef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e726045821ef
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: nospare
Log Message:

make sure we use the ibat on new tables


diffs (175 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
@@ -213,7 +213,7 @@ bind_col(sql_trans *tr, sql_column *c, i
}
if (access == RD_UPD_ID || access == RD_UPD_VAL)
return bind_ucol(tr, c, access);
-   return delta_bind_bat( c->data, access, isTempTable(c->t));
+   return delta_bind_bat( c->data, access, isTempTable(c->t) || 
inTransaction(tr, c->t));
 }
 
 static BAT *
@@ -228,7 +228,7 @@ bind_idx(sql_trans *tr, sql_idx * i, int
}
if (access == RD_UPD_ID || access == RD_UPD_VAL)
return bind_uidx(tr, i, access);
-   return delta_bind_bat( i->data, access, isTempTable(i->t));
+   return delta_bind_bat( i->data, access, isTempTable(i->t) || 
inTransaction(tr, i->t));
 }
 
 static int
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -161,7 +161,7 @@ column_destroy(sql_column *c)
 }
 
 static void
-table_destroy(sqlstore *store, sql_table *t)
+table_destroy(sqlstore *store, sql_table *t, ulng commit_ts)
 {
sql_table *older = (sql_table*)t->base.older;
sql_table *newer = (sql_table*)t->base.newer;
@@ -170,30 +170,42 @@ table_destroy(sqlstore *store, sql_table
if (--(t->base.refcnt) > 0)
return;
 
-   if (older)
-   table_destroy(store, older);
+   if (older && commit_ts) {
+   table_destroy(store, older, commit_ts);
+   older = NULL;
+   }
t->base.older = NULL;
 
-   if (newer)
+   if (newer && commit_ts)
newer->base.older = NULL;
+   else if (newer && older)
+   newer->base.older = >base;
 
node *tn = list_find(t->s->tables.set, t, NULL);
if (tn)
list_remove_node(t->s->tables.set, tn);
 
-   if (isTable(t) && (!newer || newer->data != t->data))
+   if (isTable(t) &&
+   (!newer || newer->data != t->data) &&
+   (!older || older->data != t->data) )
store->storage_api.destroy_del(store, t);
-   if (t->members && (!newer || newer->members != t->members)) {
+   if (t->members &&
+   (!newer || (newer->members != t->members)) &&
+   (!older || (older->members != t->members))) {
list_destroy(t->members);
t->members = NULL;
}
-   if (!newer || newer->keys.set != t->keys.set)
+   if ((!newer || newer->keys.set != t->keys.set) &&
+   (!older || older->keys.set != t->keys.set))
cs_destroy(>keys);
-   if (!newer || newer->idxs.set != t->idxs.set)
+   if ((!newer || newer->idxs.set != t->idxs.set) &&
+   (!older || older->idxs.set != t->idxs.set))
cs_destroy(>idxs);
-   if (!newer || newer->triggers.set != t->triggers.set)
+   if ((!newer || newer->triggers.set != t->triggers.set) &&
+   (!older || older->triggers.set != t->triggers.set))
cs_destroy(>triggers);
-   if (!newer || newer->columns.set != t->columns.set)
+   if ((!newer || newer->columns.set != t->columns.set) &&
+   (!older || older->columns.set != t->columns.set))
cs_destroy(>columns);
 }
 
@@ -203,10 +215,10 @@ tc_gc_table(sqlstore *store, sql_change 
sql_table *t = (sql_table*)change->obj;
 
(void)store;
-   if (t->base.deleted) {
-   if (t->base.ts < oldest || (t->base.ts == commit_ts && 
commit_ts == oldest)) {
+   if (t->base.deleted || !commit_ts) {
+   if (t->base.ts < oldest || (t->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
int ok = LOG_OK;
-   table_destroy(store, t);
+   table_destroy(store, t, commit_ts);
if (ok == LOG_OK)
return 1; /* handled */
else
@@ -223,7 +235,7 @@ tc_log_table(sql_trans *tr, sql_change *
sql_table *t = (sql_table*)change->obj;
sqlstore *store = tr->store;
 
-   if (isTable(t)) {
+   if (isTable(t) && !isTempTable(t)) {
if (t->base.deleted) {
ok = store->storage_api.log_destroy_del(tr, change, 
commit_ts, oldest);
} else { /* new table ? */
@@ -279,7 +291,7 @@ tc_gc_schema(sqlstore *store, sql_change
sql_schema *s = (sql_schema*)change->obj;
 
(void)store;
-   if (s->base.deleted) {
+   if (s->base.deleted || !commit_ts) {
if 

MonetDB: nospare - handle schema drops

2021-01-04 Thread Niels Nes
Changeset: 748048dae64e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=748048dae64e
Modified Files:
sql/include/sql_catalog.h
sql/storage/store.c
Branch: nospare
Log Message:

handle schema drops


diffs (110 lines):

diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -724,7 +724,7 @@ typedef struct sql_session {
backend_stack stk;
 } sql_session;
 
-extern void schema_destroy(sql_schema *s);
+//extern void schema_destroy(sql_schema *s);
 //extern void table_destroy(sql_table *t);
 extern void column_destroy(sql_column *c);
 extern void key_destroy(sql_key *k);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -233,21 +233,66 @@ tc_log_table(sql_trans *tr, sql_change *
return ok;
 }
 
-void
-schema_destroy(sql_schema *s)
-{
-   cs_destroy(>parts);
-   cs_destroy(>tables);
-   cs_destroy(>funcs);
-   cs_destroy(>types);
-   list_destroy(s->keys);
-   list_destroy(s->idxs);
-   list_destroy(s->triggers);
+static void
+schema_destroy(sqlstore *store, sql_schema *s)
+{
+   sql_schema *older = (sql_schema*)s->base.older;
+   sql_schema *newer = (sql_schema*)s->base.newer;
+
+   assert(s->base.refcnt == 1);
+   if (--(s->base.refcnt) > 0)
+   return;
+
+   if (older)
+   schema_destroy(store, older);
+   s->base.older = NULL;
+
+   if (newer)
+   newer->base.older = NULL;
+
+   node *sn = list_find(store->cat->schemas.set, s, NULL);
+   if (sn)
+   list_remove_node(store->cat->schemas.set, sn);
+
+   if (!newer || newer->parts.set != s->parts.set)
+   cs_destroy(>parts);
+   if (!newer || newer->tables.set != s->tables.set)
+   cs_destroy(>tables);
+   if (!newer || newer->funcs.set != s->funcs.set)
+   cs_destroy(>funcs);
+   if (!newer || newer->types.set != s->types.set)
+   cs_destroy(>types);
+   if (!newer || newer->keys != s->keys)
+   list_destroy(s->keys);
+   if (!newer || newer->idxs != s->idxs)
+   list_destroy(s->idxs);
+   if (!newer || newer->triggers != s->triggers)
+   list_destroy(s->triggers);
s->keys = NULL;
s->idxs = NULL;
s->triggers = NULL;
 }
 
+static int
+tc_gc_schema(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
+{
+   sql_schema *s = (sql_schema*)change->obj;
+
+   (void)store;
+   if (s->base.deleted) {
+   if (s->base.ts < oldest || (s->base.ts == commit_ts && 
commit_ts == oldest)) {
+   int ok = LOG_OK;
+   schema_destroy(store, s);
+   if (ok == LOG_OK)
+   return 1; /* handled */
+   else
+   return LOG_ERR;
+   }
+   }
+   return 0;
+}
+
+
 sql_trans *
 sql_trans_destroy(sql_trans *tr)
 {
@@ -4141,7 +4186,16 @@ sql_trans_drop_schema(sql_trans *tr, sql
sys_drop_sequences(tr, s, drop_action);
sql_trans_drop_any_comment(tr, s->base.id);
sql_trans_drop_obj_priv(tr, s->base.id);
-   cs_del(>cat->schemas, n, s->base.flags);
+
+   sql_schema *ds = SA_ZNEW(tr->sa, sql_schema);
+   *ds = *s;
+   ds->base.ts = tr->tid;
+   ds->base.deleted = 1;
+   ds->base.older = >base;
+   s->base.newer = >base;
+   trans_add(tr, >base, NULL, _gc_schema, NULL);
+   list_update_data(tr->cat->schemas.set, n, ds);
+   //cs_del(>cat->schemas, n, s->base.flags);
 
if (drop_action == DROP_CASCADE_START && tr->dropped) {
list_destroy(tr->dropped);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - run first set off tests again (most fail).

2021-01-04 Thread Niels Nes
Changeset: a952a4f1c129 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a952a4f1c129
Modified Files:
sql/common/sql_list.c
sql/server/sql_mvc.c
sql/storage/store.c
Branch: nospare
Log Message:

run first set off tests again (most fail).


diffs (61 lines):

diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -771,10 +771,12 @@ void
 list_update_data(list *l, node *n, void *data)
 {
MT_lock_set(>ht_lock);
-   hash_delete(l->ht, n->data);
-   n->data = data;
-   int nkey = l->ht->key(data);
-   hash_add(l->ht, nkey, data);
+   if (l->ht) {
+   hash_delete(l->ht, n->data);
+   n->data = data;
+   int nkey = l->ht->key(data);
+   hash_add(l->ht, nkey, data);
+   }
MT_lock_unset(>ht_lock);
 }
 
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -628,11 +628,13 @@ mvc_rollback(mvc *m, int chain, const ch
if (tr->name)
tr->name = NULL;
m->session->schema = find_sql_schema(m->session->tr, 
m->session->schema_name);
-   } else if (tr->parent) {
+   } else { //if (tr->parent) {
/* first release all intermediate savepoints */
+   /* savepoints !
while (tr->parent->parent != NULL) {
tr = sql_trans_destroy(tr);
}
+   */
m->session-> tr = tr;
/* make sure we do not reuse changed data */
if (tr->changes)
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3263,7 +3263,6 @@ sql_trans_create_(sqlstore *store, sql_t
 
tr->sa = store->sa;
tr->store = store;
-   tr->active = 1;
tr->tid = store_transaction_id(store);
 
if (name)
@@ -3289,8 +3288,10 @@ sql_trans *
 sql_trans_create(sqlstore *store, sql_trans *parent, const char *name)
 {
sql_trans *tr = sql_trans_create_(store, parent, name);
-   if (tr)
+   if (tr) {
tr->ts = store_timestamp(store);
+   tr->active = 1;
+   }
return tr;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - more cleanup

2021-01-04 Thread Niels Nes
Changeset: 8ff7cb28d317 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8ff7cb28d317
Modified Files:
sql/common/sql_list.c
sql/include/sql_catalog.h
sql/include/sql_list.h
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_utils.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

more cleanup
now handles drop table


diffs (truncated from 1070 to 300 lines):

diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -50,6 +50,14 @@ sa_list(sql_allocator *sa)
 }
 
 list *
+sa_list_append(sql_allocator *sa, list *l, void *data)
+{
+   if (!l)
+   l = sa_list(sa);
+   return list_append(l, data);
+}
+
+list *
 list_new(sql_allocator *sa, fdestroy destroy)
 {
list *l = (sa)?SA_NEW(sa, list):MNEW(list);
@@ -760,6 +768,17 @@ list_flaten(list *l)
 }
 
 void
+list_update_data(list *l, node *n, void *data)
+{
+   MT_lock_set(>ht_lock);
+   hash_delete(l->ht, n->data);
+   n->data = data;
+   int nkey = l->ht->key(data);
+   hash_add(l->ht, nkey, data);
+   MT_lock_unset(>ht_lock);
+}
+
+void
 list_hash_delete(list *l, void *data, fcmp cmp)
 {
if (l && data) {
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -197,13 +197,14 @@ typedef enum commit_action_t {
 typedef int sqlid;
 
 typedef struct sql_base {
-   int allocated;
+   int deleted;
int flags;
int refcnt;
sqlid id;
char *name;
ulng ts;/* transaction start timestamp 
*/
-   struct sql_base *next;  /* older versions */
+   struct sql_base *older; /* older versions */
+   struct sql_base *newer; /* newer version */
 } sql_base;
 
 #define newFlagSet(x) ((x & TR_NEW) == TR_NEW)
@@ -267,14 +268,15 @@ typedef struct sql_catalog {
 typedef struct sql_trans {
char *name;
 
-   ulng ts;/* transaction start timestamp */
-   ulng tid;   /* transaction id */
+   ulng ts;/* transaction start timestamp */
+   ulng tid;   /* transaction id */
 
sql_store store;/* keep link into the global store */
-   list *changes;  /* list of changes */
+   list *changes;  /* list of changes */
 
-   int active; /* active transaction */
-   int status; /* status of the last query */
+   int active; /* is active transaction */
+   int status; /* status of the last query */
+
list *dropped;  /* protection against recursive cascade action*/
list *moved_tables;
 
@@ -723,7 +725,7 @@ typedef struct sql_session {
 } sql_session;
 
 extern void schema_destroy(sql_schema *s);
-extern void table_destroy(sql_table *t);
+//extern void table_destroy(sql_table *t);
 extern void column_destroy(sql_column *c);
 extern void key_destroy(sql_key *k);
 extern void idx_destroy(sql_idx * i);
diff --git a/sql/include/sql_list.h b/sql/include/sql_list.h
--- a/sql/include/sql_list.h
+++ b/sql/include/sql_list.h
@@ -38,6 +38,8 @@ extern list *list_create(fdestroy destro
 sql_export list *sa_list(sql_allocator *sa);
 extern list *list_new(sql_allocator *sa, fdestroy destroy);
 
+extern list *sa_list_append( sql_allocator *sa, list *l, void *data);
+
 extern void list_destroy(list *l);
 sql_export int list_length(list *l);
 extern int list_empty(list *l);
@@ -101,5 +103,6 @@ extern list *list_flaten(list *l);
 extern void list_hash_delete(list *l, void *data, fcmp cmp);
 extern void* list_hash_add(list *l, void *data, fcmp cmp);
 extern void list_hash_clear(list *l);
+extern void list_update_data(list *l, node *n, void *data);
 
 #endif /* LIST_H */
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
@@ -19,23 +19,9 @@
 static int log_update_col( sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
 static int log_update_idx( sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
 static int log_update_del( sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_create_col(sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_create_idx(sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_create_del(sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_destroy_col(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
-static int log_destroy_idx(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
-static int log_destroy_del(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
 
 static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
 
-static list *

MonetDB: nospare - merged with default

2021-01-04 Thread Niels Nes
Changeset: 00c3b5eaa572 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=00c3b5eaa572
Modified Files:
sql/backends/monet5/sql_user.c
sql/server/rel_updates.c
sql/server/sql_privileges.c
Branch: nospare
Log Message:

merged with default


diffs (truncated from 647 to 300 lines):

diff --git a/documentation/source/developers_handbook.rst 
b/documentation/source/developers_handbook.rst
--- a/documentation/source/developers_handbook.rst
+++ b/documentation/source/developers_handbook.rst
@@ -100,4 +100,21 @@ index ``All`` file.
 Python tests API
 
 
-See many of the examples in ``sql/test/Users/Tests``.
+We are using ``pymonetdb`` client in our testing infrastructure heavily. All 
.py tests needs to log errors in ``stderror``
+and exit abnormally if failure is present. To ease up writing testing scripts 
the ``SQLTestCase`` class from ``MonetDBtesting`` 
+module can be utilized. Following is an example of the ``SQLTestCase`` API::
+
+from MonetDBtesting.sqltest import SQLTestCase
+
+from decimal import Decimal
+
+with SQLTestCase() as tc:
+# using default connection context
+tc.connect()
+# insert into non-existing table
+tc.execute('insert into foo values (888.42), 
(444.42);').assertFailed(err_code='42S02')
+tc.execute('create table foo (salary 
decimal(10,2));').assertSucceeded()
+tc.execute('insert into foo values (888.42), 
(444.42);').assertSucceeded().assertRowCount(2)
+tc.execute('select * from 
foo;').assertSucceeded().assertDataResultMatch([(Decimal('888.42'),), 
(Decimal('444.42'),)])
+
+For more examples check out tests in ``sql/test/Users/Tests``.
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -35,7 +35,7 @@ monet5_drop_user(ptr _mvc, str user)
str err;
Client c = MCgetClient(m->clientid);
 
-   int grant_user = c->user;
+   oid grant_user = c->user;
c->user = MAL_ADMIN;
err = AUTHremoveUser(c, user);
c->user = grant_user;
@@ -166,7 +166,7 @@ monet5_create_user(ptr _mvc, str user, s
pwd = passwd;
}
/* add the user to the M5 authorisation administration */
-   int grant_user = c->user;
+   oid grant_user = c->user;
c->user = MAL_ADMIN;
ret = AUTHaddUser(, c, user, pwd);
c->user = grant_user;
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1244,7 +1244,7 @@ merge_into_table(sql_query *query, dlist
mvc *sql = query->sql;
char *sname = qname_schema(qname), *tname = qname_schema_object(qname);
sql_table *t = NULL;
-   sql_rel *bt, *joined, *join_rel = NULL, *extra_project, *insert = NULL, 
*upd_del = NULL, *res = NULL;
+   sql_rel *bt, *joined, *join_rel = NULL, *extra_project, *insert = NULL, 
*upd_del = NULL, *res = NULL, *no_tid = NULL;
int processed = 0;
const char *bt_name;
 
@@ -1347,7 +1347,9 @@ merge_into_table(sql_query *query, dlist
 
//project joined values which didn't match on the join 
and insert them
extra_project = rel_project(sql->sa, join_rel, 
rel_projections(sql, joined, NULL, 1, 0));
-   extra_project = rel_setop(sql->sa, rel_dup(joined), 
extra_project, op_except);
+   no_tid = rel_project(sql->sa, rel_dup(joined), 
rel_projections(sql, joined, NULL, 1, 0));
+   extra_project = rel_setop(sql->sa, no_tid, 
extra_project, op_except);
+   rel_setop_set_exps(sql, extra_project, 
rel_projections(sql, extra_project, NULL, 1, 0));
 
if (!(insert = merge_generate_inserts(query, t, 
extra_project, sts->h->data.lval, sts->h->next->data.sym)))
return NULL;
diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -842,11 +842,12 @@ sql_alter_user(mvc *sql, char *user, cha
if (strNil(user))
user = NULL;
/* USER == NULL -> current_user */
-   if (user != NULL && backend_find_user(sql, user) < 0)
-   throw(SQL,"sql.alter_user", SQLSTATE(42M32) "ALTER USER: no 
such user '%s'", user);
 
if (!admin_privs(sql->user_id) && !admin_privs(sql->role_id) && user != 
NULL && strcmp(user, get_string_global_var(sql, "current_user")) != 0)
throw(SQL,"sql.alter_user", SQLSTATE(M1M05) "Insufficient 
privileges to change user '%s'", user);
+
+   if (user != NULL && backend_find_user(sql, user) < 0)
+   throw(SQL,"sql.alter_user", SQLSTATE(42M32) "ALTER USER: no 
such user '%s'", user);
if (schema && (schema_id = sql_find_schema(sql, schema)) < 0)

MonetDB: nospare - mvcc using a single catalog tree with chains ...

2021-01-04 Thread Niels Nes
Changeset: 7c042c27748f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7c042c27748f
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_result.c
sql/include/sql_catalog.h
sql/server/sql_mvc.c
sql/server/sql_partition.c
sql/server/sql_privileges.c
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_storage.h
sql/storage/bat/bat_table.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

mvcc using a single catalog tree with chains of versions (ie objects can be 
chained (most recent object first), and content (delta storage) is chained)


diffs (truncated from 6164 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -5363,8 +5363,6 @@ sql_truncate(backend *be, sql_table *t, 
error = 1;
goto finalize;
}
-   seq->base.wtime = 
sche->base.wtime = tr->wtime = tr->wstime;
-   tr->schema_updates++;
}
}
}
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
@@ -959,7 +959,7 @@ mvc_getVersion(lng *version, const int *
return msg;
*version = -1;
if (m->session->tr)
-   *version = m->session->tr->stime;
+   *version = (lng)m->session->tr->ts;
return MAL_SUCCEED;
 }
 
@@ -1350,13 +1350,9 @@ mvc_insert_delta_values(mvc *m, BAT *col
return createException(SQL,"sql.delta", SQLSTATE(HY013) 
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)
+   if (c) {
+   for(sql_delta *d = c->data; d; d = d->next)
level++;
-   }
}
if (BUNappend(col7, , false) != GDK_SUCCEED) {
return createException(SQL,"sql.delta", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -921,7 +921,6 @@ alter_table(Client cntxt, mvc *sql, char
if (c->storage_type != nc->storage_type) {
if (c->t->access == TABLE_WRITABLE)
throw(SQL,"sql.alter_table", SQLSTATE(40002) 
"ALTER TABLE: SET STORAGE for column %s.%s only allowed on READ or INSERT ONLY 
tables", c->t->base.name, c->base.name);
-   nc->base.rtime = nc->base.wtime = 
sql->session->tr->wtime;
mvc_storage(sql, nc, c->storage_type);
}
}
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
@@ -851,7 +851,6 @@ mvc_import_table(Client cntxt, BAT ***ba
BAT *b = 
store->storage_api.bind_col(m->session->tr, c, RDONLY);
sql_delta *d = c->data;
 
-   c->base.wtime = t->base.wtime = 
t->s->base.wtime = m->session->tr->wtime = m->session->tr->wstime;
if ( b == NULL)
sql_error(m, 500, "failed to bind to 
delta column");
else {
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -197,14 +197,13 @@ typedef enum commit_action_t {
 typedef int sqlid;
 
 typedef struct sql_base {
-   int wtime;
-   int rtime;
-   int stime;
int allocated;
int flags;
int refcnt;
sqlid id;
char *name;
+   ulng ts;/* transaction start timestamp 
*/
+   struct sql_base *next;  /* older versions */
 } sql_base;
 
 #define newFlagSet(x) ((x & TR_NEW) == TR_NEW)
@@ -267,14 +266,13 @@ typedef struct sql_catalog {
 
 typedef struct sql_trans {
char *name;
-   int ts; /* transaction timestamp */
-   sql_store store;/* keep link into the global store */
+
+   ulng ts;/* transaction start timestamp */
+   ulng tid;   /* transaction id */
 
-   int stime;  /* start of transaction */

MonetDB: nospare - merged with default

2021-01-04 Thread Niels Nes
Changeset: fde08e68dc41 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fde08e68dc41
Modified Files:
gdk/gdk_logger.c
gdk/gdk_logger.h
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_user.c
sql/server/rel_optimizer.c
sql/server/rel_updates.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: nospare
Log Message:

merged with default


diffs (truncated from 2244 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -187,6 +187,8 @@ need this package, but you will also nee
 package, and most likely also %{name}-SQL-server5, as well as one or
 more client packages.
 
+%ldconfig_scriptlets
+
 %files
 %license COPYING
 %defattr(-,root,root)
@@ -572,6 +574,7 @@ used from the MAL level.
 %files -n MonetDB5-server-devel
 %defattr(-,root,root)
 %{_includedir}/monetdb/mal*.h
+%{_includedir}/monetdb/mel.h
 %{_libdir}/libmonetdb5.so
 %{_libdir}/pkgconfig/monetdb5.pc
 
@@ -635,6 +638,24 @@ configuration.
 %docdir %{_datadir}/doc/MonetDB-SQL
 %{_datadir}/doc/MonetDB-SQL/*
 
+%package SQL-server5-devel
+Summary: MonetDB5 SQL server modules
+Group: Applications/Databases
+Requires: %{name}-SQL-server5%{?_isa} = %{version}-%{release}
+Requires: MonetDB5-server-devel%{?_isa} = %{version}-%{release}
+
+%description SQL-server5-devel
+MonetDB is a database management system that is developed from a
+main-memory perspective with use of a fully decomposed storage model,
+automatic index management, extensibility of data types and search
+accelerators.  It also has an SQL front end.
+
+This package contains files needed to develop SQL extensions.
+
+%files SQL-server5-devel
+%defattr(-,root,root)
+%{_includedir}/monetdb/sql*.h
+
 %package embedded
 Summary: MonetDB as an embedded library
 Group: Applications/Databases
@@ -847,10 +868,6 @@ sed -i 's|/var/run|/run|' \
 %{buildroot}%{_unitdir}/monetdbd.service
 %endif
 
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
 %changelog
 * Wed Nov 18 2020 Sjoerd Mullender  - 11.39.7-20201118
 - Rebuilt.
diff --git a/NT/mksqlwxs.py b/NT/mksqlwxs.py
--- a/NT/mksqlwxs.py
+++ b/NT/mksqlwxs.py
@@ -173,9 +173,10 @@ def main():
 print(r'')
 print(r'  ')
 id = comp(extend, id, 16,
-  sorted([r'include\monetdb\{}'.format(x) for x in filter(lambda 
x: (x.startswith('gdk') or x.startswith('monet') or x.startswith('mal')) and 
x.endswith('.h'), os.listdir(os.path.join(sys.argv[3], 'include', 'monetdb')))] 
+
+  sorted([r'include\monetdb\{}'.format(x) for x in filter(lambda 
x: (x.startswith('gdk') or x.startswith('monet') or x.startswith('mal') or 
x.startswith('sql')) and x.endswith('.h'), os.listdir(os.path.join(sys.argv[3], 
'include', 'monetdb')))] +
  [r'include\monetdb\mapi.h',
   r'include\monetdb\matomic.h',
+  r'include\monetdb\mel.h',
   r'include\monetdb\mstring.h',
   r'include\monetdb\stream.h',
   r'include\monetdb\stream_socket.h']),
diff --git a/buildtools/coverity_model.c b/buildtools/coverity_model.c
--- a/buildtools/coverity_model.c
+++ b/buildtools/coverity_model.c
@@ -20,8 +20,13 @@
  * author: Sjoerd Mullender
  */
 
+int
+rand(void)
+{
+   /* ignore */
+}
+
 typedef enum { GDK_FAIL, GDK_SUCCEED } gdk_return;
-typedef struct {} *MalBlkPtr;
 
 void
 GDKfree(void *blk)
@@ -51,7 +56,8 @@ GDKzalloc(size_t size)
 {
void *p = GDKmalloc(size);
if (p) {
-   for (size_t i = 0; i < size; i++)
+   size_t i;
+   for (i = 0; i < size; i++)
((char *) p)[i] = 0;
}
return p;
@@ -136,6 +142,24 @@ GDKmremap(const char *path, int mode, vo
return p;
 }
 
+typedef struct {} *MalBlkPtr;
+enum malexception {
+   MAL,
+   ILLARG /*,
+   OUTOFBNDS,
+   IO,
+   INVCRED,
+   OPTIMIZER,
+   STKOF,
+   SYNTAX,
+   TYPE,
+   LOADER,
+   PARSE,
+   ARITH,
+   PERMD,
+   SQL */
+};
+
 char *
 createException(enum malexception type, const char *fcn, const char *format, 
...)
 {
@@ -177,8 +201,8 @@ freeException(char *p)
 char *
 concatErrors(char *err1, const char *err2)
 {
+   char *p;
freeException(err1);
-   char *p;
p = __coverity_alloc_nosize__();
__coverity_mark_as_afm_allocated__(p, "freeException");
return p;
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
@@ -1301,7 +1301,7 @@ str io_stdin(Client cntxt, MalBlkPtr mb,
 str io_stdout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 int isBlocking(InstrPtr p);
 int isDelta(InstrPtr q);
-int isExceptionVariable(str nme);
+bool isExceptionVariable(const char *nme);
 int 

MonetDB: nospare - less globals in the server directory.

2021-01-04 Thread Niels Nes
Changeset: 2b1d1822daa3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2b1d1822daa3
Modified Files:
sql/backends/monet5/sql_scenario.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/storage/store.c
Branch: nospare
Log Message:

less globals in the server directory.


diffs (truncated from 599 to 300 lines):

diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -61,8 +61,7 @@ sql_register(const char *name, const uns
sql_modules++;
 }
 
-static int SQLinitialized = 0;
-static int SQLnewcatalog = 0;
+static sql_store SQLstore = NULL;
 int SQLdebug = 0;
 static const char *sqlinit = NULL;
 static MT_Lock sql_contextLock = MT_LOCK_INITIALIZER(sql_contextLock);
@@ -180,9 +179,9 @@ SQLexit(Client c)
 {
(void) c;   /* not used */
MT_lock_set(_contextLock);
-   if (SQLinitialized) {
-   mvc_exit();
-   SQLinitialized = FALSE;
+   if (SQLstore) {
+   mvc_exit(SQLstore);
+   SQLstore = NULL;
}
MT_lock_unset(_contextLock);
return MAL_SUCCEED;
@@ -231,7 +230,7 @@ SQLprepareClient(Client c, int login)
msg = createException(SQL,"sql.initClient", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto bailout;
}
-   m = mvc_create(sa, c->idx, SQLdebug, c->fdin, c->fdout);
+   m = mvc_create(SQLstore, sa, c->idx, SQLdebug, c->fdin, 
c->fdout);
if (m == NULL) {
msg = createException(SQL,"sql.initClient", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto bailout;
@@ -344,7 +343,7 @@ SQLinit(Client c)
 
MT_lock_set(_contextLock);
 
-   if (SQLinitialized) {
+   if (SQLstore) {
MT_lock_unset(_contextLock);
return MAL_SUCCEED;
}
@@ -366,11 +365,10 @@ SQLinit(Client c)
MT_lock_unset(_contextLock);
throw(SQL,"sql.init",SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
-   if ((SQLnewcatalog = mvc_init(sa, SQLdebug, GDKinmemory(0) ? store_mem 
: store_bat, readonly, single_user)) < 0) {
+   if ((SQLstore = mvc_init(sa, SQLdebug, GDKinmemory(0) ? store_mem : 
store_bat, readonly, single_user)) == NULL) {
MT_lock_unset(_contextLock);
throw(SQL, "SQLinit", SQLSTATE(42000) "Catalogue initialization 
failed");
}
-   SQLinitialized = TRUE;
sqlinit = GDKgetenv("sqlinit");
if (sqlinit) {  /* add sqlinit to the fdin stack */
buffer *b = (buffer *) GDKmalloc(sizeof(buffer));
@@ -413,17 +411,18 @@ SQLinit(Client c)
be = c->sqlcontext;
m = be->mvc;
/* initialize the database with predefined SQL functions */
-   if (SQLnewcatalog == 0) {
+   sqlstore *store = SQLstore;
+   if (store->first == 0) {
/* check whether table sys.systemfunctions exists: if
 * it doesn't, this is probably a restart of the
 * server after an incomplete initialization */
sql_schema *s = mvc_bind_schema(m, "sys");
sql_table *t = s ? mvc_bind_table(m, s, "systemfunctions") : 
NULL;
if (t == NULL)
-   SQLnewcatalog = 1;
+   store->first = 1;
}
-   if (SQLnewcatalog > 0) {
-   SQLnewcatalog = 0;
+   if (store->first > 0) {
+   store->first = 0;
maybeupgrade = 0;
 
for (int i = 0; i < sql_modules && !msg; i++) {
@@ -506,11 +505,11 @@ SQLinit(Client c)
if (GDKinmemory(0))
return MAL_SUCCEED;
 
-   if ((sqllogthread = THRcreate((void (*)(void *)) mvc_logmanager, NULL, 
MT_THR_DETACHED, "logmanager")) == 0) {
+   if ((sqllogthread = THRcreate((void (*)(void *)) mvc_logmanager, 
SQLstore, MT_THR_DETACHED, "logmanager")) == 0) {
throw(SQL, "SQLinit", SQLSTATE(42000) "Starting log manager 
failed");
}
if (!(SQLdebug&1024)) {
-   if ((idlethread = THRcreate((void (*)(void *)) mvc_idlemanager, 
NULL, MT_THR_DETACHED, "idlemanager")) == 0) {
+   if ((idlethread = THRcreate((void (*)(void *)) mvc_idlemanager, 
SQLstore, MT_THR_DETACHED, "idlemanager")) == 0) {
throw(SQL, "SQLinit", SQLSTATE(42000) "Starting idle 
manager failed");
}
}
@@ -600,7 +599,7 @@ SQLinitClient(Client c)
str msg = MAL_SUCCEED;
 
MT_lock_set(_contextLock);
-   if (SQLinitialized == 0) {
+   if (!SQLstore) {
MT_lock_unset(_contextLock);
throw(SQL, "SQLinitClient", SQLSTATE(42000) "Catalogue not 
available");
}
@@ -638,7 +637,7 @@ SQLexitClient(Client c)
str err;
 

MonetDB: nospare - large step towards no-globals

2021-01-04 Thread Niels Nes
Changeset: 19801b4a1170 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=19801b4a1170
Modified Files:
gdk/gdk_logger.c
gdk/gdk_logger.h
gdk/gdk_logger_internals.h
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_optimizer.c
sql/backends/monet5/sql_orderidx.c
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statistics.c
sql/backends/monet5/sql_upgrades.c
sql/backends/monet5/sql_user.c
sql/backends/monet5/vaults/fits/fits.c
sql/backends/monet5/vaults/netcdf/netcdf.c
sql/backends/monet5/vaults/shp/shp.c
sql/backends/monet5/wlr.c
sql/common/sql_types.c
sql/include/sql_catalog.h
sql/server/rel_optimizer.c
sql/server/rel_partition.c
sql/server/rel_planner.c
sql/server/rel_psm.c
sql/server/rel_schema.c
sql/server/rel_sequence.c
sql/server/rel_updates.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_privileges.c
sql/storage/bat/bat_logger.c
sql/storage/bat/bat_logger.h
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_table.c
sql/storage/sql_storage.h
sql/storage/store.c
sql/storage/store_dependency.c
sql/storage/store_sequence.c
sql/storage/store_sequence.h
tools/monetdbe/monetdbe.c
Branch: nospare
Log Message:

large step towards no-globals


diffs (truncated from 8701 to 300 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1433,7 +1433,7 @@ check_version(logger *lg, FILE *fp)
}
if (version != lg->version) {
if (lg->prefuncp == NULL ||
-   (*lg->prefuncp)(version, lg->version) != GDK_SUCCEED) {
+   (*lg->prefuncp)(lg->funcdata, version, lg->version) != 
GDK_SUCCEED) {
GDKerror("Incompatible database version %06d, "
 "this server supports version %06d.\n%s",
 version, lg->version,
@@ -2293,7 +2293,7 @@ logger_load(int debug, const char *fn, c
lg->convert_date = false;
}
 #endif
-   if (lg->postfuncp && (*lg->postfuncp)(lg) != GDK_SUCCEED)
+   if (lg->postfuncp && (*lg->postfuncp)(lg->funcdata, lg) != 
GDK_SUCCEED)
goto error;
 
/* done reading the log, revert to "normal" behavior */
@@ -2328,7 +2328,7 @@ logger_load(int debug, const char *fn, c
 /* Initialize a new logger
  * It will load any data in the logdir and persist it in the BATs*/
 static logger *
-logger_new(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
+logger_new(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata)
 {
int len;
logger *lg;
@@ -2383,6 +2383,7 @@ logger_new(int debug, const char *fn, co
 
lg->prefuncp = prefuncp;
lg->postfuncp = postfuncp;
+   lg->funcdata = funcdata;
lg->log = NULL;
lg->end = 0;
lg->catalog_bid = NULL;
@@ -2411,10 +2412,10 @@ logger_restart(logger *lg)
 
 /* Create a new logger */
 logger *
-logger_create(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
+logger_create(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata)
 {
logger *lg;
-   lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp);
+   lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp, 
funcdata);
if (lg == NULL)
return NULL;
if (lg->debug & 1) {
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -11,8 +11,8 @@
 
 #define LOGFILE "log"
 
-typedef gdk_return (*preversionfix_fptr)(int oldversion, int newversion);
-typedef gdk_return (*postversionfix_fptr)(void *lg);
+typedef gdk_return (*preversionfix_fptr)(void *data, int oldversion, int 
newversion);
+typedef gdk_return (*postversionfix_fptr)(void *data, void *lg);
 
 typedef struct logger logger;
 
@@ -38,7 +38,7 @@ typedef int log_bid;
 #define LOG_COL 2
 #define LOG_IDX 3
 
-gdk_export logger *logger_create(int debug, const char *fn, const char 
*logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr 
postfuncp);
+gdk_export logger *logger_create(int debug, const char *fn, const char 
*logdir, int version, preversionfix_fptr prefuncp, 

MonetDB: nospare - split transaction rollback/reset code

2021-01-04 Thread Niels Nes
Changeset: 29e0af6d139c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29e0af6d139c
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

split transaction rollback/reset code


diffs (44 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3793,8 +3793,8 @@ schema_dup(sql_trans *tr, int flags, sql
return s;
 }
 
-static sql_catalog *
-sql_catalog_reset(sql_trans *tr, sql_catalog *ocat)
+static void
+sql_trans_rollback(sql_trans *tr)
 {
for (node *n = tr->cat->schemas.set->h; n; ) {
node *nxt = n->next;
@@ -3814,6 +3814,12 @@ sql_catalog_reset(sql_trans *tr, sql_cat
list_destroy(tr->moved_tables);
tr->moved_tables = NULL;
}
+}
+
+static sql_catalog *
+sql_trans_reset(sql_trans *tr, sql_catalog *ocat)
+{
+   assert(list_empty(tr->cat->schemas.set));
if (ocat->schemas.set) {
for (node *n = ocat->schemas.set->h; n; n = n->next) {
sql_schema *s = n->data;
@@ -7455,7 +7461,7 @@ sql_trans_begin(sql_session *s)
if (tr->parent && tr->parent == gtrans &&
(tr->stime < gtrans->wstime || tr->wtime ||
store_schema_number() != snr)) {
-   s->tr->cat = sql_catalog_reset(tr, gtrans->cat);
+   s->tr->cat = sql_trans_reset(tr, gtrans->cat);
sql_trans_reset_tmp(s->tr);
}
if (tr->parent == gtrans)
@@ -7477,6 +7483,7 @@ sql_trans_end(sql_session *s, int commit
 {
TRC_DEBUG(SQL_STORE, "End of transaction: %d\n", s->tr->schema_number);
sql_trans_rollback_tmp(s->tr, commit);
+   sql_trans_rollback(s->tr);
s->tr->active = 0;
s->auto_commit = s->ac_on_commit;
if (s->tr->parent == gtrans) {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - properly reset/rollback tmp schema

2021-01-04 Thread Niels Nes
Changeset: 30e56e4831f3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=30e56e4831f3
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

properly reset/rollback tmp schema


diffs (100 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -7318,7 +7318,7 @@ sql_session_destroy(sql_session *s)
 }
 
 static void
-sql_trans_reset_tmp(sql_trans *tr, int commit)
+sql_trans_rollback_tmp(sql_trans *tr, int commit)
 {
if (commit == 0 && tr->tmp->tables.nelm) {
for (node *n = tr->tmp->tables.nelm; n; ) {
@@ -7329,7 +7329,8 @@ sql_trans_reset_tmp(sql_trans *tr, int c
}
}
tr->tmp->tables.nelm = NULL;
-   if (tr->tmp->tables.set) {
+
+   if (tr->tmp && tr->tmp->tables.set) {
node *n;
for (n = tr->tmp->tables.set->h; n; ) {
node *nxt = n->next;
@@ -7343,6 +7344,60 @@ sql_trans_reset_tmp(sql_trans *tr, int c
n = nxt;
}
}
+}
+
+static void
+sql_trans_reset_tmp(sql_trans *tr)
+{
+   if (tr->tmp && tr->parent && tr->parent->tmp) {
+   sql_schema *fs = tr->tmp;
+   sql_schema *pfs = tr->parent->tmp;
+   if (fs->tables.set) {
+   node *n = NULL, *m = NULL;
+   if (pfs->tables.set)
+   m = pfs->tables.set->h;
+   for (n = fs->tables.set->h; m && n; ) {
+   sql_table *ftt = n->data;
+   sql_table *pftt = m->data;
+
+   /* lists ordered on id */
+   /* changes to the existing bases */
+   if (ftt->base.id == pftt->base.id) { /* global 
temp */
+   n = n->next;
+   m = m->next;
+   } else if (ftt->base.id < pftt->base.id) { /* 
local temp or old global ? */
+   node *t = n->next;
+
+   if (isGlobal(ftt)) /* remove old global 
*/
+   cs_remove_node(>tables, n);
+   n = t;
+   } else { /* a new global */
+   sql_table *ntt = table_dup(tr, 0, pftt, 
fs);
+
+   /* cs_add_before add ntt to fs before 
node n */
+   cs_add_before(>tables, n, ntt);
+   m = m->next;
+   }
+   }
+   /* add new globals */
+   for (; m; m = m->next ) {
+   sql_table *pftt = m->data;
+   sql_table *ntt = table_dup(tr, 0, pftt, fs);
+
+   assert(isGlobal(ntt));
+   /* cs_add_before add ntt to fs before node n */
+   cs_add_before(>tables, n, ntt);
+   }
+   while ( n) { /* remove remaining old stuff */
+   sql_table *ftt = n->data;
+   node *t = n->next;
+
+   if (isGlobal(ftt)) /* remove old global */
+   cs_remove_node(>tables, n);
+   n = t;
+   }
+   }
+   }
if (tr->tmp->funcs.set) {
node *n;
for (n = tr->tmp->funcs.nelm; n; ) {
@@ -7401,6 +7456,7 @@ sql_trans_begin(sql_session *s)
(tr->stime < gtrans->wstime || tr->wtime ||
store_schema_number() != snr)) {
s->tr->cat = sql_catalog_reset(tr, gtrans->cat);
+   sql_trans_reset_tmp(s->tr);
}
if (tr->parent == gtrans)
tr = trans_init(tr, tr->parent);
@@ -7420,7 +7476,7 @@ void
 sql_trans_end(sql_session *s, int commit)
 {
TRC_DEBUG(SQL_STORE, "End of transaction: %d\n", s->tr->schema_number);
-   sql_trans_reset_tmp(s->tr, commit); /* reset temp schema */
+   sql_trans_rollback_tmp(s->tr, commit);
s->tr->active = 0;
s->auto_commit = s->ac_on_commit;
if (s->tr->parent == gtrans) {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - drop new functions in the tmp schema on rollb...

2021-01-04 Thread Niels Nes
Changeset: c3ab5cb93db7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c3ab5cb93db7
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

drop new functions in the tmp schema on rollback.


diffs (19 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -7343,6 +7343,15 @@ sql_trans_reset_tmp(sql_trans *tr, int c
n = nxt;
}
}
+   if (tr->tmp->funcs.set) {
+   node *n;
+   for (n = tr->tmp->funcs.nelm; n; ) {
+   node *nxt = n->next;
+   list_remove_node(tr->tmp->funcs.set, n);
+   n = nxt;
+   }
+   tr->tmp->funcs.nelm = NULL;
+   }
 }
 
 int
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - merged

2021-01-04 Thread Niels Nes
Changeset: 9366974b94c0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9366974b94c0
Branch: nospare
Log Message:

merged


diffs (truncated from 301 to 300 lines):

diff --git a/documentation/source/developers_handbook.rst 
b/documentation/source/developers_handbook.rst
--- a/documentation/source/developers_handbook.rst
+++ b/documentation/source/developers_handbook.rst
@@ -70,7 +70,7 @@ directory where they reside::
 
 
 Adding sqllogic test
--
+
 
 See ``_ for detail 
information 
 on how to structure sqllogic test if you desire to make one by hand. We have 
extended the 
diff --git a/documentation/source/windowsbuild.rst 
b/documentation/source/windowsbuild.rst
deleted file mode 100644
--- a/documentation/source/windowsbuild.rst
+++ /dev/null
@@ -1,121 +0,0 @@
-.. This Source Code Form is subject to the terms of the Mozilla Public
-.. License, v. 2.0.  If a copy of the MPL was not distributed with this
-.. file, You can obtain one at http://mozilla.org/MPL/2.0/.
-..
-.. Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
-
-.. This document is written in reStructuredText (see
-   http://docutils.sourceforge.net/ for more information).
-   Use ``rst2html.py`` to convert this file to HTML.
-
-Building MonetDB On Windows
-+++
-
-In this document we describe how to build the MonetDB suite of
-programs on Windows using the sources from `our source repository`__.
-This document is mainly targeted at building on Windows on a 32-bit
-architecture, but there are notes throughout about building on Windows
-on a 64-bit architecture which is indicated with Windows64.  We have
-successfully built on Windows XP, Windows Server, and Windows 7.
-
-.. _MonetDB: https://dev.monetdb.org/hg/MonetDB/
-
-__ MonetDB_
-
-Introduction
-
-
-The MonetDB suite of programs consists of a number of components which
-we will describe briefly here.  The section names are the names of the
-top-level folders in the Mercurial clone.
-
-Note that in branches up to and including Oct2010 the build process
-was different.  This document describes the build process for the
-branch this document is part of.  Use the command ``hg branch`` to
-find out the name of the branch.
-
-buildtools
---
-
-The buildtools component contains tools that are used to build the
-other components.  This component is required, but not all parts of
-this component are required for all configurations.
-
-common
---
-
-Also known as the MonetDB Common component contains some generally
-useful libraries.  This component is required.
-
-gdk

-
-Also known as the Goblin Database Kernel contains the database kernel,
-i.e. the heart of MonetDB.  This component is required.
-
-clients

-
-Also known as the MonetDB Client component contains a library which
-forms the basis for communicating with the MonetDB server components,
-and some interface programs that use this library to communicate with
-the server.  This component is required.
-
-monetdb5
-
-
-The MonetDB5 Server component is the database server.  It uses MAL
-(the MonetDB Algebra Language) as programming interface.  This
-component is required.
-
-sql

-
-Also known as MonetDB SQL, this component provides an SQL frontend to
-MonetDB5.  This component is required if you need SQL support.
-
-tools
--
-
-The tools component contains two parts.  The mserver part is the
-actual database server binary and is required.  The merovingian part
-is not used on Windows.
-
-geom
-
-
-The geom component provides a module for the MonetDB SQL frontend.
-This component is optional.
-
-testing

-
-The testing component contains some files and programs we use for
-testing the MonetDB suite.  This component is optional.
-
-Prerequisites
-=
-
-In order to compile the MonetDB suite of programs, several other
-programs and libraries need to be installed.  Some further programs
-and libraries can be optionally installed to enable optional features.
-The required programs and libraries are listed in this section, the
-following section lists the optional programs and libraries.
-
-Chocolatey
---
-
-Although Chocolatey_ is not a prerequisite per se, it makes
-installing and maintaining some of the other prerequisites a lot
-easier.  Therefore we recommend installing chocolatey.  Instructions
-are on their website__.
-
-We have installed the following programs using Chocolatey_::
-
-  choco install ActivePerl ant cmake ruby
-  choco install python3 python3-x86_32
-
-.. _Chocolatey: https://chocolatey.org/
-
-__ Chocolatey_
-
diff --git a/sql/test/Users/Tests/All b/sql/test/Users/Tests/All
--- a/sql/test/Users/Tests/All
+++ b/sql/test/Users/Tests/All
@@ -12,6 +12,7 @@ schemaRights
 table_privs
 table
 view_privs
+view_privs_chain
 unknown_user
 userCallFunction
 withGrantOption
diff --git 

MonetDB: nospare - merged with default

2021-01-04 Thread Niels Nes
Changeset: b557019bea76 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b557019bea76
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_upgrades.c
sql/include/sql_catalog.h
sql/server/rel_updates.c
sql/server/sql_mvc.c
sql/server/sql_privileges.c
sql/storage/sql_catalog.c
Branch: nospare
Log Message:

merged with default


diffs (truncated from 14766 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9513,7 +9513,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog","alter_seq","pattern sqlcatalog.alter_seq(X_1:str, 
X_2:str, X_3:ptr, X_4:lng):void ",   "SQLalter_seq;",""  ]
 [ "sqlcatalog","alter_set_table",  "pattern 
sqlcatalog.alter_set_table(X_1:str, X_2:str, X_3:int):void ",  
"SQLalter_set_table;",  ""  ]
 [ "sqlcatalog","alter_table",  "pattern 
sqlcatalog.alter_table(X_1:str, X_2:str, X_3:ptr, X_4:int):void ", 
"SQLalter_table;",  ""  ]
-[ "sqlcatalog","alter_user",   "pattern sqlcatalog.alter_user(X_1:str, 
X_2:str, X_3:int, X_4:str, X_5:str):void ", "SQLalter_user;",   ""  
]
+[ "sqlcatalog","alter_user",   "pattern sqlcatalog.alter_user(X_1:str, 
X_2:str, X_3:int, X_4:str, X_5:str, X_6:str):void ","SQLalter_user;",   
""  ]
 [ "sqlcatalog","comment_on",   "pattern sqlcatalog.comment_on(X_1:int, 
X_2:str):void ","SQLcomment_on;",   ""  ]
 [ "sqlcatalog","create_function",  "pattern 
sqlcatalog.create_function(X_1:str, X_2:str, X_3:ptr):void ",  
"SQLcreate_function;",  ""  ]
 [ "sqlcatalog","create_role",  "pattern 
sqlcatalog.create_role(X_1:str, X_2:str, X_3:int):void ",  
"SQLcreate_role;",  ""  ]
@@ -9522,7 +9522,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog","create_table", "pattern 
sqlcatalog.create_table(X_1:str, X_2:str, X_3:ptr, X_4:int):void ",
"SQLcreate_table;", ""  ]
 [ "sqlcatalog","create_trigger",   "pattern 
sqlcatalog.create_trigger(X_1:str, X_2:str, X_3:str, X_4:int, X_5:int, X_6:int, 
X_7:str, X_8:str, X_9:str, X_10:str):void ",   "SQLcreate_trigger;",   ""  ]
 [ "sqlcatalog","create_type",  "pattern 
sqlcatalog.create_type(X_1:str, X_2:str, X_3:str):void ",  
"SQLcreate_type;",  ""  ]
-[ "sqlcatalog","create_user",  "pattern 
sqlcatalog.create_user(X_1:str, X_2:str, X_3:int, X_4:str, X_5:str):void ",
"SQLcreate_user;",  ""  ]
+[ "sqlcatalog","create_user",  "pattern 
sqlcatalog.create_user(X_1:str, X_2:str, X_3:int, X_4:str, X_5:str, 
X_6:str):void ",   "SQLcreate_user;",  ""  ]
 [ "sqlcatalog","create_view",  "pattern 
sqlcatalog.create_view(X_1:str, X_2:str, X_3:ptr, X_4:int):void ", 
"SQLcreate_view;",  ""  ]
 [ "sqlcatalog","drop_constraint",  "pattern 
sqlcatalog.drop_constraint(X_1:str, X_2:str, X_3:int, X_4:int):void ", 
"SQLdrop_constraint;",  ""  ]
 [ "sqlcatalog","drop_function","pattern 
sqlcatalog.drop_function(X_1:str, X_2:str, X_3:int, X_4:int, X_5:int):void ",  
"SQLdrop_function;",""  ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -12836,7 +12836,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog","alter_seq","pattern sqlcatalog.alter_seq(X_1:str, 
X_2:str, X_3:ptr, X_4:lng):void ",   "SQLalter_seq;",""  ]
 [ "sqlcatalog","alter_set_table",  "pattern 
sqlcatalog.alter_set_table(X_1:str, X_2:str, X_3:int):void ",  
"SQLalter_set_table;",  ""  ]
 [ "sqlcatalog","alter_table",  "pattern 
sqlcatalog.alter_table(X_1:str, X_2:str, X_3:ptr, X_4:int):void ", 
"SQLalter_table;",  ""  ]
-[ "sqlcatalog","alter_user",   "pattern sqlcatalog.alter_user(X_1:str, 
X_2:str, X_3:int, X_4:str, X_5:str):void ", "SQLalter_user;",   ""  
]
+[ "sqlcatalog","alter_user",   "pattern sqlcatalog.alter_user(X_1:str, 
X_2:str, X_3:int, X_4:str, X_5:str, X_6:str):void ","SQLalter_user;",   
""  ]
 [ "sqlcatalog","comment_on",   "pattern sqlcatalog.comment_on(X_1:int, 
X_2:str):void ","SQLcomment_on;",   ""  ]
 [ "sqlcatalog","create_function",  "pattern 
sqlcatalog.create_function(X_1:str, X_2:str, X_3:ptr):void ",  
"SQLcreate_function;",  ""  ]
 [ "sqlcatalog","create_role",  "pattern 
sqlcatalog.create_role(X_1:str, X_2:str, X_3:int):void ",  
"SQLcreate_role;",  ""  ]
@@ -12845,7 +12845,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog",

MonetDB: nospare - move catalog into its own structure

2021-01-04 Thread Niels Nes
Changeset: a82334ac1a76 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a82334ac1a76
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_statistics.c
sql/backends/monet5/sql_upgrades.c
sql/include/sql_catalog.h
sql/server/rel_updates.c
sql/server/sql_mvc.c
sql/server/sql_privileges.c
sql/storage/bat/bat_storage.c
sql/storage/sql_catalog.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

move catalog into its own structure


diffs (truncated from 1441 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
@@ -4400,7 +4400,7 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
cname = *getArgReference_str(stk, pci, pci->retc + 2);
 
/* check for limited storage tables */
-   for (nsch = tr->schemas.set->h; nsch; nsch = nsch->next) {
+   for (nsch = tr->cat->schemas.set->h; nsch; nsch = nsch->next) {
sql_base *b = nsch->data;
sql_schema *s = (sql_schema *) nsch->data;
if( sname && strcmp(b->name, sname) )
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1058,7 +1058,7 @@ mal_function_find_implementation_address
m->user_id = m->role_id = USER_MONETDB;
 
store_lock();
-   m->session = sql_session_create(0);
+   m->session = sql_session_create(m->pa, 0);
store_unlock();
if (!m->session) {
(void) sql_error(o, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/sql/backends/monet5/sql_statistics.c 
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -46,14 +46,14 @@ sql_drop_statistics(mvc *m, sql_table *t
if (!isTable(t))
throw(SQL, "sql_drop_statistics", SQLSTATE(42S02) "DROP 
STATISTICS: %s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, 
t->properties), t->base.name);
if (!table_privs(m, t, PRIV_SELECT))
-   throw(SQL, "sql_drop_statistics", SQLSTATE(42000) "DROP 
STATISTICS: access denied for %s to table '%s.%s'", 
+   throw(SQL, "sql_drop_statistics", SQLSTATE(42000) "DROP 
STATISTICS: access denied for %s to table '%s.%s'",
  get_string_global_var(m, "current_user"), 
t->s->base.name, t->base.name);
if (isTable(t) && t->columns.set) {
for (ncol = (t)->columns.set->h; ncol; ncol = ncol->next) {
sql_column *c = (sql_column *) ncol->data;
 
if (!column_privs(m, c, PRIV_SELECT))
-   throw(SQL, "sql_drop_statistics", 
SQLSTATE(42000) "DROP STATISTICS: access denied for %s to column '%s' on table 
'%s.%s'", 
+   throw(SQL, "sql_drop_statistics", 
SQLSTATE(42000) "DROP STATISTICS: access denied for %s to column '%s' on table 
'%s.%s'",
  get_string_global_var(m, 
"current_user"), c->base.name, t->s->base.name, t->base.name);
}
}
@@ -122,7 +122,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
TRC_DEBUG(SQL_PARSER, "analyze %s.%s.%s sample " LLFMT "%s\n", (sch ? 
sch : ""), (tbl ? tbl : " "), (col ? col : " "), samplesize, 
(minmax)?"MinMax":"");
 
/* Do all the validations before doing any analyze */
-   for (nsch = tr->schemas.set->h; nsch; nsch = nsch->next) {
+   for (nsch = tr->cat->schemas.set->h; nsch; nsch = nsch->next) {
sql_schema *s = (sql_schema *) nsch->data;
if (!isalpha((unsigned char) s->base.name[0]))
continue;
@@ -140,7 +140,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
if (tbl && !isTable(t))
throw(SQL, "analyze", SQLSTATE(42S02) 
"%s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
if (!table_privs(m, t, PRIV_SELECT))
-   throw(SQL, "analyze", SQLSTATE(42000) 
"ANALYZE: access denied for %s to table '%s.%s'", 
+   throw(SQL, "analyze", SQLSTATE(42000) 
"ANALYZE: access denied for %s to table '%s.%s'",
  get_string_global_var(m, 
"current_user"), t->s->base.name, t->base.name);
if (isTable(t) && t->columns.set) {
for (ncol = (t)->columns.set->h; ncol; 
ncol = ncol->next) {
@@ -150,7 +150,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
continue;

MonetDB: nospare - merged with default

2021-01-04 Thread Niels Nes
Changeset: f98643db9b52 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f98643db9b52
Branch: nospare
Log Message:

merged with default


diffs (truncated from 1553 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -2698,7 +2698,7 @@ sed -i 's|/var/run|/run|' \
   are equal to 1.1.  (The old code returned 33554432 instead of 1.1e8.)
 
 * Sun Nov  5 2017 Sjoerd Mullender  - 11.27.9-20171105
-- BZ#6460 - selinux doen't allow mmap
+- BZ#6460: selinux doen't allow mmap
 
 * Mon Oct 23 2017 Sjoerd Mullender  - 11.27.9-20171023
 - Rebuilt.
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -2469,6 +2469,12 @@ monetdb (11.27.11) unstable; urgency=low
 
 monetdb (11.27.9) unstable; urgency=low
 
+  * BZ#6460: selinux doen't allow mmap
+
+ -- Sjoerd Mullender   Sun, 5 Nov 2017 09:56:39 +0100
+
+monetdb (11.27.9) unstable; urgency=low
+
   * Rebuilt.
   * BZ#6207: identifier ambiguous when grouping and selecting the same
 column twice
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2500,7 +2500,8 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
 struct canditer *restrict lci, struct canditer *restrict rci,
 bool nil_matches, bool nil_on_miss, bool semi, bool only_misses,
 bool not_in, bool max_one,
-BUN estimate, lng t0, bool swapped, bool hash, bool phash,
+BUN estimate, lng t0, bool swapped,
+bool hash, bool phash, bool hash_cand,
 const char *reason)
 {
oid lo, ro;
@@ -2519,7 +2520,6 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
const char *v = (const char *) 
bool lskipped = false;  /* whether we skipped values in l */
Hash *restrict hsh = NULL;
-   bool hash_cand = false;
 
assert(!BATtvoid(r));
assert(ATOMtype(l->ttype) == ATOMtype(r->ttype));
@@ -2555,7 +2555,24 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
 
rl = rci->seq - r->hseqbase;
rh = canditer_last(rci) + 1 - r->hseqbase;
-   if (phash) {
+   if (hash_cand) {
+   /* we need to create a hash on r specific for the
+* candidate list */
+   char ext[32];
+   assert(rci->s);
+   MT_thread_setalgorithm(swapped ? "hashjoin using candidate hash 
(swapped)" : "hashjoin using candidate hash");
+   TRC_DEBUG(ALGO, ALGOBATFMT ": creating "
+ "hash for candidate list " ALGOBATFMT "%s%s\n",
+ ALGOBATPAR(r), ALGOBATPAR(rci->s),
+ r->thash ? " ignoring existing hash" : "",
+ swapped ? " (swapped)" : "");
+   if (snprintf(ext, sizeof(ext), "thshjn%x",
+(unsigned) rci->s->batCacheid) >= (int) 
sizeof(ext))
+   goto bailout;
+   if ((hsh = BAThash_impl(r, rci, ext)) == NULL) {
+   goto bailout;
+   }
+   } else if (phash) {
/* there is a hash on the parent which we should use */
MT_thread_setalgorithm(swapped ? "hashjoin using parent hash 
(swapped)" : "hashjoin using parent hash");
BAT *b = BBPdescriptor(VIEWtparent(r));
@@ -2577,24 +2594,6 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
  "existing hash%s\n",
  ALGOBATPAR(r),
  swapped ? " (swapped)" : "");
-   } else if (rci->tpe != cand_dense || rci->ncand != BATcount(r)) {
-   /* we need to create a hash on r specific for the
-* candidate list */
-   char ext[32];
-   assert(rci->s);
-   MT_thread_setalgorithm(swapped ? "hashjoin using candidate hash 
(swapped)" : "hashjoin using candidate hash");
-   TRC_DEBUG(ALGO, ALGOBATFMT ": creating "
- "hash for candidate list " ALGOBATFMT "%s%s\n",
- ALGOBATPAR(r), ALGOBATPAR(rci->s),
- r->thash ? " ignoring existing hash" : "",
- swapped ? " (swapped)" : "");
-   if (snprintf(ext, sizeof(ext), "thshjn%x",
-(unsigned) rci->s->batCacheid) >= (int) 
sizeof(ext))
-   goto bailout;
-   if ((hsh = BAThash_impl(r, rci, ext)) == NULL) {
-   goto bailout;
-   }
-   hash_cand = true;
} else {
/* we need to create a hash on r */
MT_thread_setalgorithm(swapped ? "hashjoin using new hash 
(swapped)" : "hashjoin using new hash");
@@ -3071,6 +3070,79 @@ guess_uniques(BAT *b, struct canditer *c
return B;
 }
 
+/* estimate the cost of doing a hashjoin with a hash on r; return value
+ * is the estimated cost, the last three arguments receive some extra
+ * information */
+static double

MonetDB: nospare - removed sql trans spares

2021-01-04 Thread Niels Nes
Changeset: eef7007fa8da for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eef7007fa8da
Modified Files:
sql/server/sql_mvc.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

removed sql trans spares


diffs (truncated from 305 to 300 lines):

diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -508,7 +508,7 @@ mvc_commit(mvc *m, int chain, const char
sql_trans *tr = m->session->tr;
TRC_DEBUG(SQL_TRANS, "Savepoint\n");
store_lock();
-   m->session->tr = sql_trans_create(tr, name, true);
+   m->session->tr = sql_trans_create(tr, name);
if (!m->session->tr) {
store_unlock();
msg = createException(SQL, "sql.commit", 
SQLSTATE(HY013) "%s allocation failure while committing the transaction, will 
ROLLBACK instead", operation);
@@ -539,7 +539,7 @@ mvc_commit(mvc *m, int chain, const char
if ((ok = sql_trans_commit(ctr)) != SQL_OK) {
GDKfatal("%s transaction commit failed (perhaps 
your disk is full?) exiting (kernel error: %s)", operation, GDKerrbuf);
}
-   cur = ctr = sql_trans_destroy(ctr, true);
+   cur = ctr = sql_trans_destroy(ctr);
tr = cur->parent;
}
store_unlock();
@@ -629,7 +629,7 @@ mvc_rollback(mvc *m, int chain, const ch
/* make sure we do not reuse changed data */
if (tr->wtime)
tr->status = 1;
-   tr = sql_trans_destroy(tr, true);
+   tr = sql_trans_destroy(tr);
}
m->session->tr = tr;/* restart at savepoint */
m->session->status = tr->status;
@@ -639,7 +639,7 @@ mvc_rollback(mvc *m, int chain, const ch
} else if (tr->parent) {
/* first release all intermediate savepoints */
while (tr->parent->parent != NULL) {
-   tr = sql_trans_destroy(tr, true);
+   tr = sql_trans_destroy(tr);
}
m->session-> tr = tr;
/* make sure we do not reuse changed data */
@@ -696,7 +696,7 @@ mvc_release(mvc *m, const char *name)
/* commit all intermediate savepoints */
if (sql_trans_commit(tr) != SQL_OK)
GDKfatal("release savepoints should not fail");
-   tr = sql_trans_destroy(tr, true);
+   tr = sql_trans_destroy(tr);
}
tr->name = NULL;
store_unlock();
@@ -788,7 +788,7 @@ mvc_reset(mvc *m, bstream *rs, stream *w
if (tr && tr->parent) {
assert(m->session->tr->active == 0);
while (tr->parent->parent != NULL)
-   tr = sql_trans_destroy(tr, true);
+   tr = sql_trans_destroy(tr);
}
reset = sql_session_reset(m->session, 1 /*autocommit on*/);
store_unlock();
@@ -844,7 +844,7 @@ mvc_destroy(mvc *m)
if (m->session->tr->active)
sql_trans_end(m->session, 0);
while (tr->parent)
-   tr = sql_trans_destroy(tr, true);
+   tr = sql_trans_destroy(tr);
m->session->tr = NULL;
}
sql_session_destroy(m->session);
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -399,8 +399,8 @@ extern void store_lock(void);
 extern void store_unlock(void);
 extern sqlid store_next_oid(void);
 
-extern sql_trans *sql_trans_create(sql_trans *parent, const char *name, bool 
try_spare);
-extern sql_trans *sql_trans_destroy(sql_trans *tr, bool try_spare);
+extern sql_trans *sql_trans_create(sql_trans *parent, const char *name);
+extern sql_trans *sql_trans_destroy(sql_trans *tr);
 extern bool sql_trans_validate(sql_trans *tr);
 extern int sql_trans_commit(sql_trans *tr);
 extern int sql_save_snapshots(sql_trans *tr);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -48,10 +48,6 @@ logger_functions logger_funcs;
 static int schema_number = 0; /* each committed schema change triggers a new
 schema number (session wise unique number) */
 
-#define MAX_SPARES 32
-static sql_trans *spare_trans[MAX_SPARES];
-static int spares = 0;
-
 static int
 key_cmp(sql_key *k, sqlid *id)
 {
@@ -347,48 +343,15 @@ schema_reset_parent(sql_schema *s, sql_t
assert(s->tables.dset == NULL);
 }
 
-static void
-trans_drop_tmp(sql_trans *tr)
-{
-   sql_schema *tmp;
-
-   if (!tr)
-   return;
-
-   tmp = find_sql_schema(tr, 

MonetDB: Oct2020 - Typo.

2021-01-04 Thread Sjoerd Mullender
Changeset: 07d29bc30525 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=07d29bc30525
Modified Files:
monetdb5/modules/atoms/uuid.c
Branch: Oct2020
Log Message:

Typo.


diffs (12 lines):

diff --git a/monetdb5/modules/atoms/uuid.c b/monetdb5/modules/atoms/uuid.c
--- a/monetdb5/modules/atoms/uuid.c
+++ b/monetdb5/modules/atoms/uuid.c
@@ -365,7 +365,7 @@ UUIDhash(const void *v)
(ulng) u->u[10] << 40 | (ulng) u->u[11] << 32 |
(ulng) u->u[12] << 24 | (ulng) u->u[13] << 16 |
(ulng) u->u[14] << 8 | (ulng) u->u[15];
-   /* we're not using mix_hge since this we way get the same result
+   /* we're not using mix_hge since this way we get the same result
 * on systems with and without 128 bit integer support */
return (BUN) (mix_lng(u1) ^ mix_lng(u2));
 }
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Approved output

2021-01-04 Thread Pedro Ferreira
Changeset: 8a5e9cce5ba7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8a5e9cce5ba7
Modified Files:

monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows
Branch: default
Log Message:

Approved output


diffs (21 lines):

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
@@ -117,7 +117,7 @@ end user.main;
 % clob # type
 % 235 # length
 function user.main():void;
-X_1:void := querylog.define("explain copy into ttt from 
E\\'tmp/xyz\\';":str, "user_0":str, 22:int);
+querylog.define("explain copy into ttt from E\\'tmp/xyz\\';":str, 
"user_0":str, 22:int);
 X_4:int := sql.mvc();
 (X_28:bat[:int], X_29:bat[:int], X_30:bat[:int]) := 
sql.copy_from(0x0049B72361C0:ptr, "|":str, "\n":str, nil:str, "null":str, 
"\\tmp/xyz":str, -1:lng, 0:lng, 0:int, 0:int, nil:str, 0:int, 1:int);
 X_32:int := sql.append(X_4:int, "sys":str, "ttt":str, 
"averylongcolumnnametomakeitlargee":str,
 X_28:bat[:int]);
@@ -159,7 +159,7 @@ end user.main;
 % clob # type
 % 235 # length
 function user.main():void;
-X_1:void := querylog.define("explain copy into ttt from 
\\'Z:/tmp/xyz\\';":str, "user_0":str, 22:int);
+querylog.define("explain copy into ttt from \\'Z:/tmp/xyz\\';":str, 
"user_0":str, 22:int);
 X_4:int := sql.mvc();
 (X_28:bat[:int], X_29:bat[:int], X_30:bat[:int]) := 
sql.copy_from(0x0049B72361C0:ptr, "|":str, "\n":str, nil:str, "null":str, 
"Z:/tmp/xyz":str, -1:lng, 0:lng, 0:int, 0:int, nil:str, 0:int, 1:int);
 X_32:int := sql.append(X_4:int, "sys":str, "ttt":str, 
"averylongcolumnnametomakeitlargee":str,
 X_28:bat[:int]);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list