Changeset: bc14f74ed954 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bc14f74ed954
Modified Files:
monetdb5/mal/mal_profiler.c
monetdb5/modules/atoms/Tests/json02.stable.out
sql/backends/monet5/wlr.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/test/subquery/Tests/correlated.sql
sql/test/subquery/Tests/correlated.stable.err
Branch: grouping-analytics
Log Message:
Merge with default
diffs (133 lines):
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -34,8 +34,9 @@
static str myname = 0; // avoid tracing the profiler module
/* The JSON rendering can be either using '\n' separators between
- * each key:value pair or as a single line using ' '*/
-#define PRETTIFY "\n"
+ * each key:value pair or as a single line */
+//#define PRETTIFY "\n"
+#define PRETTIFY
/* When the MAL block contains a BARRIER block we may end up with tons
* of profiler events. To avoid this, we stop emitting the events
diff --git a/monetdb5/modules/atoms/Tests/json02.stable.out
b/monetdb5/modules/atoms/Tests/json02.stable.out
--- a/monetdb5/modules/atoms/Tests/json02.stable.out
+++ b/monetdb5/modules/atoms/Tests/json02.stable.out
@@ -95,7 +95,7 @@ stdout of test 'json02` in directory 'mo
#-------------------------#
[ 0@0, "1" ]
[ 1@0, "2" ]
-[ 2@0, nil ]
+[ 2@0, "null" ]
[ 3@0, "true" ]
[ 4@0, "false" ]
[ 5 ]
diff --git a/sql/backends/monet5/wlr.c b/sql/backends/monet5/wlr.c
--- a/sql/backends/monet5/wlr.c
+++ b/sql/backends/monet5/wlr.c
@@ -521,7 +521,6 @@ WLRprocessScheduler(void *arg)
MT_lock_unset(&wlr_lock);
MCcloseClient(cntxt);
- MCcloseClient(cntxt);
#ifdef _WLR_DEBUG_
fprintf(stderr, "#Replicator thread is stopped \n");
#endif
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
@@ -21,7 +21,8 @@
#define sql_aggr 64 //ORed
#define sql_farg 128 //ORed
#define sql_window 256 //ORed
-#define sql_group_totals 512 //ORed
+#define sql_join 512 //ORed
+#define sql_group_totals 1024 //ORed
#define is_sql_from(X) ((X & sql_from) == sql_from)
#define is_sql_where(X) ((X & sql_where) == sql_where)
@@ -32,6 +33,7 @@
#define is_sql_aggr(X) ((X & sql_aggr) == sql_aggr)
#define is_sql_farg(X) ((X & sql_farg) == sql_farg)
#define is_sql_window(X) ((X & sql_window) == sql_window)
+#define is_sql_join(X) ((X & sql_join) == sql_join)
#define is_sql_group_totals(X) ((X & sql_group_totals) == sql_group_totals)
#define rel_groupby_gbe(m,r,e) rel_groupby(m, r, append(new_exp_list(m->sa),
e))
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
@@ -4070,6 +4070,13 @@ rel_aggr_intern(sql_query *query, sql_re
if (uaname)
GDKfree(uaname);
return e;
+ } else if (is_sql_join(f)) { /* the is_sql_join test must come before
is_sql_where, because the join conditions are handled with sql_where */
+ char *uaname = GDKmalloc(strlen(aname) + 1);
+ sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s: aggregate
functions not allowed in JOIN conditions",
+ uaname ? toUpperCopy(uaname, aname) :
aname);
+ if (uaname)
+ GDKfree(uaname);
+ return e;
} else if (!query_has_outer(query) && is_sql_where(f)) {
char *uaname = GDKmalloc(strlen(aname) + 1);
sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s: aggregate
functions not allowed in WHERE clause",
@@ -5369,10 +5376,10 @@ rel_rankop(sql_query *query, sql_rel **r
supports_frames = (window_function->token != SQL_RANK) || is_nth_value
||
(strcmp(s->base.name, "sys") == 0 &&
((strcmp(aname, "first_value") == 0) || strcmp(aname, "last_value") == 0));
- if (is_sql_where(f) || is_sql_groupby(f) || is_sql_having(f)) {
+ if (is_sql_join(f) || is_sql_where(f) || is_sql_groupby(f) ||
is_sql_having(f)) {
char *uaname = GDKmalloc(strlen(aname) + 1);
- const char *clause =
is_sql_where(f)?"WHERE":is_sql_groupby(f)?"GROUP BY":"HAVING";
- (void) sql_error(sql, 02, SQLSTATE(42000) "%s: window function
'%s' not allowed in %s clause",
+ const char *clause = is_sql_join(f)?"JOIN
conditions":is_sql_where(f)?"WHERE clause":is_sql_groupby(f)?"GROUP BY
clause":"HAVING clause";
+ (void) sql_error(sql, 02, SQLSTATE(42000) "%s: window function
'%s' not allowed in %s",
uaname ? toUpperCopy(uaname,
aname) : aname, aname, clause);
if (uaname)
GDKfree(uaname);
@@ -6770,7 +6777,7 @@ rel_joinquery_(sql_query *query, sql_rel
}
if (js && js->token != SQL_USING) { /* On sql_logical_exp */
- rel = rel_logical_exp(query, rel, js, sql_where);
+ rel = rel_logical_exp(query, rel, js, sql_where | sql_join);
} else if (js) { /* using */
char rname[16], *rnme;
dnode *n = js->data.lval->h;
diff --git a/sql/test/subquery/Tests/correlated.sql
b/sql/test/subquery/Tests/correlated.sql
--- a/sql/test/subquery/Tests/correlated.sql
+++ b/sql/test/subquery/Tests/correlated.sql
@@ -150,6 +150,10 @@ SELECT CAST(SUM(i) AS BIGINT), CAST((SEL
SELECT CAST((SELECT SUM(i) FROM integers WHERE i>SUM(i1.i)) AS BIGINT) FROM
integers i1; -- NULL
+SELECT i1.i FROM integers i1 INNER JOIN integers i ON SUM(i1.i) = SUM(i.i);
--error, aggregations not allowed in join conditions
+
+SELECT i1.i FROM integers i1 INNER JOIN integers i ON RANK() OVER (); --error,
window functions not allowed in join conditions
+
-- subquery with aggregation inside aggregation should fail
SELECT SUM((SELECT SUM(i))) FROM integers; -- error
-- aggregate with correlation in filter
diff --git a/sql/test/subquery/Tests/correlated.stable.err
b/sql/test/subquery/Tests/correlated.stable.err
--- a/sql/test/subquery/Tests/correlated.stable.err
+++ b/sql/test/subquery/Tests/correlated.stable.err
@@ -58,7 +58,15 @@ MAPI = (monetdb) /var/tmp/mtest-8372/.s
QUERY = SELECT i+1, (SELECT SUM(i1.i)) FROM integers i1;
ERROR = !Cannot use non GROUP BY column in query results without an aggregate
function
CODE = 42000
-MAPI = (monetdb) /var/tmp/mtest-27844/.s.monetdb.31122
+MAPI = (monetdb) /var/tmp/mtest-17692/.s.monetdb.32120
+QUERY = SELECT i1.i FROM integers i1 INNER JOIN integers i ON SUM(i1.i) =
SUM(i.i); --error, aggregations not allowed in join conditions
+ERROR = !SUM: aggregate functions not allowed in JOIN conditions
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-23431/.s.monetdb.34452
+QUERY = SELECT i1.i FROM integers i1 INNER JOIN integers i ON RANK() OVER ();
--error, window functions not allowed in join conditions
+ERROR = !RANK: window function 'rank' not allowed in JOIN conditions
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-23431/.s.monetdb.34452
QUERY = SELECT SUM((SELECT SUM(i))) FROM integers; -- error
ERROR = !SUM: aggregate functions cannot be nested
CODE = 42000
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list