Changeset: 974c885dc43d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=974c885dc43d
Modified Files:
sql/server/rel_rel.h
sql/server/rel_select.c
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.sql
sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
Branch: subquery
Log Message:
fixes not (or/and) handling.
diffs (truncated from 386 to 300 lines):
diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h
--- a/sql/server/rel_rel.h
+++ b/sql/server/rel_rel.h
@@ -20,6 +20,7 @@
#define sql_groupby 32 //ORed
#define sql_partitionby 64 //ORed
#define sql_aggr 128 //ORed
+#define sql_farg 256 //ORed
#define is_sql_from(X) ((X & sql_from) == sql_from)
#define is_sql_where(X) ((X & sql_where) == sql_where)
@@ -29,6 +30,7 @@
#define is_sql_groupby(X) ((X & sql_groupby) == sql_groupby)
#define is_sql_partitionby(X) ((X & sql_partitionby) == sql_partitionby)
#define is_sql_aggr(X) ((X & sql_aggr) == sql_aggr)
+#define is_sql_farg(X) ((X & sql_farg) == sql_farg)
#define ERR_AMBIGUOUS 050000
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2093,7 +2093,7 @@ rel_in_value_exp(sql_query *query, sql_r
}
if (l_used)
rel_join_add_exp(sql->sa, left, je);
- else if (!is_sql_sel(f)) {
+ else if (!is_sql_sel(f) && !is_sql_farg(f)) {
if (!is_select(left->op) || rel_is_ref(left))
left = rel_select(sql->sa, left, e);
else
@@ -2729,7 +2729,6 @@ rel_in_exp(sql_query *query, sql_rel *re
return NULL;
exp_label(sql->sa, r, ++sql->label);
r = exp_ref(sql->sa, r);
- //e = exp_compare(sql->sa, l, r,
cmp_equal );
e = exp_compare(sql->sa, l, r,
sc->token==SQL_IN?mark_in:mark_notin);
rel_join_add_exp(sql->sa, left, e);
}
@@ -3234,7 +3233,7 @@ rel_logical_exp(sql_query *query, sql_re
default:
break;
}
- le = rel_value_exp(query, &rel, sc->data.sym, f, ek);
+ le = rel_value_exp(query, &rel, sc->data.sym, f|sql_farg, ek);
if (!le)
return NULL;
diff --git a/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.sql
b/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.sql
--- a/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.sql
+++ b/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.sql
@@ -18,7 +18,7 @@ CREATE TABLE PARTSUPP ( PS_PARTKEY I
PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY),
FOREIGN KEY (PS_PARTKEY) references PART );
- plan
+
select
ref_0.message as c0
from
diff --git a/sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
b/sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
--- a/sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
+++ b/sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
@@ -1029,6 +1029,7 @@ Ready.
% L2, L4, L6, c, L14, L17, L21 # name
% int, bigint, bigint, int, bigint, bigint, bigint # type
% 3, 3, 4, 3, 2, 4, 1 # length
+[ 107, 107, 1067, 106, 0, 635, 2 ]
[ 131, 132, 1325, 134, 4, 793, 1 ]
[ 149, NULL, NULL, 147, 7, 880, 4 ]
[ 153, NULL, NULL, 150, 8, 905, 2 ]
@@ -1547,7 +1548,9 @@ Ready.
% L2, L4, L11, L14, L16, c # name
% smallint, bigint, bigint, bigint, bigint, int # type
% 3, 3, 2, 1, 2, 3 # length
+[ 444, NULL, 0, 1, NULL, 102 ]
[ 222, NULL, 2, 1, 1, 123 ]
+[ 444, NULL, 0, 3, NULL, 119 ]
[ 333, 132, 4, 1, -4, 134 ]
[ 222, 137, 5, 1, 2, 137 ]
[ 222, 142, 6, 1, 2, 141 ]
@@ -11446,7 +11449,9 @@ Ready.
% L2, L7, d, L13, L15 # name
% int, bigint, int, bigint, bigint # type
% 3, 2, 3, 3, 1 # length
+[ 104, 0, 101, NULL, NULL ]
[ 121, 2, 122, NULL, 1 ]
+[ 115, 0, 116, NULL, NULL ]
[ 131, 4, 133, 132, 4 ]
[ 138, 5, 136, 137, 2 ]
[ 142, 6, 140, 142, 2 ]
@@ -18220,6 +18225,7 @@ Ready.
% a, L3, L10 # name
% int, bigint, bigint # type
% 3, 4, 2 # length
+[ 107, 635, 0 ]
[ 131, 793, 4 ]
[ 149, 880, 7 ]
[ 153, 905, 8 ]
@@ -23008,6 +23014,7 @@ Ready.
% bigint, int, bigint, bigint # type
% 4, 3, 2, 2 # length
[ NULL, 114, -1, 1 ]
+[ 635, 108, -1, 0 ]
[ 738, 122, 1, 2 ]
[ 793, 133, -4, 4 ]
[ 827, 136, 2, 5 ]
@@ -26778,7 +26785,9 @@ Ready.
% a, L6, L15, L21 # name
% int, bigint, bigint, bigint # type
% 3, 2, 1, 4 # length
+[ 104, 0, 0, NULL ]
[ 121, 2, 0, 1226 ]
+[ 115, 0, 0, NULL ]
[ 131, 4, 0, 1325 ]
[ 138, 5, 0, 1371 ]
[ 142, 6, 0, 1411 ]
@@ -26801,9 +26810,9 @@ Ready.
% a, L6, L15, L21 # name
% int, bigint, bigint, bigint # type
% 3, 2, 1, 4 # length
-[ NULL, 18, 0, NULL ]
[ 104, 0, 0, NULL ]
[ 115, 0, 0, NULL ]
+[ NULL, 18, 0, NULL ]
[ 121, 2, 0, 1226 ]
[ 131, 4, 0, 1325 ]
[ 138, 5, 0, 1371 ]
@@ -30215,6 +30224,7 @@ Ready.
% L2, d, L5, L7, L11, L16 # name
% int, int, bigint, smallint, bigint, bigint # type
% 3, 3, 3, 3, 4, 2 # length
+[ 107, 108, 107, 333, 1067, 0 ]
[ 121, 122, NULL, 333, 1226, 2 ]
[ 127, 128, 127, 333, 1272, 3 ]
[ 131, 133, 132, 444, 1325, 4 ]
@@ -30295,6 +30305,7 @@ Ready.
% L2, d, L5, L7, L11, L16 # name
% int, int, bigint, smallint, bigint, bigint # type
% 3, 3, 3, 3, 4, 2 # length
+[ 107, 108, 107, 333, 1067, 0 ]
[ 121, 122, NULL, 333, 1226, 2 ]
[ 127, 128, 127, 333, 1272, 3 ]
[ 131, 133, 132, 444, 1325, 4 ]
@@ -30375,6 +30386,7 @@ Ready.
% L2, d, L5, L7, L11, L16 # name
% int, int, bigint, smallint, bigint, bigint # type
% 3, 3, 3, 3, 4, 2 # length
+[ 107, 108, 107, 333, 1067, 0 ]
[ 121, 122, NULL, 333, 1226, 2 ]
[ 127, 128, 127, 333, 1272, 3 ]
[ 131, 133, 132, 444, 1325, 4 ]
@@ -33356,10 +33368,10 @@ Ready.
% a, L3, e, L10 # name
% int, smallint, int, bigint # type
% 3, 3, 3, 2 # length
+[ NULL, 555, 110, 1 ]
[ 107, 333, 109, 0 ]
-[ NULL, 555, 110, 1 ]
+[ 127, 333, 126, 3 ]
[ 115, 333, 117, 0 ]
-[ 127, 333, 126, 3 ]
[ 131, 444, 132, 4 ]
[ 138, 111, 135, 5 ]
[ 142, 111, 144, 6 ]
@@ -34934,8 +34946,8 @@ Ready.
% bigint, int, bigint, smallint, smallint, bigint # type
% 3, 3, 2, 3, 3, 2 # length
[ 317, 107, 0, 333, 333, 2 ]
+[ 385, 127, 3, 333, 222, -2 ]
[ NULL, 115, 0, 333, 444, NULL ]
-[ 385, 127, 3, 333, 222, -2 ]
[ 483, 163, 10, 333, 444, 3 ]
[ 560, 188, 15, 444, 333, 2 ]
[ 579, 191, 16, 444, 222, -3 ]
@@ -36706,8 +36718,8 @@ Ready.
% 2, 3, 3, 2, 2, 2, 4 # length
[ 24, 711, NULL, NULL, 1, NULL, 2360 ]
[ 0, 317, 106, -1, -1, -2, 1050 ]
+[ 3, 385, 125, 4, 2, -3, 1290 ]
[ 0, NULL, 119, NULL, -1, 3, NULL ]
-[ 3, 385, 125, 4, 2, -3, 1290 ]
[ 4, 391, 134, -4, 1, 1, 1300 ]
[ 5, 416, 137, 2, 1, 1, 1390 ]
[ 6, 428, 141, 2, -4, 1, 1430 ]
@@ -37464,9 +37476,9 @@ Ready.
% bigint, bigint, smallint, bigint, bigint, bigint # type
% 4, 2, 3, 1, 2, 2 # length
[ 1050, 0, 333, 0, -2, -1 ]
-[ NULL, 0, 333, 0, 3, -1 ]
[ 1240, 2, 333, 0, 1, NULL ]
[ 1290, 3, 333, 0, -3, 2 ]
+[ NULL, 0, 333, 0, 3, -1 ]
[ 1300, 4, 444, 0, 1, 1 ]
[ 1390, 5, 111, 0, 1, 1 ]
[ 1430, 6, 111, 0, 1, -4 ]
@@ -39027,6 +39039,7 @@ Ready.
% 3, 2, 3, 3, 3 # length
[ 106, 0, 333, 107, 317 ]
[ 113, 1, 555, NULL, NULL ]
+[ 106, 0, 333, 107, 317 ]
[ 123, 2, 333, 121, 369 ]
[ 134, 4, 444, 131, 391 ]
[ 137, 5, 111, 138, 416 ]
@@ -43644,6 +43657,7 @@ Ready.
% L6, L14, a, L21, L23, L25, L27 # name
% bigint, bigint, int, bigint, bigint, bigint, smallint # type
% 4, 2, 3, 4, 4, 2, 3 # length
+[ 1050, 0, 107, 635, 1612, -2, 333 ]
[ 1600, 10, 163, 966, 2432, -3, 444 ]
[ 1700, 12, 174, 1030, 2579, 1, 444 ]
[ 364, 14, 182, 1096, 2728, 1, 333 ]
@@ -54249,8 +54263,8 @@ Ready.
% bigint, int, smallint, bigint, bigint, int # type
% 4, 3, 3, 2, 3, 3 # length
[ 1612, 107, 333, 0, 317, 106 ]
+[ 1902, 127, 333, 3, 385, 125 ]
[ NULL, 115, 333, 0, NULL, 119 ]
-[ 1902, 127, 333, 3, 385, 125 ]
[ 2432, 163, 333, 10, 483, 161 ]
[ 2806, 188, 444, 15, 560, 187 ]
[ 2878, 191, 444, 16, 579, 193 ]
@@ -55554,9 +55568,9 @@ Ready.
[ 11, 1, 333, 1670, NULL, 1 ]
[ 0, NULL, 444, NULL, 101, NULL ]
[ 0, 2, 333, 1050, 108, -1 ]
-[ 0, NULL, 444, NULL, 116, NULL ]
[ 2, -3, 222, 1240, 122, 1 ]
[ 3, -2, 222, 1290, 128, 4 ]
+[ 0, NULL, 444, NULL, 116, NULL ]
[ 4, 1, 333, 1300, 133, -4 ]
[ 5, -1, 222, 1390, 136, 2 ]
[ 6, -1, 222, 1430, 140, 2 ]
@@ -57986,9 +58000,9 @@ Ready.
% bigint, bigint, int, smallint, bigint # type
% 2, 1, 3, 3, 2 # length
[ 0, 1, 106, 333, -2 ]
-[ 0, NULL, 119, 444, 3 ]
[ 2, 1, 123, 222, 1 ]
[ 3, 4, 125, 222, -3 ]
+[ 0, NULL, 119, 444, 3 ]
[ 5, 2, 137, 222, 1 ]
[ 6, 2, 141, 222, 1 ]
[ 8, 1, 150, 333, NULL ]
@@ -64533,6 +64547,7 @@ Ready.
% L2, L7, a, L13 # name
% bigint, bigint, int, bigint # type
% 1, 2, 3, 4 # length
+[ 1, 0, 107, 1067 ]
[ 4, 4, 131, 1325 ]
[ 2, 7, 149, NULL ]
[ 1, 8, 153, NULL ]
@@ -74040,8 +74055,8 @@ Ready.
% bigint, int, smallint, int, bigint, bigint, int # type
% 2, 3, 3, 3, 4, 1, 3 # length
[ 0, 106, 333, 107, 1067, 0, 107 ]
+[ 3, 125, 222, 127, 1272, 0, 127 ]
[ 0, 119, 444, 115, NULL, 0, 115 ]
-[ 3, 125, 222, 127, 1272, 0, 127 ]
[ 10, 161, 444, 163, 1622, 0, 163 ]
[ 15, 187, 333, 188, 1861, 0, 188 ]
[ 16, 193, 222, 191, 1918, 0, 191 ]
@@ -74799,6 +74814,7 @@ Ready.
% bigint, bigint, smallint, bigint # type
% 4, 4, 3, 2 # length
[ NULL, 1120, 555, 1 ]
+[ 1612, 1050, 333, 0 ]
[ NULL, 1240, 333, 2 ]
[ 1902, 1290, 333, 3 ]
[ 1985, 1300, 444, 4 ]
@@ -74875,6 +74891,7 @@ Ready.
% bigint, bigint, smallint, bigint # type
% 4, 4, 3, 2 # length
[ NULL, 1120, 555, 1 ]
+[ 1612, 1050, 333, 0 ]
[ NULL, 1240, 333, 2 ]
[ 1902, 1290, 333, 3 ]
[ 1985, 1300, 444, 4 ]
@@ -74951,6 +74968,7 @@ Ready.
% bigint, bigint, smallint, bigint # type
% 4, 4, 3, 2 # length
[ NULL, 1120, 555, 1 ]
+[ 1612, 1050, 333, 0 ]
[ NULL, 1240, 333, 2 ]
[ 1902, 1290, 333, 3 ]
[ 1985, 1300, 444, 4 ]
@@ -76001,9 +76019,9 @@ Ready.
% L4, L13, b, L16, L20, d # name
% bigint, bigint, int, bigint, bigint, int # type
% 2, 4, 3, 2, 1, 3 # length
+[ 1, 1120, 112, 4, 1, 114 ]
[ 0, NULL, NULL, NULL, NULL, 101 ]
[ 0, 1050, 105, -1, 1, 108 ]
-[ 1, 1120, 112, 4, 1, 114 ]
[ 2, 1240, 124, NULL, 1, 122 ]
[ 4, 1300, 130, 1, 4, 133 ]
[ 5, 1390, 139, 1, 2, 136 ]
@@ -79108,7 +79126,9 @@ Ready.
% L2, L4, L6, L10, L15 # name
% int, smallint, bigint, bigint, bigint # type
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list