Changeset: 58a288d04c41 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=58a288d04c41 Added Files: sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.sql sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.err sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.out sql/test/Tests/setoptimizer.stable.out.Windows Modified Files: sql/backends/monet5/sql_gencode.c sql/server/rel_select.c sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090_nogeom.stable.out sql/test/BugTracker-2013/Tests/All sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err.Windows sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out.32bit sql/test/Dump/Tests/dump.stable.out.Windows sql/test/Tests/systemfunctions_nogeom.stable.out sql/test/Tests/trace_nogeom.stable.out sql/test/leaks/Tests/check0_nogeom.stable.out sql/test/leaks/Tests/check1_nogeom.stable.out sql/test/leaks/Tests/check2_nogeom.stable.out sql/test/leaks/Tests/check3_nogeom.stable.out sql/test/leaks/Tests/check4_nogeom.stable.out sql/test/leaks/Tests/check5_nogeom.stable.out sql/test/leaks/Tests/drop3_nogeom.stable.out sql/test/leaks/Tests/select1_nogeom.stable.out sql/test/leaks/Tests/select2_nogeom.stable.out sql/test/leaks/Tests/temp1_nogeom.stable.out sql/test/leaks/Tests/temp2_nogeom.stable.out sql/test/leaks/Tests/temp3_nogeom.stable.out sql/test/mapi/Tests/php_monetdb_nogeom.stable.out Branch: default Log Message:
merge changes diffs (truncated from 1627 to 300 lines): diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -2406,21 +2406,21 @@ backend_dumpproc(backend *be, Client c, // Always keep the SQL query around for monitoring // if (m->history || QLOGisset()) { { - char *t; + char *t, *tt; InstrPtr q; if ( be->q && be->q->codestring) { - t = GDKstrdup( be->q->codestring); + tt = t = GDKstrdup( be->q->codestring); while( t && isspace((int) *t) ) t++; } else { - t = GDKstrdup("-- no query"); + tt = t = GDKstrdup("-- no query"); } q = newStmt1(mb, "querylog", "define"); q->token = REMsymbol; // will be patched q = pushStr(mb, q, t); - GDKfree(t); + GDKfree(tt); q = pushStr(mb, q, pipe= initSQLoptimizer()); m->Tparse = 0; GDKfree(pipe); 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 @@ -4920,6 +4920,8 @@ rel_select_exp(mvc *sql, sql_rel *rel, s } if (rel) { + sql_rel *join = NULL; + if (rel && sn->groupby) { list *gbe = rel_group_by(sql, rel, sn->groupby, sn->selection, sql_sel ); @@ -4935,12 +4937,15 @@ rel_select_exp(mvc *sql, sql_rel *rel, s /* TODO if ek.card == card_set (IN/EXISTS etc), we could do something less expensive as group by's ! */ - if (outer && rel->op == op_join && rel->l == outer && ek.card != card_set) { + join = rel; + if (outer && rel->op == op_select) + join = rel->l; + if (outer && join->op == op_join && join->l == outer && ek.card != card_set) { node *n; /* correlation expressions */ - list *ce = list_select(rel->exps, rel, (fcmp) &exp_is_correlation, (fdup)NULL); - - if (!ce || list_length(ce) == 0 || check_correlation_exps(ce) != 0) { + list *ce = list_select(join->exps, join, (fcmp) &exp_is_correlation, (fdup)NULL); + + if (!ce || list_length(ce) == 0 || check_correlation_exps(ce) != 0 || join != rel) { if (ek.card != card_set) { node *n; /* group by on identity */ @@ -4948,7 +4953,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s outer_gbexps = rel_projections(sql, outer, NULL, 1, 1); if (!is_project(outer->op)) - rel->l = outer = rel_project(sql->sa, outer, rel_projections(sql, outer, NULL, 1, 1)); + join->l = outer = rel_project(sql->sa, outer, rel_projections(sql, outer, NULL, 1, 1)); /* find or create identity column */ if (find_identity(outer->exps, outer) == NULL) { e = rel_unop_(sql, outer->exps->h->data, NULL, "identity", card_value); diff --git a/sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit b/sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit --- a/sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit +++ b/sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit @@ -38,7 +38,7 @@ Ready. % .explain # table_name % mal # name % clob # type -% 65 # length +% 91 # length function user.s2_1{autoCommit=true}():void; X_2 := sql.mvc(); X_3:bat[:oid,:oid] := sql.tid(X_2,"sys","t2564"); diff --git a/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090_nogeom.stable.out b/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090_nogeom.stable.out --- a/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090_nogeom.stable.out +++ b/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090_nogeom.stable.out @@ -54,11 +54,11 @@ Ready. [ 5104, "user_role", 2000, NULL, 0, true, 0, false, 0 ] [ 5107, "auths", 2000, NULL, 0, true, 0, false, 0 ] [ 5111, "privileges", 2000, NULL, 0, true, 0, false, 0 ] -[ 5298, "history", 5255, "create view querylog.history as\nselect qd.*, ql.\"start\",ql.\"stop\", ql.arguments, ql.tuples, ql.run, ql.ship, ql.cpu, ql.space, ql.io \nfrom querylog.catalog() qd, querylog.calls() ql\nwhere qd.id = ql.id and qd.owner = user;", 1, false, 0, false, 0 ] -[ 5828, "storagemodelinput", 2000, NULL, 0, true, 0, false, 0 ] -[ 5869, "tablestoragemodel", 2000, "-- A summary of the table storage requirement is is available as a table view.\n-- The auxillary column denotes the maximum space if all non-sorted columns\n-- would be augmented with a hash (rare situation)\ncreate view sys.tablestoragemodel\nas select \"schema\",\"table\",max(count) as \"count\",\n\tsum(columnsize) as columnsize,\n\tsum(heapsize) as heapsize,\n\tsum(indices) as indices,\n\tsum(case when sorted = false then 8 * count else 0 end) as auxillary\nfrom sys.storagemodel() group by \"schema\",\"table\";", 1, true, 0, false, 0 ] -[ 5891, "systemfunctions", 2000, NULL, 0, true, 0, false, 0 ] -[ 6000, "r", 2000, NULL, 0, false, 0, false, 0 ] +[ 5297, "querylog_history", 2000, "create view sys.querylog_history as\nselect qd.*, ql.\"start\",ql.\"stop\", ql.arguments, ql.tuples, ql.run, ql.ship, ql.cpu, ql.space, ql.io \nfrom sys.querylog_catalog() qd, sys.querylog_calls() ql\nwhere qd.id = ql.id and qd.owner = user;", 1, true, 0, false, 0 ] +[ 5857, "storagemodelinput", 2000, NULL, 0, true, 0, false, 0 ] +[ 5898, "tablestoragemodel", 2000, "-- A summary of the table storage requirement is is available as a table view.\n-- The auxillary column denotes the maximum space if all non-sorted columns\n-- would be augmented with a hash (rare situation)\ncreate view sys.tablestoragemodel\nas select \"schema\",\"table\",max(count) as \"count\",\n\tsum(columnsize) as columnsize,\n\tsum(heapsize) as heapsize,\n\tsum(indices) as indices,\n\tsum(case when sorted = false then 8 * count else 0 end) as auxillary\nfrom sys.storagemodel() group by \"schema\",\"table\";", 1, true, 0, false, 0 ] +[ 5920, "systemfunctions", 2000, NULL, 0, true, 0, false, 0 ] +[ 6029, "r", 2000, NULL, 0, false, 0, false, 0 ] # 18:53:13 > # 18:53:13 > "Done." diff --git a/sql/test/BugTracker-2013/Tests/All b/sql/test/BugTracker-2013/Tests/All --- a/sql/test/BugTracker-2013/Tests/All +++ b/sql/test/BugTracker-2013/Tests/All @@ -8,3 +8,4 @@ select-view-view.Bug-3245 stddev-group.Bug-3257 oid_handling between.Bug-3259 +correlated_select.Bug-3250 diff --git a/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single b/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single @@ -0,0 +1,72 @@ +stdout of test 'between.Bug-3259` in directory 'sql/test/BugTracker-2013` itself: + + +# 20:18:30 > +# 20:18:30 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=31042" "--set" "mapi_usock=/var/tmp/mtest-5226/.s.monetdb.31042" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013" "--set" "mal_listing=0" +# 20:18:30 > + +# MonetDB 5 server v11.15.4 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2013', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically linked +# Found 3.778 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2013 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:31042/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-5226/.s.monetdb.31042 +# MonetDB/GIS module loaded +# MonetDB/JAQL module loaded +# MonetDB/SQL module loaded + +Ready. + +# 20:18:31 > +# 20:18:31 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-5226" "--port=31042" +# 20:18:31 > + +#START TRANSACTION; +#CREATE TABLE treeitems ( +# "tree" CHARACTER LARGE OBJECT, +# "subject" INTEGER, +# "pre" BIGINT, +# "post" BIGINT, +# "size" BIGINT, +# "level" TINYINT, +# "prob" DOUBLE DEFAULT 1.0, +# CONSTRAINT "treeitems_tree_pre_unique" UNIQUE ("tree", "pre"), +# CONSTRAINT "treeitems_tree_post_unique" UNIQUE ("tree", "post") +#); +#explain +#SELECT t1.subject as id1, t2.subject as id2 +#FROM treeitems t1, treeitems t2 +#WHERE t2.pre between t1.pre and t1.pre + t1.size; +% .explain # table_name +% mal # name +% clob # type +% 173 # length +function user.s0_1():void; + X_1 := sql.mvc(); + X_2:bat[:oid,:oid] := sql.tid(X_1,"sys","treeitems"); + X_5 := sql.bind(X_1,"sys","treeitems","pre",0); + X_8 := algebra.leftfetchjoin(X_2,X_5); + X_9 := sql.bind(X_1,"sys","treeitems","size",0); + X_11 := algebra.leftfetchjoin(X_2,X_9); + X_12:bat[:oid,:lng] := batcalc.+(X_8,X_11); + (X_13,r1_40) := algebra.join(X_8,X_8,X_12,true,true); + X_16 := sql.bind(X_1,"sys","treeitems","subject",0); + X_21 := algebra.leftfetchjoin(X_2,X_16); + X_22 := algebra.leftfetchjoin(r1_40,X_21); + X_24 := algebra.leftfetchjoin(X_13,X_21); + X_26 := sql.resultSet(2,1,X_22); + sql.rsColumn(X_26,"sys.t1","id1","int",32,0,X_22); + sql.rsColumn(X_26,"sys.t2","id2","int",32,0,X_24); + X_36 := io.stdout(); + sql.exportResult(X_36,X_26); +end s0_1; +#ROLLBACK; + +# 20:18:31 > +# 20:18:31 > "Done." +# 20:18:31 > + diff --git a/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.sql b/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.sql @@ -0,0 +1,22 @@ + +start transaction; +create table mytest ( + id int, + n int, + flag int +); + +insert into mytest values (1,1,null), + (2 , 1 , null ), + (3 , 1 , null ), + (4 , 2 , null ), + (5 , 1 , 42 ), + (6 , 1 , 42 ); +select * from mytest; + +select id, n, flag, (select count(*) from mytest as i where i.id < + mytest.id and i.n = mytest.n) from mytest order by id; + +select id, n, flag, (select count(*) from mytest as i where i.id < + mytest.id and i.n = mytest.n and flag is not null) from mytest order by id; +rollback; diff --git a/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.err b/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.err @@ -0,0 +1,35 @@ +stderr of test 'correlated_select.Bug-3250` in directory 'sql/test/BugTracker-2013` itself: + + +# 22:53:24 > +# 22:53:24 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32026" "--set" "mapi_usock=/var/tmp/mtest-19817/.s.monetdb.32026" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013" "--set" "mal_listing=0" +# 22:53:24 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# 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 mapi_open = true +# cmdline opt mapi_port = 32026 +# cmdline opt mapi_usock = /var/tmp/mtest-19817/.s.monetdb.32026 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013 +# cmdline opt mal_listing = 0 + +# 22:53:24 > +# 22:53:24 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-19817" "--port=32026" +# 22:53:24 > + + +# 22:53:24 > +# 22:53:24 > "Done." +# 22:53:24 > + diff --git a/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.out b/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.out @@ -0,0 +1,76 @@ +stdout of test 'correlated_select.Bug-3250` in directory 'sql/test/BugTracker-2013` itself: + + +# 22:53:24 > +# 22:53:24 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32026" "--set" "mapi_usock=/var/tmp/mtest-19817/.s.monetdb.32026" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013" "--set" "mal_listing=0" +# 22:53:24 > + +# MonetDB 5 server v11.15.4 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2013', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically linked +# Found 3.778 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2013 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:32026/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-19817/.s.monetdb.32026 +# MonetDB/GIS module loaded +# MonetDB/JAQL module loaded +# MonetDB/SQL module loaded + +Ready. + +# 22:53:24 > +# 22:53:24 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-19817" "--port=32026" +# 22:53:24 > + +#start transaction; +#create table mytest ( +# id int, +# n int, +# flag int +#); +#insert into mytest values (1,1,null), +# (2 , 1 , null ), +# (3 , 1 , null ), +# (4 , 2 , null ), +# (5 , 1 , 42 ), +# (6 , 1 , 42 ); +[ 6 ] +#select * from mytest; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list