Changeset: 75f7c67da408 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=75f7c67da408 Modified Files: sql/benchmarks/tpcds/Tests/44.stable.out sql/benchmarks/tpcds/Tests/54.stable.out sql/server/rel_optimizer.c sql/server/rel_unnest.c sql/storage/store.c sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.stable.out sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6477.stable.out sql/test/mergetables/Tests/sqlsmith-exists.stable.out sql/test/subquery/Tests/correlated.stable.out Branch: default Log Message:
merged with liniear-hashing diffs (truncated from 325 to 300 lines): diff --git a/sql/benchmarks/tpcds/Tests/44.stable.out b/sql/benchmarks/tpcds/Tests/44.stable.out --- a/sql/benchmarks/tpcds/Tests/44.stable.out +++ b/sql/benchmarks/tpcds/Tests/44.stable.out @@ -41,7 +41,7 @@ stdout of test '44` in directory 'sql/be # HAVING avg(ss_net_profit) > 0.9* # (SELECT avg(ss_net_profit) rank_col # FROM store_sales -% sys.asceding, sys., sys. # table_name +% .asceding, sys., sys. # table_name % rnk, best_performing, worst_performing # name % int, char, char # type % 2, 50, 50 # length diff --git a/sql/benchmarks/tpcds/Tests/54.stable.out b/sql/benchmarks/tpcds/Tests/54.stable.out --- a/sql/benchmarks/tpcds/Tests/54.stable.out +++ b/sql/benchmarks/tpcds/Tests/54.stable.out @@ -39,7 +39,7 @@ stdout of test '54` in directory 'sql/be # date_dim, # customer # WHERE sold_date_sk = d_date_sk -% sys.segments, sys., sys. # table_name +% .segments, ., . # table_name % segment, num_customers, segment_base # name % int, bigint, bigint # type % 5, 1, 6 # length 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 @@ -5034,7 +5034,7 @@ rel_push_join_down_union(mvc *sql, sql_r list *exps = rel->exps; sql_exp *je = !list_empty(exps)?exps->h->data:NULL; - if (!l || !r || need_distinct(l) || need_distinct(r)) + if (!l || !r || need_distinct(l) || need_distinct(r) || rel_is_ref(l) || rel_is_ref(r)) return rel; if (l->op == op_project) l = l->l; diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -609,7 +609,6 @@ move_join_exps(mvc *sql, sql_rel *j, sql static sql_rel * rel_general_unnest(mvc *sql, sql_rel *rel, list *ad) { - /* current unnest only possible for equality joins, <, <> etc needs more work */ if (rel && (is_join(rel->op) || is_semi(rel->op)) && is_dependent(rel) && ad) { list *fd; node *n, *m; @@ -653,7 +652,7 @@ rel_general_unnest(mvc *sql, sql_rel *re l = exp_ref(sql->sa, l); r = exp_ref(sql->sa, r); - e = exp_compare(sql->sa, l, r, (is_outerjoin(rel->op)|is_semi(rel->op))?cmp_equal_nil:cmp_equal); + e = exp_compare(sql->sa, l, r, cmp_equal_nil); if (!rel->exps) rel->exps = sa_list(sql->sa); append(rel->exps, e); @@ -1477,7 +1476,7 @@ rewrite_exp_rel(mvc *sql, sql_rel *rel, { (void)depth; if (exp_has_rel(e) && !is_ddl(rel->op)) { - sql_exp *ne = rewrite_inner(sql, rel, exp_rel_get_rel(sql->sa, e), op_join); + sql_exp *ne = rewrite_inner(sql, rel, exp_rel_get_rel(sql->sa, e), depth?op_left:op_join); if (!ne) return ne; @@ -1904,7 +1903,7 @@ rewrite_anyequal(mvc *sql, sql_rel *rel, } } - if (is_project(rel->op) || depth > 0) { + if (is_project(rel->op) || depth > 0 || (!is_tuple && rsq && rel_has_freevar(sql, rsq) && !is_anyequal(sf))) { list *exps = NULL; sql_exp *rid, *lid, *a = NULL; sql_rel *sq = lsq; @@ -2381,8 +2380,9 @@ rewrite_ifthenelse(mvc *sql, sql_rel *re list *l = e->l; sql_exp *cond = l->h->data; sql_subfunc *nf = cond->f; + sql_rel *inner = rel->l; - if (has_nil(cond) && (cond->type != e_func || !is_isnull_func(nf))) { + if ((has_nil(cond) || (inner && is_outerjoin(inner->op))) && (cond->type != e_func || !is_isnull_func(nf))) { /* add is null */ sql_exp *condnil = rel_unop_(sql, rel, cond, NULL, "isnull", card_value); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3623,12 +3623,12 @@ trans_init(sql_trans *tr, backend_stack } if (pt->members.set && t->members.set) for (i = pt->members.set->h, j = t->members.set->h; i && j; i = i->next, j = j->next ) { - sql_part *pt = i->data; /* parent transactions part */ - sql_part *p = j->data; - - if (pt->base.id == p->base.id) { - p->base.rtime = p->base.wtime = 0; - p->base.stime = pt->base.wtime; + sql_part *pc = i->data; /* parent transactions part */ + sql_part *c = j->data; + + if (pc->base.id == c->base.id) { + c->base.rtime = c->base.wtime = 0; + c->base.stime = pc->base.wtime; } else { /* for now assert */ assert(0); @@ -4529,7 +4529,7 @@ static int reset_type(sql_trans *tr, sql_type *ft, sql_type *pft) { /* did we access the type or is the global changed after we started */ - if (ft->base.rtime || ft->base.wtime || tr->stime < pft->base.wtime) { + if (ft->base.rtime || ft->base.wtime || ft->base.stime < pft->base.wtime) { ft->sqlname = pft->sqlname; ft->radix = pft->radix; @@ -4547,7 +4547,7 @@ static int reset_func(sql_trans *tr, sql_func *ff, sql_func *pff) { /* did we access the type or is the global changed after we started */ - if (ff->base.rtime || ff->base.wtime || tr->stime < pff->base.wtime) { + if (ff->base.rtime || ff->base.wtime || ff->base.stime < pff->base.wtime) { ff->imp = pff->imp; ff->mod = pff->mod; diff --git a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out --- a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out +++ b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out @@ -97,7 +97,7 @@ join ( | | | ) [ "o"."open_auction_id" NOT NULL, "b3"."increase" NOT NULL as "%2"."%2" ] | | ) [ "o"."open_auction_id" NOT NULL ] [ sys.zero_or_one("%2"."%2" NOT NULL) NOT NULL as "%3"."%3", "o"."open_auction_id" NOT NULL ] | ) [ "%3"."%3" NOT NULL, "o"."open_auction_id" NOT NULL as "%25"."%25" ] -) [ "o"."open_auction_id" NOT NULL = "%25"."%25" NOT NULL ] +) [ "o"."open_auction_id" NOT NULL =* "%25"."%25" NOT NULL ] project ( | select ( | | join ( @@ -123,7 +123,7 @@ project ( | | | | | ) [ "o"."open_auction_id" NOT NULL, "b2"."increase" NOT NULL as "%5"."%5" ] | | | | ) [ "o"."open_auction_id" NOT NULL ] [ sys.zero_or_one("%5"."%5" NOT NULL) NOT NULL as "%6"."%6", "o"."open_auction_id" NOT NULL ] | | | ) [ "%6"."%6" NOT NULL, "o"."open_auction_id" NOT NULL as "%47"."%47" ] -| | ) [ "o"."open_auction_id" NOT NULL = "%47"."%47" NOT NULL ] +| | ) [ "o"."open_auction_id" NOT NULL =* "%47"."%47" NOT NULL ] | ) [ sys.sql_mul("%3"."%3" NOT NULL, double "2") <= "%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 ] #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-2017/Tests/crash_on_NULL_ptr.Bug-6130.stable.out b/sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.stable.out --- a/sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.stable.out +++ b/sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.stable.out @@ -232,7 +232,7 @@ stdout of test 'crash_on_NULL_ptr.Bug-61 # SELECT t.id, t.name, p.creationDate # FROM messages p, message_tags pt, tags t # WHERE p.creator IN (SELECT * FROM friends1) -% sys.resultset, sys.resultset # table_name +% .resultset, .resultset # table_name % name, count # name % varchar, bigint # type % 0, 1 # length diff --git a/sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6477.stable.out b/sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6477.stable.out --- a/sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6477.stable.out +++ b/sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6477.stable.out @@ -54,7 +54,7 @@ stdout of test 'sqlsmith.Bug-6477` in di # from # tab0 as ref_1 # left join tab1 as ref_2 -% sys., sys., sys., sys., sys., sys., sys. # table_name +% ., ., ., ., ., ., . # table_name % c0, c1, c2, c3, c4, c5, c6 # name % timestamp, int, int, int, timestamp, int, int # type % 26, 4, 4, 4, 26, 4, 4 # length diff --git a/sql/test/mergetables/Tests/sqlsmith-exists.stable.out b/sql/test/mergetables/Tests/sqlsmith-exists.stable.out --- a/sql/test/mergetables/Tests/sqlsmith-exists.stable.out +++ b/sql/test/mergetables/Tests/sqlsmith-exists.stable.out @@ -222,13 +222,22 @@ stdout of test 'sqlsmith-exists` in dire # subq_0.c5 AS c11, # subq_0.c4 AS c12 # FROM -% sys. # table_name +% . # table_name % c0 # name % int # type % 1 # length [ 1 ] [ 2 ] [ 3 ] +#SELECT 1 FROM integers WHERE CASE WHEN EXISTS (SELECT 1 WHERE i IS NULL) THEN true ELSE true END; +% . # table_name +% single_value # name +% tinyint # type +% 1 # length +[ 1 ] +[ 1 ] +[ 1 ] +[ 1 ] #select # subq_1.c1 as c0, # subq_1.c2 as c1, diff --git a/sql/test/subquery/Tests/correlated.stable.out b/sql/test/subquery/Tests/correlated.stable.out --- a/sql/test/subquery/Tests/correlated.stable.out +++ b/sql/test/subquery/Tests/correlated.stable.out @@ -562,16 +562,16 @@ stdout of test 'correlated` in directory [ 12, false ] [ 13, false ] #SELECT "str", "str"=ANY(SELECT str2 FROM test2) FROM test; -% .test, .%11 # table_name -% str, %11 # name +% .test, .%12 # table_name +% str, %12 # name % varchar, boolean # type % 1, 5 # length [ "a", true ] [ "b", true ] [ "c", false ] #SELECT "str", "str"=ANY(SELECT str2 FROM test2 WHERE test.a<>test2.a) FROM test; -% .test, .%13 # table_name -% str, %13 # name +% .test, .%14 # table_name +% str, %14 # name % varchar, boolean # type % 1, 5 # length [ "a", false ] @@ -620,7 +620,7 @@ stdout of test 'correlated` in directory % 1, 1 # length [ 1, 2 ] #SELECT * FROM integers s1 INNER JOIN integers s2 ON (SELECT s1.i=s2.i) ORDER BY s1.i; -% sys.s1, sys.s2 # table_name +% .s1, .s2 # table_name % i, i # name % int, int # type % 1, 1 # length @@ -628,7 +628,7 @@ stdout of test 'correlated` in directory [ 2, 2 ] [ 3, 3 ] #SELECT * FROM integers s1 INNER JOIN integers s2 ON (SELECT s1.i=i FROM integers WHERE s2.i=i) ORDER BY s1.i; -% sys.s1, sys.s2 # table_name +% .s1, .s2 # table_name % i, i # name % int, int # type % 1, 1 # length @@ -664,7 +664,7 @@ stdout of test 'correlated` in directory [ 3, 12 ] #SELECT i, (SELECT row_number() OVER (ORDER BY i)) FROM integers i1 ORDER BY i; --Should we support correlated expressions inside PARTITION BY and ORDER BY on Window functions? % .i1, . # table_name -% i, %1 # name +% i, %4 # name % int, int # type % 1, 1 # length [ NULL, 1 ] @@ -717,7 +717,7 @@ stdout of test 'correlated` in directory [ 3, 51 ] #SELECT i, (SELECT row_number() OVER (ORDER BY i) FROM integers WHERE i1.i=i) FROM integers i1 ORDER BY i; % .i1, . # table_name -% i, %3 # name +% i, %5 # name % int, int # type % 1, 1 # length [ NULL, NULL ] @@ -726,7 +726,7 @@ stdout of test 'correlated` in directory [ 3, 1 ] #SELECT i1.i, (SELECT rank() OVER (ORDER BY i) FROM integers WHERE i1.i=i) FROM integers i1, integers i2 ORDER BY i1.i; % .i1, . # table_name -% i, %3 # name +% i, %5 # name % int, int # type % 1, 1 # length [ NULL, NULL ] @@ -747,7 +747,7 @@ stdout of test 'correlated` in directory [ 3, 1 ] #SELECT i1.i, (SELECT row_number() OVER (ORDER BY i) FROM integers WHERE i1.i=i) FROM integers i1, integers i2 ORDER BY i1.i; % .i1, . # table_name -% i, %3 # name +% i, %5 # name % int, int # type % 1, 1 # length [ NULL, NULL ] @@ -768,7 +768,7 @@ stdout of test 'correlated` in directory [ 3, 1 ] #SELECT i, CAST((SELECT SUM(i) OVER (ORDER BY i) FROM integers WHERE i1.i=i) AS BIGINT) FROM integers i1 ORDER BY i; % .i1, . # table_name -% i, %2 # name +% i, %10 # name % int, bigint # type % 1, 1 # length [ NULL, NULL ] @@ -1088,32 +1088,32 @@ stdout of test 'correlated` in directory [ 2, 4 ] [ 3, 6 ] #SELECT NULL IN (SELECT * FROM strings WHERE v=s1.v) FROM strings s1 ORDER BY v; -% .%4 # table_name -% %4 # name +% .%5 # table_name +% %5 # name % boolean # type % 5 # length [ false ] [ NULL ] [ NULL ] #SELECT 'hello' IN (SELECT * FROM strings WHERE v=s1.v) FROM strings s1 ORDER BY v; -% .%4 # table_name -% %4 # name _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list