Changeset: b42cd851c71a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b42cd851c71a
Modified Files:
        sql/server/rel_optimizer.c
        sql/test/mergetables/Tests/sqlsmith-exists.stable.out
Branch: default
Log Message:

fixed crash in order_joins, in case of complex multi relation join (or select) 
expressions


diffs (58 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
@@ -936,6 +936,11 @@ order_joins(mvc *sql, list *rels, list *
                                        l = rn->data;
                                        r = find_rel(rels, cje->l);
                                }
+                               if (!r) {
+                                       fnd = 1; // not really, but this bails 
out
+                                       continue;
+                               }
+
                                list_remove_data(rels, r);
                                append(n_rels, r);
 
diff --git a/sql/test/mergetables/Tests/sqlsmith-exists.stable.out 
b/sql/test/mergetables/Tests/sqlsmith-exists.stable.out
--- a/sql/test/mergetables/Tests/sqlsmith-exists.stable.out
+++ b/sql/test/mergetables/Tests/sqlsmith-exists.stable.out
@@ -131,6 +131,39 @@ stdout of test 'sqlsmith-exists` in dire
 % c0,  c1,     c2,     c3,     c4,     c5,     c6,     c7 # name
 % int, int,    int,    int,    int,    int,    int,    int # type
 % 1,   1,      1,      1,      1,      1,      1,      1 # length
+#CREATE TABLE integers(i INTEGER);
+#INSERT INTO integers VALUES (1), (2), (3), (NULL);
+[ 4    ]
+#CREATE TABLE tbl_ProductSales (ColID int, Product_Category  varchar(64), 
Product_Name  varchar(64), TotalSales int); 
+#INSERT INTO tbl_ProductSales VALUES (1,'Game','Mobo Game',200),(2,'Game','PKO 
Game',400),(3,'Fashion','Shirt',500),(4,'Fashion','Shorts',100);
+[ 4    ]
+#create table analytics (aa int, bb int, cc bigint);
+#insert into analytics values (15, 3, 15), (3, 1, 3), (2, 1, 2), (5, 3, 5), 
(NULL, 2, NULL), (3, 2, 3), (4, 1, 4), (6, 3, 6), (8, 2, 8), (NULL, 4, NULL);
+[ 10   ]
+#SELECT subq_1.c3 AS c0
+#FROM
+#  (SELECT 1 AS c0,
+#          subq_0.c8 AS c1,
+#          subq_0.c6 AS c2,
+#          subq_0.c0 AS c3,
+#          subq_0.c4 AS c4,
+#          subq_0.c9 AS c5,
+#          subq_0.c6 AS c6,
+#          subq_0.c0 AS c7,
+#          subq_0.c3 AS c8,
+#          subq_0.c4 AS c9,
+#          CASE
+#              WHEN (94 IS NOT NULL)
+#                   OR (subq_0.c0 IS NULL) THEN subq_0.c4
+#              ELSE subq_0.c4
+#          END AS c10,
+#          subq_0.c5 AS c11,
+#          subq_0.c4 AS c12
+#   FROM
+% sys.subq_0 # table_name
+% c0 # name
+% int # type
+% 1 # length
 #ROLLBACK;
 
 # 19:56:32 >  
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to