Changeset: faaa0cabeced for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/faaa0cabeced
Modified Files:
        sql/server/rel_optimizer.c
Branch: pushcands
Log Message:

Merged with default


diffs (truncated from 24870 to 300 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -4099,10 +4099,11 @@ rel_push_aggr_down(visitor *v, sql_rel *
 {
        if (rel->op == op_groupby && rel->l) {
                sql_rel *u = rel->l, *ou = u;
+               sql_rel *g = rel;
                sql_rel *ul = u->l;
                sql_rel *ur = u->r;
                node *n, *m;
-               list *lgbe = NULL, *rgbe = NULL, *gbe = NULL, *exps = NULL, 
*others = NULL;
+               list *lgbe = NULL, *rgbe = NULL, *gbe = NULL, *exps = NULL;
 
                if (u->op == op_project)
                        u = u->l;
@@ -4118,7 +4119,7 @@ rel_push_aggr_down(visitor *v, sql_rel *
                        return rel;
 
                /* distinct should be done over the full result */
-               for (n = rel->exps->h; n; n = n->next) {
+               for (n = g->exps->h; n; n = n->next) {
                        sql_exp *e = n->data;
                        sql_subfunc *af = e->f;
 
@@ -4136,9 +4137,11 @@ rel_push_aggr_down(visitor *v, sql_rel *
                ul = rel_dup(ul);
                ur = rel_dup(ur);
                if (!is_project(ul->op))
-                       ul = rel_project(v->sql->sa, ul, 
rel_projections(v->sql, ul, NULL, 1, 1));
+                       ul = rel_project(v->sql->sa, ul,
+                               rel_projections(v->sql, ul, NULL, 1, 1));
                if (!is_project(ur->op))
-                       ur = rel_project(v->sql->sa, ur, 
rel_projections(v->sql, ur, NULL, 1, 1));
+                       ur = rel_project(v->sql->sa, ur,
+                               rel_projections(v->sql, ur, NULL, 1, 1));
                rel_rename_exps(v->sql, u->exps, ul->exps);
                rel_rename_exps(v->sql, u->exps, ur->exps);
                if (u != ou) {
@@ -4150,49 +4153,29 @@ rel_push_aggr_down(visitor *v, sql_rel *
                        rel_rename_exps(v->sql, ou->exps, ur->exps);
                }
 
-               if (!list_empty(rel->r)) {
-                       list *ogbe = rel->r;
-
-                       lgbe = exps_copy(v->sql, ogbe);
-                       rgbe = exps_copy(v->sql, ogbe);
-                       gbe = new_exp_list(v->sql->sa);
-                       others = new_exp_list(v->sql->sa);
-                       for (n = ogbe->h; n; n = n->next) {
-                               sql_exp *e = n->data, *ne;
-
-                               /* all grouping columns are required to the 
sum, otherwise the grouping column will different, thus giving a different 
result */
-                               ne = exps_uses_exp(rel->exps, e);
-                               if (!ne) {
-                                       ne = exp_ref(v->sql, e);
-                                       list_append(others, ne);
-                               } else {
-                                       ne = list_find_exp(rel->exps, ne);
-                                       assert(ne);
-                                       ne = exp_ref(v->sql, ne);
-                               }
-                               append(gbe, ne);
-                       }
-               }
-
+               if (g->r && list_length(g->r) > 0) {
+                       list *gbe = g->r;
+
+                       lgbe = exps_copy(v->sql, gbe);
+                       rgbe = exps_copy(v->sql, gbe);
+               }
                ul = rel_groupby(v->sql, ul, NULL);
                ul->r = lgbe;
-               ul->nrcols = rel->nrcols;
-               ul->card = rel->card;
-               ul->exps = list_empty(others) ? exps_copy(v->sql, rel->exps) : 
list_merge(exps_copy(v->sql, others), exps_copy(v->sql, rel->exps), (fdup) 
NULL);
+               ul->nrcols = g->nrcols;
+               ul->card = g->card;
+               ul->exps = exps_copy(v->sql, g->exps);
                ul->nrcols = list_length(ul->exps);
 
                ur = rel_groupby(v->sql, ur, NULL);
                ur->r = rgbe;
-               ur->nrcols = rel->nrcols;
-               ur->card = rel->card;
-               ur->exps = list_empty(others) ? exps_copy(v->sql, rel->exps) : 
list_merge(exps_copy(v->sql, others), exps_copy(v->sql, rel->exps), (fdup) 
NULL);
+               ur->nrcols = g->nrcols;
+               ur->card = g->card;
+               ur->exps = exps_copy(v->sql, g->exps);
                ur->nrcols = list_length(ur->exps);
 
-               rel->exps = list_empty(others) ? rel->exps : list_merge(others, 
rel->exps, (fdup) NULL);
-
                /* group by on primary keys which define the partioning scheme
                 * don't need a finalizing group by */
-               /* how to check if a partition is based on some primary key ?
+               /* how to check if a partion is based on some primary key ?
                 * */
                if (rel->r && list_length(rel->r)) {
                        node *n;
@@ -4208,7 +4191,8 @@ rel_push_aggr_down(visitor *v, sql_rel *
                                        sql_table *mt = 
(bt)?rel_base_get_mergetable(bt):NULL;
                                        if (c && mt && 
list_find(c->t->pkey->k.columns, c, cmp) != NULL) {
                                                v->changes++;
-                                               return 
rel_inplace_setop(v->sql, rel, ul, ur, op_union, rel_projections(v->sql, rel, 
NULL, 1, 1));
+                                               return 
rel_inplace_setop(v->sql, rel, ul, ur, op_union,
+                                                      rel_projections(v->sql, 
rel, NULL, 1, 1));
                                        }
                                }
                        }
@@ -4218,6 +4202,22 @@ rel_push_aggr_down(visitor *v, sql_rel *
                rel_setop_set_exps(v->sql, u, rel_projections(v->sql, ul, NULL, 
1, 1));
                set_processed(u);
 
+               if (rel->r) {
+                       list *ogbe = rel->r;
+
+                       gbe = new_exp_list(v->sql->sa);
+                       for (n = ogbe->h; n; n = n->next) {
+                               sql_exp *e = n->data, *ne;
+
+                               ne = exps_uses_exp( rel->exps, e);
+                               if (!ne)
+                                       continue;
+                               ne = list_find_exp( u->exps, ne);
+                               assert(ne);
+                               ne = exp_ref(v->sql, ne);
+                               append(gbe, ne);
+                       }
+               }
                exps = new_exp_list(v->sql->sa);
                for (n = u->exps->h, m = rel->exps->h; n && m; n = n->next, m = 
m->next) {
                        sql_exp *ne, *e = n->data, *oa = m->data;
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -480,6 +480,7 @@ rel_inplace_groupby(sql_rel *rel, sql_re
        rel->nrcols = l->nrcols;
        rel->op = op_groupby;
        rel->flag = 0;
+       set_processed(rel);
        return rel;
 }
 
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -1278,12 +1278,7 @@ atom_cast(sql_allocator *sa, atom *a, sq
                                        int tpe = tp->type->localtype;
                                        size_t len = (tpe == TYPE_dbl) ? 
sizeof(dbl) : sizeof(flt);
                                        ssize_t res;
-                                       ptr p;
-
-                                       if (tpe == TYPE_dbl)
-                                               p = &(a->data.val.dval);
-                                       else
-                                               p = &(a->data.val.fval);
+                                       ptr p = &(a->data.val);
                                        if ((res = ATOMfromstr(tpe, &p, &len, 
s, false)) < 0) {
                                                GDKclrerr();
                                                return 0;
diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -3520,689 +3520,617 @@ insert into sys.functions values (944, '
 insert into sys.args values (43965, 944, 'res_0', 'boolean', 1, 0, 0, 0);
 insert into sys.args values (43966, 944, 'arg_1', 'clob', 0, 0, 1, 1);
 insert into sys.args values (43967, 944, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.functions values (945, 'like', 'like', 'algebra', 0, 4, false, 
false, false, 2000, true, false);
-insert into sys.args values (43968, 945, 'res_0', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (43969, 945, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43970, 945, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.args values (43971, 945, 'arg_3', 'clob', 0, 0, 1, 3);
-insert into sys.functions values (946, 'ilike', 'ilike', 'algebra', 0, 4, 
false, false, false, 2000, true, false);
-insert into sys.args values (43972, 946, 'res_0', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (43973, 946, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43974, 946, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.functions values (947, 'ilike', 'ilike', 'algebra', 0, 4, 
false, false, false, 2000, true, false);
-insert into sys.args values (43975, 947, 'res_0', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (43976, 947, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43977, 947, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.args values (43978, 947, 'arg_3', 'clob', 0, 0, 1, 3);
-insert into sys.functions values (948, 'not_like', 'not_like', 'algebra', 0, 
4, false, false, false, 2000, true, false);
-insert into sys.args values (43979, 948, 'res_0', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (43980, 948, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43981, 948, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.functions values (949, 'not_like', 'not_like', 'algebra', 0, 
4, false, false, false, 2000, true, false);
-insert into sys.args values (43982, 949, 'res_0', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (43983, 949, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43984, 949, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.args values (43985, 949, 'arg_3', 'clob', 0, 0, 1, 3);
-insert into sys.functions values (950, 'not_ilike', 'not_ilike', 'algebra', 0, 
4, false, false, false, 2000, true, false);
-insert into sys.args values (43986, 950, 'res_0', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (43987, 950, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43988, 950, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.functions values (951, 'not_ilike', 'not_ilike', 'algebra', 0, 
4, false, false, false, 2000, true, false);
-insert into sys.args values (43989, 951, 'res_0', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (43990, 951, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43991, 951, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.args values (43992, 951, 'arg_3', 'clob', 0, 0, 1, 3);
-insert into sys.functions values (952, 'patindex', 'patindex', 'pcre', 0, 1, 
false, false, false, 2000, true, false);
-insert into sys.args values (43993, 952, 'res_0', 'int', 32, 0, 0, 0);
-insert into sys.args values (43994, 952, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43995, 952, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.functions values (953, 'truncate', 'stringleft', 'str', 0, 1, 
false, false, false, 2000, true, false);
-insert into sys.args values (43996, 953, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (43997, 953, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (43998, 953, 'arg_2', 'int', 32, 0, 1, 2);
-insert into sys.functions values (954, 'concat', '+', 'calc', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (43999, 954, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44000, 954, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (44001, 954, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.functions values (955, 'ascii', 'ascii', 'str', 0, 1, false, 
false, false, 2000, true, true);
-insert into sys.args values (44002, 955, 'res_0', 'int', 32, 0, 0, 0);
-insert into sys.args values (44003, 955, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (956, 'code', 'unicode', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44004, 956, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44005, 956, 'arg_1', 'int', 32, 0, 1, 1);
-insert into sys.functions values (957, 'length', 'length', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44006, 957, 'res_0', 'int', 32, 0, 0, 0);
-insert into sys.args values (44007, 957, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (958, 'right', 'stringright', 'str', 0, 1, 
false, false, false, 2000, true, false);
-insert into sys.args values (44008, 958, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44009, 958, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (44010, 958, 'arg_2', 'int', 32, 0, 1, 2);
-insert into sys.functions values (959, 'left', 'stringleft', 'str', 0, 1, 
false, false, false, 2000, true, false);
-insert into sys.args values (44011, 959, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44012, 959, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (44013, 959, 'arg_2', 'int', 32, 0, 1, 2);
-insert into sys.functions values (960, 'upper', 'toUpper', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44014, 960, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44015, 960, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (961, 'ucase', 'toUpper', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44016, 961, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44017, 961, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (962, 'lower', 'toLower', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44018, 962, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44019, 962, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (963, 'lcase', 'toLower', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44020, 963, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44021, 963, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (964, 'trim', 'trim', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44022, 964, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44023, 964, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (965, 'trim', 'trim2', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44024, 965, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44025, 965, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.args values (44026, 965, 'arg_2', 'clob', 0, 0, 1, 2);
-insert into sys.functions values (966, 'ltrim', 'ltrim', 'str', 0, 1, false, 
false, false, 2000, true, false);
-insert into sys.args values (44027, 966, 'res_0', 'clob', 0, 0, 0, 0);
-insert into sys.args values (44028, 966, 'arg_1', 'clob', 0, 0, 1, 1);
-insert into sys.functions values (967, 'ltrim', 'ltrim2', 'str', 0, 1, false, 
false, false, 2000, true, false);
+insert into sys.args values (43968, 944, 'arg_3', 'clob', 0, 0, 1, 3);
+insert into sys.args values (43969, 944, 'arg_4', 'boolean', 1, 0, 1, 4);
+insert into sys.functions values (945, 'not_like', 'not_like', 'algebra', 0, 
4, false, false, false, 2000, true, false);
+insert into sys.args values (43970, 945, 'res_0', 'boolean', 1, 0, 0, 0);
+insert into sys.args values (43971, 945, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.args values (43972, 945, 'arg_2', 'clob', 0, 0, 1, 2);
+insert into sys.args values (43973, 945, 'arg_3', 'clob', 0, 0, 1, 3);
+insert into sys.args values (43974, 945, 'arg_4', 'boolean', 1, 0, 1, 4);
+insert into sys.functions values (946, 'patindex', 'patindex', 'pcre', 0, 1, 
false, false, false, 2000, true, false);
+insert into sys.args values (43975, 946, 'res_0', 'int', 32, 0, 0, 0);
+insert into sys.args values (43976, 946, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.args values (43977, 946, 'arg_2', 'clob', 0, 0, 1, 2);
+insert into sys.functions values (947, 'truncate', 'stringleft', 'str', 0, 1, 
false, false, false, 2000, true, false);
+insert into sys.args values (43978, 947, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (43979, 947, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.args values (43980, 947, 'arg_2', 'int', 32, 0, 1, 2);
+insert into sys.functions values (948, 'concat', '+', 'calc', 0, 1, false, 
false, false, 2000, true, false);
+insert into sys.args values (43981, 948, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (43982, 948, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.args values (43983, 948, 'arg_2', 'clob', 0, 0, 1, 2);
+insert into sys.functions values (949, 'ascii', 'ascii', 'str', 0, 1, false, 
false, false, 2000, true, true);
+insert into sys.args values (43984, 949, 'res_0', 'int', 32, 0, 0, 0);
+insert into sys.args values (43985, 949, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.functions values (950, 'code', 'unicode', 'str', 0, 1, false, 
false, false, 2000, true, false);
+insert into sys.args values (43986, 950, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (43987, 950, 'arg_1', 'int', 32, 0, 1, 1);
+insert into sys.functions values (951, 'length', 'length', 'str', 0, 1, false, 
false, false, 2000, true, false);
+insert into sys.args values (43988, 951, 'res_0', 'int', 32, 0, 0, 0);
+insert into sys.args values (43989, 951, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.functions values (952, 'right', 'stringright', 'str', 0, 1, 
false, false, false, 2000, true, false);
+insert into sys.args values (43990, 952, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (43991, 952, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.args values (43992, 952, 'arg_2', 'int', 32, 0, 1, 2);
+insert into sys.functions values (953, 'left', 'stringleft', 'str', 0, 1, 
false, false, false, 2000, true, false);
+insert into sys.args values (43993, 953, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (43994, 953, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.args values (43995, 953, 'arg_2', 'int', 32, 0, 1, 2);
+insert into sys.functions values (954, 'upper', 'toUpper', 'str', 0, 1, false, 
false, false, 2000, true, false);
+insert into sys.args values (43996, 954, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (43997, 954, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.functions values (955, 'ucase', 'toUpper', 'str', 0, 1, false, 
false, false, 2000, true, false);
+insert into sys.args values (43998, 955, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (43999, 955, 'arg_1', 'clob', 0, 0, 1, 1);
+insert into sys.functions values (956, 'lower', 'toLower', 'str', 0, 1, false, 
false, false, 2000, true, false);
+insert into sys.args values (44000, 956, 'res_0', 'clob', 0, 0, 0, 0);
+insert into sys.args values (44001, 956, 'arg_1', 'clob', 0, 0, 1, 1);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to