Changeset: 1f4aa4e6ccc6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1f4aa4e6ccc6 Modified Files: monetdb5/mal/mal_interpreter.mx Branch: default Log Message:
Merge with Dec2011 branch. diffs (178 lines): diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1109,7 +1109,11 @@ SQLrenderer(MapiHdl hdl, char singleinst if (rows == 0) { minvartotal += len[i]; /* don't wrap column headers if no data */ - } else if (!numeric[i]) { + } else if (numeric[i]) { + /* minimum size is equal to maximum size */ + minvartotal += len[i]; + } else { + /* minimum size for wide columns is MINVARCOLSIZE */ minvartotal += len[i] > MINVARCOLSIZE ? MINVARCOLSIZE : len[i]; } vartotal += len[i]; diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c --- a/sql/server/rel_bin.c +++ b/sql/server/rel_bin.c @@ -484,13 +484,13 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left stmt *predicate = bin_first_column(sql->sa, left); predicate = stmt_const(sql->sa, predicate, stmt_bool(sql->sa, 1)); - sel1 = stmt_select(sql->sa, predicate, sel1, cmp_equal); + sel1 = stmt_uselect(sql->sa, predicate, sel1, cmp_equal); } if (sel2->nrcols == 0) { stmt *predicate = bin_first_column(sql->sa, left); predicate = stmt_const(sql->sa, predicate, stmt_bool(sql->sa, 1)); - sel2 = stmt_select(sql->sa, predicate, sel2, cmp_equal); + sel2 = stmt_uselect(sql->sa, predicate, sel2, cmp_equal); } sel1 = stmt_mark_tail(sql->sa, sel1, 0); sel2 = stmt_mark_tail(sql->sa, sel2, 0); diff --git a/sql/server/sql_rel2bin.c b/sql/server/sql_rel2bin.c --- a/sql/server/sql_rel2bin.c +++ b/sql/server/sql_rel2bin.c @@ -784,6 +784,13 @@ push_semijoin( mvc *sql, stmt *select, s op1 = push_semijoin(sql, op1, s); return stmt_diff(sql->sa, op1, op2); } + if (select->type == st_const) { + stmt *op1 = select->op1; + stmt *op2 = select->op2; + + op1 = push_semijoin(sql, op1, s); + return stmt_const(sql->sa, op1, op2); + } if (select->type == st_union) { stmt *op1 = select->op1; stmt *op2 = select->op2; @@ -862,7 +869,10 @@ push_select_stmt( mvc *c, list *l, stmt for (n = l->h; n; n = n->next) { stmt *s = rel2bin(c, n->data); - sel = push_semijoin(c, s, sel); + if (!s->nrcols) /* predicate */ + stmt_uselect(c->sa, stmt_const(c->sa, sel, stmt_bool(c->sa, 1)), s, cmp_equal); + else + sel = push_semijoin(c, s, sel); } return sel; } diff --git a/sql/test/BugTracker-2011/Tests/All b/sql/test/BugTracker-2011/Tests/All --- a/sql/test/BugTracker-2011/Tests/All +++ b/sql/test/BugTracker-2011/Tests/All @@ -51,3 +51,4 @@ rand-with-seed.Bug-2900 python-connections-Bug.2901 many-connects-cache.Bug-2904 alter-table-set-read-only.bug-2906 +predicate.Bug-2908 diff --git a/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.sql b/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.sql @@ -0,0 +1,10 @@ +select cast(null as varchar(1)) as table_cat, s."name" as table_schem, t."name" +as table_name, case when t."type" = 0 and t."system" = false and t."temporary" += 0 then cast('TABLE' as varchar(20)) when t."type" = 0 and t."system" = true +and t."temporary" = 0 then cast('SYSTEM TABLE' as varchar(20)) when t."type" = +1 then cast('VIEW' as varchar(20)) when t."type" = 0 and t."system" = false and +t."temporary" = 1 then cast('LOCAL TEMPORARY' as varchar(20)) else +cast('INTERNAL TABLE TYPE' as varchar(20)) end as table_type, cast('' as +varchar(1)) as remarks from sys."schemas" s, sys."tables" t where s."id" = +t."schema_id" and t."name" like '%' and (1 = 0 or (t."type" = 0 and t."system" += false and t."temporary" = 0)) order by table_type, table_schem, table_name; diff --git a/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.stable.err b/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.stable.err @@ -0,0 +1,37 @@ +stderr of test 'predicate.Bug-2908` in directory 'test/BugTracker-2011` itself: + + +# 14:49:53 > +# 14:49:53 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "gdk_dbfarm=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" "--set" "mapi_open=true" "--set" "mapi_port=34243" "--set" "monet_prompt=" "--trace" "--forcemito" "--set" "mal_listing=2" "--dbname=mTests_test_BugTracker-2011" "--set" "mal_listing=0" +# 14:49:53 > + +# builtin opt gdk_dbname = demo +# builtin opt gdk_dbfarm = /home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm +# builtin opt gdk_debug = 0 +# builtin opt gdk_alloc_map = no +# builtin opt gdk_vmtrim = yes +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt gdk_dbfarm = /home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 34243 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbname = mTests_test_BugTracker-2011 +# cmdline opt mal_listing = 0 + +# 14:49:53 > +# 14:49:53 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=niels" "--port=34243" +# 14:49:53 > + + +# 14:49:53 > +# 14:49:53 > "Done." +# 14:49:53 > + diff --git a/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.stable.out b/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2011/Tests/predicate.Bug-2908.stable.out @@ -0,0 +1,44 @@ +stdout of test 'predicate.Bug-2908` in directory 'test/BugTracker-2011` itself: + + +# 14:49:53 > +# 14:49:53 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "gdk_dbfarm=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" "--set" "mapi_open=true" "--set" "mapi_port=34243" "--set" "monet_prompt=" "--trace" "--forcemito" "--set" "mal_listing=2" "--dbname=mTests_test_BugTracker-2011" "--set" "mal_listing=0" +# 14:49:53 > + +# MonetDB 5 server v11.5.4 +# This is an unreleased version +# Serving database 'mTests_test_BugTracker-2011', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically linked +# Found 3.788 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2011 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://niels.nesco.mine.nu:34243/ +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded + +Ready. + +# 14:49:53 > +# 14:49:53 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=niels" "--port=34243" +# 14:49:53 > + +#select cast(null as varchar(1)) as table_cat, s."name" as table_schem, t."name" +#as table_name, case when t."type" = 0 and t."system" = false and t."temporary" +#= 0 then cast('TABLE' as varchar(20)) when t."type" = 0 and t."system" = true +#and t."temporary" = 0 then cast('SYSTEM TABLE' as varchar(20)) when t."type" = +#1 then cast('VIEW' as varchar(20)) when t."type" = 0 and t."system" = false and +#t."temporary" = 1 then cast('LOCAL TEMPORARY' as varchar(20)) else +#cast('INTERNAL TABLE TYPE' as varchar(20)) end as table_type, cast('' as +% ., .s, .t, ., . # table_name +% table_cat, table_schem, table_name, table_type, remarks # name +% varchar, varchar, varchar, varchar, varchar # type +% 0, 3, 20, 5, 0 # length +[ NULL, "sys", "sensor_readings_2678", "TABLE", "" ] +[ NULL, "sys", "table1_bug2771", "TABLE", "" ] +[ NULL, "sys", "table2_bug2771", "TABLE", "" ] + +# 14:49:53 > +# 14:49:53 > "Done." +# 14:49:53 > + _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list