Changeset: 0a8fc47814f0 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0a8fc47814f0 Modified Files: sql/server/rel_dump.c sql/server/rel_optimizer.c sql/test/SQLancer/Tests/sqlancer19.SQL.py Branch: default Log Message:
Cleanup and don't forget to set label counter diffs (125 lines): 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 @@ -986,15 +986,18 @@ function_error_string(mvc *sql, const ch schema ? "'.":"", fname, arg_list ? arg_list : ""); } -static void /* keep updating the label count */ +static unsigned int /* keep updating the label count */ try_update_label_count(mvc *sql, const char *label) { if (label && label[0] == '%' && isdigit(label[1])) { char *eptr = NULL; unsigned int value = (unsigned int) strtol(label + 1, &eptr, 10); - if (eptr && eptr[0] == '\0') + if (eptr && eptr[0] == '\0') { sql->label = MAX(sql->label, value); + return value; + } } + return 0; } static sql_exp* @@ -1047,10 +1050,6 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re } else if (!exp) { exp = exp_column(sql->sa, tname, cname, NULL, CARD_ATOM, 1, 0, cname[0] == '%'); } - if (exp) { - try_update_label_count(sql, tname); - try_update_label_count(sql, cname); - } } break; /* atom */ @@ -1500,8 +1499,6 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re if (!exp && rrel) exp = rel_bind_column(sql, rrel, var_cname, 0, 1); *e = old; - if (exp) - try_update_label_count(sql, var_cname); skipWS(r,pos); } @@ -1560,6 +1557,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re /* as alias */ if (strncmp(r+*pos, "as", 2) == 0) { + unsigned int rlabel = 0, nlabel = 0; (*pos)+=2; skipWS(r, pos); @@ -1581,8 +1579,10 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re skipWS(r, pos); exp_setname(sql->sa, exp, tname, cname); } - try_update_label_count(sql, tname); - try_update_label_count(sql, cname); + rlabel = try_update_label_count(sql, tname); + nlabel = try_update_label_count(sql, cname); + if (rlabel && rlabel == nlabel) + exp->alias.label = rlabel; } return exp; } @@ -1911,8 +1911,6 @@ rel_read(mvc *sql, char *r, int *pos, li set_basecol(next); append(outputs, next); m = m->next; - try_update_label_count(sql, nrname); - try_update_label_count(sql, ncname); skipWS(r, pos); } if (r[*pos] != ']') 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 @@ -9662,7 +9662,7 @@ rel_push_func_and_select_down(visitor *v } static sql_rel * -optimize_rel(mvc *sql, sql_rel *rel, visitor *v, global_props *gp) +optimize_rel(visitor *v, sql_rel *rel, global_props *gp) { int level = *(int*)v->data; @@ -9750,7 +9750,7 @@ optimize_rel(mvc *sql, sql_rel *rel, vis /* Remove unused expressions */ if (level <= 0) - rel = rel_dce(sql, rel); + rel = rel_dce(v->sql, rel); if (gp->cnt[op_join] || gp->cnt[op_left] || gp->cnt[op_right] || gp->cnt[op_full] || gp->cnt[op_semi] || gp->cnt[op_anti] || gp->cnt[op_select]) rel = rel_visitor_topdown(v, rel, &rel_push_func_and_select_down); @@ -9847,7 +9847,7 @@ rel_optimizer(mvc *sql, sql_rel *rel, in gp = (global_props) {.cnt = {0},}; rel_properties(sql, &gp, rel); /* collect relational tree properties */ if (opt == 2) { - rel = optimize_rel(sql, rel, &v, &gp); + rel = optimize_rel(&v, rel, &gp); } else { /* the merge table rewriter may have to run */ rel = rel_visitor_topdown(&v, rel, &rel_merge_table_rewrite); } diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py b/sql/test/SQLancer/Tests/sqlancer19.SQL.py --- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py +++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py @@ -292,10 +292,14 @@ with SQLTestCase() as cli: .assertSucceeded().assertDataResultMatch([(True,),(True,),(True,),(True,),(True,),(True,),(True,),(None,),(None,),(None,),(None,)]) cli.execute("SELECT CAST(2 AS REAL) BETWEEN 2 AND (rt5.c0 / rt5.c0)^5 AS X FROM rt5 ORDER BY x NULLS LAST;") \ .assertSucceeded().assertDataResultMatch([(True,),(True,),(True,),(True,),(True,),(True,),(True,),(None,),(None,),(None,),(None,)]) - cli.execute("SELECT count(*) FROM t3 GROUP BY 1 + least(2, round(0.68, t3.c0));") \ + cli.execute("SELECT count(*) AS mx FROM t3 GROUP BY 1 + least(2, round(0.68, t3.c0)) ORDER BY mx;") \ + .assertSucceeded().assertDataResultMatch([(1,), (5,)]) + cli.execute("SELECT count(*) AS mx FROM rt3 GROUP BY 1 + least(2, round(0.68, rt3.c0)) ORDER BY mx;") \ .assertSucceeded().assertDataResultMatch([(1,), (5,)]) - cli.execute("SELECT count(*) FROM rt3 GROUP BY 1 + least(2, round(0.68, rt3.c0));") \ - .assertSucceeded().assertDataResultMatch([(1,), (5,)]) + cli.execute("SELECT 1 FROM t3 INNER JOIN (SELECT 1 FROM t2) AS sub0(c0) ON ((2) IN (3, 6)) WHERE 4 < least(NULL, least(t3.c0, t3.c0));") \ + .assertSucceeded().assertDataResultMatch([]) + cli.execute("SELECT 1 FROM rt3 INNER JOIN (SELECT 1 FROM t2) AS sub0(c0) ON ((2) IN (3, 6)) WHERE 4 < least(NULL, least(rt3.c0, rt3.c0));") \ + .assertSucceeded().assertDataResultMatch([]) cli.execute("ROLLBACK;") cli.execute("CREATE FUNCTION mybooludf(a bool) RETURNS BOOL RETURN a;") _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list