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