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

Reply via email to