Changeset: d4c98f13d0ae for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d4c98f13d0ae
Modified Files:
sql/backends/monet5/sql_gencode.c
sql/server/rel_dump.c
sql/server/rel_statistics.c
sql/test/BugTracker-2023/Tests/misc-crashes-7390.test
Branch: default
Log Message:
Merge with Dec2023 branch.
diffs (truncated from 386 to 300 lines):
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
@@ -1706,7 +1706,7 @@ void
void
_exp_print(mvc *sql, sql_exp *e) {
- exp_print(sql, GDKstdout, e, 0, NULL, 1, 0);
+ exp_print(sql, GDKstdout, e, 0, NULL, 1, 0, 1);
mnstr_printf(GDKstdout, "\n");
}
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -110,12 +110,12 @@ dump_sql_subtype(sql_allocator *sa, sql_
return sa_strdup(sa, buf);
}
-static void exps_print(mvc *sql, stream *fout, list *exps, int depth, list
*refs, int alias, int brackets);
+static void exps_print(mvc *sql, stream *fout, list *exps, int depth, list
*refs, int alias, int brackets, int decorate);
static void rel_print_rel(mvc *sql, stream *fout, sql_rel *rel, int depth,
list *refs, int decorate);
void
-exp_print(mvc *sql, stream *fout, sql_exp *e, int depth, list *refs, int
comma, int alias)
+exp_print(mvc *sql, stream *fout, sql_exp *e, int depth, list *refs, int
comma, int alias, int decorate)
{
(void)sql;
if (!e)
@@ -129,7 +129,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
if (rname)
mnstr_printf(fout, "\"%s\".",
dump_escape_ident(sql->ta, rname));
mnstr_printf(fout, "\"%s\" = ",
dump_escape_ident(sql->ta, exp_name(e)));
- exp_print(sql, fout, e->l, depth, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth, refs, 0, 0, decorate);
mnstr_printf(fout, " FRAME %d ", level);
alias = 0;
} else if (e->flag & PSM_VAR) {
@@ -145,26 +145,26 @@ exp_print(mvc *sql, stream *fout, sql_ex
} else if (e->flag & PSM_RETURN) {
int level = GET_PSM_LEVEL(e->flag);
mnstr_printf(fout, "return ");
- exp_print(sql, fout, e->l, depth, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth, refs, 0, 0, decorate);
mnstr_printf(fout, " FRAME %d ", level);
alias = 0;
} else if (e->flag & PSM_WHILE) {
mnstr_printf(fout, "while ");
- exp_print(sql, fout, e->l, depth, refs, 0, 0);
- exps_print(sql, fout, e->r, depth, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth, refs, 0, 0, decorate);
+ exps_print(sql, fout, e->r, depth, refs, 0, 0,
decorate);
alias = 0;
} else if (e->flag & PSM_IF) {
mnstr_printf(fout, "if ");
- exp_print(sql, fout, e->l, depth, refs, 0, 0);
- exps_print(sql, fout, e->r, depth, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth, refs, 0, 0, decorate);
+ exps_print(sql, fout, e->r, depth, refs, 0, 0,
decorate);
if (e->f)
- exps_print(sql, fout, e->f, depth, refs, 0, 0);
+ exps_print(sql, fout, e->f, depth, refs, 0, 0,
decorate);
alias = 0;
} else if (e->flag & PSM_REL) {
rel_print_rel(sql, fout, e->l, depth+10, refs, 1);
} else if (e->flag & PSM_EXCEPTION) {
mnstr_printf(fout, "except ");
- exp_print(sql, fout, e->l, depth, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth, refs, 0, 0, decorate);
mnstr_printf(fout, " error %s", (const char *) e->r);
alias = 0;
}
@@ -173,7 +173,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
case e_convert: {
char *to_type = dump_sql_subtype(sql->ta, exp_subtype(e));
mnstr_printf(fout, "%s[", to_type);
- exp_print(sql, fout, e->l, depth, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth, refs, 0, 0, decorate);
mnstr_printf(fout, "]");
break;
}
@@ -207,7 +207,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
mnstr_printf(fout, "\"%s\"",
dump_escape_ident(sql->ta, vname->name));
} else if (e->f) { /* values list */
list *l = e->f;
- exps_print(sql, fout, l, depth, refs, 0, 0);
+ exps_print(sql, fout, l, depth, refs, 0, 0,
decorate);
} else { /* numbered arguments */
mnstr_printf(fout, "A%u", e->flag);
}
@@ -218,15 +218,15 @@ exp_print(mvc *sql, stream *fout, sql_ex
mnstr_printf(fout, "\"%s\".\"%s\"",
f->func->s?dump_escape_ident(sql->ta,
f->func->s->base.name):"sys",
dump_escape_ident(sql->ta, f->func->base.name));
- exps_print(sql, fout, e->l, depth, refs, 0, 1);
+ exps_print(sql, fout, e->l, depth, refs, 0, 1, decorate);
if (e->r) { /* list of optional lists */
list *l = e->r;
for(node *n = l->h; n; n = n->next)
- exps_print(sql, fout, n->data, depth, refs, 0,
1);
+ exps_print(sql, fout, n->data, depth, refs, 0,
1, decorate);
}
if (e->flag && is_compare_func(f))
mnstr_printf(fout, " %s", e->flag==1?"ANY":"ALL");
- } break;
+ } break;
case e_aggr: {
sql_subfunc *a = e->f;
mnstr_printf(fout, "\"%s\".\"%s\"",
@@ -239,11 +239,11 @@ exp_print(mvc *sql, stream *fout, sql_ex
if (zero_if_empty(e))
mnstr_printf(fout, " zero if empty ");
if (e->l)
- exps_print(sql, fout, e->l, depth, refs, 0, 1);
+ exps_print(sql, fout, e->l, depth, refs, 0, 1,
decorate);
else
mnstr_printf(fout, "()");
- } break;
- case e_column:
+ } break;
+ case e_column: {
if (is_freevar(e))
mnstr_printf(fout, "!!!FREE!!! ");
if (e->l)
@@ -253,55 +253,55 @@ exp_print(mvc *sql, stream *fout, sql_ex
strcmp(exp_relname(e), e->l) == 0 &&
strcmp(exp_name(e), e->r) == 0)
alias = 0;
- if (!exp_relname(e) && exp_name(e) && !e->l &&
strcmp(exp_name(e), e->r)==0)
+ if(!exp_relname(e) && exp_name(e) && !e->l &&
strcmp(exp_name(e), e->r)==0)
alias = 0;
- break;
+ } break;
case e_cmp:
if (e->flag == cmp_in || e->flag == cmp_notin) {
mnstr_printf(fout, "(");
- exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth+1, refs, 0, 0,
decorate);
mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
cmp_print(sql, fout, e->flag);
- exps_print(sql, fout, e->r, depth, refs, 0, 1);
+ exps_print(sql, fout, e->r, depth, refs, 0, 1,
decorate);
} else if (e->flag == cmp_or) {
- exps_print(sql, fout, e->l, depth, refs, 0, 1);
+ exps_print(sql, fout, e->l, depth, refs, 0, 1,
decorate);
if (is_anti(e))
mnstr_printf(fout, " !");
cmp_print(sql, fout, e->flag);
- exps_print(sql, fout, e->r, depth, refs, 0, 1);
+ exps_print(sql, fout, e->r, depth, refs, 0, 1,
decorate);
} else if (e->flag == cmp_filter) {
sql_subfunc *f = e->f;
- exps_print(sql, fout, e->l, depth, refs, 0, 1);
+ exps_print(sql, fout, e->l, depth, refs, 0, 1,
decorate);
if (is_anti(e))
mnstr_printf(fout, " !");
mnstr_printf(fout, " FILTER \"%s\".\"%s\"",
f->func->s?dump_escape_ident(sql->ta,
f->func->s->base.name):"sys",
dump_escape_ident(sql->ta,
f->func->base.name));
- exps_print(sql, fout, e->r, depth, refs, 0, 1);
+ exps_print(sql, fout, e->r, depth, refs, 0, 1,
decorate);
} else if (e->f) {
mnstr_printf(fout, "(");
- exp_print(sql, fout, e->r, depth+1, refs, 0, 0);
+ exp_print(sql, fout, e->r, depth+1, refs, 0, 0,
decorate);
mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
cmp_print(sql, fout,
swap_compare(range2lcompare(e->flag)));
mnstr_printf(fout, "(");
- exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth+1, refs, 0, 0,
decorate);
mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
cmp_print(sql, fout, range2rcompare(e->flag));
mnstr_printf(fout, "(");
- exp_print(sql, fout, e->f, depth+1, refs, 0, 0);
+ exp_print(sql, fout, e->f, depth+1, refs, 0, 0,
decorate);
mnstr_printf(fout, ")");
if (is_symmetric(e))
mnstr_printf(fout, " SYM");
} else {
mnstr_printf(fout, "(");
- exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
+ exp_print(sql, fout, e->l, depth+1, refs, 0, 0,
decorate);
mnstr_printf(fout, ")");
if (is_anti(e))
mnstr_printf(fout, " !");
@@ -312,7 +312,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
cmp_print(sql, fout, e->flag);
mnstr_printf(fout, "(");
- exp_print(sql, fout, e->r, depth+1, refs, 0, 0);
+ exp_print(sql, fout, e->r, depth+1, refs, 0, 0,
decorate);
mnstr_printf(fout, ")");
}
break;
@@ -327,10 +327,12 @@ exp_print(mvc *sql, stream *fout, sql_ex
mnstr_printf(fout, " NOT NULL");
if (e->type != e_atom && e->type != e_cmp && is_unique(e))
mnstr_printf(fout, " UNIQUE");
- if (e->p && e->type != e_atom && !exp_is_atom(e)) { /* don't show
properties on value lists */
+ /* don't show properties on value lists */
+ if (decorate && e->p && e->type != e_atom && !exp_is_atom(e)) {
for (prop *p = e->p; p; p = p->p) {
/* Don't show min/max/unique est on atoms, or when
running tests with forcemito */
- if ((ATOMIC_GET(&GDKdebug) & FORCEMITOMASK) == 0 ||
(p->kind != PROP_MIN && p->kind != PROP_MAX && p->kind != PROP_NUNIQUES)) {
+ if ((ATOMIC_GET(&GDKdebug) & FORCEMITOMASK) == 0 ||
+ (p->kind != PROP_MIN && p->kind != PROP_MAX &&
p->kind != PROP_NUNIQUES)) {
char *pv = propvalue2string(sql->ta, p);
mnstr_printf(fout, " %s %s",
propkind2string(p), pv);
}
@@ -347,7 +349,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
}
static void
-exps_print(mvc *sql, stream *fout, list *exps, int depth, list *refs, int
alias, int brackets)
+exps_print(mvc *sql, stream *fout, list *exps, int depth, list *refs, int
alias, int brackets, int decorate)
{
node *en;
@@ -357,7 +359,7 @@ exps_print(mvc *sql, stream *fout, list
mnstr_printf(fout, " [ ");
if (exps)
for (en = exps->h; en; en = en->next)
- exp_print(sql, fout, en->data, depth+1, refs,
(en->next!=NULL), alias);
+ exp_print(sql, fout, en->data, depth+1, refs,
(en->next!=NULL), alias, decorate);
if (brackets)
mnstr_printf(fout, ")");
else
@@ -419,7 +421,7 @@ rel_print_rel(mvc *sql, stream *fout, s
isReplicaTable(t)?"REPLICA":"table",
dump_escape_ident(sql->ta, tname));
if (rel->exps)
- exps_print(sql, fout, rel->exps, depth, refs, 1, 0);
+ exps_print(sql, fout, rel->exps, depth, refs, 1, 0,
decorate);
else
rel_base_dump_exps(fout, rel);
} break;
@@ -427,7 +429,7 @@ rel_print_rel(mvc *sql, stream *fout, s
mnstr_printf(fout, "table (");
if (rel->r)
- exp_print(sql, fout, rel->r, depth, refs, 1, 0);
+ exp_print(sql, fout, rel->r, depth, refs, 1, 0,
decorate);
if (rel->l) {
if (rel->flag == TRIGGER_WRAPPER)
mnstr_printf(fout, "rel_dump not yet
implemented for trigger input");
@@ -437,7 +439,7 @@ rel_print_rel(mvc *sql, stream *fout, s
print_indent(sql, fout, depth, decorate);
mnstr_printf(fout, ")");
if (rel->exps)
- exps_print(sql, fout, rel->exps, depth, refs, 1, 0);
+ exps_print(sql, fout, rel->exps, depth, refs, 1, 0,
decorate);
break;
case op_ddl:
mnstr_printf(fout, "ddl");
@@ -446,7 +448,7 @@ rel_print_rel(mvc *sql, stream *fout, s
if (rel->r)
rel_print_rel(sql, fout, rel->r, depth+1, refs,
decorate);
if (rel->exps && (rel->flag == ddl_psm || rel->flag ==
ddl_exception || rel->flag == ddl_list))
- exps_print(sql, fout, rel->exps, depth, refs, 1, 0);
+ exps_print(sql, fout, rel->exps, depth, refs, 1, 0,
decorate);
break;
case op_join:
case op_left:
@@ -505,9 +507,9 @@ rel_print_rel(mvc *sql, stream *fout, s
}
print_indent(sql, fout, depth, decorate);
mnstr_printf(fout, ")");
- exps_print(sql, fout, rel->exps, depth, refs, 1, 0);
+ exps_print(sql, fout, rel->exps, depth, refs, 1, 0, decorate);
if (is_join(rel->op) && rel->attr) /* group joins */
- exps_print(sql, fout, rel->attr, depth, refs, 1, 0);
+ exps_print(sql, fout, rel->attr, depth, refs, 1, 0,
decorate);
break;
case op_project:
case op_select:
@@ -538,10 +540,10 @@ rel_print_rel(mvc *sql, stream *fout, s
mnstr_printf(fout, ")");
}
if (rel->op == op_groupby) /* group by columns */
- exps_print(sql, fout, rel->r, depth, refs, 1, 0);
- exps_print(sql, fout, rel->exps, depth, refs, 1, 0);
+ exps_print(sql, fout, rel->r, depth, refs, 1, 0,
decorate);
+ exps_print(sql, fout, rel->exps, depth, refs, 1, 0, decorate);
if (rel->r && rel->op == op_project) /* order by columns */
- exps_print(sql, fout, rel->r, depth, refs, 1, 0);
+ exps_print(sql, fout, rel->r, depth, refs, 1, 0,
decorate);
break;
case op_insert:
case op_update:
@@ -585,12 +587,12 @@ rel_print_rel(mvc *sql, stream *fout, s
print_indent(sql, fout, depth, decorate);
mnstr_printf(fout, ")");
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]