Changeset: b35df980282e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b35df980282e
Added Files:
        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
Modified Files:
        sql/server/rel_optimizer.c
        sql/test/BugTracker-2015/Tests/All
Branch: Jul2015
Log Message:

remove empty select during join_reorder, solves bug 3809


diffs (truncated from 2358 to 300 lines):

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/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
@@ -55,3 +55,4 @@ 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/large_join.Bug-3809.sql 
b/sql/test/BugTracker-2015/Tests/large_join.Bug-3809.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/large_join.Bug-3809.sql
@@ -0,0 +1,799 @@
+CREATE TABLE t1( a1 INTEGER PRIMARY KEY, b1 INTEGER, x1 VARCHAR(40));
+INSERT INTO t1 VALUES(1,1,'table t1 row 1');
+INSERT INTO t1 VALUES(2,9,'table t1 row 2');
+INSERT INTO t1 VALUES(3,8,'table t1 row 3');
+INSERT INTO t1 VALUES(4,4,'table t1 row 4');
+INSERT INTO t1 VALUES(5,2,'table t1 row 5');
+INSERT INTO t1 VALUES(6,3,'table t1 row 6');
+INSERT INTO t1 VALUES(7,6,'table t1 row 7');
+INSERT INTO t1 VALUES(8,7,'table t1 row 8');
+INSERT INTO t1 VALUES(9,10,'table t1 row 9');
+INSERT INTO t1 VALUES(10,5,'table t1 row 10');
+CREATE TABLE t2( a2 INTEGER PRIMARY KEY, b2 INTEGER, x2 VARCHAR(40));
+INSERT INTO t2 VALUES(1,7,'table t2 row 1');
+INSERT INTO t2 VALUES(2,5,'table t2 row 2');
+INSERT INTO t2 VALUES(3,9,'table t2 row 3');
+INSERT INTO t2 VALUES(4,3,'table t2 row 4');
+INSERT INTO t2 VALUES(5,2,'table t2 row 5');
+INSERT INTO t2 VALUES(6,10,'table t2 row 6');
+INSERT INTO t2 VALUES(7,8,'table t2 row 7');
+INSERT INTO t2 VALUES(8,6,'table t2 row 8');
+INSERT INTO t2 VALUES(9,4,'table t2 row 9');
+INSERT INTO t2 VALUES(10,1,'table t2 row 10');
+CREATE TABLE t3( a3 INTEGER PRIMARY KEY, b3 INTEGER, x3 VARCHAR(40));
+INSERT INTO t3 VALUES(1,6,'table t3 row 1');
+INSERT INTO t3 VALUES(2,8,'table t3 row 2');
+INSERT INTO t3 VALUES(3,3,'table t3 row 3');
+INSERT INTO t3 VALUES(4,2,'table t3 row 4');
+INSERT INTO t3 VALUES(5,4,'table t3 row 5');
+INSERT INTO t3 VALUES(6,5,'table t3 row 6');
+INSERT INTO t3 VALUES(7,9,'table t3 row 7');
+INSERT INTO t3 VALUES(8,10,'table t3 row 8');
+INSERT INTO t3 VALUES(9,1,'table t3 row 9');
+INSERT INTO t3 VALUES(10,7,'table t3 row 10');
+CREATE TABLE t4( a4 INTEGER PRIMARY KEY, b4 INTEGER, x4 VARCHAR(40));
+INSERT INTO t4 VALUES(1,2,'table t4 row 1');
+INSERT INTO t4 VALUES(2,6,'table t4 row 2');
+INSERT INTO t4 VALUES(3,10,'table t4 row 3');
+INSERT INTO t4 VALUES(4,4,'table t4 row 4');
+INSERT INTO t4 VALUES(5,1,'table t4 row 5');
+INSERT INTO t4 VALUES(6,8,'table t4 row 6');
+INSERT INTO t4 VALUES(7,7,'table t4 row 7');
+INSERT INTO t4 VALUES(8,5,'table t4 row 8');
+INSERT INTO t4 VALUES(9,3,'table t4 row 9');
+INSERT INTO t4 VALUES(10,9,'table t4 row 10');
+CREATE TABLE t5( a5 INTEGER PRIMARY KEY, b5 INTEGER, x5 VARCHAR(40));
+INSERT INTO t5 VALUES(1,9,'table t5 row 1');
+INSERT INTO t5 VALUES(2,5,'table t5 row 2');
+INSERT INTO t5 VALUES(3,10,'table t5 row 3');
+INSERT INTO t5 VALUES(4,7,'table t5 row 4');
+INSERT INTO t5 VALUES(5,4,'table t5 row 5');
+INSERT INTO t5 VALUES(6,2,'table t5 row 6');
+INSERT INTO t5 VALUES(7,1,'table t5 row 7');
+INSERT INTO t5 VALUES(8,8,'table t5 row 8');
+INSERT INTO t5 VALUES(9,3,'table t5 row 9');
+INSERT INTO t5 VALUES(10,6,'table t5 row 10');
+CREATE TABLE t6( a6 INTEGER PRIMARY KEY, b6 INTEGER, x6 VARCHAR(40));
+INSERT INTO t6 VALUES(1,2,'table t6 row 1');
+INSERT INTO t6 VALUES(2,5,'table t6 row 2');
+INSERT INTO t6 VALUES(3,9,'table t6 row 3');
+INSERT INTO t6 VALUES(4,3,'table t6 row 4');
+INSERT INTO t6 VALUES(5,1,'table t6 row 5');
+INSERT INTO t6 VALUES(6,8,'table t6 row 6');
+INSERT INTO t6 VALUES(7,10,'table t6 row 7');
+INSERT INTO t6 VALUES(8,6,'table t6 row 8');
+INSERT INTO t6 VALUES(9,4,'table t6 row 9');
+INSERT INTO t6 VALUES(10,7,'table t6 row 10');
+CREATE TABLE t7( a7 INTEGER PRIMARY KEY, b7 INTEGER, x7 VARCHAR(40));
+INSERT INTO t7 VALUES(1,1,'table t7 row 1');
+INSERT INTO t7 VALUES(2,5,'table t7 row 2');
+INSERT INTO t7 VALUES(3,3,'table t7 row 3');
+INSERT INTO t7 VALUES(4,9,'table t7 row 4');
+INSERT INTO t7 VALUES(5,8,'table t7 row 5');
+INSERT INTO t7 VALUES(6,4,'table t7 row 6');
+INSERT INTO t7 VALUES(7,2,'table t7 row 7');
+INSERT INTO t7 VALUES(8,10,'table t7 row 8');
+INSERT INTO t7 VALUES(9,6,'table t7 row 9');
+INSERT INTO t7 VALUES(10,7,'table t7 row 10');
+CREATE TABLE t8( a8 INTEGER PRIMARY KEY, b8 INTEGER, x8 VARCHAR(40));
+INSERT INTO t8 VALUES(1,3,'table t8 row 1');
+INSERT INTO t8 VALUES(2,10,'table t8 row 2');
+INSERT INTO t8 VALUES(3,8,'table t8 row 3');
+INSERT INTO t8 VALUES(4,6,'table t8 row 4');
+INSERT INTO t8 VALUES(5,7,'table t8 row 5');
+INSERT INTO t8 VALUES(6,4,'table t8 row 6');
+INSERT INTO t8 VALUES(7,2,'table t8 row 7');
+INSERT INTO t8 VALUES(8,9,'table t8 row 8');
+INSERT INTO t8 VALUES(9,5,'table t8 row 9');
+INSERT INTO t8 VALUES(10,1,'table t8 row 10');
+CREATE TABLE t9( a9 INTEGER PRIMARY KEY, b9 INTEGER, x9 VARCHAR(40));
+INSERT INTO t9 VALUES(1,3,'table t9 row 1');
+INSERT INTO t9 VALUES(2,4,'table t9 row 2');
+INSERT INTO t9 VALUES(3,6,'table t9 row 3');
+INSERT INTO t9 VALUES(4,5,'table t9 row 4');
+INSERT INTO t9 VALUES(5,9,'table t9 row 5');
+INSERT INTO t9 VALUES(6,7,'table t9 row 6');
+INSERT INTO t9 VALUES(7,2,'table t9 row 7');
+INSERT INTO t9 VALUES(8,1,'table t9 row 8');
+INSERT INTO t9 VALUES(9,10,'table t9 row 9');
+INSERT INTO t9 VALUES(10,8,'table t9 row 10');
+CREATE TABLE t10( a10 INTEGER PRIMARY KEY, b10 INTEGER, x10 VARCHAR(40));
+INSERT INTO t10 VALUES(1,8,'table t10 row 1');
+INSERT INTO t10 VALUES(2,10,'table t10 row 2');
+INSERT INTO t10 VALUES(3,7,'table t10 row 3');
+INSERT INTO t10 VALUES(4,1,'table t10 row 4');
+INSERT INTO t10 VALUES(5,5,'table t10 row 5');
+INSERT INTO t10 VALUES(6,4,'table t10 row 6');
+INSERT INTO t10 VALUES(7,3,'table t10 row 7');
+INSERT INTO t10 VALUES(8,9,'table t10 row 8');
+INSERT INTO t10 VALUES(9,6,'table t10 row 9');
+INSERT INTO t10 VALUES(10,2,'table t10 row 10');
+CREATE TABLE t11( a11 INTEGER PRIMARY KEY, b11 INTEGER, x11 VARCHAR(40));
+INSERT INTO t11 VALUES(1,5,'table t11 row 1');
+INSERT INTO t11 VALUES(2,8,'table t11 row 2');
+INSERT INTO t11 VALUES(3,3,'table t11 row 3');
+INSERT INTO t11 VALUES(4,1,'table t11 row 4');
+INSERT INTO t11 VALUES(5,4,'table t11 row 5');
+INSERT INTO t11 VALUES(6,7,'table t11 row 6');
+INSERT INTO t11 VALUES(7,6,'table t11 row 7');
+INSERT INTO t11 VALUES(8,9,'table t11 row 8');
+INSERT INTO t11 VALUES(9,2,'table t11 row 9');
+INSERT INTO t11 VALUES(10,10,'table t11 row 10');
+CREATE TABLE t12( a12 INTEGER PRIMARY KEY, b12 INTEGER, x12 VARCHAR(40));
+INSERT INTO t12 VALUES(1,4,'table t12 row 1');
+INSERT INTO t12 VALUES(2,2,'table t12 row 2');
+INSERT INTO t12 VALUES(3,5,'table t12 row 3');
+INSERT INTO t12 VALUES(4,6,'table t12 row 4');
+INSERT INTO t12 VALUES(5,9,'table t12 row 5');
+INSERT INTO t12 VALUES(6,7,'table t12 row 6');
+INSERT INTO t12 VALUES(7,10,'table t12 row 7');
+INSERT INTO t12 VALUES(8,1,'table t12 row 8');
+INSERT INTO t12 VALUES(9,8,'table t12 row 9');
+INSERT INTO t12 VALUES(10,3,'table t12 row 10');
+CREATE TABLE t13( a13 INTEGER PRIMARY KEY, b13 INTEGER, x13 VARCHAR(40));
+INSERT INTO t13 VALUES(1,10,'table t13 row 1');
+INSERT INTO t13 VALUES(2,7,'table t13 row 2');
+INSERT INTO t13 VALUES(3,6,'table t13 row 3');
+INSERT INTO t13 VALUES(4,2,'table t13 row 4');
+INSERT INTO t13 VALUES(5,8,'table t13 row 5');
+INSERT INTO t13 VALUES(6,4,'table t13 row 6');
+INSERT INTO t13 VALUES(7,1,'table t13 row 7');
+INSERT INTO t13 VALUES(8,9,'table t13 row 8');
+INSERT INTO t13 VALUES(9,3,'table t13 row 9');
+INSERT INTO t13 VALUES(10,5,'table t13 row 10');
+CREATE TABLE t14( a14 INTEGER PRIMARY KEY, b14 INTEGER, x14 VARCHAR(40));
+INSERT INTO t14 VALUES(1,5,'table t14 row 1');
+INSERT INTO t14 VALUES(2,3,'table t14 row 2');
+INSERT INTO t14 VALUES(3,9,'table t14 row 3');
+INSERT INTO t14 VALUES(4,7,'table t14 row 4');
+INSERT INTO t14 VALUES(5,4,'table t14 row 5');
+INSERT INTO t14 VALUES(6,1,'table t14 row 6');
+INSERT INTO t14 VALUES(7,8,'table t14 row 7');
+INSERT INTO t14 VALUES(8,2,'table t14 row 8');
+INSERT INTO t14 VALUES(9,10,'table t14 row 9');
+INSERT INTO t14 VALUES(10,6,'table t14 row 10');
+CREATE TABLE t15( a15 INTEGER PRIMARY KEY, b15 INTEGER, x15 VARCHAR(40));
+INSERT INTO t15 VALUES(1,7,'table t15 row 1');
+INSERT INTO t15 VALUES(2,1,'table t15 row 2');
+INSERT INTO t15 VALUES(3,5,'table t15 row 3');
+INSERT INTO t15 VALUES(4,2,'table t15 row 4');
+INSERT INTO t15 VALUES(5,4,'table t15 row 5');
+INSERT INTO t15 VALUES(6,6,'table t15 row 6');
+INSERT INTO t15 VALUES(7,3,'table t15 row 7');
+INSERT INTO t15 VALUES(8,10,'table t15 row 8');
+INSERT INTO t15 VALUES(9,9,'table t15 row 9');
+INSERT INTO t15 VALUES(10,8,'table t15 row 10');
+CREATE TABLE t16( a16 INTEGER PRIMARY KEY, b16 INTEGER, x16 VARCHAR(40));
+INSERT INTO t16 VALUES(1,5,'table t16 row 1');
+INSERT INTO t16 VALUES(2,3,'table t16 row 2');
+INSERT INTO t16 VALUES(3,4,'table t16 row 3');
+INSERT INTO t16 VALUES(4,7,'table t16 row 4');
+INSERT INTO t16 VALUES(5,6,'table t16 row 5');
+INSERT INTO t16 VALUES(6,9,'table t16 row 6');
+INSERT INTO t16 VALUES(7,2,'table t16 row 7');
+INSERT INTO t16 VALUES(8,10,'table t16 row 8');
+INSERT INTO t16 VALUES(9,8,'table t16 row 9');
+INSERT INTO t16 VALUES(10,1,'table t16 row 10');
+CREATE TABLE t17( a17 INTEGER PRIMARY KEY,  b17 INTEGER, x17 VARCHAR(40));
+INSERT INTO t17 VALUES(1,7,'table t17 row 1');
+INSERT INTO t17 VALUES(2,2,'table t17 row 2');
+INSERT INTO t17 VALUES(3,3,'table t17 row 3');
+INSERT INTO t17 VALUES(4,1,'table t17 row 4');
+INSERT INTO t17 VALUES(5,4,'table t17 row 5');
+INSERT INTO t17 VALUES(6,5,'table t17 row 6');
+INSERT INTO t17 VALUES(7,8,'table t17 row 7');
+INSERT INTO t17 VALUES(8,9,'table t17 row 8');
+INSERT INTO t17 VALUES(9,6,'table t17 row 9');
+INSERT INTO t17 VALUES(10,10,'table t17 row 10');
+CREATE TABLE t18( a18 INTEGER PRIMARY KEY, b18 INTEGER, x18 VARCHAR(40));
+INSERT INTO t18 VALUES(1,1,'table t18 row 1');
+INSERT INTO t18 VALUES(2,8,'table t18 row 2');
+INSERT INTO t18 VALUES(3,3,'table t18 row 3');
+INSERT INTO t18 VALUES(4,5,'table t18 row 4');
+INSERT INTO t18 VALUES(5,10,'table t18 row 5');
+INSERT INTO t18 VALUES(6,6,'table t18 row 6');
+INSERT INTO t18 VALUES(7,9,'table t18 row 7');
+INSERT INTO t18 VALUES(8,7,'table t18 row 8');
+INSERT INTO t18 VALUES(9,2,'table t18 row 9');
+INSERT INTO t18 VALUES(10,4,'table t18 row 10');
+CREATE TABLE t19( a19 INTEGER PRIMARY KEY, b19 INTEGER, x19 VARCHAR(40));
+INSERT INTO t19 VALUES(1,4,'table t19 row 1');
+INSERT INTO t19 VALUES(2,7,'table t19 row 2');
+INSERT INTO t19 VALUES(3,2,'table t19 row 3');
+INSERT INTO t19 VALUES(4,6,'table t19 row 4');
+INSERT INTO t19 VALUES(5,9,'table t19 row 5');
+INSERT INTO t19 VALUES(6,10,'table t19 row 6');
+INSERT INTO t19 VALUES(7,1,'table t19 row 7');
+INSERT INTO t19 VALUES(8,5,'table t19 row 8');
+INSERT INTO t19 VALUES(9,8,'table t19 row 9');
+INSERT INTO t19 VALUES(10,3,'table t19 row 10');
+CREATE TABLE t20( a20 INTEGER PRIMARY KEY, b20 INTEGER, x20 VARCHAR(40));
+INSERT INTO t20 VALUES(1,10,'table t20 row 1');
+INSERT INTO t20 VALUES(2,9,'table t20 row 2');
+INSERT INTO t20 VALUES(3,3,'table t20 row 3');
+INSERT INTO t20 VALUES(4,7,'table t20 row 4');
+INSERT INTO t20 VALUES(5,6,'table t20 row 5');
+INSERT INTO t20 VALUES(6,2,'table t20 row 6');
+INSERT INTO t20 VALUES(7,1,'table t20 row 7');
+INSERT INTO t20 VALUES(8,4,'table t20 row 8');
+INSERT INTO t20 VALUES(9,5,'table t20 row 9');
+INSERT INTO t20 VALUES(10,8,'table t20 row 10');
+CREATE TABLE t21( a21 INTEGER PRIMARY KEY, b21 INTEGER, x21 VARCHAR(40));
+INSERT INTO t21 VALUES(1,7,'table t21 row 1');
+INSERT INTO t21 VALUES(2,9,'table t21 row 2');
+INSERT INTO t21 VALUES(3,6,'table t21 row 3');
+INSERT INTO t21 VALUES(4,3,'table t21 row 4');
+INSERT INTO t21 VALUES(5,5,'table t21 row 5');
+INSERT INTO t21 VALUES(6,4,'table t21 row 6');
+INSERT INTO t21 VALUES(7,1,'table t21 row 7');
+INSERT INTO t21 VALUES(8,10,'table t21 row 8');
+INSERT INTO t21 VALUES(9,8,'table t21 row 9');
+INSERT INTO t21 VALUES(10,2,'table t21 row 10');
+CREATE TABLE t22( a22 INTEGER PRIMARY KEY, b22 INTEGER, x22 VARCHAR(40));
+INSERT INTO t22 VALUES(1,7,'table t22 row 1');
+INSERT INTO t22 VALUES(2,3,'table t22 row 2');
+INSERT INTO t22 VALUES(3,6,'table t22 row 3');
+INSERT INTO t22 VALUES(4,4,'table t22 row 4');
+INSERT INTO t22 VALUES(5,2,'table t22 row 5');
+INSERT INTO t22 VALUES(6,8,'table t22 row 6');
+INSERT INTO t22 VALUES(7,9,'table t22 row 7');
+INSERT INTO t22 VALUES(8,10,'table t22 row 8');
+INSERT INTO t22 VALUES(9,5,'table t22 row 9');
+INSERT INTO t22 VALUES(10,1,'table t22 row 10');
+CREATE TABLE t23( a23 INTEGER PRIMARY KEY, b23 INTEGER, x23 VARCHAR(40));
+INSERT INTO t23 VALUES(1,9,'table t23 row 1');
+INSERT INTO t23 VALUES(2,4,'table t23 row 2');
+INSERT INTO t23 VALUES(3,2,'table t23 row 3');
+INSERT INTO t23 VALUES(4,8,'table t23 row 4');
+INSERT INTO t23 VALUES(5,3,'table t23 row 5');
+INSERT INTO t23 VALUES(6,6,'table t23 row 6');
+INSERT INTO t23 VALUES(7,7,'table t23 row 7');
+INSERT INTO t23 VALUES(8,5,'table t23 row 8');
+INSERT INTO t23 VALUES(9,10,'table t23 row 9');
+INSERT INTO t23 VALUES(10,1,'table t23 row 10');
+CREATE TABLE t24( a24 INTEGER PRIMARY KEY, b24 INTEGER, x24 VARCHAR(40));
+INSERT INTO t24 VALUES(1,10,'table t24 row 1');
+INSERT INTO t24 VALUES(2,3,'table t24 row 2');
+INSERT INTO t24 VALUES(3,8,'table t24 row 3');
+INSERT INTO t24 VALUES(4,2,'table t24 row 4');
+INSERT INTO t24 VALUES(5,5,'table t24 row 5');
+INSERT INTO t24 VALUES(6,4,'table t24 row 6');
+INSERT INTO t24 VALUES(7,6,'table t24 row 7');
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to