Changeset: 90b565cedbd5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=90b565cedbd5
Modified Files:
        sql/common/sql_types.c
        sql/server/rel_select.c
        sql/test/analytics/Tests/analytics08.stable.err
        sql/test/analytics/Tests/analytics09.sql
Branch: analytics
Log Message:

Added missing SQL function prototype, plus a more generic window function 
without from clause handling.


diffs (97 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
@@ -1662,6 +1662,12 @@ sqltypeinit( sql_allocator *sa)
        sql_create_analytic6(sa, "window_bound", "sql", "window_bound", BIT, 
ANY, INT, INT, INT, FLT, LNG, SCALE_NONE);
        sql_create_analytic5(sa, "window_bound", "sql", "window_bound", ANY, 
INT, INT, INT, DBL, LNG, SCALE_NONE);
        sql_create_analytic6(sa, "window_bound", "sql", "window_bound", BIT, 
ANY, INT, INT, INT, DBL, LNG, SCALE_NONE);
+#ifdef HAVE_HGE
+       if (have_hge) {
+               sql_create_analytic5(sa, "window_bound", "sql", "window_bound", 
ANY, INT, INT, INT, HGE, LNG, SCALE_NONE);
+               sql_create_analytic6(sa, "window_bound", "sql", "window_bound", 
BIT, ANY, INT, INT, INT, HGE, LNG, SCALE_NONE);
+       }
+#endif
 
        t = decimals; /* BTE */
        sql_create_analytic5(sa, "window_bound", "sql", "window_bound", ANY, 
INT, INT, INT, *(t), LNG, SCALE_NONE);
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
@@ -4724,6 +4724,12 @@ rel_rankop(mvc *sql, sql_rel **rel, symb
                }
        }
 
+       if(!p->exps->h) { //no from clause, use a constant as the expression to 
project
+               sql_exp *exp = exp_atom_lng(sql->sa, 0);
+               exp_label(sql->sa, exp, ++sql->label);
+               append(p->exps, exp);
+       }
+
        fargs = sa_list(sql->sa);
        if (window_function->token == SQL_RANK) { //rank function call
                dlist* dnn = window_function->data.lval->h->next->data.lval;
@@ -4765,15 +4771,10 @@ rel_rankop(mvc *sql, sql_rel **rel, symb
 
                if (n) {
                        if (!n->next->data.sym) { /* count(*) */
-                               if(!p->exps->h) { //no from clause, use a 
constant as the expression to project
-                                       in = exp_atom_lng(sql->sa, 0);
-                                       append(p->exps, in);
-                               } else {
-                                       in = p->exps->h->data;
-                                       in = exp_column(sql->sa, 
exp_relname(in), exp_name(in), exp_subtype(in), exp_card(in), has_nil(in), 
is_intern(in));
-                                       if(!in)
-                                               return NULL;
-                               }
+                               in = p->exps->h->data;
+                               in = exp_column(sql->sa, exp_relname(in), 
exp_name(in), exp_subtype(in), exp_card(in), has_nil(in), is_intern(in));
+                               if(!in)
+                                       return NULL;
                                append(fargs, in);
                                append(fargs, exp_atom_bool(sql->sa, 0)); 
//don't ignore nills
                        } else {
diff --git a/sql/test/analytics/Tests/analytics08.stable.err 
b/sql/test/analytics/Tests/analytics08.stable.err
--- a/sql/test/analytics/Tests/analytics08.stable.err
+++ b/sql/test/analytics/Tests/analytics08.stable.err
@@ -40,7 +40,7 @@ CODE  = 42000
 MAPI  = (monetdb) /var/tmp/mtest-27127/.s.monetdb.39943
 QUERY = select first_value(aa) over (w1 order by bb),
                last_value(aa) over (w2 order by bb) from analytics window w1 
as (w2), w2 as (w3), w3 as (w1); --error, cyclic definition
-ERROR = !SELECT: multiple references to window 'w1' found
+ERROR = !SELECT: cyclic references to window 'w1' found
 CODE  = 42000
 
 # 12:18:53 >  
diff --git a/sql/test/analytics/Tests/analytics09.sql 
b/sql/test/analytics/Tests/analytics09.sql
--- a/sql/test/analytics/Tests/analytics09.sql
+++ b/sql/test/analytics/Tests/analytics09.sql
@@ -1,6 +1,8 @@
 create table analytics (aa int, bb int);
 insert into analytics values (15, 3), (3, 1), (2, 1), (5, 3), (NULL, 2), (3, 
2), (4, 1), (6, 3), (8, 2), (NULL, 4);
 
+select sum(1) over (), rank() over (), nth_value(1, 1) over ();
+
 select avg(sum(aa) over ()) from analytics;
 
 select sum(1) * count(*) over ();
@@ -11,14 +13,16 @@ select aa * count(1) over () from analyt
 
 select sum(aa) * count(1) over () from analytics;
 
-select prod(sum(aa)) * count(1 + aa) / avg(null) over () from analytics;
+select sum(aa) * count(1 + aa) / avg(1) over () from analytics;
 
 select avg(sum(aa)) over () from analytics;
 
-select sum(aa) * 100 / sum(sum(aa)) over (partition by bb) from analytics;
+select sum(aa) * 100 / sum(sum(aa)) over (partition by bb) from analytics; 
--error
+
+select prod(sum(aa)) * count(1 + aa) / avg(null) over () from analytics; 
--error
 
-select rank() over (partition by case when aa > 5 then aa else aa + 5 end) 
from analytics;
+select rank() over (partition by case when aa > 5 then aa else aa + 5 end) 
from analytics; --error, we don't support expressions in partition by as well 
group by
 
-select rank() over (partition by sum(aa)) from analytics;
+select rank() over (partition by sum(aa)) from analytics; --error, we don't 
support expressions in partition by as well group by
 
 drop table analytics;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to