Changeset: a99d546f149f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a99d546f149f
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
monetdb5/optimizer/opt_mergetable.c
sql/server/rel_optimizer.c
sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
sql/test/bugs/Tests/select_select_bug.stable.out
sql/test/mergetables/Tests/part-elim.stable.out
Branch: default
Log Message:
Merge heads.
diffs (239 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -23926,34 +23926,18 @@ command bat.mirror(b:bat[:any_2]):bat[:o
address BKCmirror;
comment Returns the head-mirror image of a BAT (two head columns).
-pattern bat.new_persistent(ht:oid,tt:any_1,size:lng):bat[:any_1]
-address CMDBATnew_persistent;
-comment Creates a new BAT in the persistent farm and allocate space.
-
-pattern bat.new_persistent(ht:oid,tt:any_1,size:int):bat[:any_1]
-address CMDBATnew_persistent;
-pattern bat.new_persistent(ht:oid,tt:any_1):bat[:any_1]
-address CMDBATnew_persistent;
-comment Creates a new empty transient BAT in the persistent farm, with head-
and tail-types as indicated.
-
-pattern bat.new(ht:oid,tt:any_1,size:lng):bat[:any_1]
+pattern bat.new(tt:any_1,size:lng):bat[:any_1]
address CMDBATnew;
-comment Creates a new BAT with sufficient space.
-
-pattern bat.new(ht:oid,tt:any_1,size:int):bat[:any_1]
+comment Creates a new empty transient BAT, with tail-types as indicated.
+
+pattern bat.new(tt:any_1,size:int,persist:bit):bat[:any_1]
address CMDBATnew;
-pattern bat.new(ht:oid,tt:any_1):bat[:any_1]
+pattern bat.new(tt:any_1,size:lng,persist:bit):bat[:any_1]
address CMDBATnew;
-comment Creates a new empty transient BAT, with head- and tail-types as
indicated.
-
-pattern bat.new(tt:any_1,size:lng):bat[:any_1]
-address CMDBATnewColumn;
-comment Creates a new empty transient BAT, with tail-types as indicated.
-
pattern bat.new(tt:any_1,size:int):bat[:any_1]
-address CMDBATnewColumn;
+address CMDBATnew;
pattern bat.new(tt:any_1):bat[:any_1]
-address CMDBATnewColumn;
+address CMDBATnew;
pattern bat.orderidx(bv:bat[:any_1],l:bat[:any_1]...):void
address OIDXmerge;
comment Consolidates the OID index arrangement
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -31785,34 +31785,18 @@ command bat.mirror(b:bat[:any_2]):bat[:o
address BKCmirror;
comment Returns the head-mirror image of a BAT (two head columns).
-pattern bat.new_persistent(ht:oid,tt:any_1,size:lng):bat[:any_1]
-address CMDBATnew_persistent;
-comment Creates a new BAT in the persistent farm and allocate space.
-
-pattern bat.new_persistent(ht:oid,tt:any_1,size:int):bat[:any_1]
-address CMDBATnew_persistent;
-pattern bat.new_persistent(ht:oid,tt:any_1):bat[:any_1]
-address CMDBATnew_persistent;
-comment Creates a new empty transient BAT in the persistent farm, with head-
and tail-types as indicated.
-
-pattern bat.new(ht:oid,tt:any_1,size:lng):bat[:any_1]
+pattern bat.new(tt:any_1,size:lng):bat[:any_1]
address CMDBATnew;
-comment Creates a new BAT with sufficient space.
-
-pattern bat.new(ht:oid,tt:any_1,size:int):bat[:any_1]
+comment Creates a new empty transient BAT, with tail-types as indicated.
+
+pattern bat.new(tt:any_1,size:int,persist:bit):bat[:any_1]
address CMDBATnew;
-pattern bat.new(ht:oid,tt:any_1):bat[:any_1]
+pattern bat.new(tt:any_1,size:lng,persist:bit):bat[:any_1]
address CMDBATnew;
-comment Creates a new empty transient BAT, with head- and tail-types as
indicated.
-
-pattern bat.new(tt:any_1,size:lng):bat[:any_1]
-address CMDBATnewColumn;
-comment Creates a new empty transient BAT, with tail-types as indicated.
-
pattern bat.new(tt:any_1,size:int):bat[:any_1]
-address CMDBATnewColumn;
+address CMDBATnew;
pattern bat.new(tt:any_1):bat[:any_1]
-address CMDBATnewColumn;
+address CMDBATnew;
pattern bat.orderidx(bv:bat[:any_1],l:bat[:any_1]...):void
address OIDXmerge;
comment Consolidates the OID index arrangement
diff --git a/monetdb5/optimizer/opt_mergetable.c
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -1859,7 +1859,8 @@ cleanup:
}
/* keep all actions taken as a post block comment */
snprintf(buf,256,"%-20s actions=%2d time=" LLFMT "
usec","mergetable",actions,GDKusec() - usec);
- newComment(mb,buf);
+ if ( mb->errors == 0)
+ newComment(mb,buf);
return actions;
}
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
@@ -1847,6 +1847,32 @@ rel_push_topn_down(int *changes, mvc *sq
if (r && r->op == op_project && need_distinct(r))
return rel;
+ /* duplicate topn direct under union */
+
+ if (r && r->exps && r->op == op_union && !(rel_is_ref(r)) &&
r->l) {
+ sql_rel *u = r, *x;
+ sql_rel *ul = u->l;
+ sql_rel *ur = u->r;
+
+ /* only push topn once */
+ x = ul;
+ while(x->op == op_project && x->l)
+ x = x->l;
+ if (x && x->op == op_topn)
+ return rel;
+ x = ur;
+ while(x->op == op_project && x->l)
+ x = x->l;
+ if (x && x->op == op_topn)
+ return rel;
+
+ ul = rel_topn(sql->sa, ul, sum_limit_offset(sql,
rel->exps));
+ ur = rel_topn(sql->sa, ur, sum_limit_offset(sql,
rel->exps));
+ u->l = ul;
+ u->r = ur;
+ (*changes)++;
+ return rel;
+ }
/* duplicate topn + [ project-order ] under union */
if (r)
rp = r->l;
diff --git
a/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
b/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
---
a/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
+++
b/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
@@ -22,7 +22,7 @@ Ready.
#debug select * from tables;
mdb>#X_1=0@0:void := user.s1_1();
-mdb>#X_159=0@0:void := querylog.define("debug select * from
tables;","default_pipe",631);
+mdb>#X_159=0@0:void := querylog.define("debug select * from
tables;","default_pipe",375);
# 16:24:01 >
# 16:24:01 > "Done."
diff --git a/sql/test/bugs/Tests/select_select_bug.stable.out
b/sql/test/bugs/Tests/select_select_bug.stable.out
--- a/sql/test/bugs/Tests/select_select_bug.stable.out
+++ b/sql/test/bugs/Tests/select_select_bug.stable.out
@@ -29,7 +29,7 @@ Ready.
#SELECT (SELECT current_timestamp), count(DISTINCT mmsi) FROM vessels;
% .L1, sys.L2 # table_name
% L1, L2 # name
-% tinyint, wrd # type
+% tinyint, bigint # type
% 1, 1 # length
[ 1, 0 ]
#drop table vessels;
diff --git a/sql/test/mergetables/Tests/part-elim.stable.out
b/sql/test/mergetables/Tests/part-elim.stable.out
--- a/sql/test/mergetables/Tests/part-elim.stable.out
+++ b/sql/test/mergetables/Tests/part-elim.stable.out
@@ -79,6 +79,72 @@ project (
| | table(sys.mt2) [ test.id, test.posx, test.%TID% NOT NULL ] COUNT
| ) [ bigint "1" <= test.id <= bigint "1000" ]
) [ test.id, test.posx ]
+#declare l integer;
+#set l = 1;
+#declare h integer;
+#set h = 10000;
+#plan select * from test where id between l and h;
+% .plan # table_name
+% rel # name
+% clob # type
+% 106 # length
+union (
+| project (
+| | select (
+| | | table(sys.mt1) [ mt1.id as test.id, mt1.posx as test.posx, mt1.%TID% NOT
NULL as test.%TID% ] COUNT
+| | ) [ bigint[l] <= test.id <= bigint[h] ]
+| ) [ test.id, test.posx ],
+| project (
+| | select (
+| | | table(sys.mt2) [ mt2.id as test.id, mt2.posx as test.posx, mt2.%TID% NOT
NULL as test.%TID% ] COUNT
+| | ) [ bigint[l] <= test.id <= bigint[h] ]
+| ) [ test.id, test.posx ]
+) [ test.id, test.posx ]
+#set h = 1000;
+#plan select * from test where id between l and h;
+% .plan # table_name
+% rel # name
+% clob # type
+% 69 # length
+project (
+| select (
+| | table(sys.mt2) [ test.id, test.posx, test.%TID% NOT NULL ] COUNT
+| ) [ bigint[l] <= test.id <= bigint[h] ]
+) [ test.id, test.posx ]
+#plan select * from test where id between 1 and 1000*10;
+% .plan # table_name
+% rel # name
+% clob # type
+% 106 # length
+union (
+| project (
+| | select (
+| | | table(sys.mt1) [ mt1.id as test.id, mt1.posx as test.posx, mt1.%TID% NOT
NULL as test.%TID% ] COUNT
+| | ) [ bigint "1" <= test.id <= bigint[sys.sql_mul(smallint "1000", tinyint
"10")] ]
+| ) [ test.id, test.posx ],
+| project (
+| | select (
+| | | table(sys.mt2) [ mt2.id as test.id, mt2.posx as test.posx, mt2.%TID% NOT
NULL as test.%TID% ] COUNT
+| | ) [ bigint "1" <= test.id <= bigint[sys.sql_mul(smallint "1000", tinyint
"10")] ]
+| ) [ test.id, test.posx ]
+) [ test.id, test.posx ]
+#plan select * from test where id between 1 and 100*10;
+% .plan # table_name
+% rel # name
+% clob # type
+% 106 # length
+union (
+| project (
+| | select (
+| | | table(sys.mt1) [ mt1.id as test.id, mt1.posx as test.posx, mt1.%TID% NOT
NULL as test.%TID% ] COUNT
+| | ) [ bigint "1" <= test.id <= bigint[sys.sql_mul(smallint "100", tinyint
"10")] ]
+| ) [ test.id, test.posx ],
+| project (
+| | select (
+| | | table(sys.mt2) [ mt2.id as test.id, mt2.posx as test.posx, mt2.%TID% NOT
NULL as test.%TID% ] COUNT
+| | ) [ bigint "1" <= test.id <= bigint[sys.sql_mul(smallint "100", tinyint
"10")] ]
+| ) [ test.id, test.posx ]
+) [ test.id, test.posx ]
#drop table test;
#drop table mt1;
#drop table mt2;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list