MonetDB: default - Got rid of the ht_lock field.

2022-02-10 Thread Sjoerd Mullender
Changeset: eac76cdd246d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/eac76cdd246d
Modified Files:
gdk/gdk_system.h
sql/common/sql_list.c
sql/common/sql_types.c
sql/include/sql_list.h
sql/server/sql_semantic.c
sql/storage/sql_catalog.c
sql/storage/store.c
Branch: default
Log Message:

Got rid of the ht_lock field.
The one place where there was potentially a need for the lock has been
changed so that no lock is needed anymore.


diffs (truncated from 423 to 300 lines):

diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -230,51 +230,36 @@ gdk_export void MT_thread_set_qry_ctx(Qr
TRC_DEBUG(TEM, "Locking %s complete\n", (l)->name); \
} while (0)
 
-#define _DBG_LOCK_INIT(l)  \
-   do {\
-   (l)->count = 0; \
-   ATOMIC_INIT(&(l)->contention, 0);   \
-   ATOMIC_INIT(&(l)->sleep, 0);\
-   (l)->locker = NULL; \
-   (l)->thread = NULL; \
-   /* if name starts with "sa_" don't link in GDKlocklist */ \
-   /* since the lock is in memory that is governed by the */ \
-   /* SQL storage allocator, and hence we have no control */ \
-   /* over when the lock is destroyed and the memory freed */ \
-   if (strncmp((l)->name, "sa_", 3) != 0) {\
-   while (ATOMIC_TAS(&GDKlocklistlock) != 0)   \
-   ;   \
-   if (GDKlocklist)\
-   GDKlocklist->prev = (l);\
-   (l)->next = GDKlocklist;\
-   (l)->prev = NULL;   \
-   GDKlocklist = (l);  \
-   ATOMIC_CLEAR(&GDKlocklistlock); \
-   } else {\
-   (l)->next = NULL;   \
-   (l)->prev = NULL;   \
-   }   \
+#define _DBG_LOCK_INIT(l)  \
+   do {\
+   (l)->count = 0; \
+   ATOMIC_INIT(&(l)->contention, 0);   \
+   ATOMIC_INIT(&(l)->sleep, 0);\
+   (l)->locker = NULL; \
+   (l)->thread = NULL; \
+   while (ATOMIC_TAS(&GDKlocklistlock) != 0)   \
+   ;   \
+   if (GDKlocklist)\
+   GDKlocklist->prev = (l);\
+   (l)->next = GDKlocklist;\
+   (l)->prev = NULL;   \
+   GDKlocklist = (l);  \
+   ATOMIC_CLEAR(&GDKlocklistlock); \
} while (0)
 
-#define _DBG_LOCK_DESTROY(l)   \
-   do {\
-   /* if name starts with "sa_" don't link in GDKlocklist */ \
-   /* since the lock is in memory that is governed by the */ \
-   /* SQL storage allocator, and hence we have no control */ \
-   /* over when the lock is destroyed and the memory freed */ \
-   if (strncmp((l)->name, "sa_", 3) != 0) {\
-   while (ATOMIC_TAS(&GDKlocklistlock) != 0)   \
-   ;   \
-   if ((l)->next)  \
-   (l)->next->prev = (l)->prev;\
-   if ((l)->prev)  \
-   (l)->prev->next = (l)->next;\
-   else if (GDKlocklist == (l))\
-   GDKlocklist = (l)->next;\
-   ATOMIC_CLEAR(&GDKlocklistlock); \
-   ATOMIC_DESTROY(&(l)->contention);   \
-   ATOMIC_DESTROY(&(l)->sleep);\
-   }  

MonetDB: default - Check MAL recursive calls by tag at query que...

2022-02-10 Thread Pedro Ferreira
Changeset: 7567eee12001 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7567eee12001
Modified Files:
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_runtime.c
sql/test/SQLancer/Tests/sqlancer19.SQL.py
Branch: default
Log Message:

Check MAL recursive calls by tag at query queue, so it doesn't create issues 
when multiple complex function calls are done by multiple dataflow workers at 
the same time


diffs (118 lines):

diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -751,6 +751,8 @@ str runMALsequence(Client cntxt, MalBlkP
nstk->stkdepth = nstk->stksize + stk->stkdepth;
nstk->calldepth = stk->calldepth + 1;
nstk->up = stk;
+   /* inherit tag, because it will be used when 
doing profiling */
+   nstk->tag = stk->tag;
if (nstk->calldepth > 256) {
ret= createException(MAL, 
"mal.interpreter", MAL_CALLDEPTH_FAIL);
GDKfree(nstk);
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -222,16 +222,13 @@ runtimeProfileInit(Client cntxt, MalBlkP
if (stk->up) {
i = qtail;
while (i != qhead) {
-   if (QRYqueue[i].mb && QRYqueue[i].stk == stk->up) {
-   QRYqueue[i].stk = stk;
-   mb->tag = stk->tag = qtag++;
+   if (QRYqueue[i].tag == stk->tag) {
MT_lock_unset(&mal_delayLock);
return;
}
if (++i >= qsize)
i = 0;
}
-// assert(0);
}
i=qtail;
while (i != qhead){
@@ -257,7 +254,7 @@ runtimeProfileInit(Client cntxt, MalBlkP
// add new invocation
cntxt->idle = 0;
QRYqueue[qhead].mb = mb;
-   QRYqueue[qhead].tag = qtag++;
+   QRYqueue[qhead].tag = stk->tag = mb->tag = qtag++;
QRYqueue[qhead].stk = stk;  // for status 
pause 'p'/running '0'/ quiting 'q'
QRYqueue[qhead].finished = 0;
QRYqueue[qhead].start = time(0);
@@ -273,7 +270,6 @@ runtimeProfileInit(Client cntxt, MalBlkP
QRYqueue[qhead].status = "running";
QRYqueue[qhead].cntxt = cntxt;
QRYqueue[qhead].ticks = GDKusec();
-   stk->tag = mb->tag = QRYqueue[qhead].tag;
advanceQRYqueue();
MT_lock_unset(&mal_delayLock);
 }
@@ -292,13 +288,11 @@ runtimeProfileFinish(Client cntxt, MalBl
MT_lock_set(&mal_delayLock);
i=qtail;
while (i != qhead){
-   if ( QRYqueue[i].stk == stk){
-   if( stk->up){
-   // recursive call
-   QRYqueue[i].stk = stk->up;
-   mb->tag = stk->tag;
-   found = true;
-   break;
+   if (QRYqueue[i].tag == stk->tag) {
+   if (stk->up){
+   // recursive call, just return
+   MT_lock_unset(&mal_delayLock);
+   return;
}
QRYqueue[i].status = "finished";
QRYqueue[i].finished = time(0);
@@ -315,8 +309,7 @@ runtimeProfileFinish(Client cntxt, MalBl
found = true;
break;
}
-   i++;
-   if ( i >= qsize)
+   if (++i >= qsize)
i = 0;
}
 
@@ -324,6 +317,7 @@ runtimeProfileFinish(Client cntxt, MalBl
// finished query is not found, we want to print some informational
// messages for debugging.
if (!found) {
+   assert(0);
TRC_INFO_IF(MAL_SERVER) {
TRC_INFO_ENDIF(MAL_SERVER, "runtimeProfilerFinish: stk 
(%p) not found in QRYqueue", stk);
i = qtail;
@@ -335,8 +329,7 @@ runtimeProfileFinish(Client cntxt, MalBl
   
QRYqueue[i].username, QRYqueue[i].start,
   
QRYqueue[i].status, QRYqueue[i].query);
}
-   i++;
-   if ( i >= qsize)
+   if (++i >= qsize)
i = 0;
}
}
diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py 
b/sql/test/S

MonetDB: default - Use macro

2022-02-10 Thread Pedro Ferreira
Changeset: 2289647476dd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2289647476dd
Modified Files:
sql/server/rel_unnest.c
Branch: default
Log Message:

Use macro


diffs (25 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2584,12 +2584,6 @@ rewrite_rank(visitor *v, sql_rel *rel, s
return e;
 }
 
-static bool
-exp_is_values(sql_exp *e)
-{
-   return is_atom(e->type) && e->f;
-}
-
 static sql_rel *
 rel_union_exps(mvc *sql, sql_exp **l, list *vals, int is_tuple)
 {
@@ -2627,7 +2621,7 @@ rel_union_exps(mvc *sql, sql_exp **l, li
sq->nrcols = list_length(sq->exps);
/* union a project[(values(a),..,(b),(c)]  with 
freevars */
if (sq->card > CARD_ATOM && rel_has_freevar(sql, sq) && 
is_project(sq->op) &&
-   !sq->l && sq->nrcols == 1 && 
exp_is_values(sq->exps->h->data)) {
+   !sq->l && sq->nrcols == 1 && 
is_values((sql_exp*)sq->exps->h->data)) {
/* needs check on projection */
sql_exp *vals = sq->exps->h->data;
if (!(sq = rel_union_exps(sql, l, 
exp_get_values(vals), is_tuple)))
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


mailing list software updated

2022-02-10 Thread Sjoerd Mullender
I have updated the mailing list software on monetdb.org from mailman2 to 
mailman3.  This means that the old accounts for managing list 
subscriptions do not work anymore.  In order to manage your subscription 
using a web interface, you will need to create a new account at 
https://www.monetdb.org/lists/.  You can associate multiple email 
addresses to this account and manage all your subscriptions at 
monetdb.org using a single account, even if they use different email 
addresses.


Unlike in mailman2, in mailman3 the passwords are not saved in 
plaintext, and therefore they cannot be sent as a monthly reminder.


The old web addresses (https://mail.monetdb.org/, 
https://www.monetdb.org/mailman/ and https://www.monetdb.org/pipermail/) 
now all get redirected to the new interface.


--
Sjoerd Mullender
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: embedded_mapi - New branch: embedded_mapi.

2022-02-10 Thread Aris Koning
Changeset: 20c8bc9c3f09 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/20c8bc9c3f09
Branch: embedded_mapi
Log Message:

New branch: embedded_mapi.

___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: embedded_mapi - Whitespace.

2022-02-10 Thread Aris Koning
Changeset: 3241e5edad88 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3241e5edad88
Modified Files:
tools/monetdbe/monetdbe.c
Branch: embedded_mapi
Log Message:

Whitespace.


diffs (12 lines):

diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -617,7 +617,7 @@ monetdbe_startup(monetdbe_database_inter
goto cleanup;
}
 
-with_mapi_server = false;
+   with_mapi_server = false;
 
if (monetdbe_embedded_initialized) {
set_error(mdbe, createException(MAL, 
"monetdbe.monetdbe_startup", "MonetDBe is already initialized"));
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: embedded_mapi - Don't do credential checks for embedded...

2022-02-10 Thread Aris Koning
Changeset: 206951aa371c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/206951aa371c
Modified Files:
monetdb5/mal/mal_session.c
Branch: embedded_mapi
Log Message:

Don't do credential checks for embedded mapi (for now).


diffs (39 lines):

diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -273,21 +273,24 @@ MSscheduleClient(str command, str challe
return;
} else {
str err;
-   oid uid;
+   oid uid = 0;
sabdb *stats = NULL;
 
-   /* access control: verify the credentials supplied by the user,
-* no need to check for database stuff, because that is done per
-* database itself (one gets a redirect) */
-   err = AUTHcheckCredentials(&uid, NULL, user, passwd, challenge, 
algo);
-   if (err != MAL_SUCCEED) {
-   mnstr_printf(fout, "!%s\n", err);
-   exit_streams(fin, fout);
-   freeException(err);
-   GDKfree(command);
-   return;
+   if (!GDKembedded()) {
+   /* access control: verify the credentials supplied by 
the user,
+   * no need to check for database stuff, because that is 
done per
+   * database itself (one gets a redirect) */
+   err = AUTHcheckCredentials(&uid, NULL, user, passwd, 
challenge, algo);
+   if (err != MAL_SUCCEED) {
+   mnstr_printf(fout, "!%s\n", err);
+   exit_streams(fin, fout);
+   freeException(err);
+   GDKfree(command);
+   return;
+   }
}
 
+
if (!GDKinmemory(0) && !GDKembedded()) {
err = msab_getMyStatus(&stats);
if (err != NULL) {
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - Partly revert commit 7567eee12001 I can't fig...

2022-02-10 Thread Pedro Ferreira
Changeset: 2fd38e48c453 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2fd38e48c453
Modified Files:
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_runtime.c
Branch: default
Log Message:

Partly revert commit 7567eee12001 I can't figure out the query queue with 
recursive calls when multiple dataflow workers are present, but it's broken for 
sure


diffs (40 lines):

diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -751,8 +751,6 @@ str runMALsequence(Client cntxt, MalBlkP
nstk->stkdepth = nstk->stksize + stk->stkdepth;
nstk->calldepth = stk->calldepth + 1;
nstk->up = stk;
-   /* inherit tag, because it will be used when 
doing profiling */
-   nstk->tag = stk->tag;
if (nstk->calldepth > 256) {
ret= createException(MAL, 
"mal.interpreter", MAL_CALLDEPTH_FAIL);
GDKfree(nstk);
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -222,7 +222,9 @@ runtimeProfileInit(Client cntxt, MalBlkP
if (stk->up) {
i = qtail;
while (i != qhead) {
-   if (QRYqueue[i].tag == stk->tag) {
+   if (QRYqueue[i].mb && QRYqueue[i].stk == stk->up) {
+   QRYqueue[i].stk = stk;
+   mb->tag = stk->tag = qtag++;
MT_lock_unset(&mal_delayLock);
return;
}
@@ -288,9 +290,11 @@ runtimeProfileFinish(Client cntxt, MalBl
MT_lock_set(&mal_delayLock);
i=qtail;
while (i != qhead){
-   if (QRYqueue[i].tag == stk->tag) {
+   if (QRYqueue[i].stk == stk){
if (stk->up){
-   // recursive call, just return
+   // recursive call
+   QRYqueue[i].stk = stk->up;
+   mb->tag = stk->tag;
MT_lock_unset(&mal_delayLock);
return;
}
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


monetdb-java: default - Added recognition of 'xml' type.

2022-02-10 Thread Martin van Dinther
Changeset: dd9b4fb14256 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/dd9b4fb14256
Modified Files:
ChangeLog
src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
src/main/java/org/monetdb/jdbc/MonetDriver.java.in
src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
src/main/java/org/monetdb/jdbc/MonetResultSet.java
tests/JDBC_API_Tester.java
Branch: default
Log Message:

Added recognition of 'xml' type.
Use default mapping to Types.VARCHAR for easy and fast (as java.lang.String) 
retrieval, display and setting data of columns of type 'xml'.


diffs (136 lines):

diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 # ChangeLog file for monetdb-java
 # This file is updated with Maddlog
 
+* Thu Feb 10 2022 Martin van Dinther 
+- Added recognition of 'xml' type. Use default mapping to Types.VARCHAR for
+  easy and fast (as java.lang.String) retrieval, display and setting data of
+  columns of type 'xml'.
+
 * Thu Jan 27 2022 Martin van Dinther 
 - Compiled and released new jar files: monetdb-jdbc-3.2.jre8.jar,
   monetdb-mcl-1.21.jre8.jar and jdbcclient.jre8.jar
diff --git a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java 
b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
--- a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -2964,10 +2964,10 @@ public class MonetDatabaseMetaData

"cast(").append(MonetDriver.getSQLTypeMap("\"sqlname\"")).append(" AS int) AS 
\"DATA_TYPE\", " +
"\"digits\" AS \"PRECISION\", " +   // note that 
when radix is 2 the precision shows the number of bits
"cast(CASE WHEN \"sqlname\" IN 
('char','varchar','sec_interval','day_interval','month_interval') THEN " +
-   " WHEN \"sqlname\" IN 
('clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob')
 THEN \"sqlname\"||' '''" +
+   " WHEN \"sqlname\" IN 
('clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob','xml')
 THEN \"sqlname\"||' '''" +
" ELSE NULL END AS varchar(16)) AS 
\"LITERAL_PREFIX\", " +
"cast(CASE WHEN \"sqlname\" IN 
('char','varchar','sec_interval','day_interval','month_interval'" +
-   
",'clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob')
 THEN " +
+   
",'clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob','xml')
 THEN " +
" ELSE NULL END AS varchar(2)) AS 
\"LITERAL_SUFFIX\", " +
"CASE WHEN \"sqlname\" IN ('char','varchar') THEN 'max 
length'" +
" WHEN \"sqlname\" = 'decimal' THEN 'precision, 
scale'" +
@@ -2975,8 +2975,8 @@ public class MonetDatabaseMetaData
" ELSE NULL END AS \"CREATE_PARAMS\", " +
"cast(CASE WHEN \"systemname\" = 'oid' THEN 
").append(DatabaseMetaData.typeNoNulls)
.append(" ELSE 
").append(DatabaseMetaData.typeNullable).append(" END AS smallint) AS 
\"NULLABLE\", " +
-   "CASE WHEN \"systemname\" IN ('str','json','url') THEN 
true ELSE false END AS \"CASE_SENSITIVE\", " +
-   "cast(CASE WHEN \"systemname\" IN 
('str','inet','json','url','uuid') THEN 
").append(DatabaseMetaData.typeSearchable)
+   "CASE WHEN \"systemname\" IN ('str','json','url','xml') 
THEN true ELSE false END AS \"CASE_SENSITIVE\", " +
+   "cast(CASE WHEN \"systemname\" IN 
('str','inet','json','url','uuid','xml') THEN 
").append(DatabaseMetaData.typeSearchable)
.append(" ELSE 
").append(DatabaseMetaData.typePredBasic).append(" END AS smallint) AS 
\"SEARCHABLE\", " +
"CASE WHEN \"sqlname\" IN 
('tinyint','smallint','int','bigint','hugeint','decimal','real','double'" +

",'day_interval','month_interval','sec_interval') THEN false ELSE true END AS 
\"UNSIGNED_ATTRIBUTE\", " +
@@ -3261,8 +3261,10 @@ public class MonetDatabaseMetaData
" WHEN 'json' THEN 'java.lang.String'" +
" WHEN 'url' THEN 'org.monetdb.jdbc.types.URL'" 
+
" WHEN 'uuid' THEN 'java.lang.String'" +
+   // next UDT only when "CREATE TYPE xml EXTERNAL 
NAME xml;" is executed
+   " WHEN 'xml' THEN 'java.lang.String'" +
" ELSE 'java.lang.Object' END AS 
\"CLASS_NAME\", " +
- 

MonetDB: Jan2022 - when inserting complex rows, convert into a u...

2022-02-10 Thread Niels Nes
Changeset: ea0b21aeaf5b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ea0b21aeaf5b
Modified Files:
sql/server/rel_updates.c
Branch: Jan2022
Log Message:

when inserting complex rows, convert into a union of rows.


diffs (66 lines):

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
@@ -322,6 +322,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_
sql_exp **inserts = insert_exp_array(sql, t, &len);
list *exps = NULL;
node *n, *m;
+   bool has_rel = false, all_values = true;
 
if (r->exps) {
if (!copy) {
@@ -333,6 +334,8 @@ rel_inserts(mvc *sql, sql_table *t, sql_
return sql_error(sql, 02, 
SQLSTATE(42000) "%s: column '%s' specified more than once", action, 
c->base.name);
if (!(inserts[c->colnr] = exp_check_type(sql, 
&c->type, r, e, type_equal)))
return NULL;
+   has_rel = (has_rel || exp_has_rel(e));
+   all_values &= is_values(e);
}
} else {
for (m = collist->h; m; m = m->next) {
@@ -344,6 +347,8 @@ rel_inserts(mvc *sql, sql_table *t, sql_
if (inserts[c->colnr])
return sql_error(sql, 02, 
SQLSTATE(42000) "%s: column '%s' specified more than once", action, 
c->base.name);
inserts[c->colnr] = exp_ref(sql, e);
+   has_rel = has_rel || exp_has_rel(e);
+   all_values &= is_values(e);
}
}
}
@@ -384,10 +389,32 @@ rel_inserts(mvc *sql, sql_table *t, sql_
assert(inserts[c->colnr]);
}
}
-   /* now rewrite project exps in proper table order */
-   exps = new_exp_list(sql->sa);
-   for (i = 0; isa, NULL, 
sa_list(sql->sa));
+   for (m = ol_first_node(t->columns); m; m = m->next) {
+   sql_column *c = m->data;
+   sql_exp *e = inserts[c->colnr];
+   assert(is_values(e));
+   list *vals = e->f;
+   append(p->exps, list_fetch(vals, j));
+   }
+   if (c) {
+   c = rel_setop(sql->sa, c, p, op_union);
+   rel_setop_set_exps(sql, c, rel_projections(sql, 
c->l, NULL, 1, 1), false);
+   } else
+   c = p;
+   }
+   r->l = c;
+   exps = rel_projections(sql, r->l, NULL, 1, 1);
+   } else {
+   /* now rewrite project exps in proper table order */
+   exps = new_exp_list(sql->sa);
+   for (i = 0; i

MonetDB: Jan2022 - Fix some MAL instructions.

2022-02-10 Thread Sjoerd Mullender
Changeset: a13b2b280255 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a13b2b280255
Modified Files:
monetdb5/mal/mal_instruction.c
monetdb5/optimizer/opt_dict.c
monetdb5/optimizer/opt_generator.c
monetdb5/optimizer/opt_multiplex.c
monetdb5/optimizer/opt_pushselect.c
sql/backends/monet5/sql_statement.c
Branch: Jan2022
Log Message:

Fix some MAL instructions.


diffs (151 lines):

diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -1265,10 +1265,10 @@ addArgument(MalBlkPtr mb, InstrPtr p, in
if (p->argc == p->maxarg) {
pn = extendInstruction(mb, p);
 #ifndef NDEBUG
-   if (p != pn) {
-   for (int i = mb->stop - 1; i >= 0; i--)
-   assert(mb->stmt[i] != p);
-  }
+   if (p != pn) {
+   for (int i = mb->stop - 1; i >= 0; i--)
+   assert(mb->stmt[i] != p);
+   }
 #endif
p = pn;
if (mb->errors)
diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c
--- a/monetdb5/optimizer/opt_dict.c
+++ b/monetdb5/optimizer/opt_dict.c
@@ -126,26 +126,26 @@ OPTdictImplementation(Client cntxt, MalB
InstrPtr r = 
newInstructionArgs(mb, dictRef, thetaselectRef, 6);
 
getArg(r, 0) = getArg(p, 0);
-   addArgument(mb, r, 
varisdict[k]);
-   addArgument(mb, r, getArg(p, 
2)); /* cand */
-   addArgument(mb, r, 
vardictvalue[k]);
-   addArgument(mb, r, getArg(p, 
3)); /* val */
-   addArgument(mb, r, getArg(p, 
4)); /* op */
+   r = addArgument(mb, r, 
varisdict[k]);
+   r = addArgument(mb, r, 
getArg(p, 2)); /* cand */
+   r = addArgument(mb, r, 
vardictvalue[k]);
+   r = addArgument(mb, r, 
getArg(p, 3)); /* val */
+   r = addArgument(mb, r, 
getArg(p, 4)); /* op */
pushInstruction(mb,r);
} else if (getFunctionId(p) == 
selectRef && p->argc == 9) {
/* select (c, s, l, h, li, hi, 
anti, unknown ) */
InstrPtr r = 
newInstructionArgs(mb, dictRef, selectRef, 10);
 
getArg(r, 0) = getArg(p, 0);
-   addArgument(mb, r, 
varisdict[k]);
-   addArgument(mb, r, getArg(p, 
2)); /* cand */
-   addArgument(mb, r, 
vardictvalue[k]);
-   addArgument(mb, r, getArg(p, 
3)); /* l */
-   addArgument(mb, r, getArg(p, 
4)); /* h */
-   addArgument(mb, r, getArg(p, 
5)); /* li */
-   addArgument(mb, r, getArg(p, 
6)); /* hi */
-   addArgument(mb, r, getArg(p, 
7)); /* anti */
-   addArgument(mb, r, getArg(p, 
8)); /* unknown */
+   r = addArgument(mb, r, 
varisdict[k]);
+   r = addArgument(mb, r, 
getArg(p, 2)); /* cand */
+   r = addArgument(mb, r, 
vardictvalue[k]);
+   r = addArgument(mb, r, 
getArg(p, 3)); /* l */
+   r = addArgument(mb, r, 
getArg(p, 4)); /* h */
+   r = addArgument(mb, r, 
getArg(p, 5)); /* li */
+   r = addArgument(mb, r, 
getArg(p, 6)); /* hi */
+   r = addArgument(mb, r, 
getArg(p, 7)); /* anti */
+   r = addArgument(mb, r, 
getArg(p, 8)); /* unknown */
pushInstruction(mb,r);
} else {
/* pos = select(col, cand, l, 
h, ...) with col = dict.decompress(o,u)
@@ -164,13 +164,13 @@ OPTdictImplementation(Client cntxt, MalB
int tpe = getVarType(mb, 
varisdict

MonetDB: default - A relation replacement is needed when removin...

2022-02-10 Thread Pedro Ferreira
Changeset: cbd49a3e2b19 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cbd49a3e2b19
Modified Files:
sql/server/rel_unnest.c
Branch: default
Log Message:

A relation replacement is needed when removing function expressions from 
grouping relations


diffs (18 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2189,8 +2189,12 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel
}
n = next;
}
-   if (!list_empty(projs))
-   rel = rel_project(sql->sa, rel, 
list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL));
+   if (!list_empty(projs)) {
+   /* the grouping relation may have more than 1 
reference, a replacement is needed */
+   list *nexps = list_merge(rel_projections(sql, rel, 
NULL, 1, 1), projs, NULL);
+   rel = rel_inplace_project(sql->sa, rel, 
rel_dup(rel->l), nexps);
+   rel->card = exps_card(nexps);
+   }
}
return rel;
 }
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - Merged with Jan2022

2022-02-10 Thread Pedro Ferreira
Changeset: a686ed10439a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a686ed10439a
Modified Files:
sql/backends/monet5/sql_statement.c
sql/server/rel_updates.c
Branch: default
Log Message:

Merged with Jan2022


diffs (217 lines):

diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -1265,10 +1265,10 @@ addArgument(MalBlkPtr mb, InstrPtr p, in
if (p->argc == p->maxarg) {
pn = extendInstruction(mb, p);
 #ifndef NDEBUG
-   if (p != pn) {
-   for (int i = mb->stop - 1; i >= 0; i--)
-   assert(mb->stmt[i] != p);
-  }
+   if (p != pn) {
+   for (int i = mb->stop - 1; i >= 0; i--)
+   assert(mb->stmt[i] != p);
+   }
 #endif
p = pn;
if (mb->errors)
diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c
--- a/monetdb5/optimizer/opt_dict.c
+++ b/monetdb5/optimizer/opt_dict.c
@@ -126,26 +126,26 @@ OPTdictImplementation(Client cntxt, MalB
InstrPtr r = 
newInstructionArgs(mb, dictRef, thetaselectRef, 6);
 
getArg(r, 0) = getArg(p, 0);
-   addArgument(mb, r, 
varisdict[k]);
-   addArgument(mb, r, getArg(p, 
2)); /* cand */
-   addArgument(mb, r, 
vardictvalue[k]);
-   addArgument(mb, r, getArg(p, 
3)); /* val */
-   addArgument(mb, r, getArg(p, 
4)); /* op */
+   r = addArgument(mb, r, 
varisdict[k]);
+   r = addArgument(mb, r, 
getArg(p, 2)); /* cand */
+   r = addArgument(mb, r, 
vardictvalue[k]);
+   r = addArgument(mb, r, 
getArg(p, 3)); /* val */
+   r = addArgument(mb, r, 
getArg(p, 4)); /* op */
pushInstruction(mb,r);
} else if (getFunctionId(p) == 
selectRef && p->argc == 9) {
/* select (c, s, l, h, li, hi, 
anti, unknown ) */
InstrPtr r = 
newInstructionArgs(mb, dictRef, selectRef, 10);
 
getArg(r, 0) = getArg(p, 0);
-   addArgument(mb, r, 
varisdict[k]);
-   addArgument(mb, r, getArg(p, 
2)); /* cand */
-   addArgument(mb, r, 
vardictvalue[k]);
-   addArgument(mb, r, getArg(p, 
3)); /* l */
-   addArgument(mb, r, getArg(p, 
4)); /* h */
-   addArgument(mb, r, getArg(p, 
5)); /* li */
-   addArgument(mb, r, getArg(p, 
6)); /* hi */
-   addArgument(mb, r, getArg(p, 
7)); /* anti */
-   addArgument(mb, r, getArg(p, 
8)); /* unknown */
+   r = addArgument(mb, r, 
varisdict[k]);
+   r = addArgument(mb, r, 
getArg(p, 2)); /* cand */
+   r = addArgument(mb, r, 
vardictvalue[k]);
+   r = addArgument(mb, r, 
getArg(p, 3)); /* l */
+   r = addArgument(mb, r, 
getArg(p, 4)); /* h */
+   r = addArgument(mb, r, 
getArg(p, 5)); /* li */
+   r = addArgument(mb, r, 
getArg(p, 6)); /* hi */
+   r = addArgument(mb, r, 
getArg(p, 7)); /* anti */
+   r = addArgument(mb, r, 
getArg(p, 8)); /* unknown */
pushInstruction(mb,r);
} else {
/* pos = select(col, cand, l, 
h, ...) with col = dict.decompress(o,u)
@@ -164,13 +164,13 @@ OPTdictImplementation(Client cntxt, MalB
int tpe = getVarType(mb, 
varisdict[k]);
InstrPtr s = 
newInstructionArgs(mb, dictRef, putName("convert"), 3);
getArg(s,

MonetDB: Jan2022 - Backport changeset cbd49a3e2b19 into Jan2022 ...

2022-02-10 Thread Pedro Ferreira
Changeset: 3193c9417d1f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3193c9417d1f
Modified Files:
sql/server/rel_unnest.c
Branch: Jan2022
Log Message:

Backport changeset cbd49a3e2b19 into Jan2022 (I added this rewrite there)


diffs (18 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2113,8 +2113,12 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel
}
n = next;
}
-   if (!list_empty(projs))
-   rel = rel_project(sql->sa, rel, 
list_merge(rel_projections(sql, rel, NULL, 1, 1), projs, NULL));
+   if (!list_empty(projs)) {
+   /* the grouping relation may have more than 1 
reference, a replacement is needed */
+   list *nexps = list_merge(rel_projections(sql, rel, 
NULL, 1, 1), projs, NULL);
+   rel = rel_inplace_project(sql->sa, rel, 
rel_dup(rel->l), nexps);
+   rel->card = exps_card(nexps);
+   }
}
return rel;
 }
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: Jan2022 - Don't forget to set relation as processed

2022-02-10 Thread Pedro Ferreira
Changeset: 0d44229e63e7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0d44229e63e7
Modified Files:
sql/server/rel_updates.c
Branch: Jan2022
Log Message:

Don't forget to set relation as processed


diffs (11 lines):

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
@@ -404,6 +404,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_
if (c) {
c = rel_setop(sql->sa, c, p, op_union);
rel_setop_set_exps(sql, c, rel_projections(sql, 
c->l, NULL, 1, 1), false);
+   set_processed(c);
} else
c = p;
}
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - More missing processed flags

2022-02-10 Thread Pedro Ferreira
Changeset: 5be57f80534e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5be57f80534e
Modified Files:
sql/server/rel_dump.c
sql/server/rel_optimizer.c
sql/server/rel_unnest.c
Branch: default
Log Message:

More missing processed flags


diffs (145 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1945,6 +1945,7 @@ rel_read(mvc *sql, char *r, int *pos, li
return sql_error(sql, -1, 
SQLSTATE(42000) "Table returning function: the number of output parameters 
don't match the table ones relation outputs: %d != function outputs: %d\n",
 
list_length(outputs), list_length(sf->func->res));
rel = rel_table_func(sql->sa, lrel, tudf, 
outputs, TABLE_FROM_RELATION);
+   set_processed(rel);
} else {
if (r[*pos] != ')')
sql_error(sql, -1, SQLSTATE(42000) 
"Table: missing ')'\n");
@@ -1994,6 +1995,7 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, 
'[', 0, 1)))
return NULL;
rel = rel_topn(sql->sa, nrel, exps);
+   set_processed(rel);
}
break;
case 'p':
@@ -2015,12 +2017,11 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, '[', 0, 
1)))
return NULL;
rel = rel_project(sql->sa, nrel, exps);
+   set_processed(rel);
/* order by ? */
-   if (r[*pos] == '[') {
-   /* first projected expressions, then left relation 
projections */
-   if (!(rel->r = read_exps(sql, rel, nrel, NULL, r, pos, 
'[', 0, 1)))
-   return NULL;
-   }
+   /* first projected expressions, then left relation projections 
*/
+   if (r[*pos] == '[' && !(rel->r = read_exps(sql, rel, nrel, 
NULL, r, pos, '[', 0, 1)))
+   return NULL;
break;
case 'g':
*pos += (int) strlen("group by");
@@ -2068,6 +2069,7 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, 
'[', 0, 1)))
return NULL;
rel = rel_sample(sql->sa, nrel, exps);
+   set_processed(rel);
} else if (r[*pos+2] == 'l') {
*pos += (int) strlen("select");
skipWS(r, pos);
@@ -2086,6 +2088,7 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, 
'[', 0, 1)))
return NULL;
rel = rel_select_copy(sql->sa, nrel, exps);
+   set_processed(rel);
/* semijoin or antijoin */
} else if (r[*pos+1] == 'e' || r[*pos+1] == 'n') {
if (r[*pos+1] == 'n') {
@@ -2234,9 +2237,9 @@ rel_read(mvc *sql, char *r, int *pos, li
return NULL;
rel = rel_project(sql->sa, NULL, exps);
/* order by ? */
-   if (r[*pos] == '[')
-   if (!(rel->r = read_exps(sql, NULL, rel, NULL, r, pos, 
'[', 0, 1)))
-   return NULL;
+   if (r[*pos] == '[' && !(rel->r = read_exps(sql, NULL, rel, 
NULL, r, pos, '[', 0, 1)))
+   return NULL;
+   set_processed(rel);
break;
case 'd':
/* 'ddl' not supported */
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1816,6 +1816,7 @@ rel_push_topn_and_sample_down(visitor *v
x = x->l;
if (x && x->op != rel->op) { /* only push topn once */
ul = func(v->sql->sa, ul, 
sum_limit_offset(v->sql, rel));
+   set_processed(ul);
u->l = ul;
changed = true;
}
@@ -1825,6 +1826,7 @@ rel_push_topn_and_sample_down(visitor *v
x = x->l;
if (x && x->op != rel->op) { /* only push topn once */
ur = func(v->sql->sa, ur, 
sum_limit_offset(v->sql, rel));
+   set_processed(ur);
u->r = ur;
changed = true;
}
@

monetdb-java: default - Forgot to cleanup created type xml. Now ...

2022-02-10 Thread Martin van Dinther
Changeset: 1f444b5ad7d2 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/1f444b5ad7d2
Modified Files:
tests/JDBC_API_Tester.java
Branch: default
Log Message:

Forgot to cleanup created type xml. Now it will be dropped after use.
Also added and improved some comments.


diffs (69 lines):

diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -616,7 +616,7 @@ final public class JDBC_API_Tester {
 
Statement stmt = null;
try {
-   // turn off auto commit
+   // turn on auto commit
con.setAutoCommit(true);
// >> false: we just disabled it
sb.append("6. 
true\t").append(con.getAutoCommit()).append("\n");
@@ -802,15 +802,23 @@ final public class JDBC_API_Tester {
sb.append("FAILED: 
").append(e.getMessage()).append("\n");
}
 
+   // cleanup created db objects
try {
int response = stmt.executeUpdate("DROP TABLE 
nopk_twoucs");
if (response != Statement.SUCCESS_NO_INFO)
sb.append("Dropping table nopk_twoucs failed to 
return -2!! It returned: " + response + "\n");
} catch (SQLException e) {
-   // this means we get what we expect
sb.append("failed to drop table: 
").append(e.getMessage());
}
 
+   try {
+   int response = stmt.executeUpdate("DROP TYPE xml");
+   if (response != Statement.SUCCESS_NO_INFO)
+   sb.append("Dropping type xml failed to return 
-2!! It returned: " + response + "\n");
+   } catch (SQLException e) {
+   sb.append("failed to drop type: 
").append(e.getMessage());
+   }
+
closeStmtResSet(stmt, null);
 
compareExpectedOutput("Test_Dobjects", "");
@@ -973,6 +981,7 @@ final public class JDBC_API_Tester {
compareExpectedOutput("Test_PlanExplainTraceDebugCmds: 
" + qry, "1\n");
sb.setLength(0);// clear the output log buffer
 
+   // plan statements are supported via JDBC
qry = "plan SELECT 2;";
rs = stmt.executeQuery(qry);
compareResultSet(rs, qry,
@@ -985,6 +994,7 @@ final public class JDBC_API_Tester {
rs = null;
sb.setLength(0);// clear the output log buffer
 
+   // explain statements are supported via JDBC
qry = "explain SELECT 3;";
rs = stmt.executeQuery(qry);
while (rs.next()) {
@@ -1001,6 +1011,7 @@ final public class JDBC_API_Tester {
"end user.main;\n");
sb.setLength(0);// clear the output log buffer
 
+   // trace statements are supported via JDBC. Note that 
it returns two resultsets, one with the query result and next one with the 
trace result.
qry = "trace SELECT 4;";
rs = stmt.executeQuery(qry);
while (rs.next()) {
@@ -1022,6 +1033,7 @@ final public class JDBC_API_Tester {
"X_10=0:int := sql.resultSet(\".%2\":str, 
\"%2\":str, \"tinyint\":str, 3:int, 0:int, 7:int, 4:bte);\n");
sb.setLength(0);// clear the output log buffer
 
+   // debug statements are NOT supported via JDBC driver, 
so the execution should throw an SQLException
qry = "debug SELECT 5;";
sb.append(qry).append("\n");
rs = stmt.executeQuery(qry);
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - Don't generate new statement if not used

2022-02-10 Thread Pedro Ferreira
Changeset: 6a6266f46722 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6a6266f46722
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
Branch: default
Log Message:

Don't generate new statement if not used


diffs (174 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
@@ -3945,7 +3945,7 @@ insert_check_ukey(backend *be, list *ins
stmt *cs = list_fetch(inserts, c->c->colnr);
 
/* foreach column add predicate */
-   (void) stmt_column_predicate(be, c->c);
+   stmt_add_column_predicate(be, c->c);
 
col = stmt_col(be, c->c, dels, dels->partition);
if ((k->type == ukey) && stmt_has_null(col)) {
@@ -3967,7 +3967,7 @@ insert_check_ukey(backend *be, list *ins
stmt *cs = list_fetch(inserts, c->c->colnr);
 
/* foreach column add predicate */
-   (void) stmt_column_predicate(be, c->c);
+   stmt_add_column_predicate(be, c->c);
 
col = stmt_col(be, c->c, dels, dels->partition);
list_append(lje, col);
@@ -4030,7 +4030,7 @@ insert_check_ukey(backend *be, list *ins
stmt *s = list_fetch(inserts, c->c->colnr), *h = s;
 
/* add predicate for this column */
-   (void) stmt_column_predicate(be, c->c);
+   stmt_add_column_predicate(be, c->c);
 
s = stmt_col(be, c->c, dels, dels->partition);
if ((k->type == ukey) && stmt_has_null(s)) {
@@ -4101,7 +4101,7 @@ insert_check_fkey(backend *be, list *ins
sql_kc *c = m->data;
 
/* foreach column add predicate */
-   (void) stmt_column_predicate(be, c->c);
+   stmt_add_column_predicate(be, c->c);
}
 
if (pin && list_length(pin->op4.lval))
@@ -4372,7 +4372,7 @@ rel2bin_insert(backend *be, sql_rel *rel
be->rowcount = be->rowcount ? 
add_to_rowcount_accumulator(be, ret->nr) : ret->nr;
}
if (t->s && isGlobal(t) && !isGlobalTemp(t))
-   (void) stmt_dependency_change(be, t, ret);
+   stmt_add_dependency_change(be, t, ret);
return ret;
}
 }
@@ -5233,7 +5233,7 @@ sql_update(backend *be, sql_table *t, st
be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, 
cnt->nr) : cnt->nr;
}
if (t->s && isGlobal(t) && !isGlobalTemp(t))
-   (void) stmt_dependency_change(be, t, cnt);
+   stmt_add_dependency_change(be, t, cnt);
 /* cascade ?? */
return l;
 }
@@ -5357,7 +5357,7 @@ rel2bin_update(backend *be, sql_rel *rel
be->rowcount = be->rowcount ? 
add_to_rowcount_accumulator(be, cnt->nr) : cnt->nr;
}
if (t->s && isGlobal(t) && !isGlobalTemp(t))
-   (void) stmt_dependency_change(be, t, cnt);
+   stmt_add_dependency_change(be, t, cnt);
}
 
if (sql->cascade_action)
@@ -5575,7 +5575,7 @@ sql_delete(backend *be, sql_table *t, st
be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, 
s->nr) : s->nr;
}
if (t->s && isGlobal(t) && !isGlobalTemp(t))
-   (void) stmt_dependency_change(be, t, s);
+   stmt_add_dependency_change(be, t, s);
return s;
 }
 
@@ -5745,7 +5745,7 @@ sql_truncate(backend *be, sql_table *t, 
be->rowcount = be->rowcount ? 
add_to_rowcount_accumulator(be, other->nr) : other->nr;
}
if (next->s && isGlobal(next) && !isGlobalTemp(next))
-   (void) stmt_dependency_change(be, next, other);
+   stmt_add_dependency_change(be, next, other);
}
 
 finalize:
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
@@ -3012,57 +3012,32 @@ stmt_claim(backend *be, sql_table *t, st
return NULL;
 }
 
-stmt *
-stmt_dependency_change(backend *be, sql_table *t, stmt *cnt)
+void
+stmt_add_dependency_change(backend *be, sql_table *t, stmt *cnt)
 {
MalBlkPtr mb = be->mb;
InstrPtr q = NULL;
 
if (!t || cnt->nr < 0)
-   return NULL;
+   return ;
q = newStmtArgs(mb, sqlRef, dependRef, 4);
q = pushSchema(mb, q, t);
q = pushStr(mb, q, t->base.name);
q = pushArgument(mb, q, cnt->nr);
-   if (q) {
-   stmt *s = stmt_create(

MonetDB: default - Fixing relation inplacements refcounts

2022-02-10 Thread Pedro Ferreira
Changeset: ee06bbe09cb2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ee06bbe09cb2
Modified Files:
sql/server/rel_basetable.c
sql/server/rel_basetable.h
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_unnest.c
Branch: default
Log Message:

Fixing relation inplacements refcounts


diffs (128 lines):

diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -554,24 +554,3 @@ rel_base_get_mergetable(sql_rel *rel)
 
return ba ? ba->mt : NULL;
 }
-
-sql_rel *
-rel_inplace_basetable(sql_rel *rel, sql_rel *bt)
-{
-   /* in order to not expose 'rel_destroy_', add a reference increment,
-  so 'rel' references stay the same */
-   rel_dup(rel);
-   rel_destroy(rel);
-   assert(is_basetable(bt->op));
-
-   set_processed(rel);
-   rel->l = bt->l;
-   rel->r = bt->r;
-   rel->attr = NULL;
-   rel->op = op_basetable;
-   rel->exps = bt->exps;
-   rel->card = CARD_MULTI;
-   rel->flag = 0;
-   rel->nrcols = bt->nrcols;
-   return rel;
-}
diff --git a/sql/server/rel_basetable.h b/sql/server/rel_basetable.h
--- a/sql/server/rel_basetable.h
+++ b/sql/server/rel_basetable.h
@@ -47,6 +47,5 @@ extern int rel_base_has_column_privilege
 
 extern void rel_base_set_mergetable( sql_rel *rel, sql_table *mt); /* keep 
parent merge table */
 extern sql_table *rel_base_get_mergetable( sql_rel *rel);
-extern sql_rel *rel_inplace_basetable(sql_rel *rel, sql_rel *bt);
 
 #endif /* _REL_BASETABLE_H_ */
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -9074,6 +9074,10 @@ rel_merge_table_rewrite(visitor *v, sql_
if (!(nrel = merge_table_prune_and_unionize(v, bt, 
info)))
return NULL;
/* Always do relation inplace. If the mt relation has 
more than 1 reference, this is required */
+   if (is_select(rel->op)) { /* for the selection case, 
increment the reference count of the table */
+   assert(rel->l == bt && sel->l == bt);
+   rel_dup(bt);
+   }
if (is_union(nrel->op)) {
rel = rel_inplace_setop(v->sql, rel, nrel->l, 
nrel->r, op_union, nrel->exps);
} else if (is_select(nrel->op)) {
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
@@ -457,6 +457,24 @@ rel_first_column(mvc *sql, sql_rel *r)
 }
 
 sql_rel *
+rel_inplace_basetable(sql_rel *rel, sql_rel *bt)
+{
+   assert(is_basetable(bt->op));
+
+   rel_destroy_(rel);
+   set_processed(rel);
+   rel->l = bt->l;
+   rel->r = bt->r;
+   rel->attr = NULL;
+   rel->op = op_basetable;
+   rel->exps = bt->exps;
+   rel->card = CARD_MULTI;
+   rel->flag = 0;
+   rel->nrcols = bt->nrcols;
+   return rel;
+}
+
+sql_rel *
 rel_inplace_setop(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, 
operator_type setop, list *exps)
 {
rel_destroy_(rel);
diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h
--- a/sql/server/rel_rel.h
+++ b/sql/server/rel_rel.h
@@ -69,6 +69,7 @@ extern sql_exp *rel_bind_column( mvc *sq
 extern sql_exp *rel_bind_column2( mvc *sql, sql_rel *rel, const char *tname, 
const char *cname, int f );
 extern sql_exp *rel_first_column(mvc *sql, sql_rel *rel);
 
+extern sql_rel *rel_inplace_basetable(sql_rel *rel, sql_rel *bt);
 extern sql_rel *rel_inplace_setop(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel 
*r, operator_type setop, list *exps);
 extern sql_rel *rel_inplace_project(sql_allocator *sa, sql_rel *rel, sql_rel 
*l, list *e);
 extern sql_rel *rel_inplace_select(sql_rel *rel, sql_rel *l, list *exps);
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3538,7 +3538,7 @@ rewrite_groupings(visitor *v, sql_rel *r
list *l = (list*) n->data, *exps = 
sa_list(v->sql->sa), *pexps = sa_list(v->sql->sa);
 
l = list_flaten(l);
-   nrel = rel_groupby(v->sql, unions ? 
rel_dup(rel->l) : rel->l, l);
+   nrel = rel_groupby(v->sql, rel_dup(rel->l), l);
 
for (node *m = rel->exps->h ; m ; m = m->next) {
sql_exp *e = (sql_exp*) m->data, *ne = 
NULL;
@@ -3637,7 +3637,6 @@ rewrite_groupings(visitor *v, sql_rel *r
return unions;
}
/* always do relation inplace, so it will be fine when 
the input group has more than 1 reference */
-   rel_dup(

MonetDB: Jul2021 - Update output to comply with newer geos library.

2022-02-10 Thread Sjoerd Mullender
Changeset: d9e844d3ba1e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d9e844d3ba1e
Modified Files:
geom/sql/conformance/Tests/T48.test
Branch: Jul2021
Log Message:

Update output to comply with newer geos library.


diffs (10 lines):

diff --git a/geom/sql/conformance/Tests/T48.test 
b/geom/sql/conformance/Tests/T48.test
--- a/geom/sql/conformance/Tests/T48.test
+++ b/geom/sql/conformance/Tests/T48.test
@@ -1,5 +1,5 @@
 query T rowsort
 SELECT ST_AsText(ST_Difference(named_places.boundary, forests.boundary)) FROM 
named_places, forests WHERE named_places.name = 'Ashton' AND forests.name = 
'Green Forest'
 
-POLYGON ((62 48, 84 48, 84 42, 56 34, 62 48))
+POLYGON ((84 48, 84 42, 56 34, 62 48, 84 48))
 
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: Jul2021 - Implemented version check for geos library in...

2022-02-10 Thread Sjoerd Mullender
Changeset: 650f413e080f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/650f413e080f
Modified Files:
geom/sql/conformance/Tests/All
geom/sql/conformance/Tests/T49.test
geom/sql/functions/Tests/All
sql/test/pg_regress/Tests/All
sql/test/pg_regress/Tests/polygon.test
testing/Mtest.py.in
testing/Mz.py.in
Branch: Jul2021
Log Message:

Implemented version check for geos library in testing.


diffs (191 lines):

diff --git a/geom/sql/conformance/Tests/All b/geom/sql/conformance/Tests/All
--- a/geom/sql/conformance/Tests/All
+++ b/geom/sql/conformance/Tests/All
@@ -46,8 +46,8 @@ HAVE_GEOM?T44
 HAVE_GEOM?T45
 HAVE_GEOM?T46
 HAVE_GEOM?T47
-HAVE_GEOM?T48
-#HAVE_GEOM?T49 # disabled because depends on geos library version
+HAVE_GEOM&GEOS_VERSION>=3.9?T48
+HAVE_GEOM&GEOS_VERSION>=3.9?T49
 HAVE_GEOM?T50
 HAVE_GEOM?T51
 HAVE_GEOM?T52
diff --git a/geom/sql/conformance/Tests/T49.test 
b/geom/sql/conformance/Tests/T49.test
--- a/geom/sql/conformance/Tests/T49.test
+++ b/geom/sql/conformance/Tests/T49.test
@@ -1,5 +1,5 @@
 query T rowsort
 SELECT ST_AsText(ST_Union(shore, boundary)) FROM lakes, named_places WHERE 
lakes.name = 'Blue Lake' AND named_places.name = 'Goose Island'
 
-POLYGON ((52 18, 66 23, 73 9, 48 6, 52 18))
+POLYGON ((66 23, 73 9, 48 6, 52 18, 66 23))
 
diff --git a/geom/sql/functions/Tests/All b/geom/sql/functions/Tests/All
--- a/geom/sql/functions/Tests/All
+++ b/geom/sql/functions/Tests/All
@@ -20,7 +20,7 @@ HAVE_GEOM?ST_AsText
 
 HAVE_GEOM?ST_IsClosed
 HAVE_GEOM?ST_IsEmpty
-HAVE_GEOM?ST_IsSimple
+HAVE_GEOM&GEOS_VERSION>=3.8?ST_IsSimple
 HAVE_GEOM?ST_IsValid
 HAVE_GEOM?ST_IsRing
 
diff --git a/sql/test/pg_regress/Tests/All b/sql/test/pg_regress/Tests/All
--- a/sql/test/pg_regress/Tests/All
+++ b/sql/test/pg_regress/Tests/All
@@ -29,7 +29,7 @@ HAVE_GEOM?point
 #HAVE_GEOM?lseg   # lseg is NOT supported in MonetDB. lseg (Line Segment) is 
also not part of OpenGIS standard so exclude this test
 HAVE_GEOM?box # box is not supported in MonetDB but it can be replaced 
with mbr (= minimum bounded rectangle)
 HAVE_GEOM?path# path is not supported in MonetDB but it can be replaced 
with linestring
-HAVE_GEOM?polygon
+HAVE_GEOM&GEOS_VERSION>=3.10?polygon
 #HAVE_GEOM?circle # circle is NOT supported in MonetDB. It is also not part of 
OpenGIS standard so exclude this test
 #HAVE_GEOM?geometry  # tables CIRCLE_TBL and LSEG_TBL do not exist as they 
have been disabled above. All queries fail
 date
diff --git a/sql/test/pg_regress/Tests/polygon.test 
b/sql/test/pg_regress/Tests/polygon.test
--- a/sql/test/pg_regress/Tests/polygon.test
+++ b/sql/test/pg_regress/Tests/polygon.test
@@ -15,7 +15,7 @@ POLYGON ((3 1, 3 3, 1 0, 3 1))
 statement error
 INSERT INTO POLYGON_TBL(f1) VALUES ('POLYGON((0.0 0.0, 0.0 0.0))')
 
-statement error
+statement ok
 INSERT INTO POLYGON_TBL(f1) VALUES ('POLYGON((0.0 1.0, 1.0 1.0, 0.0 1.0))')
 
 statement ok
@@ -57,6 +57,8 @@ SELECT '' AS four, POLYGON_TBL.* FROM PO
 (empty)
 POLYGON ((0 1, 0 1, 0 1, 0 1))
 (empty)
+POLYGON ((0 1, 1 1, 0 1))
+(empty)
 POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2))
 (empty)
 POLYGON ((2 0, 2 4, 0 0, 2 0))
@@ -71,6 +73,8 @@ SELECT * FROM POLYGON_TBL_VW
 
 POLYGON ((0 1, 0 1, 0 1, 0 1))
 POLYGON ((0 1, 0 1, 0 1, 0 1))
+POLYGON ((0 1, 1 1, 0 1))
+POLYGON ((0 1, 1 1, 0 1))
 POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2))
 POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2))
 POLYGON ((2 0, 2 4, 0 0, 2 0))
@@ -84,6 +88,9 @@ SELECT '' AS three, p.*
WHERE p.f1 && 'POLYGON((3.0 1.0, 3.0 3.0, 1.0 0.0, 3.0 1.0))'
 
 (empty)
+POLYGON ((0 1, 1 1, 0 1))
+POLYGON ((0 1, 1 1, 0 1))
+(empty)
 POLYGON ((2 0, 2 4, 0 0, 2 0))
 POLYGON ((2 0, 2 4, 0 0, 2 0))
 (empty)
@@ -108,6 +115,9 @@ SELECT '' AS four, p.*
 POLYGON ((0 1, 0 1, 0 1, 0 1))
 POLYGON ((0 1, 0 1, 0 1, 0 1))
 (empty)
+POLYGON ((0 1, 1 1, 0 1))
+POLYGON ((0 1, 1 1, 0 1))
+(empty)
 POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2))
 POLYGON ((0 2, 0 1, 0 1, 0 1, 0 2))
 (empty)
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -59,6 +59,8 @@ isatty = os.isatty(sys.stdout.fileno())
 
 mapiportre = re.compile(r'mapi:monetdb://[-.a-zA-Z0-9]+:(?P\d+)/')
 
+geos_version = '@GEOS_VERSION@'
+
 # default is no color (these three functions may get redefined)
 def prred(str, write = sys.stdout.write):
 write(str)
@@ -2026,6 +2028,35 @@ def RunTest(env, TST, COND, oktests, len
 elem = SkipTest(env, TST, EXT, reason, length)
 break
 passwd = cond[7:]
+elif cond.startswith('GEOS_VERSION>='):
+if not geos_version:
+reason = "no geos version information available"
+elem = SkipTest(env, TST, EXT, reason, length)
+break
+req_vers = cond[14:].split('.')
+act_vers = geos_version.split('.')
+if not negate:
+for i in range(len(act_vers)):

MonetDB: Jul2021 - Simplify.

2022-02-10 Thread Sjoerd Mullender
Changeset: 3719df8a3963 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3719df8a3963
Modified Files:
testing/Mtest.py.in
testing/Mz.py.in
Branch: Jul2021
Log Message:

Simplify.


diffs (96 lines):

diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -59,7 +59,7 @@ isatty = os.isatty(sys.stdout.fileno())
 
 mapiportre = re.compile(r'mapi:monetdb://[-.a-zA-Z0-9]+:(?P\d+)/')
 
-geos_version = '@GEOS_VERSION@'
+geos_version = '@GEOS_VERSION@'.split('.')
 
 # default is no color (these three functions may get redefined)
 def prred(str, write = sys.stdout.write):
@@ -2029,29 +2029,28 @@ def RunTest(env, TST, COND, oktests, len
 break
 passwd = cond[7:]
 elif cond.startswith('GEOS_VERSION>='):
-if not geos_version:
+if not geos_version or not geos_version[0]:
 reason = "no geos version information available"
 elem = SkipTest(env, TST, EXT, reason, length)
 break
 req_vers = cond[14:].split('.')
-act_vers = geos_version.split('.')
 if not negate:
-for i in range(len(act_vers)):
+for i in range(len(geos_version)):
 if i >= len(req_vers):
 break
-if int(act_vers[i]) > int(req_vers[i]):
+if int(geos_version[i]) > int(req_vers[i]):
 break
-if int(act_vers[i]) < int(req_vers[i]):
+if int(geos_version[i]) < int(req_vers[i]):
 reason = "geos version too low"
 elem = SkipTest(env, TST, EXT, reason, length)
 break
 else:
-for i in range(len(act_vers)):
+for i in range(len(geos_version)):
 if i >= len(req_vers):
 break
-if int(act_vers[i]) < int(req_vers[i]):
+if int(geos_version[i]) < int(req_vers[i]):
 break
-if int(act_vers[i]) > int(req_vers[i]):
+if int(geos_version[i]) > int(req_vers[i]):
 reason = "geos version too high"
 elem = SkipTest(env, TST, EXT, reason, length)
 break
diff --git a/testing/Mz.py.in b/testing/Mz.py.in
--- a/testing/Mz.py.in
+++ b/testing/Mz.py.in
@@ -57,7 +57,7 @@ isatty = os.isatty(sys.stdout.fileno())
 
 mapiportre = re.compile(r'mapi:monetdb://[-.a-zA-Z0-9]+:(?P\d+)/')
 
-geos_version = '@GEOS_VERSION@'
+geos_version = '@GEOS_VERSION@'.split('.')
 
 # default is no color (these three functions may get redefined)
 def prred(str, write = sys.stdout.write):
@@ -1109,27 +1109,26 @@ def RunTest(env, test, oktests, pSrvr):
 break
 passwd = cond[7:]
 elif cond.startswith('GEOS_VERSION>='):
-if not geos_version:
+if not geos_version or not geos_version[0]:
 reason = "no geos version information available"
 break
 req_vers = cond[14:].split('.')
-act_vers = geos_version.split('.')
 if not negate:
-for i in range(len(act_vers)):
+for i in range(len(geos_version)):
 if i >= len(req_vers):
 break
-if int(act_vers[i]) > int(req_vers[i]):
+if int(geos_version[i]) > int(req_vers[i]):
 break
-if int(act_vers[i]) < int(req_vers[i]):
+if int(geos_version[i]) < int(req_vers[i]):
 reason = "geos version too low"
 break
 else:
-for i in range(len(act_vers)):
+for i in range(len(geos_version)):
 if i >= len(req_vers):
 break
-if int(act_vers[i]) < int(req_vers[i]):
+if int(geos_version[i]) < int(req_vers[i]):
 break
-if int(act_vers[i]) > int(req_vers[i]):
+if int(geos_version[i]) > int(req_vers[i]):
 reason = "geos version too high"
 break
 if reason is not None:
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: Jan2022 - Merge with Jul2021 branch.

2022-02-10 Thread Sjoerd Mullender
Changeset: 594ac4cf16db for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/594ac4cf16db
Modified Files:
gdk/gdk_batop.c
sql/test/pg_regress/Tests/polygon.test
testing/Mtest.py.in
testing/Mz.py.in
Branch: Jan2022
Log Message:

Merge with Jul2021 branch.

___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - On the mergetable rewrite, the basetable rela...

2022-02-10 Thread Pedro Ferreira
Changeset: d319f308a9db for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d319f308a9db
Modified Files:
sql/server/rel_optimizer.c
Branch: default
Log Message:

On the mergetable rewrite, the basetable relation also has to be destroyed. My 
apologies


diffs (14 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -9074,10 +9074,6 @@ rel_merge_table_rewrite(visitor *v, sql_
if (!(nrel = merge_table_prune_and_unionize(v, bt, 
info)))
return NULL;
/* Always do relation inplace. If the mt relation has 
more than 1 reference, this is required */
-   if (is_select(rel->op)) { /* for the selection case, 
increment the reference count of the table */
-   assert(rel->l == bt && sel->l == bt);
-   rel_dup(bt);
-   }
if (is_union(nrel->op)) {
rel = rel_inplace_setop(v->sql, rel, nrel->l, 
nrel->r, op_union, nrel->exps);
} else if (is_select(nrel->op)) {
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: Jan2022 - I did another replacement wrong

2022-02-10 Thread Pedro Ferreira
Changeset: 348309e62616 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/348309e62616
Modified Files:
sql/server/rel_unnest.c
Branch: Jan2022
Log Message:

I did another replacement wrong


diffs (21 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2115,8 +2115,15 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel
}
if (!list_empty(projs)) {
/* the grouping relation may have more than 1 
reference, a replacement is needed */
-   list *nexps = list_merge(rel_projections(sql, rel, 
NULL, 1, 1), projs, NULL);
-   rel = rel_inplace_project(sql->sa, rel, 
rel_dup(rel->l), nexps);
+   sql_rel *l = rel_create(sql->sa);
+   if (!l)
+   return NULL;
+   *l = *rel;
+   /* increment the refcount of the left relation */
+   rel_dup(rel->l);
+   l->ref.refcnt = 1;
+   list *nexps = list_merge(rel_projections(sql, l, NULL, 
1, 1), projs, NULL);
+   rel = rel_inplace_project(sql->sa, rel, l, nexps);
rel->card = exps_card(nexps);
}
}
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - Merged with Jan2022

2022-02-10 Thread Pedro Ferreira
Changeset: e4c805b2af3d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e4c805b2af3d
Modified Files:
sql/server/rel_unnest.c
sql/server/rel_updates.c
Branch: default
Log Message:

Merged with Jan2022


diffs (32 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2192,8 +2192,15 @@ aggrs_split_funcs(mvc *sql, sql_rel *rel
}
if (!list_empty(projs)) {
/* the grouping relation may have more than 1 
reference, a replacement is needed */
-   list *nexps = list_merge(rel_projections(sql, rel, 
NULL, 1, 1), projs, NULL);
-   rel = rel_inplace_project(sql->sa, rel, 
rel_dup(rel->l), nexps);
+   sql_rel *l = rel_create(sql->sa);
+   if (!l)
+   return NULL;
+   *l = *rel;
+   /* increment the refcount of the left relation */
+   rel_dup(rel->l);
+   l->ref.refcnt = 1;
+   list *nexps = list_merge(rel_projections(sql, l, NULL, 
1, 1), projs, NULL);
+   rel = rel_inplace_project(sql->sa, rel, l, nexps);
rel->card = exps_card(nexps);
}
}
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
@@ -405,6 +405,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_
if (c) {
c = rel_setop(sql->sa, c, p, op_union);
rel_setop_set_exps(sql, c, rel_projections(sql, 
c->l, NULL, 1, 1), false);
+   set_processed(c);
} else
c = p;
}
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - Set more relations as processed

2022-02-10 Thread Pedro Ferreira
Changeset: 73ea7e3782f2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/73ea7e3782f2
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/rel_rel.c
Branch: default
Log Message:

Set more relations as processed


diffs (73 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -4016,6 +4016,7 @@ rel_push_aggr_down(visitor *v, sql_rel *
ul->card = g->card;
ul->exps = exps_copy(v->sql, g->exps);
ul->nrcols = list_length(ul->exps);
+   set_processed(ul);
 
ur = rel_groupby(v->sql, ur, NULL);
ur->r = rgbe;
@@ -4023,6 +4024,7 @@ rel_push_aggr_down(visitor *v, sql_rel *
ur->card = g->card;
ur->exps = exps_copy(v->sql, g->exps);
ur->nrcols = list_length(ur->exps);
+   set_processed(ur);
 
/* group by on primary keys which define the partioning scheme
 * don't need a finalizing group by */
@@ -9849,6 +9851,7 @@ rel_setjoins_2_joingroupby(visitor *v, s
} else {
rel = rel_groupby(v->sql, rel, 
list_append(sa_list(v->sql->sa), exp_ref(v->sql, lid)));
rel->exps = aexps;
+   set_processed(rel);
}
}
}
diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c
--- a/sql/server/rel_propagate.c
+++ b/sql/server/rel_propagate.c
@@ -217,6 +217,7 @@ create_range_partition_anti_rel(sql_quer
anti_rel = rel_groupby(sql, anti_rel, NULL);
aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_rel->card, 0);
(void) rel_groupby_add_aggr(sql, anti_rel, aggr);
+   set_processed(anti_rel);
exp_label(sql->sa, aggr, ++sql->label);
 
/* generate the exception */
@@ -259,6 +260,7 @@ create_list_partition_anti_rel(sql_query
anti_rel = rel_groupby(sql, anti_rel, NULL);
aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_rel->card, 0);
(void) rel_groupby_add_aggr(sql, anti_rel, aggr);
+   set_processed(anti_rel);
exp_label(sql->sa, aggr, ++sql->label);
 
/* generate the exception */
@@ -866,6 +868,7 @@ rel_generate_subinserts(sql_query *query
anti_rel = rel_groupby(sql, anti_rel, NULL);
aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_rel->card, 0);
(void) rel_groupby_add_aggr(sql, anti_rel, aggr);
+   set_processed(anti_rel);
exp_label(sql->sa, aggr, ++sql->label);
 
aggr = exp_ref(sql, aggr);
@@ -1041,6 +1044,7 @@ rel_subtable_insert(sql_query *query, sq
aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, anti_dup->card, 0);
(void) rel_groupby_add_aggr(sql, anti_dup, aggr);
exp_label(sql->sa, aggr, ++sql->label);
+   set_processed(anti_dup);
 
/* generate the exception */
aggr = exp_ref(sql, aggr);
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
@@ -1664,6 +1664,7 @@ rel_return_zero_or_one(mvc *sql, sql_rel
e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, CARD_ATOM, 
has_nil(e));
(void)rel_groupby_add_aggr(sql, rel, e);
}
+   set_processed(rel);
}
return rel;
 }
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: default - Now that inplacing relations is becoming more...

2022-02-10 Thread Pedro Ferreira
Changeset: 82365f63af25 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/82365f63af25
Modified Files:
sql/server/rel_rel.c
Branch: default
Log Message:

Now that inplacing relations is becoming more common, make sure some properties 
always get reset


diffs (102 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
@@ -456,20 +456,27 @@ rel_first_column(mvc *sql, sql_rel *r)
return NULL;
 }
 
+static void
+rel_inplace_reset_props(sql_rel *rel)
+{
+   rel->flag = 0;
+   rel->attr = NULL;
+   reset_dependent(rel);
+   set_processed(rel);
+}
+
 sql_rel *
 rel_inplace_basetable(sql_rel *rel, sql_rel *bt)
 {
assert(is_basetable(bt->op));
 
rel_destroy_(rel);
-   set_processed(rel);
+   rel_inplace_reset_props(rel);
rel->l = bt->l;
rel->r = bt->r;
-   rel->attr = NULL;
rel->op = op_basetable;
rel->exps = bt->exps;
rel->card = CARD_MULTI;
-   rel->flag = 0;
rel->nrcols = bt->nrcols;
return rel;
 }
@@ -478,14 +485,12 @@ sql_rel *
 rel_inplace_setop(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, 
operator_type setop, list *exps)
 {
rel_destroy_(rel);
+   rel_inplace_reset_props(rel);
rel->l = l;
rel->r = r;
-   rel->attr = NULL;
rel->op = setop;
rel->card = CARD_MULTI;
-   rel->flag = 0;
rel_setop_set_exps(sql, rel, exps, false);
-   set_processed(rel);
return rel;
 }
 
@@ -502,15 +507,12 @@ rel_inplace_project(sql_allocator *sa, s
} else {
rel_destroy_(rel);
}
-   set_processed(rel);
-
+   rel_inplace_reset_props(rel);
rel->l = l;
rel->r = NULL;
-   rel->attr = NULL;
rel->op = op_project;
rel->exps = e;
rel->card = CARD_MULTI;
-   rel->flag = 0;
if (l) {
rel->nrcols = l->nrcols;
assert (exps_card(rel->exps) <= rel->card);
@@ -522,14 +524,12 @@ sql_rel *
 rel_inplace_select(sql_rel *rel, sql_rel *l, list *exps)
 {
rel_destroy_(rel);
-   set_processed(rel);
+   rel_inplace_reset_props(rel);
rel->l = l;
rel->r = NULL;
-   rel->attr = NULL;
rel->op = op_select;
rel->exps = exps;
rel->card = exps_card(exps);
-   rel->flag = 0;
rel->card = CARD_ATOM; /* no relation */
if (l) {
rel->card = l->card;
@@ -544,17 +544,15 @@ sql_rel *
 rel_inplace_groupby(sql_rel *rel, sql_rel *l, list *groupbyexps, list *exps )
 {
rel_destroy_(rel);
+   rel_inplace_reset_props(rel);
rel->card = CARD_ATOM;
if (groupbyexps)
rel->card = CARD_AGGR;
rel->l = l;
rel->r = groupbyexps;
-   rel->attr = NULL;
rel->exps = exps;
rel->nrcols = l->nrcols;
rel->op = op_groupby;
-   rel->flag = 0;
-   set_processed(rel);
return rel;
 }
 
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org