Changeset: b74a24a79c1a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b74a24a79c1a
Modified Files:
        sql/server/rel_dump.c
        sql/test/SQLancer/Tests/sqlancer19.SQL.py
Branch: Jul2021
Log Message:

Function expressions also use the semantics flag. Set it from what was read 
from the plan instead the child expression


diffs (78 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
@@ -932,7 +932,7 @@ read_exp_properties(mvc *sql, sql_exp *e
 static sql_exp*
 exp_read(mvc *sql, sql_rel *lrel, sql_rel *rrel, list *top_exps, char *r, int 
*pos, int grp)
 {
-       int f = -1, old, d=0, s=0, unique = 0, no_nils = 0, quote = 0, 
zero_if_empty = 0;
+       int f = -1, old, d=0, s=0, unique = 0, no_nils = 0, quote = 0, 
zero_if_empty = 0, sem = 0, anti = 0;
        char *tname = NULL, *cname = NULL, *var_cname = NULL, *e, *b = r + 
*pos, *st;
        sql_exp *exp = NULL;
        list *exps = NULL;
@@ -1306,12 +1306,12 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
        if (r[*pos] == '!') {
                (*pos)++;
                skipWS(r, pos);
-               set_anti(exp);
+               anti = 1;
        }
        if (r[*pos] == '*') {
                (*pos)++;
                skipWS(r, pos);
-               set_semantics(exp);
+               sem = 1;
        }
 
        switch(r[*pos]) {
@@ -1386,10 +1386,9 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                        list *exps = read_exps(sql, lrel, rrel, top_exps, r, 
pos, '(', 0, 0);
                        if (!exps)
                                return NULL;
-                       sql_exp *ne = exp_in(sql->sa, exp, exps, f);
-                       if (is_anti(exp))
-                               set_anti(ne);
-                       exp = ne;
+                       exp = exp_in(sql->sa, exp, exps, f);
+                       if (anti)
+                               set_anti(exp);
                } else {
                        int sym = 0;
                        sql_exp *e = exp_read(sql, lrel, rrel, top_exps, r, 
pos, 0);
@@ -1412,17 +1411,16 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                                if (exp_name(e)) /* propagate a possible alias 
already parsed */
                                        exp_prop_alias(sql->sa, exp, e);
                        } else {
-                               sql_exp *ne = exp_compare(sql->sa, exp, e, f);
-                               if (is_anti(exp))
-                                       set_anti(ne);
-                               if (is_semantics(exp))
-                                       set_semantics(ne);
+                               exp = exp_compare(sql->sa, exp, e, f);
+                               if (anti)
+                                       set_anti(exp);
+                               if (sem)
+                                       set_semantics(exp);
                                if (sym) /* set it, so it gets propagated to 
the range comparison */
-                                       set_symmetric(ne);
+                                       set_symmetric(exp);
                                if (exp_name(e)) /* propagate a possible alias 
already parsed */
-                                       exp_prop_alias(sql->sa, ne, e);
+                                       exp_prop_alias(sql->sa, exp, e);
                                exp_setalias(e, NULL, NULL);
-                               exp = ne;
                        }
                }
        }
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
@@ -42,6 +42,8 @@ with SQLTestCase() as cli:
         .assertSucceeded().assertDataResultMatch([(0,),])
     cli.execute('SELECT c1 FROM rt1 WHERE rt1.c1 NOT BETWEEN SYMMETRIC 1 AND 
NULL;') \
         .assertSucceeded().assertDataResultMatch([])
+    cli.execute('SELECT 1 FROM (SELECT TIME \'01:00:00\' FROM rt1) va(vc1) 
WHERE greatest(va.vc1, TIME \'01:01:01\') <= TIME \'01:01:02\';') \
+        
.assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,)])
     cli.execute("ROLLBACK;")
 
     cli.execute("""
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to