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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list