MonetDB: antipush - Merged with default

2021-10-12 Thread Pedro Ferreira
Changeset: b50e8e2d6f02 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b50e8e2d6f02
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_unnest.c
sql/test/miscellaneous/Tests/simple_plans.test
Branch: antipush
Log Message:

Merged with default


diffs (truncated from 365 to 300 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -3410,6 +3410,8 @@ stmt_func(backend *be, stmt *ops, const 
 
if ((p = find_prop(rel->p, PROP_REMOTE)))
rel->p = prop_remove(rel->p, p);
+   /* sql_processrelation may split projections, so make sure the topmost 
relation only contains references */
+   rel = rel_project(be->mvc->sa, rel, rel_projections(be->mvc, rel, NULL, 
1, 1));
if (!(rel = sql_processrelation(be->mvc, rel, 1, 1)))
return NULL;
if (p) {
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1594,51 +1594,49 @@ rel_push_count_down(visitor *v, sql_rel 
r && !r->exps && r->op == op_join && !(rel_is_ref(r)) &&
/* currently only single count aggregation is handled, no other 
projects or aggregation */
list_length(rel->exps) == 1 && 
exp_aggr_is_count(rel->exps->h->data)) {
-   sql_exp *nce, *oce;
-   sql_rel *gbl, *gbr; /* Group By */
-   sql_rel *cp;/* Cross Product */
-   sql_subfunc *mult;
-   list *args, *types;
+   sql_exp *nce, *oce, *cnt1 = NULL, *cnt2 = NULL;
+   sql_rel *gbl = NULL, *gbr = NULL;   /* Group By */
+   sql_rel *cp = NULL; /* 
Cross Product */
sql_rel *srel;
 
oce = rel->exps->h->data;
if (oce->l) /* we only handle COUNT(*) */
return rel;
 
-   args = new_exp_list(v->sql->sa);
srel = r->l;
{
sql_subfunc *cf = sql_bind_func(v->sql, "sys", "count", 
sql_bind_localtype("void"), NULL, F_AGGR);
-   sql_exp *cnt, *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
+   sql_exp *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
 
exp_label(v->sql->sa, e, ++v->sql->label);
-   cnt = exp_ref(v->sql, e);
+   cnt1 = exp_ref(v->sql, e);
gbl = rel_groupby(v->sql, rel_dup(srel), NULL);
set_processed(gbl);
rel_groupby_add_aggr(v->sql, gbl, e);
-   append(args, cnt);
}
 
srel = r->r;
{
sql_subfunc *cf = sql_bind_func(v->sql, "sys", "count", 
sql_bind_localtype("void"), NULL, F_AGGR);
-   sql_exp *cnt, *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
+   sql_exp *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
 
exp_label(v->sql->sa, e, ++v->sql->label);
-   cnt = exp_ref(v->sql, e);
+   cnt2 = exp_ref(v->sql, e);
gbr = rel_groupby(v->sql, rel_dup(srel), NULL);
set_processed(gbr);
rel_groupby_add_aggr(v->sql, gbr, e);
-   append(args, cnt);
}
 
cp = rel_crossproduct(v->sql->sa, gbl, gbr, op_join);
 
-   types = sa_list(v->sql->sa);
-   for(node *n = args->h; n; n = n->next)
-   list_append(types, exp_subtype(n->data));
-   mult = sql_bind_func_(v->sql, "sys", "sql_mul", types, F_FUNC);
-   nce = exp_op(v->sql->sa, args, mult);
+   if (!(nce = rel_binop_(v->sql, NULL, cnt1, cnt2, "sys", 
"sql_mul", card_value))) {
+   v->sql->session->status = 0;
+   v->sql->errstr[0] = '\0';
+   return rel; /* error, fallback to original expression */
+   }
+   /* because of remote plans, make sure "sql_mul" returns bigint. 
The cardinality is atomic, so no major performance penalty */
+   if (subtype_cmp(exp_subtype(oce), exp_subtype(nce)) != 0)
+   nce = exp_convert(v->sql->sa, nce, exp_subtype(nce), 
exp_subtype(oce));
if (exp_name(oce))
exp_prop_alias(v->sql->sa, nce, oce);
 
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ 

MonetDB: default - Make sure rel_push_count_down returns the sam...

2021-10-12 Thread Pedro Ferreira
Changeset: 96905a6ef18f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/96905a6ef18f
Modified Files:
sql/server/rel_optimizer.c
sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.test
sql/test/SQLancer/Tests/sqlancer19.SQL.py
sql/test/miscellaneous/Tests/simple_plans.test
Branch: default
Log Message:

Make sure rel_push_count_down returns the same output type


diffs (119 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1594,51 +1594,49 @@ rel_push_count_down(visitor *v, sql_rel 
r && !r->exps && r->op == op_join && !(rel_is_ref(r)) &&
/* currently only single count aggregation is handled, no other 
projects or aggregation */
list_length(rel->exps) == 1 && 
exp_aggr_is_count(rel->exps->h->data)) {
-   sql_exp *nce, *oce;
-   sql_rel *gbl, *gbr; /* Group By */
-   sql_rel *cp;/* Cross Product */
-   sql_subfunc *mult;
-   list *args, *types;
+   sql_exp *nce, *oce, *cnt1 = NULL, *cnt2 = NULL;
+   sql_rel *gbl = NULL, *gbr = NULL;   /* Group By */
+   sql_rel *cp = NULL; /* 
Cross Product */
sql_rel *srel;
 
oce = rel->exps->h->data;
if (oce->l) /* we only handle COUNT(*) */
return rel;
 
-   args = new_exp_list(v->sql->sa);
srel = r->l;
{
sql_subfunc *cf = sql_bind_func(v->sql, "sys", "count", 
sql_bind_localtype("void"), NULL, F_AGGR);
-   sql_exp *cnt, *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
+   sql_exp *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
 
exp_label(v->sql->sa, e, ++v->sql->label);
-   cnt = exp_ref(v->sql, e);
+   cnt1 = exp_ref(v->sql, e);
gbl = rel_groupby(v->sql, rel_dup(srel), NULL);
set_processed(gbl);
rel_groupby_add_aggr(v->sql, gbl, e);
-   append(args, cnt);
}
 
srel = r->r;
{
sql_subfunc *cf = sql_bind_func(v->sql, "sys", "count", 
sql_bind_localtype("void"), NULL, F_AGGR);
-   sql_exp *cnt, *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
+   sql_exp *e = exp_aggr(v->sql->sa, NULL, cf, 
need_distinct(oce), need_no_nil(oce), oce->card, 0);
 
exp_label(v->sql->sa, e, ++v->sql->label);
-   cnt = exp_ref(v->sql, e);
+   cnt2 = exp_ref(v->sql, e);
gbr = rel_groupby(v->sql, rel_dup(srel), NULL);
set_processed(gbr);
rel_groupby_add_aggr(v->sql, gbr, e);
-   append(args, cnt);
}
 
cp = rel_crossproduct(v->sql->sa, gbl, gbr, op_join);
 
-   types = sa_list(v->sql->sa);
-   for(node *n = args->h; n; n = n->next)
-   list_append(types, exp_subtype(n->data));
-   mult = sql_bind_func_(v->sql, "sys", "sql_mul", types, F_FUNC);
-   nce = exp_op(v->sql->sa, args, mult);
+   if (!(nce = rel_binop_(v->sql, NULL, cnt1, cnt2, "sys", 
"sql_mul", card_value))) {
+   v->sql->session->status = 0;
+   v->sql->errstr[0] = '\0';
+   return rel; /* error, fallback to original expression */
+   }
+   /* because of remote plans, make sure "sql_mul" returns bigint. 
The cardinality is atomic, so no major performance penalty */
+   if (subtype_cmp(exp_subtype(oce), exp_subtype(nce)) != 0)
+   nce = exp_convert(v->sql->sa, nce, exp_subtype(nce), 
exp_subtype(oce));
if (exp_name(oce))
exp_prop_alias(v->sql->sa, nce, oce);
 
diff --git a/sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.test 
b/sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.test
--- a/sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.test
+++ b/sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.test
@@ -32,6 +32,8 @@ bat.pack
 5
 bat.single
 2
+batcalc.lng
+1
 querylog.define
 1
 sql.my_generate_series
diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py 
b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
@@ -257,11 +257,21 @@ with SQLTestCase() as cli:
 cli.execute("SELECT 1 FROM v7 CROSS JOIN ((SELECT 1) 

MonetDB: default - Before optimizing a remote plan, make sure th...

2021-10-12 Thread Pedro Ferreira
Changeset: f07f939ed6b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f07f939ed6b6
Modified Files:
sql/backends/monet5/sql_statement.c
sql/test/SQLancer/Tests/sqlancer19.SQL.py
sql/test/SQLancer/Tests/sqlancer20.SQL.py
Branch: default
Log Message:

Before optimizing a remote plan, make sure the topmost relation only contains 
references


diffs (60 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -3410,6 +3410,8 @@ stmt_func(backend *be, stmt *ops, const 
 
if ((p = find_prop(rel->p, PROP_REMOTE)))
rel->p = prop_remove(rel->p, p);
+   /* sql_processrelation may split projections, so make sure the topmost 
relation only contains references */
+   rel = rel_project(be->mvc->sa, rel, rel_projections(be->mvc, rel, NULL, 
1, 1));
if (!(rel = sql_processrelation(be->mvc, rel, 1, 1)))
return NULL;
if (p) {
diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py 
b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
@@ -256,6 +256,12 @@ with SQLTestCase() as cli:
 .assertSucceeded()
 cli.execute("SELECT 1 FROM v7 CROSS JOIN ((SELECT 1) UNION ALL (SELECT 2)) 
AS sub0(c0);") \
 
.assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,)])
+cli.execute("""
+SELECT 1 FROM (VALUES (2),(3)) x(x) FULL OUTER JOIN (SELECT rt1.c1 <= 
CAST(rt1.c1 AS INT) FROM rt1) AS sub0(c0) ON true WHERE sub0.c0
+UNION ALL
+SELECT 1 FROM (VALUES (2),(3)) x(x) FULL OUTER JOIN (SELECT rt1.c1 <= 
CAST(rt1.c1 AS INT) FROM rt1) AS sub0(c0) ON true;
+""").assertSucceeded() \
+
.assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,)])
 cli.execute("ROLLBACK;")
 
 cli.execute("CREATE FUNCTION mybooludf(a bool) RETURNS BOOL RETURN a;")
diff --git a/sql/test/SQLancer/Tests/sqlancer20.SQL.py 
b/sql/test/SQLancer/Tests/sqlancer20.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer20.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer20.SQL.py
@@ -10,8 +10,6 @@ with SQLTestCase() as cli:
 cli.connect(username="monetdb", password="monetdb")
 cli.execute("""
 START TRANSACTION;
-CREATE TABLE "t0" ("c0" INTERVAL SECOND NOT NULL, "c1" JSON);
-INSERT INTO "t0" VALUES (INTERVAL '9' SECOND, '""');
 CREATE TABLE "t1" ("c0" BIGINT,"c1" INTERVAL MONTH);
 INSERT INTO "t1" VALUES (1, INTERVAL '9' MONTH),(5, INTERVAL '6' 
MONTH),(5, NULL),(7, NULL),(2, INTERVAL '1' MONTH),(2, INTERVAL '1' MONTH);
 COMMIT;
@@ -20,12 +18,6 @@ with SQLTestCase() as cli:
 CREATE REMOTE TABLE "rt1" ("c0" BIGINT,"c1" INTERVAL MONTH) ON 
'mapi:monetdb://localhost:%s/%s/sys/t1';
 COMMIT;""" % (port, db)).assertSucceeded()
 
-cli.execute("""
-SELECT 1 FROM t0 FULL OUTER JOIN (SELECT rt1.c0 <= CAST(rt1.c0 AS INT) 
FROM rt1) AS sub0(c0) ON true WHERE sub0.c0
-UNION ALL
-SELECT 1 FROM t0 FULL OUTER JOIN (SELECT rt1.c0 <= CAST(rt1.c0 AS INT) 
FROM rt1) AS sub0(c0) ON true;
-
""").assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,)])
-
 # Issues related to digits and scale propagation in the sql layer
 cli.execute("SELECT CAST(2 AS DECIMAL) & CAST(3 AS DOUBLE) FROM t1 where 
t1.c0 = 1;") \
 .assertSucceeded().assertDataResultMatch([(Decimal('0.002'),)])
@@ -35,6 +27,5 @@ with SQLTestCase() as cli:
 cli.execute("""
 START TRANSACTION;
 DROP TABLE rt1;
-DROP TABLE t0;
 DROP TABLE t1;
 COMMIT;""").assertSucceeded()
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Merged with Jul2021

2021-10-12 Thread Pedro Ferreira
Changeset: 520499049a5b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/520499049a5b
Modified Files:
sql/server/rel_unnest.c
sql/test/BugTracker-2021/Tests/All
Branch: default
Log Message:

Merged with Jul2021


diffs (233 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3470,6 +3470,18 @@ rewrite_groupings(visitor *v, sql_rel *r
if (list_empty(exps))
append(exps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
nrel->exps = exps;
+   if (!list_empty(rel->r) && 
!list_empty(nrel->r)) { /* aliases on grouping columns, ugh */
+   for (node *n = ((list*)nrel->r)->h ; n 
; n = n->next) {
+   sql_exp *e = n->data;
+   const char *rname = 
exp_relname(e), *cname = exp_name(e);
+   if (rname && cname) {
+   n->data = 
exp_copy(v->sql, exps_bind_column2(rel->r, rname, cname, NULL));
+   } else if (cname) {
+   n->data = 
exp_copy(v->sql, exps_bind_column(rel->r, cname, NULL, NULL, 1));
+   }
+   }
+   list_hash_clear(nrel->r);
+   }
set_processed(nrel);
if (list_empty(pexps))
append(pexps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
diff --git a/sql/test/BugTracker-2021/Tests/All 
b/sql/test/BugTracker-2021/Tests/All
--- a/sql/test/BugTracker-2021/Tests/All
+++ b/sql/test/BugTracker-2021/Tests/All
@@ -30,3 +30,4 @@ replace-transaction-conflict.Bug-7168
 merge-table-join.Bug-7172
 truncate-restart.Bug-7173
 remote-table-large.Bug-7178
+grouping-sets-aliases.Bug-7185
diff --git a/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test 
b/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test
@@ -0,0 +1,198 @@
+statement ok
+start transaction
+
+statement ok
+create table students (course TEXT, type TEXT)
+
+statement ok rowcount 7
+insert into students (course, type) values ('CS', 'Bachelor'), ('CS', 
'Bachelor'), ('CS', 'PhD'), ('Math', 'Masters'), ('CS', NULL), ('CS', NULL), 
('Math', NULL)
+
+query TT nosort
+select course, type from students group by grouping sets((course, type), 
(type)) order by 1, 2
+
+NULL
+NULL
+NULL
+Bachelor
+NULL
+Masters
+NULL
+PhD
+CS
+NULL
+CS
+Bachelor
+CS
+PhD
+Math
+NULL
+Math
+Masters
+
+query ITT nosort
+select count(*), course, type from students group by grouping sets((course, 
type), (type)) order by 1, 2, 3
+
+1
+NULL
+Masters
+1
+NULL
+PhD
+1
+CS
+PhD
+1
+Math
+NULL
+1
+Math
+Masters
+2
+NULL
+Bachelor
+2
+CS
+NULL
+2
+CS
+Bachelor
+3
+NULL
+NULL
+
+query TITT nosort
+select min(course), grouping(course), course, type from students group by 
grouping sets((course, type), (type)) order by 1, 2, 3, 4
+
+CS
+0
+CS
+NULL
+CS
+0
+CS
+Bachelor
+CS
+0
+CS
+PhD
+CS
+1
+NULL
+NULL
+CS
+1
+NULL
+Bachelor
+CS
+1
+NULL
+PhD
+Math
+0
+Math
+NULL
+Math
+0
+Math
+Masters
+Math
+1
+NULL
+Masters
+
+query TT nosort
+select course AS crs, type AS tp from students group by grouping sets((crs, 
tp), (tp)) order by 1, 2
+
+NULL
+NULL
+NULL
+Bachelor
+NULL
+Masters
+NULL
+PhD
+CS
+NULL
+CS
+Bachelor
+CS
+PhD
+Math
+NULL
+Math
+Masters
+
+query ITT nosort
+select count(*), course AS crs, type AS tp from students group by grouping 
sets((crs, tp), (tp)) order by 1, 2, 3
+
+1
+NULL
+Masters
+1
+NULL
+PhD
+1
+CS
+PhD
+1
+Math
+NULL
+1
+Math
+Masters
+2
+NULL
+Bachelor
+2
+CS
+NULL
+2
+CS
+Bachelor
+3
+NULL
+NULL
+
+query TITT nosort
+select min(course), grouping(course), course AS crs, type AS tp from students 
group by grouping sets((crs, tp), (tp)) order by 1, 2, 3, 4
+
+CS
+0
+CS
+NULL
+CS
+0
+CS
+Bachelor
+CS
+0
+CS
+PhD
+CS
+1
+NULL
+NULL
+CS
+1
+NULL
+Bachelor
+CS
+1
+NULL
+PhD
+Math
+0
+Math
+NULL
+Math
+0
+Math
+Masters
+Math
+1
+NULL
+Masters
+
+statement ok
+rollback
+
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Added test and fix for bug #7185. Grouping co...

2021-10-12 Thread Pedro Ferreira
Changeset: 21359a455af5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/21359a455af5
Added Files:
sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test
Modified Files:
sql/server/rel_unnest.c
sql/test/BugTracker-2021/Tests/All
Branch: Jul2021
Log Message:

Added test and fix for bug #7185. Grouping columns may contain aliases


diffs (233 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3470,6 +3470,18 @@ rewrite_groupings(visitor *v, sql_rel *r
if (list_empty(exps))
append(exps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
nrel->exps = exps;
+   if (!list_empty(rel->r) && 
!list_empty(nrel->r)) { /* aliases on grouping columns, ugh */
+   for (node *n = ((list*)nrel->r)->h ; n 
; n = n->next) {
+   sql_exp *e = n->data;
+   const char *rname = 
exp_relname(e), *cname = exp_name(e);
+   if (rname && cname) {
+   n->data = 
exp_copy(v->sql, exps_bind_column2(rel->r, rname, cname, NULL));
+   } else if (cname) {
+   n->data = 
exp_copy(v->sql, exps_bind_column(rel->r, cname, NULL, NULL, 1));
+   }
+   }
+   list_hash_clear(nrel->r);
+   }
set_processed(nrel);
if (list_empty(pexps))
append(pexps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
diff --git a/sql/test/BugTracker-2021/Tests/All 
b/sql/test/BugTracker-2021/Tests/All
--- a/sql/test/BugTracker-2021/Tests/All
+++ b/sql/test/BugTracker-2021/Tests/All
@@ -29,3 +29,4 @@ shutdown-force.Bug-7167
 merge-table-join.Bug-7172
 truncate-restart.Bug-7173
 remote-table-large.Bug-7178
+grouping-sets-aliases.Bug-7185
diff --git a/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test 
b/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test
@@ -0,0 +1,198 @@
+statement ok
+start transaction
+
+statement ok
+create table students (course TEXT, type TEXT)
+
+statement ok rowcount 7
+insert into students (course, type) values ('CS', 'Bachelor'), ('CS', 
'Bachelor'), ('CS', 'PhD'), ('Math', 'Masters'), ('CS', NULL), ('CS', NULL), 
('Math', NULL)
+
+query TT nosort
+select course, type from students group by grouping sets((course, type), 
(type)) order by 1, 2
+
+NULL
+NULL
+NULL
+Bachelor
+NULL
+Masters
+NULL
+PhD
+CS
+NULL
+CS
+Bachelor
+CS
+PhD
+Math
+NULL
+Math
+Masters
+
+query ITT nosort
+select count(*), course, type from students group by grouping sets((course, 
type), (type)) order by 1, 2, 3
+
+1
+NULL
+Masters
+1
+NULL
+PhD
+1
+CS
+PhD
+1
+Math
+NULL
+1
+Math
+Masters
+2
+NULL
+Bachelor
+2
+CS
+NULL
+2
+CS
+Bachelor
+3
+NULL
+NULL
+
+query TITT nosort
+select min(course), grouping(course), course, type from students group by 
grouping sets((course, type), (type)) order by 1, 2, 3, 4
+
+CS
+0
+CS
+NULL
+CS
+0
+CS
+Bachelor
+CS
+0
+CS
+PhD
+CS
+1
+NULL
+NULL
+CS
+1
+NULL
+Bachelor
+CS
+1
+NULL
+PhD
+Math
+0
+Math
+NULL
+Math
+0
+Math
+Masters
+Math
+1
+NULL
+Masters
+
+query TT nosort
+select course AS crs, type AS tp from students group by grouping sets((crs, 
tp), (tp)) order by 1, 2
+
+NULL
+NULL
+NULL
+Bachelor
+NULL
+Masters
+NULL
+PhD
+CS
+NULL
+CS
+Bachelor
+CS
+PhD
+Math
+NULL
+Math
+Masters
+
+query ITT nosort
+select count(*), course AS crs, type AS tp from students group by grouping 
sets((crs, tp), (tp)) order by 1, 2, 3
+
+1
+NULL
+Masters
+1
+NULL
+PhD
+1
+CS
+PhD
+1
+Math
+NULL
+1
+Math
+Masters
+2
+NULL
+Bachelor
+2
+CS
+NULL
+2
+CS
+Bachelor
+3
+NULL
+NULL
+
+query TITT nosort
+select min(course), grouping(course), course AS crs, type AS tp from students 
group by grouping sets((crs, tp), (tp)) order by 1, 2, 3, 4
+
+CS
+0
+CS
+NULL
+CS
+0
+CS
+Bachelor
+CS
+0
+CS
+PhD
+CS
+1
+NULL
+NULL
+CS
+1
+NULL
+Bachelor
+CS
+1
+NULL
+PhD
+Math
+0
+Math
+NULL
+Math
+0
+Math
+Masters
+Math
+1
+NULL
+Masters
+
+statement ok
+rollback
+
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Issue to be looked on later. Remote relation ...

2021-10-12 Thread Pedro Ferreira
Changeset: c3b918b7a42d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c3b918b7a42d
Modified Files:
sql/test/SQLancer/Tests/sqlancer20.SQL.py
Branch: default
Log Message:

Issue to be looked on later. Remote relation gets an extra projection while 
optimized before generating MAL code, which causes issues later


diffs (32 lines):

diff --git a/sql/test/SQLancer/Tests/sqlancer20.SQL.py 
b/sql/test/SQLancer/Tests/sqlancer20.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer20.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer20.SQL.py
@@ -10,6 +10,8 @@ with SQLTestCase() as cli:
 cli.connect(username="monetdb", password="monetdb")
 cli.execute("""
 START TRANSACTION;
+CREATE TABLE "t0" ("c0" INTERVAL SECOND NOT NULL, "c1" JSON);
+INSERT INTO "t0" VALUES (INTERVAL '9' SECOND, '""');
 CREATE TABLE "t1" ("c0" BIGINT,"c1" INTERVAL MONTH);
 INSERT INTO "t1" VALUES (1, INTERVAL '9' MONTH),(5, INTERVAL '6' 
MONTH),(5, NULL),(7, NULL),(2, INTERVAL '1' MONTH),(2, INTERVAL '1' MONTH);
 COMMIT;
@@ -18,6 +20,12 @@ with SQLTestCase() as cli:
 CREATE REMOTE TABLE "rt1" ("c0" BIGINT,"c1" INTERVAL MONTH) ON 
'mapi:monetdb://localhost:%s/%s/sys/t1';
 COMMIT;""" % (port, db)).assertSucceeded()
 
+cli.execute("""
+SELECT 1 FROM t0 FULL OUTER JOIN (SELECT rt1.c0 <= CAST(rt1.c0 AS INT) 
FROM rt1) AS sub0(c0) ON true WHERE sub0.c0
+UNION ALL
+SELECT 1 FROM t0 FULL OUTER JOIN (SELECT rt1.c0 <= CAST(rt1.c0 AS INT) 
FROM rt1) AS sub0(c0) ON true;
+
""").assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,),(1,)])
+
 # Issues related to digits and scale propagation in the sql layer
 cli.execute("SELECT CAST(2 AS DECIMAL) & CAST(3 AS DOUBLE) FROM t1 where 
t1.c0 = 1;") \
 .assertSucceeded().assertDataResultMatch([(Decimal('0.002'),)])
@@ -27,5 +35,6 @@ with SQLTestCase() as cli:
 cli.execute("""
 START TRANSACTION;
 DROP TABLE rt1;
+DROP TABLE t0;
 DROP TABLE t1;
 COMMIT;""").assertSucceeded()
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: antipush - Don't push up on single joins or selects

2021-10-12 Thread Pedro Ferreira
Changeset: 62e78c75e405 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/62e78c75e405
Modified Files:
sql/server/rel_optimizer.c
Branch: antipush
Log Message:

Don't push up on single joins or selects


diffs (17 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -4807,10 +4807,10 @@ point_select_on_unique_column(sql_rel *r
 static sql_rel *
 rel_push_select_up(visitor *v, sql_rel *rel)
 {
-   if ((is_join(rel->op) || is_semi(rel->op)) && !rel_is_ref(rel)) {
+   if ((is_join(rel->op) || is_semi(rel->op)) && !rel_is_ref(rel) && 
!is_single(rel)) {
sql_rel *l = rel->l, *r = rel->r;
-   bool can_pushup_left = is_select(l->op) && !rel_is_ref(l),
-can_pushup_right = is_select(r->op) && !rel_is_ref(r) 
&& !is_semi(rel->op);
+   bool can_pushup_left = is_select(l->op) && !rel_is_ref(l) && 
!is_single(l),
+can_pushup_right = is_select(r->op) && !rel_is_ref(r) 
&& !is_single(r) && !is_semi(rel->op);
 
if (can_pushup_left || can_pushup_right) {
if (can_pushup_left)
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: antipush - Merged with default

2021-10-12 Thread Pedro Ferreira
Changeset: 71ca7084caeb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/71ca7084caeb
Modified Files:
sql/server/rel_dump.c
sql/server/rel_optimizer.c
sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
sql/test/BugTracker-2015/Tests/large_join.Bug-3809.test

sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.test

sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.test
sql/test/SQLancer/Tests/sqlancer17.test
sql/test/astro/Tests/astro.test
sql/test/miscellaneous/Tests/simple_plans.test
sql/test/miscellaneous/Tests/unique_keys.test
tools/monetdbe/monetdbe.c
Branch: antipush
Log Message:

Merged with default


diffs (truncated from 3048 to 300 lines):

diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -1,6 +1,11 @@
 # ChangeLog file for sql
 # This file is updated with Maddlog
 
+* Tue Oct 12 2021 Pedro Ferreira 
+- Many improvements were done for REMOTE table plans. As a consequence,
+  master or slave servers from this feature release are not compatible
+  with older releases.
+
 * Tue Sep  7 2021 Sjoerd Mullender 
 - The view sys.ids has been changed to give more information about the
   objects in the system.  In particular, there is an extra column
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -241,7 +241,9 @@ exp_print(mvc *sql, stream *fout, sql_ex
break;
case e_cmp:
if (e->flag == cmp_in || e->flag == cmp_notin) {
-   exp_print(sql, fout, e->l, depth, refs, 0, 0);
+   mnstr_printf(fout, "(");
+   exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
+   mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
cmp_print(sql, fout, e->flag);
@@ -258,30 +260,41 @@ exp_print(mvc *sql, stream *fout, sql_ex
exps_print(sql, fout, e->l, depth, refs, 0, 1);
if (is_anti(e))
mnstr_printf(fout, " !");
-   mnstr_printf(fout, " FILTER \"%s\" ", 
dump_escape_ident(sql->ta, f->func->base.name));
+   mnstr_printf(fout, " FILTER \"%s\".\"%s\"",
+   f->func->s?dump_escape_ident(sql->ta, 
f->func->s->base.name):"sys",
+   dump_escape_ident(sql->ta, 
f->func->base.name));
exps_print(sql, fout, e->r, depth, refs, 0, 1);
} else if (e->f) {
+   mnstr_printf(fout, "(");
exp_print(sql, fout, e->r, depth+1, refs, 0, 0);
+   mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
-   cmp_print(sql, fout, 
swap_compare(range2lcompare(e->flag)) );
+   cmp_print(sql, fout, 
swap_compare(range2lcompare(e->flag)));
+   mnstr_printf(fout, "(");
exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
+   mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
-   cmp_print(sql, fout, range2rcompare(e->flag) );
+   cmp_print(sql, fout, range2rcompare(e->flag));
+   mnstr_printf(fout, "(");
exp_print(sql, fout, e->f, depth+1, refs, 0, 0);
-   mnstr_printf(fout, " BETWEEN ");
+   mnstr_printf(fout, ")");
if (is_symmetric(e))
-   mnstr_printf(fout, " SYM ");
+   mnstr_printf(fout, " SYM");
} else {
+   mnstr_printf(fout, "(");
exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
+   mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
if (is_semantics(e))
mnstr_printf(fout, " *");
cmp_print(sql, fout, e->flag);
 
+   mnstr_printf(fout, "(");
exp_print(sql, fout, e->r, depth+1, refs, 

MonetDB: dict - merged with default

2021-10-12 Thread Niels Nes
Changeset: ca240942cc9d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ca240942cc9d
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_statement.c
sql/include/sql_catalog.h
sql/storage/bat/bat_storage.c
Branch: dict
Log Message:

merged with default


diffs (truncated from 5196 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -71,9 +71,6 @@
 %bcond_without fits
 %endif
 
-%{!?__python3: %global __python3 /usr/bin/python3}
-%{!?python3_sitelib: %global python3_sitelib %(%{__python3} -c "from 
distutils.sysconfig import get_python_lib; print(get_python_lib())")}
-
 Name: %{name}
 Version: %{version}
 Release: %{release}
@@ -98,7 +95,7 @@ BuildRequires: hardlink
 BuildRequires: cmake3 >= 3.12
 BuildRequires: gcc
 BuildRequires: bison
-BuildRequires: /usr/bin/python3
+BuildRequires: python3-devel
 %if %{?rhel:1}%{!?rhel:0}
 # RH 7 (and for readline also 8)
 BuildRequires: bzip2-devel
@@ -682,7 +679,6 @@ package.  You probably don't need this, 
 Summary: MonetDB - Monet Database Management System
 Group: Applications/Databases
 Requires: %{name}-client-tests = %{version}-%{release}
-Requires: /usr/bin/python3
 BuildArch: noarch
 
 %description testing-python
@@ -842,6 +838,15 @@ else
 /usr/bin/hardlink -cv %{buildroot}%{_datadir}/selinux
 fi
 
+# update shebang lines for Python scripts
+%if %{?py3_shebang_fix:1}%{!?py3_shebang_fix:0}
+# Fedora has py3_shebang_fix macro
+%{py3_shebang_fix} %{buildroot}%{_bindir}/*.py
+%else
+# EPEL does not, but we can use the script directly
+/usr/bin/pathfix.py -pni "%{__python3} -s" %{buildroot}%{_bindir}/*.py
+%endif
+
 %changelog
 * Thu Sep 30 2021 Sjoerd Mullender  - 11.41.11-20210930
 - Rebuilt.
diff --git a/ctest/tools/monetdbe/example1.c b/ctest/tools/monetdbe/example1.c
--- a/ctest/tools/monetdbe/example1.c
+++ b/ctest/tools/monetdbe/example1.c
@@ -36,7 +36,7 @@ main(void)
monetdbe_column* rcol;
if ((err = monetdbe_result_fetch(result, , c)) != 
NULL)
error(err)
-   switch (rcol->type) {
+   switch (rcol->type.type) {
case monetdbe_int32_t: {
monetdbe_column_int32_t * col = 
(monetdbe_column_int32_t *) rcol;
if (col->data[r] == col->null_value) {
diff --git a/ctest/tools/monetdbe/example2.c b/ctest/tools/monetdbe/example2.c
--- a/ctest/tools/monetdbe/example2.c
+++ b/ctest/tools/monetdbe/example2.c
@@ -43,7 +43,7 @@ main(void)
monetdbe_column* rcol;
if ((err = monetdbe_result_fetch(result, , c)) != 
NULL)
error(err)
-   switch (rcol->type) {
+   switch (rcol->type.type) {
case monetdbe_bool: {
monetdbe_column_bool * col = 
(monetdbe_column_bool *) rcol;
if (col->data[r] == col->null_value) {
diff --git a/ctest/tools/monetdbe/example_append.c 
b/ctest/tools/monetdbe/example_append.c
--- a/ctest/tools/monetdbe/example_append.c
+++ b/ctest/tools/monetdbe/example_append.c
@@ -44,7 +44,7 @@ main(void)
for (size_t c = 0; c < result->ncols; c++) {
if ((err = monetdbe_result_fetch(result, rcol+c, c)) != 
NULL)
error(err)
-   switch (rcol[c]->type) {
+   switch (rcol[c]->type.type) {
case monetdbe_int32_t: {
monetdbe_column_int32_t * col = 
(monetdbe_column_int32_t *) rcol[c];
if (col->data[r] == col->null_value) {
@@ -129,7 +129,7 @@ main(void)
for (size_t c = 0; c < result->ncols; c++) {
if ((err = monetdbe_result_fetch(result, rcol+c, c)) != 
NULL)
error(err)
-   switch (rcol[c]->type) {
+   switch (rcol[c]->type.type) {
case monetdbe_int32_t: {
monetdbe_column_int32_t * col = 
(monetdbe_column_int32_t *) rcol[c];
if (col->data[r] == col->null_value) {
diff --git a/ctest/tools/monetdbe/example_append_raw.c 
b/ctest/tools/monetdbe/example_append_raw.c
--- a/ctest/tools/monetdbe/example_append_raw.c
+++ b/ctest/tools/monetdbe/example_append_raw.c
@@ -38,11 +38,11 @@ main(void)
int32_t i1 = 42;
int32_t i2 = *(int32_t*)monetdbe_null(mdbe, monetdbe_int32_t);
int32_t ints[2] = { i1, i2 };
-   monetdbe_column col0 = { .type = monetdbe_int32_t, .data = , 
.count = 2 };
+   monetdbe_column col0 = 

MonetDB: default - Added defensive lines and cleanup

2021-10-12 Thread Pedro Ferreira
Changeset: 7016ddcd38f6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7016ddcd38f6
Modified Files:
sql/server/rel_dump.c
Branch: default
Log Message:

Added defensive lines and cleanup


diffs (72 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1238,6 +1238,8 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
}
}
 
+   if (sname && !mvc_bind_schema(sql, 
sname))
+   return sql_error(sql, 
ERR_NOTFOUND, SQLSTATE(3F000) "No such schema '%s'\n", sname);
if (!(f = sql_bind_func_(sql, sname, 
fname, tl, F_FILT)))
return sql_error(sql, 
ERR_NOTFOUND, SQLSTATE(42000) "Filter: missing function '%s'.'%s'\n", sname, 
fname);
if (!execute_priv(sql, f->func))
@@ -1335,33 +1337,29 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
}
}
if (r[*pos] == '(') {
-   sql_schema *s;
sql_subfunc *f = NULL;
-   sql_subfunc *a = NULL;
-   node *n;
 
if (!(exps = read_exps(sql, lrel, rrel, top_exps, r, pos, '(', 
0, 0)))
return NULL;
tname = b;
*e = 0;
convertIdent(tname);
-   s = mvc_bind_schema(sql, tname);
-   if (tname && !s)
-   return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) 
"Schema %s not found\n", tname);
+   if (tname && !mvc_bind_schema(sql, tname))
+   return sql_error(sql, ERR_NOTFOUND, SQLSTATE(3F000) "No 
such schema '%s'\n", tname);
if (grp) {
if (exps && exps->h) {
list *ops = sa_list(sql->sa);
-   for( n = exps->h; n; n = n->next)
+   for( node *n = exps->h; n; n = n->next)
append(ops, exp_subtype(n->data));
-   a = sql_bind_func_(sql, tname, cname, ops, 
F_AGGR);
+   f = sql_bind_func_(sql, tname, cname, ops, 
F_AGGR);
} else {
-   a = sql_bind_func(sql, tname, cname, 
sql_bind_localtype("void"), NULL, F_AGGR); /* count(*) */
+   f = sql_bind_func(sql, tname, cname, 
sql_bind_localtype("void"), NULL, F_AGGR); /* count(*) */
}
-   if (!a)
+   if (!f)
return function_error_string(sql, tname, cname, 
exps, false, F_AGGR);
-   if (!execute_priv(sql, a->func))
+   if (!execute_priv(sql, f->func))
return function_error_string(sql, tname, cname, 
exps, true, F_AGGR);
-   exp = exp_aggr( sql->sa, exps, a, unique, no_nils, 
CARD_ATOM, 1);
+   exp = exp_aggr(sql->sa, exps, f, unique, no_nils, 
CARD_ATOM, 1);
if (zero_if_empty)
set_zero_if_empty(exp);
} else {
@@ -1377,7 +1375,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
}
} else {
list *ops = sa_list(sql->sa);
-   for( n = exps->h; n; n = n->next)
+   for( node *n = exps->h; n; n = n->next)
append(ops, exp_subtype(n->data));
 
f = sql_bind_func_(sql, tname, cname, ops, 
F_FUNC);
@@ -1855,6 +1853,8 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(inputs = read_exps(sql, lrel, NULL, NULL, 
r, pos, '(', 0, 1)))
return NULL;
 
+   if (!mvc_bind_schema(sql, sname))
+   return sql_error(sql, ERR_NOTFOUND, 
SQLSTATE(3F000) "No such schema '%s'\n", sname);
if (!(tudf = find_table_function(sql, sname, 
tname, list_empty(inputs) ? NULL : inputs, list_empty(inputs) ? NULL : 
exp_types(sql->sa, inputs), F_UNION)))
return NULL;
sf = tudf->f;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Updated ChangeLog

2021-10-12 Thread Pedro Ferreira
Changeset: 926d0d52cb8c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/926d0d52cb8c
Modified Files:
sql/ChangeLog
Branch: default
Log Message:

Updated ChangeLog


diffs (15 lines):

diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -1,6 +1,11 @@
 # ChangeLog file for sql
 # This file is updated with Maddlog
 
+* Tue Oct 12 2021 Pedro Ferreira 
+- Many improvements were done for REMOTE table plans. As a consequence,
+  master or slave servers from this feature release are not compatible
+  with older releases.
+
 * Tue Sep  7 2021 Sjoerd Mullender 
 - The view sys.ids has been changed to give more information about the
   objects in the system.  In particular, there is an extra column
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list