Changeset: 30849b04b9df for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=30849b04b9df
Added Files:
sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.sql
sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.err
sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.out
sql/test/BugTracker-2015/Tests/large_join.Bug-3809.sql
sql/test/BugTracker-2015/Tests/large_join.Bug-3809.stable.err
sql/test/BugTracker-2015/Tests/large_join.Bug-3809.stable.out
sql/test/pg_regress/Tests/float8.stable.err.int128
Modified Files:
monetdb5/mal/mal_runtime.c
monetdb5/modules/mal/tablet.c
sql/backends/monet5/sql.c
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/test/BugTracker-2015/Tests/All
sql/test/BugTracker-2015/Tests/sessions_crash.Bug-3759.stable.err
sql/test/BugTracker-2015/Tests/sessions_crash.Bug-3759.stable.out
sql/test/pg_regress/Tests/float8.stable.err
sql/test/pg_regress/Tests/float8.stable.out.Windows
sql/test/pg_regress/Tests/interval.stable.err
sql/test/pg_regress/Tests/interval.stable.out
sql/test/pg_regress/Tests/loadwisconsin.timeout
Branch: default
Log Message:
Merge with Jul2015 branch.
diffs (truncated from 3058 to 300 lines):
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -82,6 +82,7 @@ runtimeProfileInit(Client cntxt, MalBlkP
stk->tag = calltag++;
if ( i == qtop ) {
+ mb->tag = qtag;
QRYqueue[i].mb = mb; // for detecting duplicates
QRYqueue[i].stk = stk; // for status pause 'p'/running '0'/
quiting 'q'
QRYqueue[i].tag = qtag++;
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -1555,6 +1555,38 @@ SQLproducer(void *p)
}
}
+static void
+create_rejects_table(Client cntxt)
+{
+ MT_lock_set(&mal_contextLock, "copy.initialization");
+ if (cntxt->error_row == NULL) {
+ cntxt->error_row = BATnew(TYPE_void, TYPE_lng, 0, TRANSIENT);
+ BATseqbase(cntxt->error_row, 0);
+ cntxt->error_fld = BATnew(TYPE_void, TYPE_int, 0, TRANSIENT);
+ BATseqbase(cntxt->error_fld, 0);
+ cntxt->error_msg = BATnew(TYPE_void, TYPE_str, 0, TRANSIENT);
+ BATseqbase(cntxt->error_msg, 0);
+ cntxt->error_input = BATnew(TYPE_void, TYPE_str, 0, TRANSIENT);
+ BATseqbase(cntxt->error_input, 0);
+ if (cntxt->error_row == NULL || cntxt->error_fld == NULL ||
cntxt->error_msg == NULL || cntxt->error_input == NULL) {
+ if (cntxt->error_row)
+ BBPunfix(cntxt->error_row->batCacheid);
+ if (cntxt->error_fld)
+ BBPunfix(cntxt->error_fld->batCacheid);
+ if (cntxt->error_msg)
+ BBPunfix(cntxt->error_msg->batCacheid);
+ if (cntxt->error_input)
+ BBPunfix(cntxt->error_input->batCacheid);
+ } else {
+ BBPkeepref(cntxt->error_row->batCacheid);
+ BBPkeepref(cntxt->error_fld->batCacheid);
+ BBPkeepref(cntxt->error_msg->batCacheid);
+ BBPkeepref(cntxt->error_input->batCacheid);
+ }
+ }
+ MT_lock_unset(&mal_contextLock, "copy.initialization");
+}
+
BUN
SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, char *csep,
char *rsep, char quote, lng skip, lng maxrow, int best)
{
@@ -1581,33 +1613,7 @@ SQLload_file(Client cntxt, Tablet *as, b
task->cntxt = cntxt;
/* create the reject tables */
- MT_lock_set(&mal_contextLock, "copy.initialization");
- if (task->cntxt->error_row == NULL) {
- task->cntxt->error_row = BATnew(TYPE_void, TYPE_lng, 0,
TRANSIENT);
- BATseqbase(task->cntxt->error_row, 0);
- task->cntxt->error_fld = BATnew(TYPE_void, TYPE_int, 0,
TRANSIENT);
- BATseqbase(task->cntxt->error_fld, 0);
- task->cntxt->error_msg = BATnew(TYPE_void, TYPE_str, 0,
TRANSIENT);
- BATseqbase(task->cntxt->error_msg, 0);
- task->cntxt->error_input = BATnew(TYPE_void, TYPE_str, 0,
TRANSIENT);
- BATseqbase(task->cntxt->error_input, 0);
- if (task->cntxt->error_row == NULL || task->cntxt->error_fld ==
NULL || task->cntxt->error_msg == NULL || task->cntxt->error_input == NULL) {
- if (task->cntxt->error_row)
- BBPunfix(task->cntxt->error_row->batCacheid);
- if (task->cntxt->error_fld)
- BBPunfix(task->cntxt->error_fld->batCacheid);
- if (task->cntxt->error_msg)
- BBPunfix(task->cntxt->error_msg->batCacheid);
- if (task->cntxt->error_input)
- BBPunfix(task->cntxt->error_input->batCacheid);
- } else {
- BBPkeepref(task->cntxt->error_row->batCacheid);
- BBPkeepref(task->cntxt->error_fld->batCacheid);
- BBPkeepref(task->cntxt->error_msg->batCacheid);
- BBPkeepref(task->cntxt->error_input->batCacheid);
- }
- }
- MT_lock_unset(&mal_contextLock, "copy.initialization");
+ create_rejects_table(task->cntxt);
if (task->cntxt->error_row == NULL || task->cntxt->error_fld == NULL ||
task->cntxt->error_msg == NULL || task->cntxt->error_input == NULL) {
tablet_error(task, lng_nil, int_nil, NULL, "SQLload
initialization failed");
goto bailout;
@@ -1987,6 +1993,8 @@ COPYrejects(Client cntxt, MalBlkPtr mb,
bat *fld = getArgReference_bat(stk, pci, 1);
bat *msg = getArgReference_bat(stk, pci, 2);
bat *inp = getArgReference_bat(stk, pci, 3);
+
+ create_rejects_table(cntxt);
if (cntxt->error_row == NULL)
throw(MAL, "sql.rejects", "No reject table available");
BBPincref(*row = cntxt->error_row->batCacheid, TRUE);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4227,12 +4227,11 @@ sql_querylog_calls(Client cntxt, MalBlkP
str
sql_querylog_empty(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int *ret = getArgReference_int(stk, pci, 0);
(void) cntxt;
(void) mb;
(void) stk;
(void) pci;
- QLOGempty(ret);
+ QLOGempty(NULL);
return MAL_SUCCEED;
}
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
@@ -1028,15 +1028,21 @@ push_up_join_exps( sql_rel *rel)
}
}
+static sql_rel * rel_remove_empty_select(int *changes, mvc *sql, sql_rel *rel);
+static sql_rel * rewrite(mvc *sql, sql_rel *rel, rewrite_fptr rewriter, int
*has_changes) ;
static sql_rel *
rel_join_order(int *changes, mvc *sql, sql_rel *rel)
{
- (void)*changes;
+ int e_changes = 0;
+
if (is_join(rel->op) && rel->exps && !rel_is_ref(rel)) {
if (rel->op == op_join)
rel->exps = push_up_join_exps(rel);
rel = reorder_join(sql, rel);
}
+ rel = rewrite(sql, rel, &rel_remove_empty_select, &e_changes);
+ (void)*changes;
+ (void)e_changes;
return rel;
}
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
@@ -2788,6 +2788,7 @@ rel_logical_value_exp(mvc *sql, sql_rel
} else if (f == sql_sel) { /* allways add left
side in case of selections phase */
if (!l->processed) { /* add all
expressions to the project */
l->exps = list_merge(l->exps,
rel_projections(sql, l->l, NULL, 1, 1), (fdup)NULL);
+ l->exps =
list_distinct(l->exps, (fcmp)exp_equal, (fdup)NULL);
set_processed(l);
}
if (!rel_find_exp(l, ls))
diff --git a/sql/test/BugTracker-2015/Tests/All
b/sql/test/BugTracker-2015/Tests/All
--- a/sql/test/BugTracker-2015/Tests/All
+++ b/sql/test/BugTracker-2015/Tests/All
@@ -54,3 +54,5 @@ THREADS>=3?useless_casts.Bug-3756
sum_interval.Bug-3785
nil_cast.Bug-3787
sql2pcre.Bug-3800
+ambiguous.Bug-3803
+large_join.Bug-3809
diff --git a/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.sql
b/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.sql
@@ -0,0 +1,59 @@
+CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER, e INTEGER);
+INSERT INTO t1(e,c,b,d,a) VALUES(103,102,100,101,104);
+INSERT INTO t1(a,c,d,e,b) VALUES(107,106,108,109,105);
+INSERT INTO t1(e,d,b,a,c) VALUES(110,114,112,111,113);
+INSERT INTO t1(d,c,e,a,b) VALUES(116,119,117,115,118);
+INSERT INTO t1(c,d,b,e,a) VALUES(123,122,124,120,121);
+INSERT INTO t1(a,d,b,e,c) VALUES(127,128,129,126,125);
+INSERT INTO t1(e,c,a,d,b) VALUES(132,134,131,133,130);
+INSERT INTO t1(a,d,b,e,c) VALUES(138,136,139,135,137);
+
+SELECT CASE a+1 WHEN b THEN 111 WHEN c THEN 222 WHEN d THEN 333 WHEN e THEN
444 ELSE 555 END, CASE WHEN a<b-3 THEN 111 WHEN a<=b THEN 222 WHEN a<b+3 THEN
333 ELSE 444 END, a+b*2+c*3+d*4, a+b*2+c*3, c, CASE WHEN c>(SELECT avg(c) FROM
t1) THEN a*2 ELSE b*10 END, abs(b-c) FROM t1 WHERE EXISTS(SELECT 1 FROM t1 AS x
WHERE x.b<t1.b) OR b>c OR d NOT BETWEEN 110 AND 150 ORDER BY 4,1,5,2,6,3,7;
+-- ERROR = !SELECT: identifier 'c' ambiguous
+
+SELECT a, a+b*2+c*3+d*4+e*5, c-d, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2
ELSE b*10 END, b-c, a+b*2 FROM t1 ORDER BY 6,2,4,5,3,1;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT a+b*2+c*3+d*4+e*5, CASE WHEN a<b-3 THEN 111 WHEN a<=b THEN 222 WHEN
a<b+3 THEN 333 ELSE 444 END, a, abs(b-c), a+b*2, d, CASE WHEN c>(SELECT avg(c)
FROM t1) THEN a*2 ELSE b*10 END FROM t1 WHERE (e>c OR e<d) OR a>b ORDER BY
4,5,3,7,1,6,2;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT a, e, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2 ELSE b*10 END, a-b
FROM t1 ORDER BY 2,4,3,1;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT d, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2 ELSE b*10 END,
abs(b-c), a+b*2+c*3+d*4+e*5, CASE WHEN a<b-3 THEN 111 WHEN a<=b THEN 222 WHEN
a<b+3 THEN 333 ELSE 444 END, d-e FROM t1 ORDER BY 1,6,2,3,5,4;
+-- ERROR = !SELECT: identifier 'd' ambiguous
+
+SELECT a+b*2+c*3+d*4+e*5, a, abs(a), a-b, d-e, CASE WHEN c>(SELECT avg(c) FROM
t1) THEN a*2 ELSE b*10 END FROM t1 WHERE EXISTS(SELECT 1 FROM t1 AS x WHERE
x.b<t1.b) AND b>c ORDER BY 4,6,3,1,5,2;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT CASE WHEN a<b-3 THEN 111 WHEN a<=b THEN 222 WHEN a<b+3 THEN 333 ELSE
444 END, a+b*2+c*3+d*4+e*5, a, CASE a+1 WHEN b THEN 111 WHEN c THEN 222 WHEN d
THEN 333 WHEN e THEN 444 ELSE 555 END, CASE WHEN c>(SELECT avg(c) FROM t1)
THEN a*2 ELSE b*10 END, (SELECT count(*) FROM t1 AS x WHERE x.c>t1.c AND
x.d<t1.d), d FROM t1 WHERE a>b AND (e>a AND e<b) ORDER BY 7,2,4,6,1,3,5;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT e, (SELECT count(*) FROM t1 AS x WHERE x.b<t1.b), CASE WHEN c>(SELECT
avg(c) FROM t1) THEN a*2 ELSE b*10 END, CASE a+1 WHEN b THEN 111 WHEN c THEN
222 WHEN d THEN 333 WHEN e THEN 444 ELSE 555 END, a-b, (SELECT count(*) FROM
t1 AS x WHERE x.c>t1.c AND x.d<t1.d) FROM t1 WHERE a>b AND (c<=d-2 OR c>=d+2)
AND c>d ORDER BY 6,5,4,2,3,1;
+-- ERROR = !SELECT: identifier 'e' ambiguous
+
+SELECT b, a-b, c, abs(b-c), d-e, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2
ELSE b*10 END, b-c FROM t1 WHERE EXISTS(SELECT 1 FROM t1 AS x WHERE x.b<t1.b)
ORDER BY 1,6,4,5,2,7,3;
+-- ERROR = !SELECT: identifier 'b' ambiguous
+
+SELECT (SELECT count(*) FROM t1 AS x WHERE x.c>t1.c AND x.d<t1.d), b, a,
a+b*2+c*3+d*4+e*5, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2 ELSE b*10 END,
CASE a+1 WHEN b THEN 111 WHEN c THEN 222 WHEN d THEN 333 WHEN e THEN 444 ELSE
555 END, a+b*2+c*3 FROM t1 WHERE a>b AND (e>c OR e<d) ORDER BY 3,7,2,5,6,4,1;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT c-d, a-b, b, b-c, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2 ELSE
b*10 END, c, a+b*2 FROM t1 ORDER BY 1,5,4,3,2,6,7;
+-- ERROR = !SELECT: identifier 'b' ambiguous
+
+SELECT a+b*2+c*3+d*4, a, c-d, abs(b-c), b, CASE WHEN c>(SELECT avg(c) FROM t1)
THEN a*2 ELSE b*10 END FROM t1 WHERE (e>c OR e<d) OR (c<=d-2 OR c>=d+2) ORDER
BY 4,3,2,5,1,6;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT a, a+b*2+c*3+d*4+e*5, b, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2
ELSE b*10 END, e, a-b FROM t1 ORDER BY 1,4,5,3,6,2;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT d, d-e, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2 ELSE b*10 END,
a+b*2, a+b*2+c*3+d*4+e*5, CASE WHEN a<b-3 THEN 111 WHEN a<=b THEN 222 WHEN
a<b+3 THEN 333 ELSE 444 END, a+b*2+c*3 FROM t1 ORDER BY 3,2,4,5,7,1,6;
+-- ERROR = !SELECT: identifier 'd' ambiguous
+
+SELECT a, CASE WHEN c>(SELECT avg(c) FROM t1) THEN a*2 ELSE b*10 END, (SELECT
count(*) FROM t1 AS x WHERE x.c>t1.c AND x.d<t1.d), a+b*2+c*3+d*4, b FROM t1
WHERE c>d OR d>e ORDER BY 2,5,1,3,4;
+-- ERROR = !SELECT: identifier 'a' ambiguous
+
+SELECT c, (SELECT count(*) FROM t1 AS x WHERE x.c>t1.c AND x.d<t1.d), CASE
WHEN c>(SELECT avg(c) FROM t1) THEN a*2 ELSE b*10 END, a+b*2+c*3+d*4 FROM t1
WHERE b>c OR (e>c OR e<d) OR d NOT BETWEEN 110 AND 150 ORDER BY 3,2,1,4;
+-- ERROR = !SELECT: identifier 'c' ambiguous
+
+DROP TABLE t1;
diff --git a/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.err
b/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.err
@@ -0,0 +1,37 @@
+stderr of test 'ambiguous.Bug-3803` in directory 'sql/test/BugTracker-2015`
itself:
+
+
+# 17:26:39 >
+# 17:26:39 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=39839" "--set"
"mapi_usock=/var/tmp/mtest-12556/.s.monetdb.39839" "--set" "monet_prompt="
"--forcemito" "--set" "mal_listing=2"
"--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015"
"--set" "mal_listing=0" "--set" "embedded_r=yes"
+# 17:26:39 >
+
+# 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 = no
+# 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 = 39839
+# cmdline opt mapi_usock = /var/tmp/mtest-12556/.s.monetdb.39839
+# 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-2015
+# cmdline opt mal_listing = 0
+# cmdline opt embedded_r = yes
+# cmdline opt gdk_debug = 536870922
+
+# 17:26:39 >
+# 17:26:39 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-12556" "--port=39839"
+# 17:26:39 >
+
+
+# 17:26:40 >
+# 17:26:40 > "Done."
+# 17:26:40 >
+
diff --git a/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.out
b/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.out
@@ -0,0 +1,232 @@
+stdout of test 'ambiguous.Bug-3803` in directory 'sql/test/BugTracker-2015`
itself:
+
+
+# 17:26:39 >
+# 17:26:39 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=39839" "--set"
"mapi_usock=/var/tmp/mtest-12556/.s.monetdb.39839" "--set" "monet_prompt="
"--forcemito" "--set" "mal_listing=2"
"--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015"
"--set" "mal_listing=0" "--set" "embedded_r=yes"
+# 17:26:39 >
+
+# MonetDB 5 server v11.21.2
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2015', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit
integers dynamically linked
+# Found 7.333 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://localhost.nes.nl:39839/
+# Listening for UNIX domain connection requests on
mapi:monetdb:///var/tmp/mtest-12556/.s.monetdb.39839
+# MonetDB/GIS module loaded
+# Start processing logs sql/sql_logs version 52200
+# Start reading the write-ahead log 'sql_logs/sql/log.37'
+# Finished reading the write-ahead log 'sql_logs/sql/log.37'
+# Finished processing logs sql/sql_logs
+# MonetDB/SQL module loaded
+# MonetDB/R module loaded
+
+Ready.
+
+# 17:26:39 >
+# 17:26:39 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-12556" "--port=39839"
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list