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

Reply via email to