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