MonetDB: pushdown - merged

2020-03-11 Thread Niels Nes
Changeset: 2614f8097372 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2614f8097372
Modified Files:
sql/server/rel_updates.c
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: pushdown
Log Message:

merged


diffs (163 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
@@ -910,16 +910,10 @@ rel_update(mvc *sql, sql_rel *t, sql_rel
 static sql_exp *
 update_check_column(mvc *sql, sql_table *t, sql_column *c, sql_exp *v, sql_rel 
*r, char *cname, const char *action)
 {
-   if (!c) {
-   rel_destroy(r);
-   return sql_error(sql, 02, SQLSTATE(42S22) "%s: no such column 
'%s.%s'", action, t->base.name, cname);
-   }
if (!table_privs(sql, t, PRIV_UPDATE) && !sql_privilege(sql, 
sql->user_id, c->base.id, PRIV_UPDATE)) 
return sql_error(sql, 02, SQLSTATE(42000) "%s: insufficient 
privileges for user '%s' to update table '%s' on column '%s'", action, 
stack_get_string(sql, "current_user"), t->base.name, cname);
-   if (!v || (v = rel_check_type(sql, &c->type, r, v, type_equal)) == 
NULL) {
-   rel_destroy(r);
+   if (!v || (v = rel_check_type(sql, &c->type, r, v, type_equal)) == NULL)
return NULL;
-   }
return v;
 }
 
@@ -964,6 +958,9 @@ update_generate_assignments(sql_query *q
if (single && a->token == SQL_DEFAULT) {
char *colname = assignment->h->next->data.sval;
sql_column *col = mvc_bind_column(sql, t, 
colname);
+
+   if (!col)
+   return sql_error(sql, 02, 
SQLSTATE(42S22) "%s: no such column '%s.%s'", action, t->base.name, colname);
if (col->def) {
char *typestr = 
subtype2string2(&col->type);
if (!typestr)
@@ -1019,6 +1016,10 @@ update_generate_assignments(sql_query *q
sql_column *c = mvc_bind_column(sql, t, cname);
sql_exp *v = n->data;
 
+   if (!c)
+   return sql_error(sql, 02, 
SQLSTATE(42S22) "%s: no such column '%s.%s'", action, t->base.name, cname);
+   if (updates[c->colnr])
+   return sql_error(sql, 02, 
SQLSTATE(42000) "%s: Multiple assignments to same column '%s'", action, 
c->base.name);
if (mt && pcols) {
for (node *nn = pcols->h; nn; nn = 
n->next) {
int next = *(int*) nn->data;
@@ -1035,13 +1036,11 @@ update_generate_assignments(sql_query *q
exp_label(sql->sa, v, ++sql->label);
if (!exp_is_atom(v) || outer)
v = exp_ref(sql->sa, v);
-   if (!v) { /* check for NULL */
+   if (!v) /* check for NULL */
v = exp_atom(sql->sa, 
atom_general(sql->sa, &c->type, NULL));
-   } else if ((v = update_check_column(sql, t, c, 
v, r, cname, action)) == NULL) {
+   if (!(v = update_check_column(sql, t, c, v, r, 
cname, action)))
return NULL;
-   }
list_append(exps, exp_column(sql->sa, 
t->base.name, cname, &c->type, CARD_MULTI, 0, 0));
-   assert(!updates[c->colnr]);
exp_setname(sql->sa, v, c->t->base.name, 
c->base.name);
updates[c->colnr] = v;
}
@@ -1049,6 +1048,10 @@ update_generate_assignments(sql_query *q
char *cname = assignment->h->next->data.sval;
sql_column *c = mvc_bind_column(sql, t, cname);
 
+   if (!c)
+   return sql_error(sql, 02, SQLSTATE(42S22) "%s: 
no such column '%s.%s'", action, t->base.name, cname);
+   if (updates[c->colnr])
+   return sql_error(sql, 02, SQLSTATE(42000) "%s: 
Multiple assignments to same column '%s'", action, c->base.name);
if (mt && pcols) {
for (node *nn = pcols->h; nn; nn = nn->next) {
int next = *(int*) nn->data;
@@ -1061,11 +1064,10 @@ update_generate_assignments(sql_query *q
}
}
 

MonetDB: linear-hashing - Changed calculation of new BAT size du...

2020-03-11 Thread Sjoerd Mullender
Changeset: f203d48e2455 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f203d48e2455
Modified Files:
gdk/gdk_join.c
Branch: linear-hashing
Log Message:

Changed calculation of new BAT size during join.


diffs (16 lines):

diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -223,9 +223,9 @@ maybeextend(BAT *restrict r1, BAT *restr
if (BATcount(r1) + cnt > BATcapacity(r1)) {
/* make some extra space by extrapolating how much
 * more we need (fraction of l we've seen so far is
-* used as the fraction of the expected result size
-* we've produced so far) */
-   BUN newcap = (BUN) ((double) lcnt / lcur * (BATcount(r1) + cnt) 
* 1.5);
+* used to estimate a new size but with a shallow
+* slope so that a skewed join doesn't overwhelm) */
+   BUN newcap = (BUN) (lcnt / (lcnt / 4.0 + lcur * .75) * 
(BATcount(r1) + cnt));
if (newcap < cnt + BATcount(r1))
newcap = cnt + BATcount(r1) + 1024;
if (newcap > maxsize)
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Nov2019 - Test some possible sys utility functions

2020-03-11 Thread Martin van Dinther
Changeset: dca306d18680 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dca306d18680
Added Files:
sql/test/sys-schema/Tests/utilities.sql
sql/test/sys-schema/Tests/utilities.stable.err
sql/test/sys-schema/Tests/utilities.stable.out
Modified Files:
sql/test/sys-schema/Tests/All
Branch: Nov2019
Log Message:

Test some possible sys utility functions


diffs (200 lines):

diff --git a/sql/test/sys-schema/Tests/All b/sql/test/sys-schema/Tests/All
--- a/sql/test/sys-schema/Tests/All
+++ b/sql/test/sys-schema/Tests/All
@@ -11,3 +11,5 @@ HAVE_NETCDF?netcdf_tables_checks
 HAVE_SAMTOOLS?bam_tables_checks
 
 
HAVE_FITS&HAVE_GEOM&HAVE_LIDAR&HAVE_SHP&HAVE_NETCDF&HAVE_SAMTOOLS?systemfunctions
+
+utilities
diff --git a/sql/test/sys-schema/Tests/utilities.sql 
b/sql/test/sys-schema/Tests/utilities.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/sys-schema/Tests/utilities.sql
@@ -0,0 +1,48 @@
+-- utility functions on sys schema objects
+
+-- utility function to find the id of an existing schema name.
+-- It will return NULL if schema name does not exist.
+CREATE OR REPLACE function schema_id(sname varchar(1024)) RETURNS INT
+BEGIN
+  RETURN SELECT min(id) from sys.schemas where name = sname;
+END;
+
+SELECT schema_id('sys');
+SELECT schema_id('json') > 2000;
+SELECT schema_id('hsfdjkhksf does not exist');
+
+
+-- utility function to find the id of an existing table name in a specific 
schema.
+-- It will return NULL if table name does not exist in specified schema or 
schema name does not exist.
+CREATE OR REPLACE function table_id(sname varchar(1024), tname varchar(1024)) 
RETURNS INT
+BEGIN
+  RETURN SELECT min(id) from sys.tables where name = tname AND schema_id = 
(SELECT id from sys.schemas where name = sname);
+END;
+
+SELECT table_id('sys','tables') > 2000;
+SELECT table_id(current_schema,'columns') > 2000;
+SELECT name, type, type_digits, type_scale, "null", number from columns where 
table_id = table_id('sys','tables');
+SELECT table_id('sys','hsfdjkhksf does not exist');
+
+-- utility function to find the id of an existing table name in the current 
schema.
+-- It will return NULL if table name does not exist in the current schema.
+CREATE OR REPLACE function table_id(tname varchar(1024)) RETURNS INT
+BEGIN
+  RETURN SELECT min(id) from sys.tables where name = tname AND schema_id = 
(SELECT id from sys.schemas where name = current_schema);
+END;
+
+SELECT current_schema;
+SELECT table_id('tables') > 2000;
+SELECT table_id('columns') > 2000;
+SELECT name, type, type_digits, type_scale, "null", number from columns where 
table_id = table_id('tables');
+SELECT table_id('hsfdjkhksf does not exist');
+
+
+
+\dftv
+-- cleanup utilities
+DROP ALL function table_id;
+DROP function schema_id;
+
+\dftv
+
diff --git a/sql/test/sys-schema/Tests/utilities.stable.err 
b/sql/test/sys-schema/Tests/utilities.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/sys-schema/Tests/utilities.stable.err
@@ -0,0 +1,12 @@
+stderr of test 'utilities` in directory 'sql/test/sys-schema` itself:
+
+
+# 17:20:48 >  
+# 17:20:48 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-251920" "--port=33727"
+# 17:20:48 >  
+
+
+# 17:20:48 >  
+# 17:20:48 >  "Done."
+# 17:20:48 >  
+
diff --git a/sql/test/sys-schema/Tests/utilities.stable.out 
b/sql/test/sys-schema/Tests/utilities.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/sys-schema/Tests/utilities.stable.out
@@ -0,0 +1,116 @@
+stdout of test 'utilities` in directory 'sql/test/sys-schema` itself:
+
+
+# 17:33:45 >  
+# 17:33:45 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-253132" "--port=35072"
+# 17:33:45 >  
+
+#CREATE OR REPLACE function schema_id(sname varchar(1024)) RETURNS INT
+#BEGIN
+#  RETURN SELECT min(id) from sys.schemas where name = sname;
+#END;
+#SELECT schema_id('sys');
+% .L2 # table_name
+% L2 # name
+% int # type
+% 4 # length
+[ 2000 ]
+#SELECT schema_id('json') > 2000;
+% .L2 # table_name
+% L2 # name
+% boolean # type
+% 5 # length
+[ true ]
+#SELECT schema_id('hsfdjkhksf does not exist');
+% .L2 # table_name
+% L2 # name
+% int # type
+% 1 # length
+[ NULL ]
+#CREATE OR REPLACE function table_id(sname varchar(1024), tname varchar(1024)) 
RETURNS INT
+#BEGIN
+#  RETURN SELECT min(id) from sys.tables where name = tname AND schema_id = 
(SELECT id from sys.schemas where name = sname);
+#END;
+#SELECT table_id('sys','tables') > 2000;
+% .L2 # table_name
+% L2 # name
+% boolean # type
+% 5 # length
+[ true ]
+#SELECT table_id(current_schema,'columns') > 2000;
+% .L2 # table_name
+% L2 # name
+% boolean # type
+% 5 # length
+[ true ]
+#SELECT name, type, type_digits, type_scale, "null", number from columns where 
table_id = table_id('sys','tables');
+% .columns,.columns,   .columns,   .columns,   .columns,   
.columns # table_name
+% name,type,   type_digits,type_scale, null,   number # name
+

MonetDB: default - Approved output

2020-03-11 Thread Pedro Ferreira
Changeset: de331148d6e6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=de331148d6e6
Modified Files:
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: default
Log Message:

Approved output


diffs (59 lines):

diff --git a/sql/test/subquery/Tests/subquery4.sql 
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -146,8 +146,8 @@ UPDATE another_T SET col5 = 1 WHERE col5
 DELETE FROM another_T WHERE col1 = (SELECT 1 UNION ALL SELECT 2); --error, 
more than one row returned by a subquery used as an expression
 INSERT INTO another_T VALUES ((SELECT 1 UNION ALL SELECT 2),2,3,4,5,6,7,8); 
--error, more than one row returned by a subquery used as an expression
 
---UPDATE another_T SET (col5, col6) = (SELECT MIN(1), MAX(2) OVER ()); --4 
rows affected
---UPDATE another_T SET (col7, col8) = (SELECT 1,2 UNION ALL SELECT 1,2); 
--error, more than one row returned by a subquery used as an expression
+UPDATE another_T SET (col5, col6) = (SELECT MIN(10), MAX(21) OVER ()); --4 
rows affected
+UPDATE another_T SET (col7, col8) = (SELECT 1,2 UNION ALL SELECT 1,2); 
--error, more than one row returned by a subquery used as an expression
 UPDATE another_T SET (col7, col8) = (SELECT 1 UNION ALL SELECT 2); --error, 
number of columns does not match number of values
 UPDATE another_T SET (col7, col8) = (SELECT 1,2,3); --error, number of columns 
does not match number of values
 UPDATE another_T SET col5 = 1, col5 = 6; --error, multiple assignments to same 
column "col5"
diff --git a/sql/test/subquery/Tests/subquery4.stable.err 
b/sql/test/subquery/Tests/subquery4.stable.err
--- a/sql/test/subquery/Tests/subquery4.stable.err
+++ b/sql/test/subquery/Tests/subquery4.stable.err
@@ -156,7 +156,11 @@ MAPI  = (monetdb) /var/tmp/mtest-204362/
 QUERY = INSERT INTO another_T VALUES ((SELECT 1 UNION ALL SELECT 
2),2,3,4,5,6,7,8); --error, more than one row returned by a subquery used as an 
expression
 ERROR = !Cardinality violation, scalar value expected
 CODE  = 21000
-MAPI  = (monetdb) /var/tmp/mtest-450395/.s.monetdb.35919
+MAPI  = (monetdb) /var/tmp/mtest-657770/.s.monetdb.37553
+QUERY = UPDATE another_T SET (col7, col8) = (SELECT 1,2 UNION ALL SELECT 1,2); 
--error, more than one row returned by a subquery used as an expression
+ERROR = !Cardinality violation, scalar value expected
+CODE  = 21000
+MAPI  = (monetdb) /var/tmp/mtest-657770/.s.monetdb.37553
 QUERY = UPDATE another_T SET (col7, col8) = (SELECT 1 UNION ALL SELECT 2); 
--error, number of columns does not match number of values
 ERROR = !UPDATE: The number of specified columns between the SET clause and 
the right side don't match (2 != 1)
 CODE  = 42000
diff --git a/sql/test/subquery/Tests/subquery4.stable.out 
b/sql/test/subquery/Tests/subquery4.stable.out
--- a/sql/test/subquery/Tests/subquery4.stable.out
+++ b/sql/test/subquery/Tests/subquery4.stable.out
@@ -173,6 +173,8 @@ stdout of test 'subquery4` in directory 
 [ 0]
 #DELETE FROM another_T WHERE col7 = (SELECT SUM(col3) OVER ());
 [ 0]
+#UPDATE another_T SET (col5, col6) = (SELECT MIN(10), MAX(21) OVER ()); --4 
rows affected
+[ 4]
 #DECLARE x int;
 #DECLARE y int;
 #INSERT INTO another_T VALUES ((SELECT SUM(1)),(SELECT SUM(2) OVER 
()),3,4,5,6,7,8); --allowed
@@ -181,11 +183,11 @@ stdout of test 'subquery4` in directory 
 % sys.another_t,   sys.another_t,  sys.another_t,  sys.another_t,  
sys.another_t,  sys.another_t,  sys.another_t,  sys.another_t # table_name
 % col1,col2,   col3,   col4,   col5,   col6,   col7,   col8 # name
 % int, int,int,int,int,int,int,int # type
-% 4,   4,  4,  5,  4,  4,  4,  4 # length
-[ 1,   2,  5,  26, 5,  6,  7,  8   ]
-[ 11,  22, 55, 186,55, 66, 77, 88  ]
-[ 111, 222,555,1786,   555,666,777,888 ]
-[ ,,   ,   17786,  ,   ,   ,   ]
+% 4,   4,  4,  5,  2,  2,  4,  4 # length
+[ 1,   2,  5,  26, 10, 21, 7,  8   ]
+[ 11,  22, 55, 186,10, 21, 77, 88  ]
+[ 111, 222,555,1786,   10, 21, 777,888 ]
+[ ,,   ,   17786,  10, 21, ,   ]
 [ 1,   2,  3,  4,  5,  6,  7,  8   ]
 #CREATE PROCEDURE crashme(a int) BEGIN DECLARE x INT; SET x = a; END;
 #create sequence "debugme" as integer start with 1;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Disallow multiple assignments on the same col...

2020-03-11 Thread Pedro Ferreira
Changeset: 5f09438acd6f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5f09438acd6f
Modified Files:
sql/server/rel_updates.c
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
Branch: default
Log Message:

Disallow multiple assignments on the same column on the same update. Also test 
for table update privileges on every case.


diffs (115 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
@@ -910,16 +910,10 @@ rel_update(mvc *sql, sql_rel *t, sql_rel
 static sql_exp *
 update_check_column(mvc *sql, sql_table *t, sql_column *c, sql_exp *v, sql_rel 
*r, char *cname, const char *action)
 {
-   if (!c) {
-   rel_destroy(r);
-   return sql_error(sql, 02, SQLSTATE(42S22) "%s: no such column 
'%s.%s'", action, t->base.name, cname);
-   }
if (!table_privs(sql, t, PRIV_UPDATE) && !sql_privilege(sql, 
sql->user_id, c->base.id, PRIV_UPDATE)) 
return sql_error(sql, 02, SQLSTATE(42000) "%s: insufficient 
privileges for user '%s' to update table '%s' on column '%s'", action, 
stack_get_string(sql, "current_user"), t->base.name, cname);
-   if (!v || (v = rel_check_type(sql, &c->type, r, v, type_equal)) == 
NULL) {
-   rel_destroy(r);
+   if (!v || (v = rel_check_type(sql, &c->type, r, v, type_equal)) == NULL)
return NULL;
-   }
return v;
 }
 
@@ -964,6 +958,9 @@ update_generate_assignments(sql_query *q
if (single && a->token == SQL_DEFAULT) {
char *colname = assignment->h->next->data.sval;
sql_column *col = mvc_bind_column(sql, t, 
colname);
+
+   if (!col)
+   return sql_error(sql, 02, 
SQLSTATE(42S22) "%s: no such column '%s.%s'", action, t->base.name, colname);
if (col->def) {
char *typestr = 
subtype2string2(&col->type);
if (!typestr)
@@ -1019,6 +1016,10 @@ update_generate_assignments(sql_query *q
sql_column *c = mvc_bind_column(sql, t, cname);
sql_exp *v = n->data;
 
+   if (!c)
+   return sql_error(sql, 02, 
SQLSTATE(42S22) "%s: no such column '%s.%s'", action, t->base.name, cname);
+   if (updates[c->colnr])
+   return sql_error(sql, 02, 
SQLSTATE(42000) "%s: Multiple assignments to same column '%s'", action, 
c->base.name);
if (mt && pcols) {
for (node *nn = pcols->h; nn; nn = 
n->next) {
int next = *(int*) nn->data;
@@ -1035,13 +1036,11 @@ update_generate_assignments(sql_query *q
exp_label(sql->sa, v, ++sql->label);
if (!exp_is_atom(v) || outer)
v = exp_ref(sql->sa, v);
-   if (!v) { /* check for NULL */
+   if (!v) /* check for NULL */
v = exp_atom(sql->sa, 
atom_general(sql->sa, &c->type, NULL));
-   } else if ((v = update_check_column(sql, t, c, 
v, r, cname, action)) == NULL) {
+   if (!(v = update_check_column(sql, t, c, v, r, 
cname, action)))
return NULL;
-   }
list_append(exps, exp_column(sql->sa, 
t->base.name, cname, &c->type, CARD_MULTI, 0, 0));
-   assert(!updates[c->colnr]);
exp_setname(sql->sa, v, c->t->base.name, 
c->base.name);
updates[c->colnr] = v;
}
@@ -1049,6 +1048,10 @@ update_generate_assignments(sql_query *q
char *cname = assignment->h->next->data.sval;
sql_column *c = mvc_bind_column(sql, t, cname);
 
+   if (!c)
+   return sql_error(sql, 02, SQLSTATE(42S22) "%s: 
no such column '%s.%s'", action, t->base.name, cname);
+   if (updates[c->colnr])
+   return sql_error(sql, 02, SQLSTATE(42000) "%s: 
Multiple assignments to same column '%s'", action, c->base.name);
if (mt && pcols) {
for (node *nn = pcols->h; nn; nn = nn->next) {
int next = *(int*) nn->data;
@@ -1061,11 +1064,10 @@ update_generate_assignments(sql_query *q
   

MonetDB: atom_strings - Merge with default

2020-03-11 Thread Panagiotis Koutsourakis
Changeset: 73b845eda04f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=73b845eda04f
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/mapilib/monetdb-mapi.pc.in
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/include/sql_relation.h
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/rel_psm.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/rel_select.h
sql/server/rel_unnest.c
sql/server/rel_updates.c
sql/test/BugTracker-2009/Tests/having_min_crash.SF-2795951.sql
sql/test/BugTracker-2009/Tests/having_min_crash.SF-2795951.stable.out
sql/test/BugTracker-2010/Tests/new-readonly-db.Bug-2695.stable.err

sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.stable.err

sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.stable.err
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.err
sql/test/subquery/Tests/subquery2.sql
sql/test/subquery/Tests/subquery3.sql
sql/test/subquery/Tests/subquery3.stable.err
sql/test/subquery/Tests/subquery3.stable.out
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: atom_strings
Log Message:

Merge with default


diffs (truncated from 2206 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
@@ -18886,6 +18886,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "transaction_commit",   "pattern 
sql.transaction_commit(chain:int, name:str):void ",
"SQLtransaction_commit;",   "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_release",  "pattern 
sql.transaction_release(chain:int, name:str):void ",   
"SQLtransaction_release;",  "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_rollback", "pattern 
sql.transaction_rollback(chain:int, name:str):void ",  
"SQLtransaction_rollback;", "A transaction statement (type can be 
commit,release,rollback or start)"]
+[ "sql",   "unionfunc","pattern sql.unionfunc(mod:str, fcn:str, 
X_0:any...):any... ",  "SQLunionfunc;",""  ]
 [ "sql",   "update",   "pattern sql.update(mvc:int, sname:str, 
tname:str, cname:str, rids:any, upd:any):int ", "mvc_update_wrap;", "Update 
the values of the column tname.cname. Returns sequence number for order 
dependence)"]
 [ "sql",   "update_schemas",   "pattern sql.update_schemas():void ",   
"SYSupdate_schemas;",   "Procedure triggered on update of the sys.schemas 
table"]
 [ "sql",   "update_tables","pattern sql.update_tables():void ",
"SYSupdate_tables;","Procedure triggered on update of the sys._tables 
table"]
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
@@ -26900,6 +26900,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "transaction_commit",   "pattern 
sql.transaction_commit(chain:int, name:str):void ",
"SQLtransaction_commit;",   "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_release",  "pattern 
sql.transaction_release(chain:int, name:str):void ",   
"SQLtransaction_release;",  "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_rollback", "pattern 
sql.transaction_rollback(chain:int, name:str):void ",  
"SQLtransaction_rollback;", "A transaction statement (type can be 
commit,release,rollback or start)"]
+[ "sql",   "unionfunc","pattern sql.unionfunc(mod:str, fcn:str, 
X_0:any...):any... ",  "SQLunionfunc;",""  ]
 [ "sql",   "update",   "pattern sql.update(mvc:int, sname:str, 
tname:str, cname:str, rids:any, upd:any):int ", "mvc_update_wrap;", "Update 
the values of the column tname.cname. Returns sequence number for order 
dependence)"]
 [ "sql",   "update_schemas",   "pattern sql.update_schemas():void ",   
"SYSupdate_schemas;",   "Procedure triggered on update of the sys.schemas 
table"]
 [ "sql",   "update_tab

MonetDB: pushdown - merged

2020-03-11 Thread Niels Nes
Changeset: 53e0d7234ca9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=53e0d7234ca9
Modified Files:
sql/server/rel_select.c
sql/server/rel_updates.c
sql/server/sql_mvc.h
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
Branch: pushdown
Log Message:

merged


diffs (200 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -163,17 +163,27 @@ rel_lastexp(mvc *sql, sql_rel *rel )
 static sql_rel *
 rel_zero_or_one(mvc *sql, sql_rel *rel, exp_kind ek)
 {
-   sql_exp *e = lastexp(rel);
-   if (!has_label(e)) 
-   exp_label(sql->sa, e, ++sql->label);
+   if (is_topn(rel->op))
+   rel = rel_project(sql->sa, rel, rel_projections(sql, rel, NULL, 
1, 0));
if (ek.card < card_set && rel->card > CARD_ATOM) {
-   sql_subtype *t = exp_subtype(e); /* parameters don't have a 
type defined, for those use 'void' one */
-   sql_subfunc *zero_or_one = sql_bind_func(sql->sa, 
sql->session->schema, "zero_or_one", t ? t : sql_bind_localtype("void"), NULL, 
F_AGGR);
-
-   e = exp_ref(sql->sa, e);
-   e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, CARD_ATOM, 
has_nil(e));
+   assert (is_simple_project(rel->op) || is_set(rel->op));
+   list *exps = rel->exps;
rel = rel_groupby(sql, rel, NULL);
-   (void)rel_groupby_add_aggr(sql, rel, e);
+   for(node *n = exps->h; n; n=n->next) {
+   sql_exp *e = n->data;
+   if (!has_label(e))
+   exp_label(sql->sa, e, ++sql->label);
+   sql_subtype *t = exp_subtype(e); /* parameters don't 
have a type defined, for those use 'void' one */
+   sql_subfunc *zero_or_one = sql_bind_func(sql->sa, 
sql->session->schema, "zero_or_one", t ? t : sql_bind_localtype("void"), NULL, 
F_AGGR);
+
+   e = exp_ref(sql->sa, e);
+   e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, CARD_ATOM, 
has_nil(e));
+   (void)rel_groupby_add_aggr(sql, rel, e);
+   }
+   } else {
+   sql_exp *e = lastexp(rel);
+   if (!has_label(e))
+   exp_label(sql->sa, e, ++sql->label);
}
return rel;
 }
@@ -5897,6 +5907,9 @@ rel_subquery(sql_query *query, sql_rel *
 
rel = rel_query(query, rel, sq, toplevel, ek);
stack_pop_frame(sql);
+
+   if (rel && ek.type == type_relation && ek.card < card_set && rel->card 
>= CARD_MULTI)
+   return rel_zero_or_one(sql, rel, ek);
return rel;
 }
 
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
@@ -928,7 +928,7 @@ update_generate_assignments(sql_query *q
 {
mvc *sql = query->sql;
sql_table *mt = NULL;
-   sql_exp *e = NULL, **updates = SA_ZNEW_ARRAY(sql->sa, sql_exp*, 
list_length(t->columns.set));
+   sql_exp **updates = SA_ZNEW_ARRAY(sql->sa, sql_exp*, 
list_length(t->columns.set));
list *exps, *pcols = NULL;
dnode *n;
const char *rname = NULL;
@@ -947,9 +947,7 @@ update_generate_assignments(sql_query *q
pcols = mt->part.pexp->cols;
}
/* first create the project */
-   e = exp_column(sql->sa, rname = rel_name(r), TID, 
sql_bind_localtype("oid"), CARD_MULTI, 0, 1);
-   exps = new_exp_list(sql->sa);
-   append(exps, e);
+   exps = list_append(new_exp_list(sql->sa), exp_column(sql->sa, rname = 
rel_name(r), TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1));
 
for (n = assignmentlist->h; n; n = n->next) {
symbol *a = NULL;
@@ -961,8 +959,7 @@ update_generate_assignments(sql_query *q
 
a = assignment->h->data.sym;
if (a) {
-   int status = sql->session->status;
-   exp_kind ek = {type_value, 
(single)?card_column:card_relation, FALSE};
+   exp_kind ek = { (single)?type_value:type_relation, 
card_column, FALSE};
 
if (single && a->token == SQL_DEFAULT) {
char *colname = assignment->h->next->data.sval;
@@ -980,21 +977,15 @@ update_generate_assignments(sql_query *q
v = rel_value_exp(query, &r, a, sql_sel | 
sql_update_set, ek);
outer = 1;
} else {
+   if (r)
+   query_push_outer(query, r, sql_sel);
rel_val = rel_subquery(query, NULL, a, ek);
-   }
-   if (!single && !rel_val && r) {
+   if (r)
+

MonetDB: default - handle multivalue update statements with subq...

2020-03-11 Thread Niels Nes
Changeset: 83fe6822b8d7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=83fe6822b8d7
Modified Files:
sql/server/rel_select.c
sql/server/rel_updates.c
sql/server/sql_mvc.h
Branch: default
Log Message:

handle multivalue update statements with subqueries with cardinality problems


diffs (104 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -163,17 +163,27 @@ rel_lastexp(mvc *sql, sql_rel *rel )
 static sql_rel *
 rel_zero_or_one(mvc *sql, sql_rel *rel, exp_kind ek)
 {
-   sql_exp *e = lastexp(rel);
-   if (!has_label(e)) 
-   exp_label(sql->sa, e, ++sql->label);
+   if (is_topn(rel->op))
+   rel = rel_project(sql->sa, rel, rel_projections(sql, rel, NULL, 
1, 0));
if (ek.card < card_set && rel->card > CARD_ATOM) {
-   sql_subtype *t = exp_subtype(e); /* parameters don't have a 
type defined, for those use 'void' one */
-   sql_subfunc *zero_or_one = sql_bind_func(sql->sa, 
sql->session->schema, "zero_or_one", t ? t : sql_bind_localtype("void"), NULL, 
F_AGGR);
-
-   e = exp_ref(sql->sa, e);
-   e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, CARD_ATOM, 
has_nil(e));
+   assert (is_simple_project(rel->op) || is_set(rel->op));
+   list *exps = rel->exps;
rel = rel_groupby(sql, rel, NULL);
-   (void)rel_groupby_add_aggr(sql, rel, e);
+   for(node *n = exps->h; n; n=n->next) {
+   sql_exp *e = n->data;
+   if (!has_label(e))
+   exp_label(sql->sa, e, ++sql->label);
+   sql_subtype *t = exp_subtype(e); /* parameters don't 
have a type defined, for those use 'void' one */
+   sql_subfunc *zero_or_one = sql_bind_func(sql->sa, 
sql->session->schema, "zero_or_one", t ? t : sql_bind_localtype("void"), NULL, 
F_AGGR);
+
+   e = exp_ref(sql->sa, e);
+   e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, CARD_ATOM, 
has_nil(e));
+   (void)rel_groupby_add_aggr(sql, rel, e);
+   }
+   } else {
+   sql_exp *e = lastexp(rel);
+   if (!has_label(e))
+   exp_label(sql->sa, e, ++sql->label);
}
return rel;
 }
@@ -5897,6 +5907,9 @@ rel_subquery(sql_query *query, sql_rel *
 
rel = rel_query(query, rel, sq, toplevel, ek);
stack_pop_frame(sql);
+
+   if (rel && ek.type == type_relation && ek.card < card_set && rel->card 
>= CARD_MULTI)
+   return rel_zero_or_one(sql, rel, ek);
return rel;
 }
 
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
@@ -959,8 +959,7 @@ update_generate_assignments(sql_query *q
 
a = assignment->h->data.sym;
if (a) {
-   int status = sql->session->status;
-   exp_kind ek = {type_value, 
(single)?card_column:card_relation, FALSE};
+   exp_kind ek = { (single)?type_value:type_relation, 
card_column, FALSE};
 
if (single && a->token == SQL_DEFAULT) {
char *colname = assignment->h->next->data.sval;
@@ -978,16 +977,12 @@ update_generate_assignments(sql_query *q
v = rel_value_exp(query, &r, a, sql_sel | 
sql_update_set, ek);
outer = 1;
} else {
+   if (r)
+   query_push_outer(query, r, sql_sel);
rel_val = rel_subquery(query, NULL, a, ek);
-   }
-   if (!single && !rel_val && r) {
+   if (r)
+   r = query_pop_outer(query);
outer = 1;
-   sql->errstr[0] = 0;
-   sql->session->status = status;
-   /* TODO put in else above */
-   query_push_outer(query, r, sql_sel);
-   rel_val = rel_subquery(query, NULL, a, ek);
-   r = query_pop_outer(query);
}
if ((single && !v) || (!single && !rel_val))
return NULL;
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -31,7 +31,7 @@
 
 /* value vs predicate (boolean) */
 #define type_value 0
-#define type_predicate 1
+#define type_relation  1
 
 /* cardinality expected by enclosing operator */
 #define card_none  -1  /* psm call doesn't return anything */
@@ -40,6 +40,7 @@
 #de

MonetDB: default - Simplify

2020-03-11 Thread Pedro Ferreira
Changeset: 11c33a434857 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=11c33a434857
Modified Files:
sql/server/rel_updates.c
Branch: default
Log Message:

Simplify


diffs (71 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
@@ -928,7 +928,7 @@ update_generate_assignments(sql_query *q
 {
mvc *sql = query->sql;
sql_table *mt = NULL;
-   sql_exp *e = NULL, **updates = SA_ZNEW_ARRAY(sql->sa, sql_exp*, 
list_length(t->columns.set));
+   sql_exp **updates = SA_ZNEW_ARRAY(sql->sa, sql_exp*, 
list_length(t->columns.set));
list *exps, *pcols = NULL;
dnode *n;
const char *rname = NULL;
@@ -947,9 +947,7 @@ update_generate_assignments(sql_query *q
pcols = mt->part.pexp->cols;
}
/* first create the project */
-   e = exp_column(sql->sa, rname = rel_name(r), TID, 
sql_bind_localtype("oid"), CARD_MULTI, 0, 1);
-   exps = new_exp_list(sql->sa);
-   append(exps, e);
+   exps = list_append(new_exp_list(sql->sa), exp_column(sql->sa, rname = 
rel_name(r), TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1));
 
for (n = assignmentlist->h; n; n = n->next) {
symbol *a = NULL;
@@ -991,10 +989,8 @@ update_generate_assignments(sql_query *q
rel_val = rel_subquery(query, NULL, a, ek);
r = query_pop_outer(query);
}
-   if ((single && !v) || (!single && !rel_val)) {
-   rel_destroy(r);
+   if ((single && !v) || (!single && !rel_val))
return NULL;
-   }
if (rel_val && outer) {
if (single) {
if (!exp_name(v))
@@ -1016,22 +1012,14 @@ update_generate_assignments(sql_query *q
dlist *cols = assignment->h->next->data.lval;
dnode *m;
node *n;
-   int nr;
 
if (!rel_val)
rel_val = r;
-   if (!rel_val || !is_project(rel_val->op)) {
-   rel_destroy(r);
+   if (!rel_val || !is_project(rel_val->op))
return sql_error(sql, 02, SQLSTATE(42000) "%s: 
Invalid right side of the SET clause", action);
-   }
-   if (dlist_length(cols) != list_length(rel_val->exps)) {
-   rel_destroy(r);
+   if (dlist_length(cols) != list_length(rel_val->exps))
return sql_error(sql, 02, SQLSTATE(42000) "%s: 
The number of specified columns between the SET clause and the right side don't 
match (%d != %d)", action, dlist_length(cols), list_length(rel_val->exps));
-   }
-   nr = (list_length(rel_val->exps)-dlist_length(cols));
-   for (n=rel_val->exps->h; nr; nr--, n = n->next)
-   ;
-   for (m = cols->h; n && m; n = n->next, m = m->next) {
+   for (n = rel_val->exps->h, m = cols->h; n && m; n = 
n->next, m = m->next) {
char *cname = m->data.sval;
sql_column *c = mvc_bind_column(sql, t, cname);
sql_exp *v = n->data;
@@ -1088,8 +1076,7 @@ update_generate_assignments(sql_query *q
updates[c->colnr] = v;
}
}
-   e = exp_column(sql->sa, rname, TID, sql_bind_localtype("oid"), 
CARD_MULTI, 0, 1);
-   r = rel_project(sql->sa, r, append(new_exp_list(sql->sa),e));
+   r = rel_project(sql->sa, r, list_append(new_exp_list(sql->sa), 
exp_column(sql->sa, rname, TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1)));
r = rel_update(sql, bt, r, updates, exps);
return r;
 }
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Nov2019 - Add test to test MySQL/MariaDB specific data ...

2020-03-11 Thread Martin van Dinther
Changeset: c4fdcb5f8627 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c4fdcb5f8627
Added Files:
sql/test/Tests/mediumint.sql
sql/test/Tests/mediumint.stable.err
sql/test/Tests/mediumint.stable.out
Modified Files:
sql/test/Tests/All
Branch: Nov2019
Log Message:

Add test to test MySQL/MariaDB specific data type mediumint.
Note: in MySQL/MariaDB a MEDIUMINT is stored in 3 bytes and has a valid range 
of: -8388608 .. 8388607
In MonetDB it is mapped as a synonym of INTEGER data type.

I also extended 
https://www.monetdb.org/Documentation/Manuals/SQLreference/BuiltinTypes


diffs (107 lines):

diff --git a/sql/test/Tests/All b/sql/test/Tests/All
--- a/sql/test/Tests/All
+++ b/sql/test/Tests/All
@@ -48,6 +48,7 @@ cast_str2num
 big-example
 count
 
+mediumint
 decimal
 decimal2
 null
diff --git a/sql/test/Tests/mediumint.sql b/sql/test/Tests/mediumint.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/Tests/mediumint.sql
@@ -0,0 +1,21 @@
+-- test support for MySQL/MariaDB specific data type: MEDIUMINT
+-- Note: in MySQL/MariaDB a MEDIUMINT is stored in 3 bytes and has a valid 
range of: -8388608 .. 8388607
+
+-- in MonetDB mediumint is accepted, but mapped to an int
+create table meditbl(medi MEDIUMINT);
+
+\d meditbl
+-- note: that the data type is now changed into: INTEGER
+select name, type, type_digits, type_scale, number from sys.columns where name 
= 'medi' and table_id in (select id from sys.tables where name = 'meditbl');
+
+-- it accepts all 32-bit signed integer values which are also possible in an 
int data type
+INsert into meditbl values (0), (1), (-1), (32767), (-32767), (8388607), 
(-8388607), (2147483647), (-2147483647), (NULL);
+
+-- check for overflows (same as on an int)
+INsert into meditbl values (2147483648);   -- Error: overflow in 
conversion of 2147483648 to int.
+INsert into meditbl values (-2147483648);  -- Error: overflow in 
conversion of -2147483648 to int.
+
+select * from meditbl order by 1;
+
+drop table meditbl;
+
diff --git a/sql/test/Tests/mediumint.stable.err 
b/sql/test/Tests/mediumint.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/Tests/mediumint.stable.err
@@ -0,0 +1,20 @@
+stderr of test 'mediumint` in directory 'sql/test` itself:
+
+
+# 16:18:53 >  
+# 16:18:53 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-192912" "--port=32869"
+# 16:18:53 >  
+
+MAPI  = (monetdb) /var/tmp/mtest-192912/.s.monetdb.32869
+QUERY = INsert into meditbl values (2147483648);   -- Error: overflow in 
conversion of 2147483648 to int.
+ERROR = !overflow in conversion of 2147483648 to int.
+CODE  = 22003
+MAPI  = (monetdb) /var/tmp/mtest-192912/.s.monetdb.32869
+QUERY = INsert into meditbl values (-2147483648);  -- Error: overflow in 
conversion of -2147483648 to int.
+ERROR = !overflow in conversion of -2147483648 to int.
+CODE  = 22003
+
+# 16:18:53 >  
+# 16:18:53 >  "Done."
+# 16:18:53 >  
+
diff --git a/sql/test/Tests/mediumint.stable.out 
b/sql/test/Tests/mediumint.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/Tests/mediumint.stable.out
@@ -0,0 +1,40 @@
+stdout of test 'mediumint` in directory 'sql/test` itself:
+
+
+# 16:18:53 >  
+# 16:18:53 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-192912" "--port=32869"
+# 16:18:53 >  
+
+#create table meditbl(medi MEDIUMINT);
+CREATE TABLE "sys"."meditbl" (
+   "medi" INTEGER
+);
+#select name, type, type_digits, type_scale, number from sys.columns where 
name = 'medi' and table_id in (select id from sys.tables where name = 
'meditbl');
+% .columns,.columns,   .columns,   .columns,   .columns # 
table_name
+% name,type,   type_digits,type_scale, number # name
+% varchar, varchar,int,int,int # type
+% 4,   3,  2,  1,  1 # length
+[ "medi",  "int",  32, 0,  0   ]
+#INsert into meditbl values (0), (1), (-1), (32767), (-32767), (8388607), 
(-8388607), (2147483647), (-2147483647), (NULL);
+[ 10   ]
+#select * from meditbl order by 1;
+% sys.meditbl # table_name
+% medi # name
+% int # type
+% 11 # length
+[ NULL ]
+[ -2147483647  ]
+[ -8388607 ]
+[ -32767   ]
+[ -1   ]
+[ 0]
+[ 1]
+[ 32767]
+[ 8388607  ]
+[ 2147483647   ]
+#drop table meditbl;
+
+# 16:18:53 >  
+# 16:18:53 >  "Done."
+# 16:18:53 >  
+
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - If the right side of update set has more colu...

2020-03-11 Thread Pedro Ferreira
Changeset: 9e7926f0f473 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9e7926f0f473
Modified Files:
sql/server/rel_updates.c
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
Branch: default
Log Message:

If the right side of update set has more columns than the left side, throw the 
error


diffs (55 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
@@ -1020,10 +1020,13 @@ update_generate_assignments(sql_query *q
 
if (!rel_val)
rel_val = r;
-   if (!rel_val || !is_project(rel_val->op) ||
-   dlist_length(cols) > 
list_length(rel_val->exps)) {
+   if (!rel_val || !is_project(rel_val->op)) {
rel_destroy(r);
-   return sql_error(sql, 02, SQLSTATE(42000) "%s: 
too many columns specified", action);
+   return sql_error(sql, 02, SQLSTATE(42000) "%s: 
Invalid right side of the SET clause", action);
+   }
+   if (dlist_length(cols) != list_length(rel_val->exps)) {
+   rel_destroy(r);
+   return sql_error(sql, 02, SQLSTATE(42000) "%s: 
The number of specified columns between the SET clause and the right side don't 
match (%d != %d)", action, dlist_length(cols), list_length(rel_val->exps));
}
nr = (list_length(rel_val->exps)-dlist_length(cols));
for (n=rel_val->exps->h; nr; nr--, n = n->next)
diff --git a/sql/test/subquery/Tests/subquery4.sql 
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -146,6 +146,11 @@ UPDATE another_T SET col5 = 1 WHERE col5
 DELETE FROM another_T WHERE col1 = (SELECT 1 UNION ALL SELECT 2); --error, 
more than one row returned by a subquery used as an expression
 INSERT INTO another_T VALUES ((SELECT 1 UNION ALL SELECT 2),2,3,4,5,6,7,8); 
--error, more than one row returned by a subquery used as an expression
 
+--UPDATE another_T SET (col5, col6) = (SELECT MIN(1), MAX(2) OVER ()); --4 
rows affected
+--UPDATE another_T SET (col7, col8) = (SELECT 1,2 UNION ALL SELECT 1,2); 
--error, more than one row returned by a subquery used as an expression
+UPDATE another_T SET (col7, col8) = (SELECT 1 UNION ALL SELECT 2); --error, 
number of columns does not match number of values
+UPDATE another_T SET (col7, col8) = (SELECT 1,2,3); --error, number of columns 
does not match number of values
+
 DECLARE x int;
 SET x = MAX(1) over (); --error, not allowed
 DECLARE y int;
diff --git a/sql/test/subquery/Tests/subquery4.stable.err 
b/sql/test/subquery/Tests/subquery4.stable.err
--- a/sql/test/subquery/Tests/subquery4.stable.err
+++ b/sql/test/subquery/Tests/subquery4.stable.err
@@ -156,7 +156,15 @@ MAPI  = (monetdb) /var/tmp/mtest-204362/
 QUERY = INSERT INTO another_T VALUES ((SELECT 1 UNION ALL SELECT 
2),2,3,4,5,6,7,8); --error, more than one row returned by a subquery used as an 
expression
 ERROR = !Cardinality violation, scalar value expected
 CODE  = 21000
-MAPI  = (monetdb) /var/tmp/mtest-204362/.s.monetdb.35709
+MAPI  = (monetdb) /var/tmp/mtest-450395/.s.monetdb.35919
+QUERY = UPDATE another_T SET (col7, col8) = (SELECT 1 UNION ALL SELECT 2); 
--error, number of columns does not match number of values
+ERROR = !UPDATE: The number of specified columns between the SET clause and 
the right side don't match (2 != 1)
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-450395/.s.monetdb.35919
+QUERY = UPDATE another_T SET (col7, col8) = (SELECT 1,2,3); --error, number of 
columns does not match number of values
+ERROR = !UPDATE: The number of specified columns between the SET clause and 
the right side don't match (2 != 3)
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-450395/.s.monetdb.35919
 QUERY = SET x = MAX(1) over (); --error, not allowed
 ERROR = !MAX: window function 'max' not allowed in SET clause (use subquery)
 CODE  = 42000
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: pushdown - merged

2020-03-11 Thread Niels Nes
Changeset: 648228314846 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=648228314846
Modified Files:
sql/server/rel_propagate.c
sql/server/rel_psm.c
sql/server/rel_rel.h
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/rel_select.h
sql/server/rel_updates.c
sql/test/BugTracker-2010/Tests/new-readonly-db.Bug-2695.stable.err
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.err
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
Branch: pushdown
Log Message:

merged


diffs (truncated from 319 to 300 lines):

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
@@ -160,7 +160,7 @@ generate_partition_limits(sql_query *que
return exp_atom(sql->sa, amax);
} else {
exp_kind ek = {type_value, card_value, FALSE};
-   sql_exp *e = rel_value_exp2(query, r, s, sql_sel | sql_values, ek);
+   sql_exp *e = rel_value_exp2(query, r, s, sql_sel | sql_values, 
ek);
 
if (!e)
return NULL;
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -242,8 +242,9 @@ rel_psm_while_do( sql_query *query, sql_
list *whilestmts;
dnode *n = w;
sql_rel *rel = NULL;
+   exp_kind ek = {type_value, card_value, FALSE};
 
-   cond = rel_logical_value_exp(query, &rel, n->data.sym, 
sql_sel); 
+   cond = rel_logical_value_exp(query, &rel, n->data.sym, sql_sel, 
ek); 
n = n->next;
whilestmts = sequential_block(query, res, restypelist, 
n->data.lval, n->next->data.sval, is_func);
 
@@ -280,8 +281,9 @@ psm_if_then_else( sql_query *query, sql_
list *ifstmts, *elsestmts;
dnode *n = elseif->data.sym->data.lval->h;
sql_rel *rel = NULL;
+   exp_kind ek = {type_value, card_value, FALSE};
 
-   cond = rel_logical_value_exp(query, &rel, n->data.sym, 
sql_sel); 
+   cond = rel_logical_value_exp(query, &rel, n->data.sym, sql_sel, 
ek); 
n = n->next;
ifstmts = sequential_block(query, res, restypelist, 
n->data.lval, NULL, is_func);
n = n->next;
@@ -319,8 +321,9 @@ rel_psm_if_then_else( sql_query *query, 
list *ifstmts, *elsestmts;
dnode *n = elseif;
sql_rel *rel = NULL;
+   exp_kind ek = {type_value, card_value, FALSE};
 
-   cond = rel_logical_value_exp(query, &rel, n->data.sym, 
sql_sel); 
+   cond = rel_logical_value_exp(query, &rel, n->data.sym, sql_sel, 
ek); 
n = n->next;
ifstmts = sequential_block(query, res, restypelist, 
n->data.lval, NULL, is_func);
n = n->next;
@@ -421,7 +424,8 @@ rel_psm_case( sql_query *query, sql_subt
while(n) {
dnode *m = n->data.sym->data.lval->h;
sql_rel *rel = NULL;
-   sql_exp *cond = rel_logical_value_exp(query, &rel, 
m->data.sym, sql_sel);
+   exp_kind ek = {type_value, card_value, FALSE};
+   sql_exp *cond = rel_logical_value_exp(query, &rel, 
m->data.sym, sql_sel, ek);
list *if_stmts = NULL;
sql_exp *case_stmt = NULL;
 
@@ -820,6 +824,9 @@ rel_create_func(sql_query *query, dlist 
return sql_error(sql, 02, SQLSTATE(3F000) "CREATE %s: no such 
schema '%s'", F, sname);
 
type_list = create_type_list(sql, params, 1);
+   if ((type == F_FUNC || type == F_AGGR) && sql_bind_func_(sql->sa, s, 
fname, type_list, (type == F_FUNC) ? F_AGGR : F_FUNC))
+   return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: there's 
%s with the name '%s' and the same parameters, which causes ambiguous calls", 
F, (type == F_FUNC) ? "an aggregate" : "a function", fname);
+
if ((sf = sql_bind_func_(sql->sa, s, fname, type_list, type)) != NULL 
&& create) {
if (replace) {
sql_func *func = sf->func;
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
@@ -449,7 +449,8 @@ column_option(
char *err = NULL, *r;
 
if (sym->token == SQL_COLUMN || sym->token == SQL_IDENT) {
-   sql_exp *e = rel_logical_value_exp(query, NULL, sym, 
sql_sel);
+   exp_kind ek = {type_value, card_value, FALSE};
+   sql_exp *e = rel_logical_value_exp(query, NULL, sym, 
sql_sel, ek);
 
if (e && is_atom(e->type)) {
   

MonetDB: default - fixed cardinality problems with updates/inserts

2020-03-11 Thread Niels Nes
Changeset: 7809e2916a39 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7809e2916a39
Modified Files:
sql/server/rel_psm.c
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/rel_select.h
sql/server/rel_updates.c
Branch: default
Log Message:

fixed cardinality problems with updates/inserts


diffs (202 lines):

diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -242,8 +242,9 @@ rel_psm_while_do( sql_query *query, sql_
list *whilestmts;
dnode *n = w;
sql_rel *rel = NULL;
+   exp_kind ek = {type_value, card_value, FALSE};
 
-   cond = rel_logical_value_exp(query, &rel, n->data.sym, 
sql_sel); 
+   cond = rel_logical_value_exp(query, &rel, n->data.sym, sql_sel, 
ek); 
n = n->next;
whilestmts = sequential_block(query, res, restypelist, 
n->data.lval, n->next->data.sval, is_func);
 
@@ -280,8 +281,9 @@ psm_if_then_else( sql_query *query, sql_
list *ifstmts, *elsestmts;
dnode *n = elseif->data.sym->data.lval->h;
sql_rel *rel = NULL;
+   exp_kind ek = {type_value, card_value, FALSE};
 
-   cond = rel_logical_value_exp(query, &rel, n->data.sym, 
sql_sel); 
+   cond = rel_logical_value_exp(query, &rel, n->data.sym, sql_sel, 
ek); 
n = n->next;
ifstmts = sequential_block(query, res, restypelist, 
n->data.lval, NULL, is_func);
n = n->next;
@@ -319,8 +321,9 @@ rel_psm_if_then_else( sql_query *query, 
list *ifstmts, *elsestmts;
dnode *n = elseif;
sql_rel *rel = NULL;
+   exp_kind ek = {type_value, card_value, FALSE};
 
-   cond = rel_logical_value_exp(query, &rel, n->data.sym, 
sql_sel); 
+   cond = rel_logical_value_exp(query, &rel, n->data.sym, sql_sel, 
ek); 
n = n->next;
ifstmts = sequential_block(query, res, restypelist, 
n->data.lval, NULL, is_func);
n = n->next;
@@ -421,7 +424,8 @@ rel_psm_case( sql_query *query, sql_subt
while(n) {
dnode *m = n->data.sym->data.lval->h;
sql_rel *rel = NULL;
-   sql_exp *cond = rel_logical_value_exp(query, &rel, 
m->data.sym, sql_sel);
+   exp_kind ek = {type_value, card_value, FALSE};
+   sql_exp *cond = rel_logical_value_exp(query, &rel, 
m->data.sym, sql_sel, ek);
list *if_stmts = NULL;
sql_exp *case_stmt = NULL;
 
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
@@ -449,7 +449,8 @@ column_option(
char *err = NULL, *r;
 
if (sym->token == SQL_COLUMN || sym->token == SQL_IDENT) {
-   sql_exp *e = rel_logical_value_exp(query, NULL, sym, 
sql_sel);
+   exp_kind ek = {type_value, card_value, FALSE};
+   sql_exp *e = rel_logical_value_exp(query, NULL, sym, 
sql_sel, ek);
 
if (e && is_atom(e->type)) {
atom *a = exp_value(sql, e, sql->args, 
sql->argc);
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -637,7 +637,7 @@ rel_named_table_function(sql_query *quer
l = l->next; /* skip distinct */
if (l->next) { /* table call with subquery */
if (l->next->type == type_symbol || l->next->type == type_list) 
{
-   exp_kind iek = {type_value, card_column, TRUE};
+   exp_kind iek = {type_value, card_set, TRUE};
list *exps = sa_list(sql->sa);
int count = 0;
 
@@ -2101,10 +2101,9 @@ rel_in_exp(sql_query *query, sql_rel *re
 }
 
 sql_exp *
-rel_logical_value_exp(sql_query *query, sql_rel **rel, symbol *sc, int f)
+rel_logical_value_exp(sql_query *query, sql_rel **rel, symbol *sc, int f, 
exp_kind ek)
 {
mvc *sql = query->sql;
-   exp_kind ek = {type_value, card_column, FALSE};
 
if (!sc)
return NULL;
@@ -2119,8 +2118,8 @@ rel_logical_value_exp(sql_query *query, 
symbol *lo = sc->data.lval->h->data.sym;
symbol *ro = sc->data.lval->h->next->data.sym;
 
-   sql_exp *ls = rel_logical_value_exp(query, rel, lo, f);
-   sql_exp *rs = rel_logical_value_exp(query, rel, ro, f);
+   sql_exp *ls = rel_logical_value_exp(query, rel, lo, f, ek);
+   sql_exp *rs = rel_logical_value_exp(query, rel, ro, f, ek);
 
if (!ls || !rs)
return NULL;
@@ -2201,7 +2200,7 @@ rel_logi

MonetDB: linear-hashing - Modernized initialization.

2020-03-11 Thread Sjoerd Mullender
Changeset: 71c5a108151b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=71c5a108151b
Modified Files:
clients/odbc/driver/ODBCUtil.c
Branch: linear-hashing
Log Message:

Modernized initialization.


diffs (truncated from 786 to 300 lines):

diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c
--- a/clients/odbc/driver/ODBCUtil.c
+++ b/clients/odbc/driver/ODBCUtil.c
@@ -946,84 +946,707 @@ ODBCParseID(const char *tab, const char 
 }
 
 struct sql_types ODBC_sql_types[] = {
-   {SQL_CHAR, SQL_CHAR, 0, 0, UNAFFECTED, 1, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_VARCHAR, SQL_VARCHAR, 0, 0, UNAFFECTED, 1, UNAFFECTED, 0, 
SQL_FALSE},
-   {SQL_LONGVARCHAR, SQL_LONGVARCHAR, 0, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_WCHAR, SQL_WCHAR, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_WVARCHAR, SQL_WVARCHAR, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_WLONGVARCHAR, SQL_WLONGVARCHAR, 0, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_DECIMAL, SQL_DECIMAL, 0, 17, UNAFFECTED, UNAFFECTED, 0, 10, 
SQL_TRUE},
-   {SQL_NUMERIC, SQL_NUMERIC, 0, 17, UNAFFECTED, UNAFFECTED, 0, 10, 
SQL_TRUE},
-   {SQL_BIT, SQL_BIT, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
0, SQL_FALSE},
-   {SQL_TINYINT, SQL_TINYINT, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 10, SQL_TRUE},
-   {SQL_SMALLINT, SQL_SMALLINT, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 10, SQL_TRUE},
-   {SQL_INTEGER, SQL_INTEGER, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 10, SQL_TRUE},
-   {SQL_BIGINT, SQL_BIGINT, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 10, SQL_TRUE},
-   {SQL_HUGEINT, SQL_HUGEINT, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 10, SQL_TRUE},
-   {SQL_REAL, SQL_REAL, 0, FLT_MANT_DIG, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 2, SQL_FALSE},
-   {SQL_FLOAT, SQL_FLOAT, 0, DBL_MANT_DIG, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 2, SQL_FALSE},
-   {SQL_DOUBLE, SQL_DOUBLE, 0, DBL_MANT_DIG, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 2, SQL_FALSE},
-   {SQL_BINARY, SQL_BINARY, 0, 0, UNAFFECTED, 1, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_VARBINARY, SQL_VARBINARY, 0, 0, UNAFFECTED, 1, UNAFFECTED, 0, 
SQL_FALSE},
-   {SQL_LONGVARBINARY, SQL_LONGVARBINARY, 0, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_GUID, SQL_GUID, 0, UNAFFECTED, UNAFFECTED, UNAFFECTED, UNAFFECTED, 
0, SQL_FALSE},
-   {SQL_TYPE_DATE, SQL_DATETIME, SQL_CODE_DATE, 0, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_TYPE_TIME, SQL_DATETIME, SQL_CODE_TIME, 0, UNAFFECTED, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_TYPE_TIMESTAMP, SQL_DATETIME, SQL_CODE_TIMESTAMP, 6, UNAFFECTED, 
UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_MONTH, SQL_INTERVAL, SQL_CODE_MONTH, 0, 2, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_YEAR, SQL_INTERVAL, SQL_CODE_YEAR, 0, 2, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_YEAR_TO_MONTH, SQL_INTERVAL, SQL_CODE_YEAR_TO_MONTH, 0, 
2, UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_DAY, SQL_INTERVAL, SQL_CODE_DAY, 0, 2, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_HOUR, SQL_INTERVAL, SQL_CODE_HOUR, 0, 2, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_MINUTE, SQL_INTERVAL, SQL_CODE_MINUTE, 0, 2, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_SECOND, SQL_INTERVAL, SQL_CODE_SECOND, 6, 2, UNAFFECTED, 
UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_DAY_TO_HOUR, SQL_INTERVAL, SQL_CODE_DAY_TO_HOUR, 0, 2, 
UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_DAY_TO_MINUTE, SQL_INTERVAL, SQL_CODE_DAY_TO_MINUTE, 0, 
2, UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_DAY_TO_SECOND, SQL_INTERVAL, SQL_CODE_DAY_TO_SECOND, 6, 
2, UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_HOUR_TO_MINUTE, SQL_INTERVAL, SQL_CODE_HOUR_TO_MINUTE, 0, 
2, UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_HOUR_TO_SECOND, SQL_INTERVAL, SQL_CODE_HOUR_TO_SECOND, 6, 
2, UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {SQL_INTERVAL_MINUTE_TO_SECOND, SQL_INTERVAL, 
SQL_CODE_MINUTE_TO_SECOND, 6, 2, UNAFFECTED, UNAFFECTED, 0, SQL_FALSE},
-   {0, 0, 0, 0, 0, 0, 0, 0, 0},/* sentinel */
+   {
+   .concise_type = SQL_CHAR,
+   .type = SQL_CHAR,
+   .datetime_interval_precision = UNAFFECTED,
+   .length = 1,
+   .scale = UNAFFECTED,
+   .fixed = SQL_FALSE,
+   },
+   {
+   .concise_type = SQL_VARCHAR,
+   .type = SQL_VARCHAR,
+   .datetime_interval_precision = UNAFFECTED,
+   .length = 1,
+   .scale = UNAFFECTED,
+   .fixed = SQL_FALSE,
+   },
+   {
+   .concise_type =

MonetDB: default - Disallow creating aggregates and functions wi...

2020-03-11 Thread Pedro Ferreira
Changeset: 6a2511b13bd4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6a2511b13bd4
Modified Files:
sql/server/rel_psm.c
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.err
Branch: default
Log Message:

Disallow creating aggregates and functions with the same name, schema and 
parameters simultaneously. That would lead to ambiguous calls


diffs (44 lines):

diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -820,6 +820,9 @@ rel_create_func(sql_query *query, dlist 
return sql_error(sql, 02, SQLSTATE(3F000) "CREATE %s: no such 
schema '%s'", F, sname);
 
type_list = create_type_list(sql, params, 1);
+   if ((type == F_FUNC || type == F_AGGR) && sql_bind_func_(sql->sa, s, 
fname, type_list, (type == F_FUNC) ? F_AGGR : F_FUNC))
+   return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: there's 
%s with the name '%s' and the same parameters, which causes ambiguous calls", 
F, (type == F_FUNC) ? "an aggregate" : "a function", fname);
+
if ((sf = sql_bind_func_(sql->sa, s, fname, type_list, type)) != NULL 
&& create) {
if (replace) {
sql_func *func = sf->func;
diff --git a/sql/test/miscellaneous/Tests/simple_selects.sql 
b/sql/test/miscellaneous/Tests/simple_selects.sql
--- a/sql/test/miscellaneous/Tests/simple_selects.sql
+++ b/sql/test/miscellaneous/Tests/simple_selects.sql
@@ -70,6 +70,9 @@ select substring('abc' from 1 for null);
 select substring('abc' from null for 2);
 select substring('abc' from null for null);
 
+CREATE FUNCTION count(input INT) RETURNS INT BEGIN RETURN SELECT 1; END; 
--error, ambiguous, there's an aggregate named count with the same parameters
+CREATE AGGREGATE sin(input REAL) RETURNS REAL EXTERNAL NAME "mmath"."sin"; 
--error, ambiguous, there's a function named sin with the same parameters
+
 select length(myblob), octet_length(myblob), length(mystr), 
octet_length(mystr) 
 from (values (cast(null as blob), cast(null as char(32 as my(myblob, 
mystr);
 select md5(null);
diff --git a/sql/test/miscellaneous/Tests/simple_selects.stable.err 
b/sql/test/miscellaneous/Tests/simple_selects.stable.err
--- a/sql/test/miscellaneous/Tests/simple_selects.stable.err
+++ b/sql/test/miscellaneous/Tests/simple_selects.stable.err
@@ -117,6 +117,14 @@ MAPI  = (monetdb) /var/tmp/mtest-316445/
 QUERY = select cast(true as interval month); --error, not possible
 ERROR = !types boolean(1,0) and month_interval(3,0) are not equal
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-416559/.s.monetdb.3
+QUERY = CREATE FUNCTION count(input INT) RETURNS INT BEGIN RETURN SELECT 1; 
END; --error, ambiguous, there's an aggregate named count with the same 
parameters
+ERROR = !CREATE FUNCTION: there's an aggregate with the name 'count' and the 
same parameters, which causes ambiguous calls
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-416559/.s.monetdb.3
+QUERY = CREATE AGGREGATE sin(input REAL) RETURNS REAL EXTERNAL NAME 
"mmath"."sin"; --error, ambiguous, there's a function named sin with the same 
parameters
+ERROR = !CREATE AGGREGATE: there's a function with the name 'sin' and the same 
parameters, which causes ambiguous calls
+CODE  = 42000
 
 # 17:31:38 >  
 # 17:31:38 >  "Done."
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: linear-hashing - Merge with Nov2019 branch.

2020-03-11 Thread Sjoerd Mullender
Changeset: e7d31fdeed12 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e7d31fdeed12
Modified Files:
clients/odbc/driver/SQLGetTypeInfo.c
Branch: linear-hashing
Log Message:

Merge with Nov2019 branch.


diffs (truncated from 1512 to 300 lines):

diff --git a/clients/odbc/driver/SQLGetTypeInfo.c 
b/clients/odbc/driver/SQLGetTypeInfo.c
--- a/clients/odbc/driver/SQLGetTypeInfo.c
+++ b/clients/odbc/driver/SQLGetTypeInfo.c
@@ -57,761 +57,824 @@ static const struct types {
 * Except for the type_name value, the string values are ready
 * to paste into an SQL query (i.e. including quotes). */
{
-   "uuid", /* type_name */
-   SQL_GUID,   /* data_type */
-   36, /* column_size */
-   "NULL", /* literal_prefix */
-   "NULL", /* literal_suffix */
-   "NULL", /* create_params */
-   SQL_NULLABLE,   /* nullable */
-   SQL_FALSE,  /* case_sensitive */
-   SQL_PRED_BASIC, /* searchable */
-   -1, /* unsigned_attribute */
-   SQL_FALSE,  /* fixed_prec_scale */
-   -1, /* auto_unique_value */
-   "NULL", /* local_type_name */
-   -1, /* minimum_scale */
-   -1, /* maximum_scale */
-   SQL_GUID,   /* sql_data_type */
-   -1, /* sql_datetime_sub */
-   -1, /* num_prec_radix */
-   -1, /* interval_precision */
+   .type_name = "uuid",
+   .data_type = SQL_GUID,
+   .column_size = 36,
+   .literal_prefix = "NULL",
+   .literal_suffix = "NULL",
+   .create_params = "NULL",
+   .nullable = SQL_NULLABLE,
+   .case_sensitive = SQL_FALSE,
+   .searchable = SQL_PRED_BASIC,
+   .unsigned_attribute = -1,
+   .fixed_prec_scale = SQL_FALSE,
+   .auto_unique_value = -1,
+   .local_type_name = "NULL",
+   .minimum_scale = -1,
+   .maximum_scale = -1,
+   .sql_data_type = SQL_GUID,
+   .sql_datetime_sub = -1,
+   .num_prec_radix = -1,
+   .interval_precision = -1,
},
{
-   "character large object", /* type_name */
-   SQL_WLONGVARCHAR,   /* data_type */
-   100,/* column_size */
-   "", /* literal_prefix */
-   "", /* literal_suffix */
-   "NULL", /* create_params */
-   SQL_NULLABLE,   /* nullable */
-   SQL_TRUE,   /* case_sensitive */
-   SQL_SEARCHABLE, /* searchable */
-   -1, /* unsigned_attribute */
-   SQL_FALSE,  /* fixed_prec_scale */
-   SQL_FALSE,  /* auto_unique_value */
-   "NULL", /* local_type_name */
-   -1, /* minimum_scale */
-   -1, /* maximum_scale */
-   SQL_WLONGVARCHAR,   /* sql_data_type */
-   -1, /* sql_datetime_sub */
-   -1, /* num_prec_radix */
-   -1, /* interval_precision */
+   .type_name = "character large object",
+   .data_type = SQL_WLONGVARCHAR,
+   .column_size = 100,
+   .literal_prefix = "",
+   .literal_suffix = "",
+   .create_params = "NULL",
+   .nullable = SQL_NULLABLE,
+   .case_sensitive = SQL_TRUE,
+   .searchable = SQL_SEARCHABLE,
+   .unsigned_attribute = -1,
+   .fixed_prec_scale = SQL_FALSE,
+   .auto_unique_value = SQL_FALSE,
+   .local_type_name = "NULL",
+   .minimum_scale = -1,
+   .maximum_scale = -1,
+   .sql_data_type = SQL_WLONGVARCHAR,
+   .sql_datetime_sub = -1,
+   .num_prec_radix = -1,
+   .interval_precision = -1,
},
{
-   "varchar",  /* type_name */
-   SQL_WVARCHAR,   /* data_type */
-   100,/* column_size */
-   "", /* literal_prefix */
-   "", /* literal_suffix */
-   "'length'", /* create_params */
-   SQL_NULLABLE,   /* nullable *

MonetDB: out2in - Save work in progress.

2020-03-11 Thread Aris Koning
Changeset: b6d31770d27b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b6d31770d27b
Added Files:
sql/server/cmp_exp_eval.h
sql/server/rel_outer_join_optimizer.h
Branch: out2in
Log Message:

Save work in progress.


diffs (89 lines):

diff --git a/sql/server/cmp_exp_eval.h b/sql/server/cmp_exp_eval.h
new file mode 100644
--- /dev/null
+++ b/sql/server/cmp_exp_eval.h
@@ -0,0 +1,5 @@
+#include "monetdb_config.h"
+#include "sql_relation.h"
+#include "rel_exp.h"
+
+#define _TODO assert(0)
diff --git a/sql/server/rel_outer_join_optimizer.h 
b/sql/server/rel_outer_join_optimizer.h
new file mode 100644
--- /dev/null
+++ b/sql/server/rel_outer_join_optimizer.h
@@ -0,0 +1,74 @@
+#include "monetdb_config.h"
+#include "sql_relation.h"
+#include "rel_exp.h"
+
+#define _TODO assert(0)
+
+static inline sql_exp*
+replace_inner_column_references_with_null(mvc *sql, sql_exp* e, sql_rel* i 
/*inner relation*/) {
+
+sql_exp* t/*to-be-transformed*/ = exp_copy(sql, e);
+
+_TODO;
+
+return t;
+}
+
+static inline bool
+check_if_selection_expression_is_null_rejecting(mvc *sql, sql_exp* e, sql_rel* 
i /*inner relation*/) {
+assert(e->type == e_cmp);
+
+sql_exp* t = replace_inner_column_references_with_null(sql, e, i);
+
+   return exp_is_false(sql, e);
+}
+
+static sql_rel *
+rel_outer2inner_join(mvc *sql, sql_rel *rel, int *changes)
+{
+   list *exps = NULL;
+   sql_rel *r = NULL;
+   node *n;
+
+   exps = rel->exps;
+   r = rel->l;
+
+   /* push select through join */
+   if (is_select(rel->op) && exps && r && r->op == op_left && 
!(rel_is_ref(r))) {
+   if ()
+   for (n = exps->h; n; n = n->next) { 
+   sql_exp *e = n->data;
+   if (e->type == e_cmp && !e->f && 
!is_complex_exp(e->flag)) {
+   sql_rel *nr = NULL;
+   sql_exp *re = e->r, *ne = rel_find_exp(r, re);
+
+   if (ne && ne->card >= CARD_AGGR) 
+   re->card = ne->card;
+
+   if (re->card >= CARD_AGGR) {
+   nr = rel_push_join(sql, r, e->l, re, 
NULL, e);
+   } else {
+   nr = rel_push_select(sql, r, e->l, e);
+   }
+   if (nr)
+   rel->l = nr;
+   /* only pushed down selects are counted */
+   if (r == rel->l) {
+   (*changes)++;
+   } else { /* Do not introduce an extra select */
+   sql_rel *r = rel->l;
+
+   rel->l = r->l;
+   r->l = NULL;
+   list_append(rel->exps, e);
+   rel_destroy(r);
+   }
+   assert(r == rel->l);
+   } else {
+   list_append(rel->exps, e);
+   } 
+   }
+   return rel;
+   }
+   return rel;
+}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: out2in - Add semantics flag for functions.

2020-03-11 Thread Aris Koning
Changeset: a1be8b1e8538 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a1be8b1e8538
Modified Files:
sql/common/sql_types.c
sql/include/sql_catalog.h
sql/server/rel_exp.c
sql/storage/store.c
Branch: out2in
Log Message:

Add semantics flag for functions.


diffs (truncated from 913 to 300 lines):

diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -1020,7 +1020,7 @@ sql_create_arg(sql_allocator *sa, const 
 }
 
 static sql_func *
-sql_create_func_(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, sql_ftype type, bit side_effect, 
+sql_create_func_(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, sql_ftype type, bit semantics, bit side_effect, 
 int fix_scale, unsigned int res_scale, 
sql_type *res, int nargs, va_list valist)
 {
list *ops = sa_list(sa);
@@ -1034,6 +1034,7 @@ sql_create_func_(sql_allocator *sa, cons
if (res)
fres = create_arg(sa, NULL, sql_create_subtype(sa, res, 0, 0), 
ARG_OUT);
base_init(sa, &t->base, store_next_oid(), 0, name);
+   
t->imp = sa_strdup(sa, imp);
t->mod = sa_strdup(sa, mod);
t->ops = ops;
@@ -1047,6 +1048,7 @@ sql_create_func_(sql_allocator *sa, cons
t->nr = list_length(funcs);
t->sql = 0;
t->lang = FUNC_LANG_INT;
+   t->semantics = semantics;
t->side_effect = side_effect;
t->fix_scale = fix_scale;
t->s = NULL;
@@ -1066,32 +1068,32 @@ sql_create_procedure(sql_allocator *sa, 
va_list valist;
 
va_start(valist, nargs);
-   res = sql_create_func_(sa, name, mod, imp, F_PROC, side_effect, 
SCALE_NONE, 0, NULL, nargs, valist);
+   res = sql_create_func_(sa, name, mod, imp, F_PROC, TRUE, side_effect, 
SCALE_NONE, 0, NULL, nargs, valist);
va_end(valist);
return res;
 }
 
 static sql_func *
-sql_create_func(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, bit side_effect, int fix_scale,
+sql_create_func(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, bit semantics, bit side_effect, int fix_scale,
unsigned int res_scale, sql_type *fres, int 
nargs, ...)
 {
sql_func *res;
va_list valist;
 
va_start(valist, nargs);
-   res = sql_create_func_(sa, name, mod, imp, F_FUNC, side_effect, 
fix_scale, res_scale, fres, nargs, valist);
+   res = sql_create_func_(sa, name, mod, imp, F_FUNC, semantics, 
side_effect, fix_scale, res_scale, fres, nargs, valist);
va_end(valist);
return res;
 }
 
 static sql_func *
-sql_create_aggr(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, sql_type *fres, int nargs, ...)
+sql_create_aggr(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, bit semantics, sql_type *fres, int nargs, ...)
 {
sql_func *res;
va_list valist;
 
va_start(valist, nargs);
-   res = sql_create_func_(sa, name, mod, imp, F_AGGR, FALSE, SCALE_NONE, 
0, fres, nargs, valist);
+   res = sql_create_func_(sa, name, mod, imp, F_AGGR, semantics, FALSE, 
SCALE_NONE, 0, fres, nargs, valist);
va_end(valist);
return res;
 }
@@ -1104,7 +1106,7 @@ sql_create_union(sql_allocator *sa, cons
va_list valist;
 
va_start(valist, nargs);
-   res = sql_create_func_(sa, name, mod, imp, F_UNION, side_effect, 
fix_scale, res_scale, fres, nargs, valist);
+   res = sql_create_func_(sa, name, mod, imp, F_UNION, TRUE, side_effect, 
fix_scale, res_scale, fres, nargs, valist);
va_end(valist);
return res;
 }
@@ -1116,7 +1118,7 @@ sql_create_analytic(sql_allocator *sa, c
va_list valist;
 
va_start(valist, nargs);
-   res = sql_create_func_(sa, name, mod, imp, F_ANALYTIC, FALSE, 
fix_scale, 0, fres, nargs, valist);
+   res = sql_create_func_(sa, name, mod, imp, F_ANALYTIC, TRUE, FALSE, 
fix_scale, 0, fres, nargs, valist);
va_end(valist);
return res;
 }
@@ -1220,8 +1222,8 @@ sqltypeinit( sql_allocator *sa)
 
BLOB = *t++ = sql_create_type(sa, "BLOB", 0, 0, 0, EC_BLOB, "blob");
 
-   sql_create_func(sa, "length", "blob", "nitems", FALSE, SCALE_NONE, 0, 
INT, 1, BLOB);
-   sql_create_func(sa, "octet_length", "blob", "nitems", FALSE, 
SCALE_NONE, 0, INT, 1, BLOB);
+   sql_create_func(sa, "length", "blob", "nitems", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, BLOB);
+   sql_create_func(sa, "octet_length", "blob", "nitems", FALSE, FALSE, 
SCALE_NONE, 0, INT, 1, BLOB);
 
if (geomcatalogfix_get() != NULL) {
// the geom module is loaded 
@@ -1232,36 +1234,36 @@ sqltypeinit( sql_allocator *sa)
MBR = *t++ = sql_create_type(sa, "MBR", 0, SCALE_NONE, 0, 
EC_EXTERNAL, "mbr");

/* mbr operator functions */

MonetDB: out2in - 'is not' is apparently 'semantics' + 'cmp_equa...

2020-03-11 Thread Aris Koning
Changeset: a90d6473c5aa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a90d6473c5aa
Modified Files:
sql/server/rel_exp.c
Branch: out2in
Log Message:

'is not' is apparently 'semantics' + 'cmp_equal' + 'anti'.


diffs (19 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1612,11 +1612,11 @@ exp_is_cmp_exp_is_false(mvc *sql, sql_ex
 /* Handle 'v is x' and 'v is not x' expressions.
  * Other cases in is-semantics are unspecified.
  */
-if (e->flag == cmp_equal) {
-return (exp_is_null(sql, l) != exp_is_null(sql, r));
+if (e->flag == cmp_equal && !e->anti) {
+return (exp_is_null(sql, l) && exp_is_null(sql, r));
 }
-if (e->flag == cmp_notequal) {
-return (exp_is_null(sql, l) == exp_is_null(sql, r));
+if (((e->flag == cmp_notequal) && !e->anti) || ((e->flag == cmp_equal) && 
e->anti) ) {
+return ((exp_is_null(sql, l) && exp_is_not_null(sql, r))) || 
((exp_is_not_null(sql, l) && exp_is_null(sql, r)));
 }
 
 return false;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Approved test output, ie cannot create system...

2020-03-11 Thread Pedro Ferreira
Changeset: 296d3b75b682 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=296d3b75b682
Modified Files:
sql/test/BugTracker-2010/Tests/new-readonly-db.Bug-2695.stable.err
Branch: default
Log Message:

Approved test output, ie cannot create system tables on readonly mode


diffs (12 lines):

diff --git a/sql/test/BugTracker-2010/Tests/new-readonly-db.Bug-2695.stable.err 
b/sql/test/BugTracker-2010/Tests/new-readonly-db.Bug-2695.stable.err
--- a/sql/test/BugTracker-2010/Tests/new-readonly-db.Bug-2695.stable.err
+++ b/sql/test/BugTracker-2010/Tests/new-readonly-db.Bug-2695.stable.err
@@ -64,6 +64,8 @@ stderr of test 'new-readonly-db.Bug-2695
 # cmdline opt  mal_listing = 2
 # cmdline opt  gdk_dbname = mTests_src_test_BugTracker-2010-2695
 # cmdline opt  gdk_readonly = yes
+2020-03-11 14:03:29 ../../../src/sql/server/sql_mvc.c:146 mvc_init 
  M_CRITICAL SQL_TRANSmain thread  # Unable to 
create system tables
+2020-03-11 14:03:29 ../../../../src/sql/backends/monet5/sql_scenario.c:139 
  SQLprelude   M_CRITICAL SQL_PARSER   main thread  
# Fatal error during initialization: SQLException:SQLinit:42000!Catalogue 
initialization failed
 
 # 12:51:24 >  
 # 12:51:24 >  Done.
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: mosaic - Fix testweb compilation and add pound sign to ...

2020-03-11 Thread Aris Koning
Changeset: 9d37b656b5ad for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9d37b656b5ad
Modified Files:
gdk/gdk_mosaic.c
gdk/gdk_mosaic_templates.h
Branch: mosaic
Log Message:

Fix testweb compilation and add pound sign to debug messages.


diffs (74 lines):

diff --git a/gdk/gdk_mosaic.c b/gdk/gdk_mosaic.c
--- a/gdk/gdk_mosaic.c
+++ b/gdk/gdk_mosaic.c
@@ -14,7 +14,7 @@
 #include "gdk.h"
 #include "gdk_private.h"
 
-#define EXT(HEAP) ("t" STRINGIFY(HEAP))
+#define EXT(HEAP) "t" STRINGIFY(HEAP)
 
 #define HEAP mosaic
 #include "gdk_mosaic_templates.h"
diff --git a/gdk/gdk_mosaic_templates.h b/gdk/gdk_mosaic_templates.h
--- a/gdk/gdk_mosaic_templates.h
+++ b/gdk/gdk_mosaic_templates.h
@@ -46,7 +46,7 @@ CONCAT3(MOS_, HEAP, _sync)(void *arg)
failed = ""; /* not failed */
}
}
-   TRC_DEBUG(ACCELERATOR,   STRINGIFY(CONCAT3(MOS_, HEAP, 
_sync)) "(%s): " STRINGIFY(HEAP) " index persisted"
+   TRC_DEBUG(ACCELERATOR, "#" STRINGIFY(CONCAT3(MOS_, 
HEAP, _sync)) "(%s): " STRINGIFY(HEAP) " index persisted"
  " (" LLFMT " usec)%s\n",
  BATgetId(b), GDKusec() - t0, failed);
}
@@ -65,10 +65,12 @@ CONCAT3(create_, HEAP, _heap)(BAT *b, BU
Heap *m;
const char *nme;
 
+
+   const char* ext = "." EXT(HEAP);
nme = GDKinmemory() ? ":inmemory" : BBP_physical(b->batCacheid);
if ((m = GDKzalloc(sizeof(Heap))) == NULL ||
(m->farmid = BBPselectfarm(b->batRole, b->ttype, mosaicheap)) < 0 ||
-   sprintf(m->filename, "%s.%s", nme, EXT(HEAP)) >= (int) 
sizeof(m->filename) ||
+   strconcat_len(m->filename, sizeof(m->filename), nme, ext, NULL) 
>= sizeof(m->filename) ||
HEAPalloc(m, cap, Tsize(b)) != GDK_SUCCEED) {
GDKfree(m);
return NULL;
@@ -93,7 +95,7 @@ CONCAT2(persist_, HEAP)(BAT *b)
 MT_THR_DETACHED, name) < 0)
BBPunfix(b->batCacheid);
} else
-   TRC_DEBUG(ACCELERATOR, STRINGIFY(CONCAT2(persist, HEAP)) "(" 
ALGOBATFMT "): NOT persisting " STRINGIFY(HEAP) " index\n", ALGOBATPAR(b));
+   TRC_DEBUG(ACCELERATOR, "#" STRINGIFY(CONCAT2(persist, HEAP)) 
"(" ALGOBATFMT "): NOT persisting " STRINGIFY(HEAP) " index\n", ALGOBATPAR(b));
 #else
(void) b;
 #endif
@@ -170,15 +172,14 @@ CONCAT2(MOScheck_, HEAP)(BAT *b)
if (b->CONCAT2(t, HEAP) == (Heap *) 1) {
Heap *hp;
const char *nme = BBP_physical(b->batCacheid);
-   const char *ext = EXT(HEAP);
int fd;
 
b->CONCAT2(t, HEAP) = NULL;
if ((hp = GDKzalloc(sizeof(*hp))) != NULL &&
(hp->farmid = BBPselectfarm(b->batRole, b->ttype, 
mosaicheap)) >= 0 ){
-   
 
-   sprintf(hp->filename, "%s.%s", nme, ext);
+   const char* ext = "." EXT(HEAP);
+   strconcat_len(hp->filename, sizeof(hp->filename), nme, 
ext, NULL);
 
/* check whether a persisted mosaic-specific heap can 
be found */
if ((fd = GDKfdlocate(hp->farmid, nme, "rb+", ext)) >= 
0) {
@@ -195,7 +196,7 @@ CONCAT2(MOScheck_, HEAP)(BAT *b)
{
close(fd);
hp->parentid = b->batCacheid;
-   TRC_DEBUG(ALGO, "#BATcheckmosaic %s: 
reusing persisted heap %d\n", ext, b->batCacheid);
+   TRC_DEBUG(ALGO, "#" 
STRINGIFY(CONCAT2(MOScheck_, HEAP)) " %s: reusing persisted heap %d\n", ext, 
b->batCacheid);
b->CONCAT2(t, HEAP) = hp;
return 1;
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: mosaic - Get rid of lock wrapper.

2020-03-11 Thread Aris Koning
Changeset: 642371d91257 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=642371d91257
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_mosaic.c
Branch: mosaic
Log Message:

Get rid of lock wrapper.


diffs (43 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -343,8 +343,6 @@ Heap *MOScreate_vmosaic_heap(BAT *b, BUN
 void MOSdestroy(BAT *b);
 void MOSfree(BAT *bn);
 void MOSpersist(BAT *b);
-void MOSsetLock(BAT *b);
-void MOSunsetLock(BAT *b);
 void MOSvirtualize(BAT *bn);
 int MT_check_nr_cores(void);
 int MT_create_thread(MT_Id *t, void (*function)(void *), void *arg, enum 
MT_thr_detach d, const char *threadname);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1628,8 +1628,6 @@ gdk_export int BATcheckmosaic(BAT *b);
 gdk_export void MOSdestroy(BAT *b);
 gdk_export void MOSfree(BAT *bn);
 gdk_export void  MOSpersist(BAT *b);
-gdk_export void MOSsetLock(BAT* b);
-gdk_export void MOSunsetLock(BAT* b);
 gdk_export void MOSvirtualize(BAT *bn);
 
 /*
diff --git a/gdk/gdk_mosaic.c b/gdk/gdk_mosaic.c
--- a/gdk/gdk_mosaic.c
+++ b/gdk/gdk_mosaic.c
@@ -14,15 +14,6 @@
 #include "gdk.h"
 #include "gdk_private.h"
 
-void MOSsetLock(BAT* b) {
-   MT_lock_set(&b->batIdxLock);
-}
-
-void MOSunsetLock(BAT* b) {
-   MT_lock_unset(&b->batIdxLock);
-}
-
-
 #define EXT(HEAP) ("t" STRINGIFY(HEAP))
 
 #define HEAP mosaic
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Nov2019 - Added support for SQL_LONGVARCHAR, SQL_CHAR a...

2020-03-11 Thread Sjoerd Mullender
Changeset: b9d237043e33 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b9d237043e33
Modified Files:
clients/odbc/driver/SQLGetTypeInfo.c
Branch: Nov2019
Log Message:

Added support for SQL_LONGVARCHAR, SQL_CHAR and SQL_VARCHAR in SQLGetTypeInfo.


diffs (truncated from 1512 to 300 lines):

diff --git a/clients/odbc/driver/SQLGetTypeInfo.c 
b/clients/odbc/driver/SQLGetTypeInfo.c
--- a/clients/odbc/driver/SQLGetTypeInfo.c
+++ b/clients/odbc/driver/SQLGetTypeInfo.c
@@ -57,761 +57,824 @@ static const struct types {
 * Except for the type_name value, the string values are ready
 * to paste into an SQL query (i.e. including quotes). */
{
-   "uuid", /* type_name */
-   SQL_GUID,   /* data_type */
-   36, /* column_size */
-   "NULL", /* literal_prefix */
-   "NULL", /* literal_suffix */
-   "NULL", /* create_params */
-   SQL_NULLABLE,   /* nullable */
-   SQL_FALSE,  /* case_sensitive */
-   SQL_PRED_BASIC, /* searchable */
-   -1, /* unsigned_attribute */
-   SQL_FALSE,  /* fixed_prec_scale */
-   -1, /* auto_unique_value */
-   "NULL", /* local_type_name */
-   -1, /* minimum_scale */
-   -1, /* maximum_scale */
-   SQL_GUID,   /* sql_data_type */
-   -1, /* sql_datetime_sub */
-   -1, /* num_prec_radix */
-   -1, /* interval_precision */
+   .type_name = "uuid",
+   .data_type = SQL_GUID,
+   .column_size = 36,
+   .literal_prefix = "NULL",
+   .literal_suffix = "NULL",
+   .create_params = "NULL",
+   .nullable = SQL_NULLABLE,
+   .case_sensitive = SQL_FALSE,
+   .searchable = SQL_PRED_BASIC,
+   .unsigned_attribute = -1,
+   .fixed_prec_scale = SQL_FALSE,
+   .auto_unique_value = -1,
+   .local_type_name = "NULL",
+   .minimum_scale = -1,
+   .maximum_scale = -1,
+   .sql_data_type = SQL_GUID,
+   .sql_datetime_sub = -1,
+   .num_prec_radix = -1,
+   .interval_precision = -1,
},
{
-   "character large object", /* type_name */
-   SQL_WLONGVARCHAR,   /* data_type */
-   100,/* column_size */
-   "", /* literal_prefix */
-   "", /* literal_suffix */
-   "NULL", /* create_params */
-   SQL_NULLABLE,   /* nullable */
-   SQL_TRUE,   /* case_sensitive */
-   SQL_SEARCHABLE, /* searchable */
-   -1, /* unsigned_attribute */
-   SQL_FALSE,  /* fixed_prec_scale */
-   SQL_FALSE,  /* auto_unique_value */
-   "NULL", /* local_type_name */
-   -1, /* minimum_scale */
-   -1, /* maximum_scale */
-   SQL_WLONGVARCHAR,   /* sql_data_type */
-   -1, /* sql_datetime_sub */
-   -1, /* num_prec_radix */
-   -1, /* interval_precision */
+   .type_name = "character large object",
+   .data_type = SQL_WLONGVARCHAR,
+   .column_size = 100,
+   .literal_prefix = "",
+   .literal_suffix = "",
+   .create_params = "NULL",
+   .nullable = SQL_NULLABLE,
+   .case_sensitive = SQL_TRUE,
+   .searchable = SQL_SEARCHABLE,
+   .unsigned_attribute = -1,
+   .fixed_prec_scale = SQL_FALSE,
+   .auto_unique_value = SQL_FALSE,
+   .local_type_name = "NULL",
+   .minimum_scale = -1,
+   .maximum_scale = -1,
+   .sql_data_type = SQL_WLONGVARCHAR,
+   .sql_datetime_sub = -1,
+   .num_prec_radix = -1,
+   .interval_precision = -1,
},
{
-   "varchar",  /* type_name */
-   SQL_WVARCHAR,   /* data_type */
-   100,/* column_size */
-   "", /* literal_prefix */
-   "", /* literal_suffix */
-   "'length'", /* create_params */
-   

MonetDB: default - Removed unused macros

2020-03-11 Thread Pedro Ferreira
Changeset: c0d5b4c3a973 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c0d5b4c3a973
Modified Files:
sql/server/rel_rel.h
Branch: default
Log Message:

Removed unused macros


diffs (19 lines):

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
@@ -28,7 +28,6 @@
 #define sql_update_set   (1 << 12) //ORed
 #define sql_values   (1 << 13) //ORed
 #define psm_call (1 << 14) //ORed
-#define sql_rel_update   (1 << 15) //ORed
 
 #define is_sql_from(X) ((X & sql_from) == sql_from)
 #define is_sql_where(X)((X & sql_where) == sql_where)
@@ -45,7 +44,6 @@
 #define is_sql_update_set(X)   ((X & sql_update_set) == sql_update_set)
 #define is_sql_values(X)   ((X & sql_values) == sql_values)
 #define is_psm_call(X) ((X & psm_call) == psm_call)
-#define is_sql_rel_update(X)   ((X & sql_rel_update) == sql_rel_update)
 
 #define is_updateble(rel) \
(rel->op == op_basetable || \
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Updates with wrong results

2020-03-11 Thread Pedro Ferreira
Changeset: c65827333031 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c65827333031
Modified Files:
sql/server/rel_propagate.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/server/rel_updates.c
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
Branch: default
Log Message:

Updates with wrong results


diffs (107 lines):

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
@@ -160,7 +160,7 @@ generate_partition_limits(sql_query *que
return exp_atom(sql->sa, amax);
} else {
exp_kind ek = {type_value, card_value, FALSE};
-   sql_exp *e = rel_value_exp2(query, r, s, sql_sel | sql_values, ek);
+   sql_exp *e = rel_value_exp2(query, r, s, sql_sel | sql_values, 
ek);
 
if (!e)
return NULL;
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
@@ -28,6 +28,7 @@
 #define sql_update_set   (1 << 12) //ORed
 #define sql_values   (1 << 13) //ORed
 #define psm_call (1 << 14) //ORed
+#define sql_rel_update   (1 << 15) //ORed
 
 #define is_sql_from(X) ((X & sql_from) == sql_from)
 #define is_sql_where(X)((X & sql_where) == sql_where)
@@ -44,6 +45,7 @@
 #define is_sql_update_set(X)   ((X & sql_update_set) == sql_update_set)
 #define is_sql_values(X)   ((X & sql_values) == sql_values)
 #define is_psm_call(X) ((X & psm_call) == psm_call)
+#define is_sql_rel_update(X)   ((X & sql_rel_update) == sql_rel_update)
 
 #define is_updateble(rel) \
(rel->op == op_basetable || \
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2380,7 +2380,7 @@ rel_logical_value_exp(sql_query *query, 
return NULL;
if (ek.card <= card_set && is_project(sq->op) && 
list_length(sq->exps) > 1)
return sql_error(sql, 02, SQLSTATE(42000) "SELECT: 
subquery must return only one column");
-   if (ek.card < card_set && sq->card >= CARD_MULTI && 
is_sql_sel(f) && (*rel && is_basetable((*rel)->op)))
+   if (ek.card < card_set && sq->card >= CARD_MULTI && 
is_sql_sel(f) && (rel && *rel && is_basetable((*rel)->op)))
sq = rel_zero_or_one(sql, sq, ek);
return exp_rel(sql, sq);
}
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
@@ -990,7 +990,7 @@ update_generate_assignments(sql_query *q
if (single) {
v = rel_value_exp(query, &r, a, sql_sel 
| sql_update_set, ek);
} else if (!rel_val && r) {
-   query_push_outer(query, r, sql_sel | 
sql_update_set);
+   query_push_outer(query, r, sql_sel);
rel_val = rel_subquery(query, NULL, a, 
ek);
r = query_pop_outer(query);
if (/* DISABLES CODE */ (0) && r) {
diff --git a/sql/test/subquery/Tests/subquery4.sql 
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -141,6 +141,11 @@ DELETE FROM another_T WHERE col1 = AVG(c
 DELETE FROM another_T WHERE col7 = (SELECT SUM(col3) OVER ()); --0 rows 
affected
 DELETE FROM another_T WHERE col8 = (SELECT MAX(col6 + ColID) OVER () FROM 
tbl_ProductSales); --error, more than one row returned by a subquery used as an 
expression
 
+UPDATE another_T SET col5 = (SELECT 1 UNION ALL SELECT 2); --error, more than 
one row returned by a subquery used as an expression
+UPDATE another_T SET col5 = 1 WHERE col5 = (SELECT 1 UNION ALL SELECT 2); 
--error, more than one row returned by a subquery used as an expression
+DELETE FROM another_T WHERE col1 = (SELECT 1 UNION ALL SELECT 2); --error, 
more than one row returned by a subquery used as an expression
+INSERT INTO another_T VALUES ((SELECT 1 UNION ALL SELECT 2),2,3,4,5,6,7,8); 
--error, more than one row returned by a subquery used as an expression
+
 DECLARE x int;
 SET x = MAX(1) over (); --error, not allowed
 DECLARE y int;
@@ -149,7 +154,7 @@ SET y = MIN(1); --error, not allowed
 INSERT INTO another_T VALUES (SUM(1),2,3,4,5,6,7,8); --error, not allowed
 INSERT INTO another_T VALUES (AVG(1) OVER (),2,3,4,5,6,7,8); --error, not 
allowed
 INSERT INTO another_T VALUES ((SELECT SUM(1)),(SELECT SUM(2) OVER 
()),3,4,5,6,7,8); --allowed
-   
+
 SELECT * FROM another_T;
 
 CREATE PROCEDURE crashme(a int) BEGIN DECLARE x INT; SET x = a; END;
diff --git a/sql/test/subquery/Tests/subquery4.stable.err 
b/sql/test/subqu

MonetDB: pushdown - merged

2020-03-11 Thread Niels Nes
Changeset: c5ded6b6a072 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c5ded6b6a072
Modified Files:
sql/backends/monet5/sql.c
sql/include/sql_relation.h
sql/server/rel_rel.c
sql/server/rel_select.c

sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.stable.err

sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.stable.err
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.out
Branch: pushdown
Log Message:

merged


diffs (truncated from 429 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
@@ -5668,11 +5668,15 @@ SQLunionfunc(Client cntxt, MalBlkPtr mb,
ret = 
createException(MAL, "sql.unionfunc", SQLSTATE(HY005) "Cannot access column 
descriptor");
else {
ccnt = BATcount(fres);
-   BAT *p = NULL;
-
-   if (BATappend(res[0], p 
= BATconstant(fres->hseqbase, res[0]->ttype, (ptr)BUNtail(bi[0], cur), ccnt, 
0), NULL, FALSE) != GDK_SUCCEED)
-   ret = 
createException(MAL, "sql.unionfunc", SQLSTATE(HY013) MAL_MALLOC_FAIL);
-   BBPunfix(p->batCacheid);
+   BAT *p = 
BATconstant(fres->hseqbase, res[0]->ttype, (ptr)BUNtail(bi[0], cur), ccnt, 0);
+
+   if (p) {
+   if 
(BATappend(res[0], p, NULL, FALSE) != GDK_SUCCEED)
+   ret = 
createException(MAL, "sql.unionfunc", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   
BBPunfix(p->batCacheid);
+   } else {
+   ret = 
createException(MAL, "sql.unionfunc", OPERATION_FAILED);
+   }

BBPunfix(fres->batCacheid);
}
i=1;
diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -267,6 +267,7 @@ typedef struct relation {
 dependent:1,   /* dependent join */
 distinct:1,
 processed:1,   /* fully processed or still in the process of building 
*/
+grouped:1, /* groupby processed all the group by exps */
 subquery:1;/* is this part a subquery, this is needed for proper 
name binding */
void *p;/* properties for the optimizer, distribution */
 } sql_rel;
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
@@ -900,6 +900,7 @@ rel_groupby(mvc *sql, sql_rel *l, list *
rel->exps = aggrs;
rel->nrcols = l->nrcols;
rel->op = op_groupby;
+   rel->grouped = 1;
return rel;
 }
 
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2858,40 +2858,16 @@ rel_unop(sql_query *query, sql_rel **rel
exp_kind iek = {type_value, card_column, FALSE};
sql_exp *e = NULL;
sql_subfunc *sf = NULL;
-   sql_ftype type = (ek.card == card_loader)?F_LOADER:((ek.card == 
card_none)?F_PROC:F_FUNC);
 
if (sname && !(s = mvc_bind_schema(sql, sname)))
return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
 
+   sf = find_func(sql, s, fname, 1, F_AGGR, NULL);
+   if (sf)
+   return rel_aggr(query, rel, se, f);
+
e = rel_value_exp(query, rel, l->next->next->data.sym, f|sql_farg, iek);
if (!e)
-   sf = find_func(sql, s, fname, 1, F_AGGR, NULL);
-
-   if (!sf && !e && *rel && (*rel)->card == CARD_AGGR) {
-   if (is_sql_having(f) || is_sql_orderby(f))
-   return NULL;
-   /* reset error */
-   sql->session->status = 0;
-   sql->errstr[0] = '\0';
-   return sql_error(sql, 02, SQLSTATE(42000) "SELECT: no such 
aggregate '%s'", fname);
-   }
-   if (!e && sf) { /* possibly we cannot resolve the argument as the 
function maybe an aggregate */
-   /* reset error */
-   sql->session->status = 0;
-   sql->errstr[0] = '\0';
-   return rel_

MonetDB: default - fixed proper use of nested aggregation

2020-03-11 Thread Niels Nes
Changeset: ce47a38f5294 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce47a38f5294
Modified Files:
sql/include/sql_relation.h
sql/server/rel_rel.c
sql/server/rel_select.c

sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.stable.err

sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: default
Log Message:

fixed proper use of nested aggregation
reduced complexity in the rel_unop, rel_binop and rel_nop cases, ie
first try if we have an aggregation function with the required number of 
arguments, iff
so continue with rel_aggr else continue in the functional route.


diffs (truncated from 301 to 300 lines):

diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -267,6 +267,7 @@ typedef struct relation {
 dependent:1,   /* dependent join */
 distinct:1,
 processed:1,   /* fully processed or still in the process of building 
*/
+grouped:1, /* groupby processed all the group by exps */
 subquery:1;/* is this part a subquery, this is needed for proper 
name binding */
void *p;/* properties for the optimizer, distribution */
 } sql_rel;
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
@@ -900,6 +900,7 @@ rel_groupby(mvc *sql, sql_rel *l, list *
rel->exps = aggrs;
rel->nrcols = l->nrcols;
rel->op = op_groupby;
+   rel->grouped = 1;
return rel;
 }
 
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2858,40 +2858,16 @@ rel_unop(sql_query *query, sql_rel **rel
exp_kind iek = {type_value, card_column, FALSE};
sql_exp *e = NULL;
sql_subfunc *sf = NULL;
-   sql_ftype type = (ek.card == card_loader)?F_LOADER:((ek.card == 
card_none)?F_PROC:F_FUNC);
 
if (sname && !(s = mvc_bind_schema(sql, sname)))
return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
 
+   sf = find_func(sql, s, fname, 1, F_AGGR, NULL);
+   if (sf)
+   return rel_aggr(query, rel, se, f);
+
e = rel_value_exp(query, rel, l->next->next->data.sym, f|sql_farg, iek);
if (!e)
-   sf = find_func(sql, s, fname, 1, F_AGGR, NULL);
-
-   if (!sf && !e && *rel && (*rel)->card == CARD_AGGR) {
-   if (is_sql_having(f) || is_sql_orderby(f))
-   return NULL;
-   /* reset error */
-   sql->session->status = 0;
-   sql->errstr[0] = '\0';
-   return sql_error(sql, 02, SQLSTATE(42000) "SELECT: no such 
aggregate '%s'", fname);
-   }
-   if (!e && sf) { /* possibly we cannot resolve the argument as the 
function maybe an aggregate */
-   /* reset error */
-   sql->session->status = 0;
-   sql->errstr[0] = '\0';
-   return rel_aggr(query, rel, se, f);
-   }
-   if (type == F_FUNC) {
-   sf = find_func(sql, s, fname, 1, F_AGGR, NULL);
-   if (sf) {
-   if (!e) { /* reset error */
-   sql->session->status = 0;
-   sql->errstr[0] = '\0';
-   }
-   return _rel_aggr(query, rel, l->next->data.i_val, s, 
fname, l->next->next, f);
-   }
-   }
-   if (!e)
return NULL;
return rel_unop_(sql, rel ? *rel : NULL, e, s, fname, ek.card);
 }
@@ -3137,42 +3113,17 @@ rel_binop(sql_query *query, sql_rel **re
char *sname = qname_schema(dl->data.lval);
sql_schema *s = cur_schema(sql);
exp_kind iek = {type_value, card_column, FALSE};
-   sql_ftype type = (ek.card == card_loader)?F_LOADER:((ek.card == 
card_none)?F_PROC:F_FUNC);
sql_subfunc *sf = NULL;
 
if (sname && !(s = mvc_bind_schema(sql, sname)))
return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
 
+   sf = find_func(sql, s, fname, 2, F_AGGR, NULL);
+   if (sf)
+   return rel_aggr(query, rel, se, f);
+
l = rel_value_exp(query, rel, dl->next->next->data.sym, f|sql_farg, 
iek);
r = rel_value_exp(query, rel, dl->next->next->next->data.sym, 
f|sql_farg, iek);
-
-   if (!l || !r)
-   sf = find_func(sql, s, fname, 2, F_AGGR, NULL);
-   if (!sf && (!l || !r) && *rel && (*rel)->card == CARD_AGGR) {
-   if (mvc_status(sql) || is_sql_having(f) || is_sql_orderby(f))
-   return NULL;
-   /* reset error */
-   sql->session->status = 0;
-   sql->errstr[0] = '\0';
-   return

MonetDB: default - Approved output

2020-03-11 Thread Pedro Ferreira
Changeset: 916c851736c6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=916c851736c6
Modified Files:
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.out
Branch: default
Log Message:

Approved output


diffs (112 lines):

diff --git a/sql/test/subquery/Tests/subquery4.sql 
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -105,7 +105,14 @@ FROM integers i1;
 UPDATE another_T SET col1 = MIN(col1); --error, aggregates not allowed in 
update set clause
 UPDATE another_T SET col2 = 1 WHERE col1 = SUM(col2); --error, aggregates not 
allowed in update set clause
 UPDATE another_T SET col3 = (SELECT MAX(col5)); --error, aggregates not 
allowed in update set clause
-UPDATE another_T SET col4 = (SELECT SUM(col4 + ColID) FROM tbl_ProductSales);
+UPDATE another_T SET col4 = (SELECT SUM(col4 + ColID) FROM tbl_ProductSales); 
--4 rows affected
+
+SELECT col4 FROM another_T;
+   -- 26
+   -- 186
+   -- 1786
+   -- 17786
+
 UPDATE another_T SET col5 = 1 WHERE col5 = (SELECT AVG(col2)); --error, 
aggregates not allowed in where clause
 UPDATE another_T SET col6 = 1 WHERE col6 = (SELECT COUNT(col3 + ColID) FROM 
tbl_ProductSales);
 UPDATE another_T SET col8 = (SELECT 1 FROM integers i2 WHERE AVG(i2.i)); 
--error, aggregates not allowed in update set clause
@@ -113,18 +120,25 @@ UPDATE another_T SET col7 = 1 WHERE col5
 
 DELETE FROM another_T WHERE col1 = COUNT(col2); --error, aggregates not 
allowed in where clause
 DELETE FROM another_T WHERE col7 = (SELECT MIN(col3)); --error, aggregates not 
allowed in where clause
-DELETE FROM another_T WHERE col8 = (SELECT AVG(col6 + ColID) FROM 
tbl_ProductSales);
+DELETE FROM another_T WHERE col8 = (SELECT AVG(col6 + ColID) FROM 
tbl_ProductSales); --0 rows affected
 DELETE FROM another_T WHERE col2 = (SELECT 1 FROM integers i2 WHERE 
AVG(i2.i)); --error, aggregates not allowed in where clause
 
 UPDATE another_T SET col1 = AVG(col1) OVER (); --error, window functions not 
allowed in update set clause
 UPDATE another_T SET col2 = 1 WHERE col1 = COUNT(col2) OVER (); --error, 
window functions not allowed in where clause
-UPDATE another_T SET col3 = (SELECT SUM(col5) OVER ());
+UPDATE another_T SET col3 = (SELECT SUM(col5) OVER ()); --4 rows affected
+
+SELECT col3 FROM another_T;
+   -- 5
+   -- 55
+   -- 555
+   -- 
+
 UPDATE another_T SET col4 = (SELECT MIN(col4 + ColID) OVER () FROM 
tbl_ProductSales); --error, more than one row returned by a subquery used as an 
expression
-UPDATE another_T SET col5 = 1 WHERE col5 = (SELECT MAX(col2) OVER ());
+UPDATE another_T SET col5 = 1 WHERE col5 = (SELECT MAX(col2) OVER ()); --0 
rows affected
 UPDATE another_T SET col6 = 1 WHERE col6 = (SELECT MIN(col3 + ColID) OVER () 
FROM tbl_ProductSales); --error, more than one row returned by a subquery used 
as an expression
 
 DELETE FROM another_T WHERE col1 = AVG(col2) OVER (); --error, window 
functions not allowed in where clause
-DELETE FROM another_T WHERE col7 = (SELECT SUM(col3) OVER ());
+DELETE FROM another_T WHERE col7 = (SELECT SUM(col3) OVER ()); --0 rows 
affected
 DELETE FROM another_T WHERE col8 = (SELECT MAX(col6 + ColID) OVER () FROM 
tbl_ProductSales); --error, more than one row returned by a subquery used as an 
expression
 
 DECLARE x int;
@@ -134,6 +148,9 @@ SET y = MIN(1); --error, not allowed
 
 INSERT INTO another_T VALUES (SUM(1),2,3,4,5,6,7,8); --error, not allowed
 INSERT INTO another_T VALUES (AVG(1) OVER (),2,3,4,5,6,7,8); --error, not 
allowed
+INSERT INTO another_T VALUES ((SELECT SUM(1)),(SELECT SUM(2) OVER 
()),3,4,5,6,7,8); --allowed
+   
+SELECT * FROM another_T;
 
 CREATE PROCEDURE crashme(a int) BEGIN DECLARE x INT; SET x = a; END;
 
diff --git a/sql/test/subquery/Tests/subquery4.stable.out 
b/sql/test/subquery/Tests/subquery4.stable.out
--- a/sql/test/subquery/Tests/subquery4.stable.out
+++ b/sql/test/subquery/Tests/subquery4.stable.out
@@ -137,18 +137,48 @@ stdout of test 'subquery4` in directory 
 [ 3]
 #UPDATE another_T SET col4 = (SELECT SUM(col4 + ColID) FROM tbl_ProductSales);
 [ 4]
+#SELECT col4 FROM another_T;
+% sys.another_t # table_name
+% col4 # name
+% int # type
+% 5 # length
+[ 26   ]
+[ 186  ]
+[ 1786 ]
+[ 17786]
 #UPDATE another_T SET col6 = 1 WHERE col6 = (SELECT COUNT(col3 + ColID) FROM 
tbl_ProductSales);
 [ 0]
 #DELETE FROM another_T WHERE col8 = (SELECT AVG(col6 + ColID) FROM 
tbl_ProductSales);
 [ 0]
 #UPDATE another_T SET col3 = (SELECT SUM(col5) OVER ());
 [ 4]
-#UPDATE another_T SET col5 = 1 WHERE col5 = (SELECT MAX(col2) OVER ());
+#SELECT col3 FROM another_T;
+% sys.another_t # table_name
+% col3 # name
+% int # type
+% 4 # length
+[ 5]
+[ 55   ]
+[ 555  ]
+[  ]
+#UPDATE another_T SET col5 = 1 WHERE col5 = (SELECT MAX(col2) OVER ()); --0 
rows affected
 [ 0]
 #DELETE FROM another_T WHERE col7 = (SELECT SUM

MonetDB: default - Defensive lines

2020-03-11 Thread Pedro Ferreira
Changeset: 748abc3d6ab3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=748abc3d6ab3
Modified Files:
sql/backends/monet5/sql.c
Branch: default
Log Message:

Defensive lines


diffs (24 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
@@ -5668,11 +5668,15 @@ SQLunionfunc(Client cntxt, MalBlkPtr mb,
ret = 
createException(MAL, "sql.unionfunc", SQLSTATE(HY005) "Cannot access column 
descriptor");
else {
ccnt = BATcount(fres);
-   BAT *p = NULL;
-
-   if (BATappend(res[0], p 
= BATconstant(fres->hseqbase, res[0]->ttype, (ptr)BUNtail(bi[0], cur), ccnt, 
0), NULL, FALSE) != GDK_SUCCEED)
-   ret = 
createException(MAL, "sql.unionfunc", SQLSTATE(HY013) MAL_MALLOC_FAIL);
-   BBPunfix(p->batCacheid);
+   BAT *p = 
BATconstant(fres->hseqbase, res[0]->ttype, (ptr)BUNtail(bi[0], cur), ccnt, 0);
+
+   if (p) {
+   if 
(BATappend(res[0], p, NULL, FALSE) != GDK_SUCCEED)
+   ret = 
createException(MAL, "sql.unionfunc", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   
BBPunfix(p->batCacheid);
+   } else {
+   ret = 
createException(MAL, "sql.unionfunc", OPERATION_FAILED);
+   }

BBPunfix(fres->batCacheid);
}
i=1;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: pushdown - merged with default

2020-03-11 Thread Niels Nes
Changeset: 56e77337f207 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=56e77337f207
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/test/subquery/Tests/subquery3.stable.err
sql/test/subquery/Tests/subquery3.stable.out
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: pushdown
Log Message:

merged with default


diffs (truncated from 859 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
@@ -18886,6 +18886,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "transaction_commit",   "pattern 
sql.transaction_commit(chain:int, name:str):void ",
"SQLtransaction_commit;",   "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_release",  "pattern 
sql.transaction_release(chain:int, name:str):void ",   
"SQLtransaction_release;",  "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_rollback", "pattern 
sql.transaction_rollback(chain:int, name:str):void ",  
"SQLtransaction_rollback;", "A transaction statement (type can be 
commit,release,rollback or start)"]
+[ "sql",   "unionfunc","pattern sql.unionfunc(mod:str, fcn:str, 
X_0:any...):any... ",  "SQLunionfunc;",""  ]
 [ "sql",   "update",   "pattern sql.update(mvc:int, sname:str, 
tname:str, cname:str, rids:any, upd:any):int ", "mvc_update_wrap;", "Update 
the values of the column tname.cname. Returns sequence number for order 
dependence)"]
 [ "sql",   "update_schemas",   "pattern sql.update_schemas():void ",   
"SYSupdate_schemas;",   "Procedure triggered on update of the sys.schemas 
table"]
 [ "sql",   "update_tables","pattern sql.update_tables():void ",
"SYSupdate_tables;","Procedure triggered on update of the sys._tables 
table"]
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
@@ -26900,6 +26900,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "transaction_commit",   "pattern 
sql.transaction_commit(chain:int, name:str):void ",
"SQLtransaction_commit;",   "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_release",  "pattern 
sql.transaction_release(chain:int, name:str):void ",   
"SQLtransaction_release;",  "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_rollback", "pattern 
sql.transaction_rollback(chain:int, name:str):void ",  
"SQLtransaction_rollback;", "A transaction statement (type can be 
commit,release,rollback or start)"]
+[ "sql",   "unionfunc","pattern sql.unionfunc(mod:str, fcn:str, 
X_0:any...):any... ",  "SQLunionfunc;",""  ]
 [ "sql",   "update",   "pattern sql.update(mvc:int, sname:str, 
tname:str, cname:str, rids:any, upd:any):int ", "mvc_update_wrap;", "Update 
the values of the column tname.cname. Returns sequence number for order 
dependence)"]
 [ "sql",   "update_schemas",   "pattern sql.update_schemas():void ",   
"SYSupdate_schemas;",   "Procedure triggered on update of the sys.schemas 
table"]
 [ "sql",   "update_tables","pattern sql.update_tables():void ",
"SYSupdate_tables;","Procedure triggered on update of the sys._tables 
table"]
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
@@ -19,6 +19,8 @@
 #include "rel_optimizer.h"
 #include "sql_env.h"
 #include "sql_optimizer.h"
+#include "sql_gencode.h"
+#include "mal_builder.h"
 
 #define OUTER_ZERO 64
 
@@ -538,6 +540,10 @@ exp_bin(backend *be, sql_exp *e, stmt *l
for(n=lst->op4.lval->h; n; n = n->next)
list_append(l, const_column(be, 
(stmt*)n->data));
r = stmt_list(be, l);
+   } else if (r->type == st_table && e->card == 
CARD_ATOM) { /* fetch value *

MonetDB: default - Moved assertion earlier and added defensive line

2020-03-11 Thread Pedro Ferreira
Changeset: 537f46c5dba6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=537f46c5dba6
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: default
Log Message:

Moved assertion earlier and added defensive line


diffs (29 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
@@ -1688,6 +1688,7 @@ rel2bin_table(backend *be, sql_rel *rel,
return NULL;
}
 
+   assert(f);
if (f->func->res && list_length(f->func->res) + 1 == 
list_length(rel->exps) && !f->func->varres) {
/* add inputs in correct order ie loop through args of 
f and pass column */
list *exps = op->l;
@@ -1698,6 +1699,8 @@ rel2bin_table(backend *be, sql_rel *rel,
 
/* find column */
stmt *s = exp_bin(be, e, sub, NULL, 
NULL, NULL, NULL, NULL);
+   if (!s)
+   return NULL;
if (en->next)
append(ops, s);
else /* last added exp is the ids (todo 
use name base lookup !!) */
@@ -1706,7 +1709,7 @@ rel2bin_table(backend *be, sql_rel *rel,
}
} else {
psub = exp_bin(be, op, sub, NULL, NULL, NULL, NULL, 
NULL); /* table function */
-   if (!f || !psub) { 
+   if (!psub) { 
assert(sql->session->status == -10); /* Stack 
overflow errors shouldn't terminate the server */
return NULL;
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Initialize variable

2020-03-11 Thread Pedro Ferreira
Changeset: 27a59f5ff391 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=27a59f5ff391
Modified Files:
sql/backends/monet5/sql.c
Branch: default
Log Message:

Initialize variable


diffs (12 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
@@ -5590,7 +5590,7 @@ SQLunionfunc(Client cntxt, MalBlkPtr mb,
 
if (npci) {
BAT **res = NULL, **input = NULL;
-   BATiter *bi;
+   BATiter *bi = NULL;
BUN cnt = 0;
int nrinput = pci->argc - 2 - pci->retc;
MalBlkPtr nmb = NULL;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Look for allocation failures!

2020-03-11 Thread Pedro Ferreira
Changeset: ea5c4b02f83f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ea5c4b02f83f
Modified Files:
sql/backends/monet5/sql.c
sql/test/subquery/Tests/subquery3.stable.out
Branch: default
Log Message:

Look for allocation failures!


diffs (216 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
@@ -5583,93 +5583,139 @@ SQLunionfunc(Client cntxt, MalBlkPtr mb,
npci = pushNil(mb, npci, type);
}
/* check program to get the proper malblk */
-   if (chkInstruction(cntxt->usermodule, mb, npci))
-   return "ERORROR";
+   if (chkInstruction(cntxt->usermodule, mb, npci)) {
+   freeInstruction(npci);
+   return createException(MAL, "sql.unionfunc", SQLSTATE(42000) 
PROGRAM_GENERAL);
+   }
 
if (npci) {
-   BAT **res; 
-   BAT **input; 
+   BAT **res = NULL, **input = NULL;
BATiter *bi;
BUN cnt = 0;
int nrinput = pci->argc - 2 - pci->retc;
-
-   input = GDKmalloc(sizeof(BAT*) * nrinput);
-   bi = GDKmalloc(sizeof(BATiter) * nrinput);
+   MalBlkPtr nmb = NULL;
+   MalStkPtr env = NULL;
+   InstrPtr q = NULL;
+
+   if (!(input = GDKzalloc(sizeof(BAT*) * nrinput))) {
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   goto finalize;
+   }
+   if (!(bi = GDKmalloc(sizeof(BATiter) * nrinput))) {
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   goto finalize;
+   }
assert(nrinput == pci->retc);
for (int i = 0, j = pci->retc+2; j < pci->argc; i++, j++) {
bat *b = getArgReference_bat(stk, pci, j);
-   input[i] = BATdescriptor(*b); 
+   if (!(input[i] = BATdescriptor(*b))) {
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY005) "Cannot access column descriptor");
+   goto finalize;
+   }
bi[i] = bat_iterator(input[i]);
cnt = BATcount(input[i]); 
}
 
/* create result bats */
-   res = GDKmalloc(sizeof(BAT*) * pci->retc);
+   if (!(res = GDKzalloc(sizeof(BAT*) * pci->retc))) {
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   goto finalize;
+   }
for (int i = 0; iretc; i++) {
int type = getArgType(mb, pci, i);
 
-   res[i] = COLnew(0, getBatType(type), cnt, TRANSIENT);
+   if (!(res[i] = COLnew(0, getBatType(type), cnt, 
TRANSIENT))) {
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   goto finalize;
+   }
}
 
-   MalBlkPtr nmb = copyMalBlk(npci->blk);
-   MalStkPtr env = prepareMALstack(nmb, nmb->vsize); /* needed for 
result */
-   
-   InstrPtr q = getInstrPtr(nmb, 0);
-
-   for(BUN cur = 0; curblk))) {
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   goto finalize;
+   }
+   if (!(env = prepareMALstack(nmb, nmb->vsize))) { /* needed for 
result */
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   goto finalize;
+   }
+
+   q = getInstrPtr(nmb, 0);
+
+   for (BUN cur = 0; curvsize);
int i,ii;
 
-   /* copy (input) arguments onto destination stack, 
skipping rowid col */
-   for (i = 1, ii = q->retc; ii < q->argc; ii++) {
-   ValPtr lhs = &nstk->stk[q->argv[ii]];
-   ptr rhs = (ptr)BUNtail(bi[i], cur);
-
-   assert(lhs->vtype != TYPE_bat);
-   if (VALset(lhs, input[i]->ttype, rhs) == NULL) {
-   ret = createException(MAL, 
"mal.interpreter", MAL_MALLOC_FAIL);
-   break;
+   if (!nstk) { /* needed for result */
+   ret = createException(MAL, "sql.unionfunc", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   } else {
+   /* copy (input) arguments onto destination 
stack, skipping rowid col */
+   

MonetDB: default - Throw better error message

2020-03-11 Thread Pedro Ferreira
Changeset: 2577c3740180 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2577c3740180
Modified Files:
sql/server/rel_select.c
sql/test/subquery/Tests/subquery4.stable.err
Branch: default
Log Message:

Throw better error message


diffs (28 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2700,6 +2700,8 @@ rel_logical_exp(sql_query *query, sql_re
sql_rel *sq = rel_setquery(query, sc);
if (!sq)
return NULL;
+   if (ek.card <= card_set && is_project(sq->op) && 
list_length(sq->exps) > 1)
+   return sql_error(sql, 02, SQLSTATE(42000) "SELECT: 
subquery must return only one column");
if (!rel)
return sq;
if (is_sql_where(f)) {
diff --git a/sql/test/subquery/Tests/subquery4.stable.err 
b/sql/test/subquery/Tests/subquery4.stable.err
--- a/sql/test/subquery/Tests/subquery4.stable.err
+++ b/sql/test/subquery/Tests/subquery4.stable.err
@@ -78,9 +78,9 @@ ERROR = !SELECT: subquery must return on
 CODE  = 42000
 MAPI  = (monetdb) /var/tmp/mtest-675878/.s.monetdb.32460
 QUERY = SELECT i FROM integers WHERE (SELECT true, false UNION ALL SELECT 
false, true); --error, subquery must return only one column
-ERROR = !Cardinality violation, scalar value expected
-CODE  = 21000
-MAPI  = (monetdb) /var/tmp/mtest-675878/.s.monetdb.32460
+ERROR = !SELECT: subquery must return only one column
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-6744/.s.monetdb.35025
 QUERY = UPDATE another_T SET col1 = MIN(col1); --error, aggregates not allowed 
in update set clause
 ERROR = !MIN: aggregate functions not allowed in SET clause (use subquery)
 CODE  = 42000
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Return earlier from function on error

2020-03-11 Thread Pedro Ferreira
Changeset: fd5ee7a07b26 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fd5ee7a07b26
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: default
Log Message:

Return earlier from function on error


diffs (39 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
@@ -1503,7 +1503,7 @@ exp2bin_args(backend *be, sql_exp *e, li
if (THRhighwater())
return sql_error(sql, 10, SQLSTATE(42000) "Query too complex: 
running out of stack space");
 
-   if (!e)
+   if (!e || !args)
return args;
switch(e->type){
case e_column:
@@ -1540,7 +1540,7 @@ exp2bin_args(backend *be, sql_exp *e, li
} else if (e->r) {
char nme[64];
 
-   snprintf(nme, 64, "A%s", (char*)e->r);
+   snprintf(nme, sizeof(nme), "A%s", (char*)e->r);
if (!list_find(args, nme, (fcmp)&alias_cmp)) {
stmt *s = stmt_var(be, e->r, &e->tpe, 0, 0);
 
@@ -1550,7 +1550,7 @@ exp2bin_args(backend *be, sql_exp *e, li
} else {
char nme[16];
 
-   snprintf(nme, 16, "A%u", e->flag);
+   snprintf(nme, sizeof(nme), "A%u", e->flag);
if (!list_find(args, nme, (fcmp)&alias_cmp)) {
atom *a = sql->args[e->flag];
stmt *s = stmt_varnr(be, e->flag, &a->tpe);
@@ -1581,7 +1581,7 @@ rel2bin_args(backend *be, sql_rel *rel, 
if (THRhighwater())
return sql_error(be->mvc, 10, SQLSTATE(42000) "Query too 
complex: running out of stack space");
 
-   if (!rel)
+   if (!rel || !args)
return args;
switch(rel->op) {
case op_basetable:
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - merged

2020-03-11 Thread Niels Nes
Changeset: 27c8efea0cbc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=27c8efea0cbc
Modified Files:
sql/test/subquery/Tests/subquery4.sql
Branch: default
Log Message:

merged


diffs (15 lines):

diff --git a/sql/test/subquery/Tests/subquery4.sql 
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -97,6 +97,11 @@ SELECT i FROM integers WHERE (SELECT COU
-- 2
-- 3
 
+SELECT
+   (SELECT MAX(i2.i) FROM (SELECT MIN(i1.i)) AS i2(i))
+FROM integers i1;
+   -- 1
+
 UPDATE another_T SET col1 = MIN(col1); --error, aggregates not allowed in 
update set clause
 UPDATE another_T SET col2 = 1 WHERE col1 = SUM(col2); --error, aggregates not 
allowed in update set clause
 UPDATE another_T SET col3 = (SELECT MAX(col5)); --error, aggregates not 
allowed in update set clause
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - handle unionfunctions more generaly now. Solv...

2020-03-11 Thread Niels Nes
Changeset: e7e8b6c61a3b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e7e8b6c61a3b
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/test/subquery/Tests/subquery3.stable.err
sql/test/subquery/Tests/subquery3.stable.out
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: default
Log Message:

handle unionfunctions more generaly now. Solves issues with correlated table 
returning functions
fixed problem with returning single values from psm functions where monetdb 
uses bats
too represent the single value.
added more checks for zero or one results


diffs (truncated from 751 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
@@ -18886,6 +18886,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "transaction_commit",   "pattern 
sql.transaction_commit(chain:int, name:str):void ",
"SQLtransaction_commit;",   "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_release",  "pattern 
sql.transaction_release(chain:int, name:str):void ",   
"SQLtransaction_release;",  "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_rollback", "pattern 
sql.transaction_rollback(chain:int, name:str):void ",  
"SQLtransaction_rollback;", "A transaction statement (type can be 
commit,release,rollback or start)"]
+[ "sql",   "unionfunc","pattern sql.unionfunc(mod:str, fcn:str, 
X_0:any...):any... ",  "SQLunionfunc;",""  ]
 [ "sql",   "update",   "pattern sql.update(mvc:int, sname:str, 
tname:str, cname:str, rids:any, upd:any):int ", "mvc_update_wrap;", "Update 
the values of the column tname.cname. Returns sequence number for order 
dependence)"]
 [ "sql",   "update_schemas",   "pattern sql.update_schemas():void ",   
"SYSupdate_schemas;",   "Procedure triggered on update of the sys.schemas 
table"]
 [ "sql",   "update_tables","pattern sql.update_tables():void ",
"SYSupdate_tables;","Procedure triggered on update of the sys._tables 
table"]
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
@@ -26900,6 +26900,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "transaction_commit",   "pattern 
sql.transaction_commit(chain:int, name:str):void ",
"SQLtransaction_commit;",   "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_release",  "pattern 
sql.transaction_release(chain:int, name:str):void ",   
"SQLtransaction_release;",  "A transaction statement (type can be 
commit,release,rollback or start)"]
 [ "sql",   "transaction_rollback", "pattern 
sql.transaction_rollback(chain:int, name:str):void ",  
"SQLtransaction_rollback;", "A transaction statement (type can be 
commit,release,rollback or start)"]
+[ "sql",   "unionfunc","pattern sql.unionfunc(mod:str, fcn:str, 
X_0:any...):any... ",  "SQLunionfunc;",""  ]
 [ "sql",   "update",   "pattern sql.update(mvc:int, sname:str, 
tname:str, cname:str, rids:any, upd:any):int ", "mvc_update_wrap;", "Update 
the values of the column tname.cname. Returns sequence number for order 
dependence)"]
 [ "sql",   "update_schemas",   "pattern sql.update_schemas():void ",   
"SYSupdate_schemas;",   "Procedure triggered on update of the sys.schemas 
table"]
 [ "sql",   "update_tables","pattern sql.update_tables():void ",
"SYSupdate_tables;","Procedure triggered on update of the sys._tables 
table"]
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
@@ -19,6 +19,8 @@
 #include "rel_optimizer.h"
 #include "sql_env.h"
 #include "sql_optimizer.h"
+#include "sql_gencode.h"
+#include "mal_builder.h"
 
 #define OUTER_ZERO 64
 
@@ -513,6 +515,10 @@ exp_bin(backend *be, sql_exp *e, stmt *l
for(n=lst->op4.lval->h; n; n = n->next)
list_append(l, const_column(

MonetDB: default - Query giving wrong result

2020-03-11 Thread Pedro Ferreira
Changeset: 2517fc0f6d86 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2517fc0f6d86
Modified Files:
sql/test/subquery/Tests/subquery4.sql
Branch: default
Log Message:

Query giving wrong result


diffs (15 lines):

diff --git a/sql/test/subquery/Tests/subquery4.sql 
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -97,6 +97,11 @@ SELECT i FROM integers WHERE (SELECT COU
-- 2
-- 3
 
+SELECT
+   (SELECT MAX(i2.i) FROM (SELECT MIN(i1.i)) AS i2(i))
+FROM integers i1;
+   -- 1
+
 UPDATE another_T SET col1 = MIN(col1); --error, aggregates not allowed in 
update set clause
 UPDATE another_T SET col2 = 1 WHERE col1 = SUM(col2); --error, aggregates not 
allowed in update set clause
 UPDATE another_T SET col3 = (SELECT MAX(col5)); --error, aggregates not 
allowed in update set clause
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Compilation fix

2020-03-11 Thread Pedro Ferreira
Changeset: 8ff7471cfe81 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8ff7471cfe81
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: default
Log Message:

Compilation fix


diffs (11 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
@@ -2542,6 +2542,7 @@ rel_rename(backend *be, sql_rel *rel, st
 {
mvc *sql = be->mvc;
 
+   (void) sql;
if (rel->exps) {
node *en, *n;
list *l = sa_list(be->mvc->sa);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list