Changeset: 0cbd78f5b0a0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0cbd78f5b0a0
Modified Files:
sql/server/rel_dump.c
sql/test/SQLancer/Tests/sqlancer19.SQL.py
Branch: default
Log Message:
Don't forget to update label counter while parsing dumped plan. Also partly
reverted my previous commit as it causes issues
diffs (92 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,6 +986,18 @@ function_error_string(mvc *sql, const ch
schema ? "'.":"", fname, arg_list ?
arg_list : "");
}
+static void /* keep updating the label count */
+try_update_label_count(mvc *sql, const char *label)
+{
+ if (label && label[0] == '%' && isdigit(label[1])) {
+ const char *begin = label + 1;
+ char *eptr = NULL;
+ unsigned int value = (unsigned int) strtol(begin, &eptr, 10);
+ if (eptr && eptr[0] == '\0' && begin != eptr)
+ sql->label = MAX(sql->label, value);
+ }
+}
+
static sql_exp*
exp_read(mvc *sql, sql_rel *lrel, sql_rel *rrel, list *top_exps, char *r, int
*pos, int grp)
{
@@ -1036,6 +1048,10 @@ 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 */
@@ -1436,8 +1452,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
} else {
res->digits = 0;
}
- } else if (!f->func->vararg &&
!(exps = check_arguments_and_find_largest_any_type(sql, lrel, exps, f, 0)))
- return NULL;
+ }
} else if (list_length(exps) > 2) {
if (!f->func->vararg && !(exps
= check_arguments_and_find_largest_any_type(sql, lrel, exps, f, 0)))
return NULL;
@@ -1486,6 +1501,8 @@ 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);
}
@@ -1553,6 +1570,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
(*pos)++;
if (r[*pos] != '.') {
cname = tname;
+ tname = NULL;
exp_setname(sql->sa, exp, NULL, cname);
skipWS(r, pos);
} else {
@@ -1564,6 +1582,8 @@ 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);
}
return exp;
}
@@ -1892,6 +1912,8 @@ 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/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,6 +292,10 @@ 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));") \
+ .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("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