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

Reply via email to