Changeset: 75fc8583de89 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=75fc8583de89
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/SQLancer/Tests/sqlancer03.stable.out
Branch: default
Log Message:
Merged with Jun2020
diffs (101 lines):
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
@@ -7537,18 +7537,27 @@ rel_simplify_predicates(visitor *v, sql_
e->l = ie;
} else if (is_atom(r->type) && r->l) {
/* direct literal */
atom *a = r->l;
- int flag = a->data.val.bval;
-
- assert(list_length(args) == 1);
- l = args->h->data;
- if (exp_subtype(l)) {
- r =
exp_atom(v->sql->sa, atom_general(v->sql->sa, exp_subtype(l), NULL));
- e =
exp_compare(v->sql->sa, l, r, e->flag);
- if (e && !flag)
- set_anti(e);
- if (e)
-
set_semantics(e);
+
+ if (a->isnull) {
+ if (is_semantics(e)) /*
isnull(x) = NULL -> false, isnull(x) <> NULL -> true */
+ e =
exp_atom_bool(v->sql->sa, e->flag == cmp_notequal);
+ else /* always NULL */
+ e =
exp_null(v->sql->sa, sql_bind_localtype("bit"));
v->changes++;
+ } else {
+ int flag =
a->data.val.bval;
+
+
assert(list_length(args) == 1);
+ l = args->h->data;
+ if (exp_subtype(l)) {
+ r =
exp_atom(v->sql->sa, atom_general(v->sql->sa, exp_subtype(l), NULL));
+ e =
exp_compare(v->sql->sa, l, r, e->flag);
+ if (e && !flag)
+
set_anti(e);
+ if (e)
+
set_semantics(e);
+ v->changes++;
+ }
}
}
} else if (!f->func->s && is_not_func(f)) {
diff --git a/sql/test/SQLancer/Tests/sqlancer03.sql
b/sql/test/SQLancer/Tests/sqlancer03.sql
--- a/sql/test/SQLancer/Tests/sqlancer03.sql
+++ b/sql/test/SQLancer/Tests/sqlancer03.sql
@@ -1,1 +1,17 @@
select splitpart(r'%Fz晟2墁', '', 1), splitpart(r'%Fz晟2墁', r'', 2),
splitpart(r'%Fz晟2墁', r'', 1271186887);
+
+START TRANSACTION; -- Bug 6916
+CREATE TABLE "t0" ("c0" BOOLEAN NOT NULL,"c1" SMALLINT NOT NULL,CONSTRAINT
"t0_c0_c1_pkey" PRIMARY KEY ("c0", "c1"));
+INSERT INTO "t0" VALUES (false, -1);
+create view v0(c0, c1, c2, c3) as (select
((t0.c1)<<(cast(0.09114074486978418487836961503489874303340911865234375 as
int))), 0.4088967652609865,
0.3848869389602949109274732109042815864086151123046875, t0.c0 from t0 where
t0.c0);
+
+SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0;
+ -- NULL
+SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0 WHERE
(rtrim(((upper(''))||(v0.c1)))) IS NULL;
+ -- NULL
+SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0 WHERE NOT
((rtrim(((upper(''))||(v0.c1)))) IS NULL);
+ -- empty
+SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0 WHERE
((rtrim(((upper(''))||(v0.c1)))) IS NULL) IS NULL;
+ -- empty
+
+ROLLBACK;
diff --git a/sql/test/SQLancer/Tests/sqlancer03.stable.out
b/sql/test/SQLancer/Tests/sqlancer03.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer03.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer03.stable.out
@@ -11,6 +11,34 @@ stdout of test 'sqlancer03` in directory
% clob, clob, varchar # type
% 9, 0, 0 # length
[ "%Fz晟2墁", "", "" ]
+#START TRANSACTION; -- Bug 6916
+#CREATE TABLE "t0" ("c0" BOOLEAN NOT NULL,"c1" SMALLINT NOT NULL,CONSTRAINT
"t0_c0_c1_pkey" PRIMARY KEY ("c0", "c1"));
+#INSERT INTO "t0" VALUES (false, -1);
+[ 1 ]
+#create view v0(c0, c1, c2, c3) as (select
((t0.c1)<<(cast(0.09114074486978418487836961503489874303340911865234375 as
int))), 0.4088967652609865,
0.3848869389602949109274732109042815864086151123046875, t0.c0 from t0 where
t0.c0);
+#SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0;
+% .v0 # table_name
+% c0 # name
+% smallint # type
+% 1 # length
+[ NULL ]
+#SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0 WHERE
(rtrim(((upper(''))||(v0.c1)))) IS NULL;
+% .v0 # table_name
+% c0 # name
+% smallint # type
+% 1 # length
+[ NULL ]
+#SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0 WHERE NOT
((rtrim(((upper(''))||(v0.c1)))) IS NULL);
+% .v0 # table_name
+% c0 # name
+% smallint # type
+% 1 # length
+#SELECT v0.c0 FROM t0 FULL OUTER JOIN v0 ON t0.c0 WHERE
((rtrim(((upper(''))||(v0.c1)))) IS NULL) IS NULL;
+% sys.v0 # table_name
+% c0 # name
+% smallint # type
+% 1 # length
+#ROLLBACK;
# 17:14:16 >
# 17:14:16 > "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list