Changeset: bdebb46025c1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bdebb46025c1
Modified Files:
        sql/server/rel_optimizer.c
        sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
        sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.test
        sql/test/BugTracker-2015/Tests/large_join.Bug-3809.test
        
sql/test/BugTracker-2015/Tests/quantile_function_resolution.Bug-3773.test
        
sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.test
        
sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-0join-query.test
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-0join-view.test
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.test
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.test
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.test
        sql/test/SQLancer/Tests/sqlancer10.test
        sql/test/SQLancer/Tests/sqlancer17.test
        sql/test/Tests/keys.test
        sql/test/Tests/truncate-statements-extra.test
        sql/test/analytics/Tests/analytics00.test
        sql/test/astro/Tests/astro.test
Branch: antipush
Log Message:

Updated optimizers and approved output


diffs (truncated from 1230 to 300 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
@@ -1702,7 +1702,7 @@ rel_simplify_project_fk_join(mvc *sql, s
        /* check for foreign key join */
        if (list_length(r->exps) != 1)
                return r;
-       if (!(je = exps_find_prop(r->exps, PROP_JOINIDX)))
+       if (!(je = exps_find_prop(r->exps, PROP_JOINIDX)) || je->flag != 
cmp_equal)
                return r;
        /* je->l == foreign expression, je->r == primary expression */
        if (rel_find_exp(r->l, je->l)) {
@@ -1713,17 +1713,6 @@ rel_simplify_project_fk_join(mvc *sql, s
                return r;
        }
 
-       (void)sql;
-#if 0
-       if (fk_left && is_join(rl->op) && !rel_is_ref(rl)) {
-               rl = rel_simplify_project_fk_join(sql, rl, pexps, changes);
-               r->l = rl;
-       }
-       if (!fk_left && is_join(rr->op) && !rel_is_ref(rr)) {
-               rr = rel_simplify_project_fk_join(sql, rr, pexps, changes);
-               r->r = rr;
-       }
-#endif
        /* primary side must be a full table */
        if ((fk_left && (!is_left(r->op) && !is_full(r->op)) && 
!is_basetable(rr->op)) ||
                (!fk_left && (!is_right(r->op) && !is_full(r->op)) && 
!is_basetable(rl->op)))
@@ -1763,7 +1752,7 @@ rel_simplify_count_fk_join(mvc *sql, sql
        /* check for foreign key join */
        if (list_length(r->exps) != 1)
                return r;
-       if (!(je = exps_find_prop(r->exps, PROP_JOINIDX)))
+       if (!(je = exps_find_prop(r->exps, PROP_JOINIDX)) || je->flag != 
cmp_equal)
                return r;
        /* je->l == foreign expression, je->r == primary expression */
        if (rel_find_exp(r->l, je->l)) {
@@ -1829,7 +1818,7 @@ rel_simplify_fk_joins(visitor *v, sql_re
        if (is_simple_project(rel->op))
                r = rel->l;
 
-       while (is_simple_project(rel->op) && r && list_length(r->exps) == 1 && 
is_join(r->op) && !(rel_is_ref(r))) {
+       while (is_simple_project(rel->op) && r && list_length(r->exps) == 1 && 
(is_join(r->op) || r->op == op_semi) && !(rel_is_ref(r))) {
                sql_rel *or = r;
 
                r = rel_simplify_project_fk_join(v->sql, r, rel->exps, rel->r, 
&v->changes);
@@ -1845,7 +1834,7 @@ rel_simplify_fk_joins(visitor *v, sql_re
        while(r && is_simple_project(r->op))
                r = r->l;
 
-       while (is_groupby(rel->op) && !rel_is_ref(rel) && r && is_join(r->op) 
&& list_length(r->exps) == 1 && !(rel_is_ref(r)) &&
+       while (is_groupby(rel->op) && !rel_is_ref(rel) && r && (is_join(r->op) 
|| r->op == op_semi) && list_length(r->exps) == 1 && !(rel_is_ref(r)) &&
                   /* currently only single count aggregation is handled, no 
other projects or aggregation */
                   list_length(rel->exps) == 1 && 
exp_aggr_is_count(rel->exps->h->data)) {
                sql_rel *or = r;
@@ -5270,7 +5259,7 @@ rel_push_join_down_outer(visitor *v, sql
 static int
 find_projection_for_join2semi(sql_rel *rel)
 {
-       if (is_simple_project(rel->op) || is_groupby(rel->op) || 
is_inter(rel->op) || is_except(rel->op) || is_basetable(rel->op) || 
(is_union(rel->op) && need_distinct(rel))) {
+       if (is_simple_project(rel->op) || is_groupby(rel->op) || 
is_inter(rel->op) || is_except(rel->op) || is_base(rel->op) || 
(is_union(rel->op) && need_distinct(rel))) {
                if (rel->card < CARD_AGGR) /* const or groupby without group by 
exps */
                        return ALL_VALUES_DISTINCT;
                if (list_length(rel->exps) == 1) {
diff --git a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test 
b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
--- a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
+++ b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.test
@@ -113,8 +113,8 @@ Select b.* FROM open_auctions o, bidder 
 ----
 REF 1 (2)
 join (
-| table("sys"."open_auctions") [ "open_auctions"."open_auction_id" NOT NULL as 
"o"."open_auction_id", "open_auctions"."%TID%" NOT NULL as "o"."%TID%" ],
-| table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL  as "b"."id", 
"bidder"."open_auction_id" NOT NULL as "b"."open_auction_id", "bidder"."date" 
NOT NULL as "b"."date", "bidder"."time" NOT NULL as "b"."time", 
"bidder"."personref" NOT NULL as "b"."personref", "bidder"."increase" NOT NULL 
as "b"."increase", "bidder"."%TID%" NOT NULL as "b"."%TID%" ]
+| table("sys"."open_auctions") [ "open_auctions"."open_auction_id" NOT NULL as 
"o"."open_auction_id", "open_auctions"."%TID%" NOT NULL UNIQUE as "o"."%TID%" ],
+| table("sys"."bidder") [ "bidder"."id" NOT NULL UNIQUE HASHCOL  as "b"."id", 
"bidder"."open_auction_id" NOT NULL as "b"."open_auction_id", "bidder"."date" 
NOT NULL as "b"."date", "bidder"."time" NOT NULL as "b"."time", 
"bidder"."personref" NOT NULL as "b"."personref", "bidder"."increase" NOT NULL 
as "b"."increase", "bidder"."%TID%" NOT NULL UNIQUE as "b"."%TID%" ]
 ) [ "o"."open_auction_id" NOT NULL = "b"."open_auction_id" NOT NULL ]
 REF 2 (2)
 single left outer join (
@@ -124,8 +124,8 @@ single left outer join (
 | | | project (
 | | | | crossproduct (
 | | | | | project (
-| | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL  as 
"b3"."id", "bidder"."increase" NOT NULL as "b3"."increase", "bidder"."%TID%" 
NOT NULL as "b3"."%TID%" ]
-| | | | | ) [ "b3"."id" NOT NULL HASHCOL , "b3"."increase" NOT NULL, 
"b3"."%TID%" NOT NULL, "b3"."id" NOT NULL HASHCOL , "b3"."increase" NOT NULL, 
"b3"."%TID%" NOT NULL, "b3"."increase" NOT NULL as "%2"."%2" ],
+| | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL UNIQUE HASHCOL  as 
"b3"."id", "bidder"."increase" NOT NULL as "b3"."increase", "bidder"."%TID%" 
NOT NULL UNIQUE as "b3"."%TID%" ]
+| | | | | ) [ "b3"."id" NOT NULL UNIQUE HASHCOL , "b3"."increase" NOT NULL, 
"b3"."%TID%" NOT NULL UNIQUE, "b3"."id" NOT NULL HASHCOL , "b3"."increase" NOT 
NULL, "b3"."%TID%" NOT NULL, "b3"."increase" NOT NULL as "%2"."%2" ],
 | | | | | group by (
 | | | | | | join (
 | | | | | | | group by (
@@ -133,12 +133,12 @@ single left outer join (
 | | | | | | | | | & REF 1 
 | | | | | | | | ) [ "o"."open_auction_id" NOT NULL ]
 | | | | | | | ) [ "o"."open_auction_id" NOT NULL ] [ "o"."open_auction_id" NOT 
NULL ],
-| | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL  as 
"b3a"."id", "bidder"."open_auction_id" NOT NULL as "b3a"."open_auction_id", 
"bidder"."%TID%" NOT NULL as "b3a"."%TID%" ]
+| | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL UNIQUE HASHCOL  
as "b3a"."id", "bidder"."open_auction_id" NOT NULL as "b3a"."open_auction_id", 
"bidder"."%TID%" NOT NULL UNIQUE as "b3a"."%TID%" ]
 | | | | | | ) [ "b3a"."open_auction_id" NOT NULL = "o"."open_auction_id" NOT 
NULL ]
-| | | | | ) [ "o"."open_auction_id" NOT NULL ] [ "sys"."min" no nil 
("b3a"."id" NOT NULL HASHCOL ) as "%1"."%1", "o"."open_auction_id" NOT NULL ]
+| | | | | ) [ "o"."open_auction_id" NOT NULL ] [ "sys"."min" no nil 
("b3a"."id" NOT NULL UNIQUE HASHCOL ) as "%1"."%1", "o"."open_auction_id" NOT 
NULL ]
 | | | | ) [  ]
 | | | ) [ "o"."open_auction_id" NOT NULL, "%1"."%1", "b3"."id" NOT NULL 
HASHCOL , "b3"."increase" NOT NULL, "b3"."%TID%" NOT NULL, "%2"."%2" NOT NULL ]
-| | ) [ "b3"."id" NOT NULL HASHCOL  = "%1"."%1" ]
+| | ) [ "b3"."id" NOT NULL UNIQUE HASHCOL  = "%1"."%1" ]
 | ) [ "b3"."id" NOT NULL HASHCOL , "b3"."increase" NOT NULL, "b3"."%TID%" NOT 
NULL, "%1"."%1", "%2"."%2" NOT NULL, "o"."open_auction_id" NOT NULL as 
"%5"."%5" ]
 ) [ "o"."open_auction_id" NOT NULL * = "%5"."%5" NOT NULL ]
 project (
@@ -151,7 +151,7 @@ project (
 | | | | | | project (
 | | | | | | | crossproduct (
 | | | | | | | | project (
-| | | | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL  as 
"b2"."id", "bidder"."increase" NOT NULL as "b2"."increase" ]
+| | | | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL UNIQUE 
HASHCOL  as "b2"."id", "bidder"."increase" NOT NULL as "b2"."increase" ]
 | | | | | | | | ) [ "b2"."id" NOT NULL HASHCOL , "b2"."increase" NOT NULL as 
"%4"."%4" ],
 | | | | | | | | group by (
 | | | | | | | | | join (
@@ -160,17 +160,17 @@ project (
 | | | | | | | | | | | | & REF 2 
 | | | | | | | | | | | ) [ "o"."open_auction_id" NOT NULL ]
 | | | | | | | | | | ) [ "o"."open_auction_id" NOT NULL ] [ 
"o"."open_auction_id" NOT NULL ],
-| | | | | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL HASHCOL  as 
"b2a"."id", "bidder"."open_auction_id" NOT NULL as "b2a"."open_auction_id" ]
+| | | | | | | | | | table("sys"."bidder") [ "bidder"."id" NOT NULL UNIQUE 
HASHCOL  as "b2a"."id", "bidder"."open_auction_id" NOT NULL as 
"b2a"."open_auction_id" ]
 | | | | | | | | | ) [ "b2a"."open_auction_id" NOT NULL = "o"."open_auction_id" 
NOT NULL ]
-| | | | | | | | ) [ "o"."open_auction_id" NOT NULL ] [ "sys"."max" no nil 
("b2a"."id" NOT NULL HASHCOL ) as "%3"."%3", "o"."open_auction_id" NOT NULL ]
+| | | | | | | | ) [ "o"."open_auction_id" NOT NULL ] [ "sys"."max" no nil 
("b2a"."id" NOT NULL UNIQUE HASHCOL ) as "%3"."%3", "o"."open_auction_id" NOT 
NULL ]
 | | | | | | | ) [  ]
 | | | | | | ) [ "o"."open_auction_id" NOT NULL, "%3"."%3", "b2"."id" NOT NULL 
HASHCOL , "%4"."%4" NOT NULL ]
-| | | | | ) [ "b2"."id" NOT NULL HASHCOL  = "%3"."%3" ]
+| | | | | ) [ "b2"."id" NOT NULL UNIQUE HASHCOL  = "%3"."%3" ]
 | | | | ) [ "%4"."%4" NOT NULL, "o"."open_auction_id" NOT NULL as "%6"."%6" ]
 | | | ) [ "o"."open_auction_id" NOT NULL * = "%6"."%6" NOT NULL ]
 | | ) [ "b"."id" NOT NULL HASHCOL , "b"."open_auction_id" NOT NULL, "b"."date" 
NOT NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, "b"."increase" NOT 
NULL, "%2"."%2", "%4"."%4" ]
 | ) [ "sys"."<="("sys"."sql_mul"("%2"."%2", double "2"), "%4"."%4") = boolean 
"true" ]
-) [ "b"."id" NOT NULL HASHCOL , "b"."open_auction_id" NOT NULL, "b"."date" NOT 
NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, "b"."increase" NOT NULL ]
+) [ "b"."id" NOT NULL UNIQUE HASHCOL , "b"."open_auction_id" NOT NULL, 
"b"."date" NOT NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, 
"b"."increase" NOT NULL ]
 
 query ITTTTR rowsort
 Select b.* FROM open_auctions o, bidder b WHERE (select b3.INCREASE from 
bidder b3 where b3.id = (select min(b3a.id) from bidder b3a where 
b3a.open_auction_id = o.open_auction_id)) * 2 <= (Select b2.INCREASE from 
bidder b2 where b2.id = (SELECT MAX(b2a.id) from bidder b2a where 
b2a.open_auction_id = o.open_auction_id)) AND o.open_auction_id = 
b.open_auction_id order by date, time
diff --git 
a/sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.test 
b/sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.test
--- a/sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.test
+++ b/sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.test
@@ -28,8 +28,8 @@ GROUP BY cods, elrik, ether, jaelen, sor
 project (
 | group by (
 | | table("sys"."t2a") [ "t2a"."tib0" ]
-| ) [ tinyint "0" as "sora" ] [ tinyint "0" as "cods", tinyint "0" as "elrik", 
tinyint "0" as "ether", tinyint "0" as "jaelen", "sora" NOT NULL, "sys"."min" 
no nil ("t2a"."tib0") as "%1"."%1" ]
-) [ "cods" NOT NULL, "elrik" NOT NULL, "ether" NOT NULL, "jaelen" NOT NULL, 
"sora" NOT NULL, "%1"."%1" ]
+| ) [ tinyint "0" as "sora" ] [ tinyint "0" as "cods", tinyint "0" as "elrik", 
tinyint "0" as "ether", tinyint "0" as "jaelen", "sora" NOT NULL UNIQUE, 
"sys"."min" no nil ("t2a"."tib0") as "%1"."%1" ]
+) [ "cods" NOT NULL UNIQUE, "elrik" NOT NULL UNIQUE, "ether" NOT NULL UNIQUE, 
"jaelen" NOT NULL UNIQUE, "sora" NOT NULL UNIQUE, "%1"."%1" ]
 
 statement ok
 drop table t2a
diff --git a/sql/test/BugTracker-2015/Tests/large_join.Bug-3809.test 
b/sql/test/BugTracker-2015/Tests/large_join.Bug-3809.test
--- a/sql/test/BugTracker-2015/Tests/large_join.Bug-3809.test
+++ b/sql/test/BugTracker-2015/Tests/large_join.Bug-3809.test
@@ -2166,52 +2166,52 @@ project (
 | | | | | | | | | | | | | | | | | | | | | join (
 | | | | | | | | | | | | | | | | | | | | | | join (
 | | | | | | | | | | | | | | | | | | | | | | | join (
-| | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t18") [ 
"t18"."a18" NOT NULL HASHCOL , "t18"."b18", "t18"."x18" ],
+| | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t18") [ 
"t18"."a18" NOT NULL UNIQUE HASHCOL , "t18"."b18", "t18"."x18" ],
 | | | | | | | | | | | | | | | | | | | | | | | | select (
-| | | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t12") [ 
"t12"."a12" NOT NULL HASHCOL , "t12"."x12" ]
+| | | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t12") [ 
"t12"."a12" NOT NULL UNIQUE HASHCOL , "t12"."x12" ]
 | | | | | | | | | | | | | | | | | | | | | | | | ) [ "t12"."a12" NOT NULL 
HASHCOL  = int "4" ]
 | | | | | | | | | | | | | | | | | | | | | | | ) [ "t18"."b18" = "t12"."a12" 
NOT NULL HASHCOL  ],
-| | | | | | | | | | | | | | | | | | | | | | | table("sys"."t3") [ "t3"."a3" 
NOT NULL HASHCOL , "t3"."b3", "t3"."x3" ]
+| | | | | | | | | | | | | | | | | | | | | | | table("sys"."t3") [ "t3"."a3" 
NOT NULL UNIQUE HASHCOL , "t3"."b3", "t3"."x3" ]
 | | | | | | | | | | | | | | | | | | | | | | ) [ "t3"."b3" = "t18"."a18" NOT 
NULL HASHCOL  ],
-| | | | | | | | | | | | | | | | | | | | | | table("sys"."t10") [ "t10"."a10" 
NOT NULL HASHCOL , "t10"."b10", "t10"."x10" ]
+| | | | | | | | | | | | | | | | | | | | | | table("sys"."t10") [ "t10"."a10" 
NOT NULL UNIQUE HASHCOL , "t10"."b10", "t10"."x10" ]
 | | | | | | | | | | | | | | | | | | | | | ) [ "t10"."b10" = "t3"."a3" NOT NULL 
HASHCOL  ],
-| | | | | | | | | | | | | | | | | | | | | table("sys"."t25") [ "t25"."a25" NOT 
NULL HASHCOL , "t25"."b25", "t25"."x25" ]
+| | | | | | | | | | | | | | | | | | | | | table("sys"."t25") [ "t25"."a25" NOT 
NULL UNIQUE HASHCOL , "t25"."b25", "t25"."x25" ]
 | | | | | | | | | | | | | | | | | | | | ) [ "t10"."a10" NOT NULL HASHCOL  = 
"t25"."b25" ],
-| | | | | | | | | | | | | | | | | | | | table("sys"."t38") [ "t38"."a38" NOT 
NULL HASHCOL , "t38"."b38", "t38"."x38" ]
+| | | | | | | | | | | | | | | | | | | | table("sys"."t38") [ "t38"."a38" NOT 
NULL UNIQUE HASHCOL , "t38"."b38", "t38"."x38" ]
 | | | | | | | | | | | | | | | | | | | ) [ "t25"."a25" NOT NULL HASHCOL  = 
"t38"."b38" ],
-| | | | | | | | | | | | | | | | | | | table("sys"."t52") [ "t52"."a52" NOT 
NULL HASHCOL , "t52"."b52", "t52"."x52" ]
+| | | | | | | | | | | | | | | | | | | table("sys"."t52") [ "t52"."a52" NOT 
NULL UNIQUE HASHCOL , "t52"."b52", "t52"."x52" ]
 | | | | | | | | | | | | | | | | | | ) [ "t38"."a38" NOT NULL HASHCOL  = 
"t52"."b52" ],
-| | | | | | | | | | | | | | | | | | table("sys"."t2") [ "t2"."a2" NOT NULL 
HASHCOL , "t2"."b2", "t2"."x2" ]
+| | | | | | | | | | | | | | | | | | table("sys"."t2") [ "t2"."a2" NOT NULL 
UNIQUE HASHCOL , "t2"."b2", "t2"."x2" ]
 | | | | | | | | | | | | | | | | | ) [ "t52"."a52" NOT NULL HASHCOL  = 
"t2"."b2" ],
-| | | | | | | | | | | | | | | | | table("sys"."t61") [ "t61"."a61" NOT NULL 
HASHCOL , "t61"."b61", "t61"."x61" ]
+| | | | | | | | | | | | | | | | | table("sys"."t61") [ "t61"."a61" NOT NULL 
UNIQUE HASHCOL , "t61"."b61", "t61"."x61" ]
 | | | | | | | | | | | | | | | | ) [ "t2"."a2" NOT NULL HASHCOL  = "t61"."b61" 
],
-| | | | | | | | | | | | | | | | table("sys"."t47") [ "t47"."a47" NOT NULL 
HASHCOL , "t47"."b47", "t47"."x47" ]
+| | | | | | | | | | | | | | | | table("sys"."t47") [ "t47"."a47" NOT NULL 
UNIQUE HASHCOL , "t47"."b47", "t47"."x47" ]
 | | | | | | | | | | | | | | | ) [ "t61"."a61" NOT NULL HASHCOL  = "t47"."b47" 
],
-| | | | | | | | | | | | | | | table("sys"."t37") [ "t37"."a37" NOT NULL 
HASHCOL , "t37"."b37", "t37"."x37" ]
+| | | | | | | | | | | | | | | table("sys"."t37") [ "t37"."a37" NOT NULL UNIQUE 
HASHCOL , "t37"."b37", "t37"."x37" ]
 | | | | | | | | | | | | | | ) [ "t47"."a47" NOT NULL HASHCOL  = "t37"."b37" ],
-| | | | | | | | | | | | | | table("sys"."t54") [ "t54"."a54" NOT NULL HASHCOL 
, "t54"."b54", "t54"."x54" ]
+| | | | | | | | | | | | | | table("sys"."t54") [ "t54"."a54" NOT NULL UNIQUE 
HASHCOL , "t54"."b54", "t54"."x54" ]
 | | | | | | | | | | | | | ) [ "t37"."a37" NOT NULL HASHCOL  = "t54"."b54" ],
-| | | | | | | | | | | | | table("sys"."t8") [ "t8"."a8" NOT NULL HASHCOL , 
"t8"."b8", "t8"."x8" ]
+| | | | | | | | | | | | | table("sys"."t8") [ "t8"."a8" NOT NULL UNIQUE 
HASHCOL , "t8"."b8", "t8"."x8" ]
 | | | | | | | | | | | | ) [ "t54"."a54" NOT NULL HASHCOL  = "t8"."b8" ],
-| | | | | | | | | | | | table("sys"."t20") [ "t20"."a20" NOT NULL HASHCOL , 
"t20"."b20", "t20"."x20" ]
+| | | | | | | | | | | | table("sys"."t20") [ "t20"."a20" NOT NULL UNIQUE 
HASHCOL , "t20"."b20", "t20"."x20" ]
 | | | | | | | | | | | ) [ "t8"."a8" NOT NULL HASHCOL  = "t20"."b20" ],
-| | | | | | | | | | | table("sys"."t55") [ "t55"."a55" NOT NULL HASHCOL , 
"t55"."b55", "t55"."x55" ]
+| | | | | | | | | | | table("sys"."t55") [ "t55"."a55" NOT NULL UNIQUE HASHCOL 
, "t55"."b55", "t55"."x55" ]
 | | | | | | | | | | ) [ "t20"."a20" NOT NULL HASHCOL  = "t55"."b55" ],
-| | | | | | | | | | table("sys"."t9") [ "t9"."a9" NOT NULL HASHCOL , 
"t9"."b9", "t9"."x9" ]
+| | | | | | | | | | table("sys"."t9") [ "t9"."a9" NOT NULL UNIQUE HASHCOL , 
"t9"."b9", "t9"."x9" ]
 | | | | | | | | | ) [ "t55"."a55" NOT NULL HASHCOL  = "t9"."b9" ],
-| | | | | | | | | table("sys"."t30") [ "t30"."a30" NOT NULL HASHCOL , 
"t30"."b30", "t30"."x30" ]
+| | | | | | | | | table("sys"."t30") [ "t30"."a30" NOT NULL UNIQUE HASHCOL , 
"t30"."b30", "t30"."x30" ]
 | | | | | | | | ) [ "t30"."b30" = "t9"."a9" NOT NULL HASHCOL  ],
-| | | | | | | | table("sys"."t32") [ "t32"."a32" NOT NULL HASHCOL , 
"t32"."b32", "t32"."x32" ]
+| | | | | | | | table("sys"."t32") [ "t32"."a32" NOT NULL UNIQUE HASHCOL , 
"t32"."b32", "t32"."x32" ]
 | | | | | | | ) [ "t32"."b32" = "t30"."a30" NOT NULL HASHCOL  ],
-| | | | | | | table("sys"."t22") [ "t22"."a22" NOT NULL HASHCOL , "t22"."b22", 
"t22"."x22" ]
+| | | | | | | table("sys"."t22") [ "t22"."a22" NOT NULL UNIQUE HASHCOL , 
"t22"."b22", "t22"."x22" ]
 | | | | | | ) [ "t22"."b22" = "t32"."a32" NOT NULL HASHCOL  ],
-| | | | | | table("sys"."t43") [ "t43"."a43" NOT NULL HASHCOL , "t43"."b43", 
"t43"."x43" ]
+| | | | | | table("sys"."t43") [ "t43"."a43" NOT NULL UNIQUE HASHCOL , 
"t43"."b43", "t43"."x43" ]
 | | | | | ) [ "t22"."a22" NOT NULL HASHCOL  = "t43"."b43" ],
-| | | | | table("sys"."t29") [ "t29"."a29" NOT NULL HASHCOL , "t29"."b29", 
"t29"."x29" ]
+| | | | | table("sys"."t29") [ "t29"."a29" NOT NULL UNIQUE HASHCOL , 
"t29"."b29", "t29"."x29" ]
 | | | | ) [ "t43"."a43" NOT NULL HASHCOL  = "t29"."b29" ],
-| | | | table("sys"."t21") [ "t21"."a21" NOT NULL HASHCOL , "t21"."b21", 
"t21"."x21" ]
+| | | | table("sys"."t21") [ "t21"."a21" NOT NULL UNIQUE HASHCOL , 
"t21"."b21", "t21"."x21" ]
 | | | ) [ "t29"."a29" NOT NULL HASHCOL  = "t21"."b21" ],
-| | | table("sys"."t50") [ "t50"."a50" NOT NULL HASHCOL , "t50"."b50", 
"t50"."x50" ]
+| | | table("sys"."t50") [ "t50"."a50" NOT NULL UNIQUE HASHCOL , "t50"."b50", 
"t50"."x50" ]
 | | ) [ "t21"."a21" NOT NULL HASHCOL  = "t50"."b50" ],
 | | table("sys"."t63") [ "t63"."b63", "t63"."x63" ]
 | ) [ "t50"."a50" NOT NULL HASHCOL  = "t63"."b63" ]
@@ -2323,52 +2323,52 @@ project (
 | | | | | | | | | | | | | | | | | | | | | join (
 | | | | | | | | | | | | | | | | | | | | | | join (
 | | | | | | | | | | | | | | | | | | | | | | | join (
-| | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t18") [ 
"t18"."a18" NOT NULL HASHCOL , "t18"."b18", "t18"."x18" ],
+| | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t18") [ 
"t18"."a18" NOT NULL UNIQUE HASHCOL , "t18"."b18", "t18"."x18" ],
 | | | | | | | | | | | | | | | | | | | | | | | | select (
-| | | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t12") [ 
"t12"."a12" NOT NULL HASHCOL , "t12"."x12" ]
+| | | | | | | | | | | | | | | | | | | | | | | | | table("sys"."t12") [ 
"t12"."a12" NOT NULL UNIQUE HASHCOL , "t12"."x12" ]
 | | | | | | | | | | | | | | | | | | | | | | | | ) [ "t12"."a12" NOT NULL 
HASHCOL  = int "4" ]
 | | | | | | | | | | | | | | | | | | | | | | | ) [ "t18"."b18" = "t12"."a12" 
NOT NULL HASHCOL  ],
-| | | | | | | | | | | | | | | | | | | | | | | table("sys"."t3") [ "t3"."a3" 
NOT NULL HASHCOL , "t3"."b3", "t3"."x3" ]
+| | | | | | | | | | | | | | | | | | | | | | | table("sys"."t3") [ "t3"."a3" 
NOT NULL UNIQUE HASHCOL , "t3"."b3", "t3"."x3" ]
 | | | | | | | | | | | | | | | | | | | | | | ) [ "t3"."b3" = "t18"."a18" NOT 
NULL HASHCOL  ],
-| | | | | | | | | | | | | | | | | | | | | | table("sys"."t10") [ "t10"."a10" 
NOT NULL HASHCOL , "t10"."b10", "t10"."x10" ]
+| | | | | | | | | | | | | | | | | | | | | | table("sys"."t10") [ "t10"."a10" 
NOT NULL UNIQUE HASHCOL , "t10"."b10", "t10"."x10" ]
 | | | | | | | | | | | | | | | | | | | | | ) [ "t10"."b10" = "t3"."a3" NOT NULL 
HASHCOL  ],
-| | | | | | | | | | | | | | | | | | | | | table("sys"."t25") [ "t25"."a25" NOT 
NULL HASHCOL , "t25"."b25", "t25"."x25" ]
+| | | | | | | | | | | | | | | | | | | | | table("sys"."t25") [ "t25"."a25" NOT 
NULL UNIQUE HASHCOL , "t25"."b25", "t25"."x25" ]
 | | | | | | | | | | | | | | | | | | | | ) [ "t10"."a10" NOT NULL HASHCOL  = 
"t25"."b25" ],
-| | | | | | | | | | | | | | | | | | | | table("sys"."t38") [ "t38"."a38" NOT 
NULL HASHCOL , "t38"."b38", "t38"."x38" ]
+| | | | | | | | | | | | | | | | | | | | table("sys"."t38") [ "t38"."a38" NOT 
NULL UNIQUE HASHCOL , "t38"."b38", "t38"."x38" ]
 | | | | | | | | | | | | | | | | | | | ) [ "t25"."a25" NOT NULL HASHCOL  = 
"t38"."b38" ],
-| | | | | | | | | | | | | | | | | | | table("sys"."t52") [ "t52"."a52" NOT 
NULL HASHCOL , "t52"."b52", "t52"."x52" ]
+| | | | | | | | | | | | | | | | | | | table("sys"."t52") [ "t52"."a52" NOT 
NULL UNIQUE HASHCOL , "t52"."b52", "t52"."x52" ]
 | | | | | | | | | | | | | | | | | | ) [ "t38"."a38" NOT NULL HASHCOL  = 
"t52"."b52" ],
-| | | | | | | | | | | | | | | | | | table("sys"."t2") [ "t2"."a2" NOT NULL 
HASHCOL , "t2"."b2", "t2"."x2" ]
+| | | | | | | | | | | | | | | | | | table("sys"."t2") [ "t2"."a2" NOT NULL 
UNIQUE HASHCOL , "t2"."b2", "t2"."x2" ]
 | | | | | | | | | | | | | | | | | ) [ "t52"."a52" NOT NULL HASHCOL  = 
"t2"."b2" ],
-| | | | | | | | | | | | | | | | | table("sys"."t61") [ "t61"."a61" NOT NULL 
HASHCOL , "t61"."b61", "t61"."x61" ]
+| | | | | | | | | | | | | | | | | table("sys"."t61") [ "t61"."a61" NOT NULL 
UNIQUE HASHCOL , "t61"."b61", "t61"."x61" ]
 | | | | | | | | | | | | | | | | ) [ "t2"."a2" NOT NULL HASHCOL  = "t61"."b61" 
],
-| | | | | | | | | | | | | | | | table("sys"."t47") [ "t47"."a47" NOT NULL 
HASHCOL , "t47"."b47", "t47"."x47" ]
+| | | | | | | | | | | | | | | | table("sys"."t47") [ "t47"."a47" NOT NULL 
UNIQUE HASHCOL , "t47"."b47", "t47"."x47" ]
 | | | | | | | | | | | | | | | ) [ "t61"."a61" NOT NULL HASHCOL  = "t47"."b47" 
],
-| | | | | | | | | | | | | | | table("sys"."t37") [ "t37"."a37" NOT NULL 
HASHCOL , "t37"."b37", "t37"."x37" ]
+| | | | | | | | | | | | | | | table("sys"."t37") [ "t37"."a37" NOT NULL UNIQUE 
HASHCOL , "t37"."b37", "t37"."x37" ]
 | | | | | | | | | | | | | | ) [ "t47"."a47" NOT NULL HASHCOL  = "t37"."b37" ],
-| | | | | | | | | | | | | | table("sys"."t54") [ "t54"."a54" NOT NULL HASHCOL 
, "t54"."b54", "t54"."x54" ]
+| | | | | | | | | | | | | | table("sys"."t54") [ "t54"."a54" NOT NULL UNIQUE 
HASHCOL , "t54"."b54", "t54"."x54" ]
 | | | | | | | | | | | | | ) [ "t37"."a37" NOT NULL HASHCOL  = "t54"."b54" ],
-| | | | | | | | | | | | | table("sys"."t8") [ "t8"."a8" NOT NULL HASHCOL , 
"t8"."b8", "t8"."x8" ]
+| | | | | | | | | | | | | table("sys"."t8") [ "t8"."a8" NOT NULL UNIQUE 
HASHCOL , "t8"."b8", "t8"."x8" ]
 | | | | | | | | | | | | ) [ "t54"."a54" NOT NULL HASHCOL  = "t8"."b8" ],
-| | | | | | | | | | | | table("sys"."t20") [ "t20"."a20" NOT NULL HASHCOL , 
"t20"."b20", "t20"."x20" ]
+| | | | | | | | | | | | table("sys"."t20") [ "t20"."a20" NOT NULL UNIQUE 
HASHCOL , "t20"."b20", "t20"."x20" ]
 | | | | | | | | | | | ) [ "t8"."a8" NOT NULL HASHCOL  = "t20"."b20" ],
-| | | | | | | | | | | table("sys"."t55") [ "t55"."a55" NOT NULL HASHCOL , 
"t55"."b55", "t55"."x55" ]
+| | | | | | | | | | | table("sys"."t55") [ "t55"."a55" NOT NULL UNIQUE HASHCOL 
, "t55"."b55", "t55"."x55" ]
 | | | | | | | | | | ) [ "t20"."a20" NOT NULL HASHCOL  = "t55"."b55" ],
-| | | | | | | | | | table("sys"."t9") [ "t9"."a9" NOT NULL HASHCOL , 
"t9"."b9", "t9"."x9" ]
+| | | | | | | | | | table("sys"."t9") [ "t9"."a9" NOT NULL UNIQUE HASHCOL , 
"t9"."b9", "t9"."x9" ]
 | | | | | | | | | ) [ "t55"."a55" NOT NULL HASHCOL  = "t9"."b9" ],
-| | | | | | | | | table("sys"."t30") [ "t30"."a30" NOT NULL HASHCOL , 
"t30"."b30", "t30"."x30" ]
+| | | | | | | | | table("sys"."t30") [ "t30"."a30" NOT NULL UNIQUE HASHCOL , 
"t30"."b30", "t30"."x30" ]
 | | | | | | | | ) [ "t30"."b30" = "t9"."a9" NOT NULL HASHCOL  ],
-| | | | | | | | table("sys"."t32") [ "t32"."a32" NOT NULL HASHCOL , 
"t32"."b32", "t32"."x32" ]
+| | | | | | | | table("sys"."t32") [ "t32"."a32" NOT NULL UNIQUE HASHCOL , 
"t32"."b32", "t32"."x32" ]
 | | | | | | | ) [ "t32"."b32" = "t30"."a30" NOT NULL HASHCOL  ],
-| | | | | | | table("sys"."t22") [ "t22"."a22" NOT NULL HASHCOL , "t22"."b22", 
"t22"."x22" ]
+| | | | | | | table("sys"."t22") [ "t22"."a22" NOT NULL UNIQUE HASHCOL , 
"t22"."b22", "t22"."x22" ]
 | | | | | | ) [ "t22"."b22" = "t32"."a32" NOT NULL HASHCOL  ],
-| | | | | | table("sys"."t43") [ "t43"."a43" NOT NULL HASHCOL , "t43"."b43", 
"t43"."x43" ]
+| | | | | | table("sys"."t43") [ "t43"."a43" NOT NULL UNIQUE HASHCOL , 
"t43"."b43", "t43"."x43" ]
 | | | | | ) [ "t22"."a22" NOT NULL HASHCOL  = "t43"."b43" ],
-| | | | | table("sys"."t29") [ "t29"."a29" NOT NULL HASHCOL , "t29"."b29", 
"t29"."x29" ]
+| | | | | table("sys"."t29") [ "t29"."a29" NOT NULL UNIQUE HASHCOL , 
"t29"."b29", "t29"."x29" ]
 | | | | ) [ "t43"."a43" NOT NULL HASHCOL  = "t29"."b29" ],
-| | | | table("sys"."t21") [ "t21"."a21" NOT NULL HASHCOL , "t21"."b21", 
"t21"."x21" ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to