Changeset: 3f0fba4bc80c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3f0fba4bc80c
Modified Files:
sql/server/rel_select.c
sql/server/sql_parser.y
sql/test/analytics/Tests/analytics01.sql
sql/test/analytics/Tests/analytics01.stable.err
Branch: statistics-analytics
Log Message:
Rank window functions require an OVER clause
diffs (72 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
@@ -4491,7 +4491,7 @@ rel_rankop(sql_query *query, sql_rel **r
window_specification = l->h->next->data.lval;
} else if (l->h->next->type == type_string) {
const char* window_alias = l->h->next->data.sval;
- if((window_specification = stack_get_window_def(sql,
window_alias, &pos)) == NULL)
+ if ((window_specification = stack_get_window_def(sql,
window_alias, &pos)) == NULL)
return sql_error(sql, 02, SQLSTATE(42000) "SELECT:
window '%s' not found", window_alias);
stack_set_var_visited(sql, pos);
} else {
@@ -4872,7 +4872,7 @@ rel_value_exp2(sql_query *query, sql_rel
return rel_nop(query, rel, se, f, ek);
case SQL_AGGR:
return rel_aggr(query, rel, se, f);
- case SQL_RANK:
+ case SQL_WINDOW:
return rel_rankop(query, rel, se, f);
case SQL_IDENT:
case SQL_COLUMN:
@@ -4947,6 +4947,8 @@ rel_value_exp2(sql_query *query, sql_rel
case SQL_COALESCE:
case SQL_NULLIF:
return rel_case_exp(query, rel, se, f);
+ case SQL_RANK:
+ return sql_error(sql, 02, SQLSTATE(42000) "SELECT: window
function %s requires an OVER clause", qname_fname(se->data.lval->h->data.lval));
case SQL_DEFAULT:
return sql_error(sql, 02, SQLSTATE(42000) "DEFAULT keyword not
allowed outside insert and update statements");
case SQL_XMLELEMENT:
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -4056,9 +4056,9 @@ value_exp:
atom
| aggr_or_window_ref opt_over {
if ($2
&& $2->token == SQL_NAME)
-
$$ = _symbol_create_list(SQL_RANK, append_string(append_symbol(L(), $1),
$2->data.lval->h->data.sval));
+
$$ = _symbol_create_list(SQL_WINDOW, append_string(append_symbol(L(), $1),
$2->data.lval->h->data.sval));
else if
($2)
-
$$ = _symbol_create_list(SQL_RANK, append_list(append_symbol(L(), $1),
$2->data.lval->h->data.lval));
+
$$ = _symbol_create_list(SQL_WINDOW, append_list(append_symbol(L(), $1),
$2->data.lval->h->data.lval));
else
$$ = $1;
}
diff --git a/sql/test/analytics/Tests/analytics01.sql
b/sql/test/analytics/Tests/analytics01.sql
--- a/sql/test/analytics/Tests/analytics01.sql
+++ b/sql/test/analytics/Tests/analytics01.sql
@@ -268,6 +268,7 @@ WHERE (t0.start_time >= '2017/12/01 00:0
rollback;
+select ntile(1) from analytics; --error, ntile requires an OVER clause
select ntile(distinct aa) over () from analytics; --error
select nth_value(distinct aa, bb) over () from analytics; --error
diff --git a/sql/test/analytics/Tests/analytics01.stable.err
b/sql/test/analytics/Tests/analytics01.stable.err
--- a/sql/test/analytics/Tests/analytics01.stable.err
+++ b/sql/test/analytics/Tests/analytics01.stable.err
@@ -28,7 +28,11 @@ stderr of test 'analytics01` in director
# 16:22:53 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-23680" "--port=30581"
# 16:22:53 >
-MAPI = (monetdb) /var/tmp/mtest-163525/.s.monetdb.30467
+MAPI = (monetdb) /var/tmp/mtest-74264/.s.monetdb.32300
+QUERY = select ntile(1) from analytics; --error, ntile requires an OVER clause
+ERROR = !SELECT: window function ntile requires an OVER clause
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-74264/.s.monetdb.32300
QUERY = select ntile(distinct aa) over () from analytics; --error
ERROR = !SELECT: DISTINCT clause is not implemented for window functions
CODE = 42000
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list