Changeset: cf6e79382c27 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cf6e79382c27 Modified Files: sql/backends/monet5/sql_statement.c sql/server/rel_exp.c sql/server/rel_optimizer.c sql/server/rel_rel.c sql/server/rel_rewriter.c sql/server/rel_unnest.c sql/server/rel_updates.c sql/test/SQLancer/Tests/sqlancer03.sql sql/test/SQLancer/Tests/sqlancer03.stable.out Branch: oscar Log Message:
Merged with Jun2020 diffs (truncated from 529 to 300 lines): 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 @@ -3053,7 +3053,7 @@ stmt_convert(backend *be, stmt *v, sql_s q = pushInt(mb, q, f->scale); */ //q = pushInt(mb, q, ((ValRecord)((atom*)(be->mvc)->args[1])->data).val.ival); } - if (cond && v->nrcols && f->type->eclass != EC_DEC && !EC_TEMP_FRAC(t->type->eclass) && !EC_INTERVAL(t->type->eclass)) + if (cond && v->nrcols && f->type->eclass != EC_DEC && !EC_TEMP(t->type->eclass) && !EC_INTERVAL(t->type->eclass)) q = pushArgument(mb, q, cond->nr); if (q) { stmt *s = stmt_create(be->mvc->sa, st_convert); diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -861,6 +861,7 @@ exp_setalias(sql_exp *e, const char *rna void exp_prop_alias(sql_allocator *sa, sql_exp *e, sql_exp *oe ) { + e->ref = oe->ref; if (oe->alias.name == NULL && exp_has_rel(oe)) { sql_rel *r = exp_rel_get_rel(sa, oe); if (!is_project(r->op)) 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 @@ -1600,14 +1600,11 @@ rel_push_count_down(visitor *v, sql_rel sql_rel *cp; /* Cross Product */ sql_subfunc *mult; list *args; - const char *rname = NULL, *name = NULL; sql_rel *srel; oce = rel->exps->h->data; if (oce->l) /* we only handle COUNT(*) */ return rel; - rname = exp_relname(oce); - name = exp_name(oce); args = new_exp_list(v->sql->sa); srel = r->l; @@ -1640,7 +1637,8 @@ rel_push_count_down(visitor *v, sql_rel cp = rel_crossproduct(v->sql->sa, gbl, gbr, op_join); nce = exp_op(v->sql->sa, args, mult); - exp_setname(v->sql->sa, nce, rname, name ); + if (exp_name(oce)) + exp_prop_alias(v->sql->sa, nce, oce); rel_destroy(rel); rel = rel_project(v->sql->sa, cp, append(new_exp_list(v->sql->sa), nce)); @@ -2849,7 +2847,8 @@ rel_merge_projects(visitor *v, sql_rel * } */ if (ne) { - exp_setname(v->sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(v->sql->sa, ne, e); list_append(rel->exps, ne); } else { all = 0; @@ -2865,7 +2864,8 @@ rel_merge_projects(visitor *v, sql_rel * ne = exp_push_down_prj(v->sql, e, prj, prj->l); if (ne) { - exp_setname(v->sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(v->sql->sa, ne, e); list_append(nr, ne); } else { all = 0; @@ -2934,21 +2934,25 @@ exp_simplify_math( mvc *sql, sql_exp *e, if (exp_is_atom(le) && exp_is_null(sql, le)) { (*changes)++; if (f && f->func && f->func->imp && strstr(f->func->imp, "_no_nil") != NULL) { - exp_setname(sql->sa, re, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, re, e); return re; } le = exp_null(sql->sa, et); - exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, le, e); return le; } if (exp_is_atom(re) && exp_is_null(sql, re)) { (*changes)++; if (f && f->func && f->func->imp && strstr(f->func->imp, "_no_nil") != NULL) { - exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, le, e); return le; } re = exp_null(sql->sa, et); - exp_setname(sql->sa, re, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, re, e); return re; } } @@ -2961,27 +2965,31 @@ exp_simplify_math( mvc *sql, sql_exp *e, if (exp_is_atom(le) && exp_is_zero(sql, le) && exp_is_atom(re) && exp_is_not_null(sql, re)) { (*changes)++; le = exp_zero(sql->sa, et); - exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, le, e); return le; } /* a*0 = 0 */ if (exp_is_atom(re) && exp_is_zero(sql, re) && exp_is_atom(le) && exp_is_not_null(sql, le)) { (*changes)++; re = exp_zero(sql->sa, et); - exp_setname(sql->sa, re, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, re, e); return re; } /* 1*a = a if (exp_is_atom(le) && exp_is_one(sql, le)) { (*changes)++; - exp_setname(sql->sa, re, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, re, e); return re; } */ /* a*1 = a if (exp_is_atom(re) && exp_is_one(sql, re)) { (*changes)++; - exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, le, e); return le; } */ @@ -2996,7 +3004,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, if (a && atom_cast(sql->sa, a, exp_subtype(e))) { sql_exp *ne = exp_atom(sql->sa, a); (*changes)++; - exp_setname(sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, ne, e); return ne; } } @@ -3026,7 +3035,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, append(l, re); (*changes)++; ne = exp_op(sql->sa, l, pow); - exp_setname(sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, ne, e); return ne; } /* change a*pow(a,n) or pow(a,n)*a into pow(a,n+1) */ @@ -3040,7 +3050,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, if (exp_equal(re, lle)==0) { if (atom_inc(exp_value(sql, lre, sql->args, sql->argc))) { (*changes)++; - exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, le, e); return le; } } @@ -3075,12 +3086,14 @@ exp_simplify_math( mvc *sql, sql_exp *e, sql_exp *re = l->h->next->data; if (exp_is_atom(le) && exp_is_zero(sql, le)) { (*changes)++; - exp_setname(sql->sa, re, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, re, e); return re; } if (exp_is_atom(re) && exp_is_zero(sql, re)) { (*changes)++; - exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, le, e); return le; } if (exp_is_atom(le) && exp_is_atom(re)) { @@ -3093,7 +3106,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, if (a) { sql_exp *ne = exp_atom(sql->sa, a); (*changes)++; - exp_setname(sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, ne, e); return ne; } } @@ -3161,7 +3175,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, if (a) { sql_exp *ne = exp_atom(sql->sa, a); (*changes)++; - exp_setname(sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, ne, e); return ne; } } @@ -3179,7 +3194,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, } ne = exp_atom(sql->sa, a); (*changes)++; - exp_setname(sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, ne, e); return ne; } if (is_func(le->type)) { @@ -3190,7 +3206,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, sql_exp *lre = ll->h->next->data; if (exp_equal(re, lre) == 0) { /* (x+a)-a = x*/ - exp_setname(sql->sa, lle, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, lle, e); (*changes)++; return lle; } @@ -3917,7 +3934,8 @@ rel_merge_project_rse(visitor *v, sql_re if (between) { sql_exp *ne = exp_op(v->sql->sa, ops, between); - exp_setname(v->sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(v->sql->sa, ne, e); e = ne; } v->changes++; @@ -4382,7 +4400,8 @@ rel_push_groupby_down(visitor *v, sql_re if (exp_refers(ge, a)) { sql_exp *sc = jr->exps->t->data; sql_exp *e = exp_ref(v->sql, sc); - exp_setname(v->sql->sa, e, exp_relname(a), exp_name(a)); + if (exp_name(a)) + exp_prop_alias(v->sql->sa, e, a); a = e; } append(npexps, a); @@ -4394,7 +4413,8 @@ rel_push_groupby_down(visitor *v, sql_re if (exp_match_exp(a, ge) || exp_refers(ge, a)) { a = exp_ref(v->sql, ne); - exp_setname(v->sql->sa, a, exp_relname(ne), exp_name(ne)); + if (exp_name(ne)) + exp_prop_alias(v->sql->sa, a, ne); m->data = a; } } @@ -4402,12 +4422,14 @@ rel_push_groupby_down(visitor *v, sql_re /* change alias pe, ie project out the index */ pe->l = (void*)exp_relname(ne); pe->r = (void*)exp_name(ne); - exp_setname(v->sql->sa, pe, exp_relname(ne), exp_name(ne)); + if (exp_name(ne)) + exp_prop_alias(v->sql->sa, pe, ne); /* change alias ge */ ge->l = (void*)exp_relname(pe); ge->r = (void*)exp_name(pe); - exp_setname(v->sql->sa, ge, exp_relname(pe), exp_name(pe)); + if (exp_name(pe)) + exp_prop_alias(v->sql->sa, ge, pe); /* zap both project and groupby name hash tables (as we changed names above) */ rel->exps->ht = NULL; @@ -7762,12 +7784,14 @@ rel_simplify_ifthenelse(visitor *v, sql_ if (exp_is_true(v->sql, ie)) { /* ifthenelse(true, x, y) -> x */ sql_exp *res = args->h->next->data; - exp_setname(v->sql->sa, res, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(v->sql->sa, res, e); v->changes++; return res; } else if (exp_is_false(v->sql, ie) || exp_is_null(v->sql, ie)) { /* ifthenelse(false or null, x, y) -> y */ sql_exp *res = args->h->next->next->data; - exp_setname(v->sql->sa, res, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(v->sql->sa, res, e); v->changes++; return res; } @@ -8596,7 +8620,8 @@ add_nulls(mvc *sql, sql_rel *rel, sql_re sql_exp *e = n->data, *ne; ne = exp_atom(sql->sa, atom_general(sql->sa, exp_subtype(e), NULL)); - exp_setname(sql->sa, ne, exp_relname(e), exp_name(e)); + if (exp_name(e)) + exp_prop_alias(sql->sa, ne, e); append(rel->exps, ne); } } @@ -8779,8 +8804,6 @@ rel_add_dicts(visitor *v, sql_rel *rel) sql_rel *vt = n->data; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list