Changeset: d884b88fc137 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d884b88fc137
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_gencode.h
        sql/backends/monet5/sql_rank.mal
        sql/backends/monet5/sql_rank.mal.sh
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/backends/monet5/sql_upgrades.c
        sql/common/sql_types.c
        sql/common/sql_types.h
        sql/include/sql_catalog.h
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_propagate.c
        sql/server/rel_psm.c
        sql/server/rel_rel.c
        sql/server/rel_select.c
        sql/server/rel_sequence.c
        sql/server/rel_unnest.c
        sql/server/rel_updates.c
        sql/server/sql_parser.y
        sql/server/sql_scan.c
        sql/storage/store.c
Branch: statistics-analytics
Log Message:

Major cleanup and stddev_samp window function working.

- Removed some reduce/reduce conflicts at the sql_parser in order to compile 
both external aggregate and window functions.
- Removed aggrs list and sql_subaggr struct at sql_types.c so aggregates are 
grouped together with all other function types.
- Removed AGGR and AGGR2 tokens from sql_scanner to avoid ambiguity.

There's still cleanup needed to be done with the RANK token and the number of 
arguments passed to both window functions and aggregates.


diffs (truncated from 1768 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -681,7 +681,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
        case e_aggr: {
                list *attr = e->l; 
                stmt *as = NULL;
-               sql_subaggr *a = e->f;
+               sql_subfunc *a = e->f;
 
                assert(sel == NULL);
                if (attr && attr->h) { 
@@ -693,12 +693,12 @@ exp_bin(backend *be, sql_exp *e, stmt *l
 
                                as = exp_bin(be, at, left, right, NULL, NULL, 
NULL, sel);
 
-                               if (as && as->nrcols <= 0 && left && 
(a->aggr->base.name[0] != 'm' || en->next || en == attr->h)) 
+                               if (as && as->nrcols <= 0 && left && 
(a->func->base.name[0] != 'm' || en->next || en == attr->h)) 
                                        as = stmt_const(be, 
bin_first_column(be, left), as);
                                if (en == attr->h && !en->next && 
exp_aggr_is_count(e))
                                        as = exp_count_no_nil_arg(e, ext, at, 
as);
                                /* insert single value into a column */
-                               if (as && as->nrcols <= 0 && !left && 
(a->aggr->base.name[0] != 'm' || en->next || en == attr->h))
+                               if (as && as->nrcols <= 0 && !left && 
(a->func->base.name[0] != 'm' || en->next || en == attr->h))
                                        as = const_column(be, as);
 
                                if (!as)
@@ -3338,7 +3338,7 @@ insert_check_ukey(backend *be, list *ins
        stmt *res;
 
        sql_subtype *lng = sql_bind_localtype("lng");
-       sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
+       sql_subfunc *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
        sql_subtype *bt = sql_bind_localtype("bit");
        stmt *dels = stmt_tid(be, k->t, 0);
        sql_subfunc *ne = sql_bind_func_result(sql->sa, sql->session->schema, 
"<>", lng, lng, bt);
@@ -3346,7 +3346,7 @@ insert_check_ukey(backend *be, list *ins
        if (list_length(k->columns) > 1) {
                node *m;
                stmt *s = list_fetch(inserts, 0), *ins = s;
-               sql_subaggr *sum;
+               sql_subfunc *sum;
                stmt *ssum = NULL;
                stmt *col = NULL;
 
@@ -3446,7 +3446,7 @@ insert_check_ukey(backend *be, list *ins
 
                /* 2e stage: find out if inserts are unique */
                if (h->nrcols) {        /* insert multiple atoms */
-                       sql_subaggr *sum;
+                       sql_subfunc *sum;
                        stmt *count_sum = NULL;
                        sql_subfunc *or = sql_bind_func_result(sql->sa, 
sql->session->schema, "or", bt, bt, bt);
                        stmt *ssum, *ss;
@@ -3487,7 +3487,7 @@ insert_check_fkey(backend *be, list *ins
        char *msg = NULL;
        stmt *cs = list_fetch(inserts, 0), *s = cs;
        sql_subtype *lng = sql_bind_localtype("lng");
-       sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
+       sql_subfunc *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
        sql_subtype *bt = sql_bind_localtype("bit");
        sql_subfunc *ne = sql_bind_func_result(sql->sa, sql->session->schema, 
"<>", lng, lng, bt);
 
@@ -3593,7 +3593,7 @@ sql_insert_check_null(backend *be, sql_t
 {
        mvc *sql = be->mvc;
        node *m, *n;
-       sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
+       sql_subfunc *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
 
        for (n = t->columns.set->h, m = inserts->h; n && m; 
                n = n->next, m = m->next) {
@@ -3783,7 +3783,7 @@ update_check_ukey(backend *be, stmt **up
        stmt *res = NULL;
 
        sql_subtype *lng = sql_bind_localtype("lng");
-       sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
+       sql_subfunc *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
        sql_subtype *bt = sql_bind_localtype("bit");
        sql_subfunc *ne;
 
@@ -3828,7 +3828,7 @@ update_check_ukey(backend *be, stmt **up
 
                /* 2e stage: find out if the updated are unique */
                if (!updates || updates[updcol]->nrcols) {      /* update 
columns not atoms */
-                       sql_subaggr *sum;
+                       sql_subfunc *sum;
                        stmt *count_sum = NULL, *ssum;
                        stmt *g = NULL, *grp = NULL, *ext = NULL, *Cnt = NULL;
                        stmt *cand = NULL;
@@ -3931,7 +3931,7 @@ update_check_ukey(backend *be, stmt **up
 
                /* 2e stage: find out if updated are unique */
                if (!h || h->nrcols) {  /* update columns not atoms */
-                       sql_subaggr *sum;
+                       sql_subfunc *sum;
                        stmt *count_sum = NULL;
                        sql_subfunc *or = sql_bind_func_result(sql->sa, 
sql->session->schema, "or", bt, bt, bt);
                        stmt *ssum, *ss;
@@ -4010,7 +4010,7 @@ update_check_fkey(backend *be, stmt **up
        char *msg = NULL;
        stmt *s, *cur, *null = NULL, *cntnulls;
        sql_subtype *lng = sql_bind_localtype("lng"), *bt = 
sql_bind_localtype("bit");
-       sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
+       sql_subfunc *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
        sql_subfunc *ne = sql_bind_func_result(sql->sa, sql->session->schema, 
"<>", lng, lng, bt);
        sql_subfunc *or = sql_bind_func_result(sql->sa, sql->session->schema, 
"or", bt, bt, bt);
        node *m;
@@ -4080,7 +4080,7 @@ join_updated_pkey(backend *be, sql_key *
        stmt *null = NULL, *rows;
        sql_subtype *lng = sql_bind_localtype("lng");
        sql_subtype *bt = sql_bind_localtype("bit");
-       sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
+       sql_subfunc *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
        sql_subfunc *ne = sql_bind_func_result(sql->sa, sql->session->schema, 
"<>", lng, lng, bt);
        list *lje = sa_list(sql->sa);
        list *rje = sa_list(sql->sa);
@@ -4546,7 +4546,7 @@ sql_update_check_null(backend *be, sql_t
 {
        mvc *sql = be->mvc;
        node *n;
-       sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
+       sql_subfunc *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
 
        for (n = t->columns.set->h; n; n = n->next) {
                sql_column *c = n->data;
@@ -4833,7 +4833,7 @@ sql_delete_ukey(backend *be, stmt *utids
                node *n;
                for(n = uk->keys->h; n; n = n->next) {
                        char *msg = NULL;
-                       sql_subaggr *cnt = sql_bind_aggr(sql->sa, 
sql->session->schema, "count", NULL);
+                       sql_subfunc *cnt = sql_bind_aggr(sql->sa, 
sql->session->schema, "count", NULL);
                        sql_subfunc *ne = sql_bind_func_result(sql->sa, 
sql->session->schema, "<>", lng, lng, bt);
                        sql_key *fk = n->data;
                        stmt *s, *tids;
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1376,13 +1376,13 @@ backend_create_subfunc(backend *be, sql_
 }
 
 int
-backend_create_subaggr(backend *be, sql_subaggr *f)
+backend_create_subaggr(backend *be, sql_subfunc *f)
 {
        int res;
        MalBlkPtr mb = be->mb;
 
        be->mb = NULL;
-       res = backend_create_func(be, f->aggr, f->res, NULL);
+       res = backend_create_func(be, f->func, f->res, NULL);
        be->mb = mb;
        return res;
 }
diff --git a/sql/backends/monet5/sql_gencode.h 
b/sql/backends/monet5/sql_gencode.h
--- a/sql/backends/monet5/sql_gencode.h
+++ b/sql/backends/monet5/sql_gencode.h
@@ -24,7 +24,7 @@ sql5_export int backend_call(backend *be
 sql5_export int monet5_resolve_function(ptr M, sql_func *f);
 sql5_export int backend_create_func(backend *be, sql_func *f, list *restypes, 
list *ops);
 extern int backend_create_subfunc(backend *be, sql_subfunc *f, list *ops);
-extern int backend_create_subaggr(backend *be, sql_subaggr *f);
+extern int backend_create_subaggr(backend *be, sql_subfunc *f);
 
 sql5_export int monet5_create_relational_function(mvc *m, const char *mod, 
const char *name, sql_rel *rel, stmt *call, list *rel_ops, int inline_func);
 
diff --git a/sql/backends/monet5/sql_rank.mal b/sql/backends/monet5/sql_rank.mal
--- a/sql/backends/monet5/sql_rank.mal
+++ b/sql/backends/monet5/sql_rank.mal
@@ -573,75 +573,75 @@ pattern batsql.avg(b:bat[:dbl], s:bat[:l
 address SQLavg
 comment "return the average of groups";
 
-pattern sql.stddev(b:bte, s:lng, e:lng) :dbl
+pattern sql.stdev(b:bte, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:bte], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:bte], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:sht, s:lng, e:lng) :dbl
+pattern sql.stdev(b:sht, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:sht], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:sht], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:int, s:lng, e:lng) :dbl
+pattern sql.stdev(b:int, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:int], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:int], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:lng, s:lng, e:lng) :dbl
+pattern sql.stdev(b:lng, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:lng], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:lng], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:flt, s:lng, e:lng) :dbl
+pattern sql.stdev(b:flt, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:flt], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:flt], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:dbl, s:lng, e:lng) :dbl
+pattern sql.stdev(b:dbl, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:dbl], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:dbl], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:daytime, s:lng, e:lng) :dbl
+pattern sql.stdev(b:daytime, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:daytime], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:daytime], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:date, s:lng, e:lng) :dbl
+pattern sql.stdev(b:date, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:date], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:date], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern sql.stddev(b:timestamp, s:lng, e:lng) :dbl
+pattern sql.stdev(b:timestamp, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:timestamp], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:timestamp], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
diff --git a/sql/backends/monet5/sql_rank.mal.sh 
b/sql/backends/monet5/sql_rank.mal.sh
--- a/sql/backends/monet5/sql_rank.mal.sh
+++ b/sql/backends/monet5/sql_rank.mal.sh
@@ -374,11 +374,11 @@ done
 
 for tp1 in 1:bte 2:sht 4:int 8:lng 4:flt 8:dbl 8:daytime 4:date 8:timestamp; do
        cat <<EOF
-pattern sql.stddev(b:${tp1#*:}, s:lng, e:lng) :dbl
+pattern sql.stdev(b:${tp1#*:}, s:lng, e:lng) :dbl
 address SQLstddev_samp
 comment "standard deviation of groups";
 
-pattern batsql.stddev(b:bat[:${tp1#*:}], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
+pattern batsql.stdev(b:bat[:${tp1#*:}], s:bat[:lng], e:bat[:lng]) :bat[:dbl]
 address SQLstddev_samp
 comment "standard deviation of groups";
 
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
@@ -3072,7 +3072,7 @@ stmt_func(backend *be, stmt *ops, const 
 }
 
 stmt *
-stmt_aggr(backend *be, stmt *op1, stmt *grp, stmt *ext, sql_subaggr *op, int 
reduce, int no_nil, int nil_if_empty)
+stmt_aggr(backend *be, stmt *op1, stmt *grp, stmt *ext, sql_subfunc *op, int 
reduce, int no_nil, int nil_if_empty)
 {
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
@@ -3088,8 +3088,8 @@ stmt_aggr(backend *be, stmt *op1, stmt *
                return NULL;
        if (backend_create_subaggr(be, op) < 0)
                return NULL;
-       mod = op->aggr->mod;
-       aggrfunc = op->aggr->imp;
+       mod = op->func->mod;
+       aggrfunc = op->func->imp;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to