Changeset: 9f25e78c28dc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9f25e78c28dc
Modified Files:
        gdk/gdk_select.c
        sql/server/rel_select.c
        sql/test/miscellaneous/Tests/simple_selects.sql
        sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (297 lines):

diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -306,7 +306,7 @@ hashselect(BAT *b, struct canditer *rest
                                 buninsfix(bn, dst, cnt, o,             \
                                           (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p) \
                                                  * (dbl) (ci->ncand-p) * 1.1 + 
1024), \
-                                          BATcapacity(bn) + ci->ncand - p, 
BUN_NONE)); \
+                                          maximum, BUN_NONE)); \
                } else {                                                \
                        impsloop(ISDENSE, TEST, quickins(dst, cnt, o, bn)); \
                }                                                       \
@@ -361,7 +361,7 @@ hashselect(BAT *b, struct canditer *rest
                                        buninsfix(bn, dst, cnt, o,      \
                                                  (BUN) ((dbl) cnt / (dbl) (p 
== 0 ? 1 : p) \
                                                         * (dbl) (ci->ncand-p) 
* 1.1 + 1024), \
-                                                 BATcapacity(bn) + ci->ncand - 
p, BUN_NONE); \
+                                                 maximum, BUN_NONE); \
                                        cnt++;                          \
                                }                                       \
                        }                                               \
@@ -526,7 +526,7 @@ fullscan_any(BAT *b, struct canditer *re
                                buninsfix(bn, dst, cnt, o,
                                          (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
                                                 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+                                         maximum, BUN_NONE);
                                cnt++;
                        }
                }
@@ -545,7 +545,7 @@ fullscan_any(BAT *b, struct canditer *re
                                buninsfix(bn, dst, cnt, o,
                                          (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
                                                 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+                                         maximum, BUN_NONE);
                                cnt++;
                        }
                }
@@ -564,7 +564,7 @@ fullscan_any(BAT *b, struct canditer *re
                                buninsfix(bn, dst, cnt, o,
                                          (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
                                                 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+                                         maximum, BUN_NONE);
                                cnt++;
                        }
                }
@@ -603,7 +603,7 @@ fullscan_str(BAT *b, struct canditer *re
                                buninsfix(bn, dst, cnt, o,
                                          (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
                                                 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+                                         maximum, BUN_NONE);
                                cnt++;
                        }
                }
@@ -618,7 +618,7 @@ fullscan_str(BAT *b, struct canditer *re
                                buninsfix(bn, dst, cnt, o,
                                          (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
                                                 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+                                         maximum, BUN_NONE);
                                cnt++;
                        }
                }
@@ -633,7 +633,7 @@ fullscan_str(BAT *b, struct canditer *re
                                buninsfix(bn, dst, cnt, o,
                                          (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
                                                 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+                                         maximum, BUN_NONE);
                                cnt++;
                        }
                }
@@ -648,7 +648,7 @@ fullscan_str(BAT *b, struct canditer *re
                                buninsfix(bn, dst, cnt, o,
                                          (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
                                                 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+                                         maximum, BUN_NONE);
                                cnt++;
                        }
                }
@@ -1950,12 +1950,11 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                 * imprints) and either the left bat is persistent or
                 * already has imprints, or the right bats are long
                 * enough (for creating imprints being worth it) */
-               BUN maximum;
 
                sorted = 2;
                cnt = 0;
-               maximum = lci->ncand;
                for (BUN i = 0; i < rci->ncand; i++) {
+                       maxsize = cnt + (rci->ncand - i) * lci->ncand;
                        ro = canditer_next(rci);
                        if (rlvals) {
                                vrl = FVALUE(rl, ro - rl->hseqbase);
@@ -1995,7 +1994,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                    false, true, true,
                                                    false, cnt,
                                                    l->hseqbase, dst1,
-                                                   cnt + maximum,
+                                                   maxsize,
                                                    true, &algo);
                                break;
                        }
@@ -2022,7 +2021,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                    false, true, true,
                                                    false, cnt,
                                                    l->hseqbase, dst1,
-                                                   cnt + maximum,
+                                                   maxsize,
                                                    true, &algo);
                                break;
                        }
@@ -2062,7 +2061,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                    false, true, true,
                                                    false, cnt,
                                                    l->hseqbase, dst1,
-                                                   cnt + maximum,
+                                                   maxsize,
                                                    true, &algo);
                                break;
                        }
@@ -2102,7 +2101,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                    false, true, true,
                                                    false, cnt,
                                                    l->hseqbase, dst1,
-                                                   cnt + maximum,
+                                                   maxsize,
                                                    true, &algo);
                                break;
                        }
@@ -2130,7 +2129,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                    false, true, true,
                                                    false, cnt,
                                                    l->hseqbase, dst1,
-                                                   cnt + maximum,
+                                                   maxsize,
                                                    true, &algo);
                                break;
                        }
@@ -2160,7 +2159,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                    false, true, true,
                                                    false, cnt,
                                                    l->hseqbase, dst1,
-                                                   cnt + maximum,
+                                                   maxsize,
                                                    true, &algo);
                                break;
                        }
@@ -2189,7 +2188,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                                    false, true, true,
                                                    false, cnt,
                                                    l->hseqbase, dst1,
-                                                   cnt + maximum,
+                                                   maxsize,
                                                    true, &algo);
                                break;
                        }
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
@@ -917,9 +917,12 @@ table_ref(sql_query *query, sql_rel *rel
                        /* Rename columns of the rel_parse relation */
                        if (sql->emode != m_deps) {
                                assert(is_project(rel->op));
-                               if (!rel)
-                                       return NULL;
                                set_processed(rel);
+                               if ((is_simple_project(rel->op) || 
is_groupby(rel->op)) && !list_empty(rel->r)) {
+                                       /* it's unsafe to set the projection 
names because of possible dependent sorting/grouping columns */
+                                       rel = rel_project(sql->sa, rel, 
rel_projections(sql, rel, NULL, 1, 0));
+                                       set_processed(rel);
+                               }
                                for (n = t->columns.set->h, m = rel->exps->h; n 
&& m; n = n->next, m = m->next) {
                                        sql_column *c = n->data;
                                        sql_exp *e = m->data;
diff --git 
a/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
 
b/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
--- 
a/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
+++ 
b/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
@@ -83,7 +83,7 @@ stdout of test 'count_from_commented_fun
 % .plan # table_name
 % rel # name
 % clob # type
-% 157 # length
+% 159 # length
 project (
 | group by (
 | | project (
@@ -92,34 +92,36 @@ project (
 | | | | | project (
 | | | | | | project (
 | | | | | | | project (
-| | | | | | | | left outer join (
+| | | | | | | | project (
 | | | | | | | | | left outer join (
-| | | | | | | | | | join (
+| | | | | | | | | | left outer join (
 | | | | | | | | | | | join (
-| | | | | | | | | | | | table(sys.functions) [ "functions"."id" as "f"."id", 
"functions"."schema_id" as "f"."schema_id" ] COUNT ,
-| | | | | | | | | | | | table(sys.comments) [ "comments"."id" NOT NULL HASHCOL 
 as "c"."id" ] COUNT 
-| | | | | | | | | | | ) [ "f"."id" = "c"."id" NOT NULL HASHCOL  ],
-| | | | | | | | | | | table(sys.schemas) [ "schemas"."id" as "s"."id" ] COUNT 
-| | | | | | | | | | ) [ "f"."schema_id" = "s"."id" ],
+| | | | | | | | | | | | join (
+| | | | | | | | | | | | | table(sys.functions) [ "functions"."id" as "f"."id", 
"functions"."schema_id" as "f"."schema_id" ] COUNT ,
+| | | | | | | | | | | | | table(sys.comments) [ "comments"."id" NOT NULL 
HASHCOL  as "c"."id" ] COUNT 
+| | | | | | | | | | | | ) [ "f"."id" = "c"."id" NOT NULL HASHCOL  ],
+| | | | | | | | | | | | table(sys.schemas) [ "schemas"."id" as "s"."id" ] 
COUNT 
+| | | | | | | | | | | ) [ "f"."schema_id" = "s"."id" ],
+| | | | | | | | | | | select (
+| | | | | | | | | | | | table(sys.functions) [ "functions"."id", 
"functions"."system" ] COUNT 
+| | | | | | | | | | | ) [ "functions"."system" = boolean "true" ]
+| | | | | | | | | | ) [ "f"."id" = "functions"."id" ],
 | | | | | | | | | | select (
-| | | | | | | | | | | table(sys.functions) [ "functions"."id", 
"functions"."system" ] COUNT 
-| | | | | | | | | | ) [ "functions"."system" = boolean "true" ]
-| | | | | | | | | ) [ "f"."id" = "functions"."id" ],
-| | | | | | | | | select (
-| | | | | | | | | | table(sys.args) [ "args"."func_id" as "p"."func_id", 
"args"."inout" as "p"."inout", "args"."number" as "p"."number" ] COUNT 
-| | | | | | | | | ) [ "p"."inout" = tinyint "1" ]
-| | | | | | | | ) [ "f"."id" = "p"."func_id" ]
-| | | | | | | ) [ "f"."id", "p"."number" ] [ "f"."id" ASC, "p"."number" ASC ]
-| | | | | | ) [ "f"."id", "p"."number" ] [ "f"."id" ASC, "p"."number" NULLS 
LAST ]
-| | | | | ) [ "f"."id", "p"."number" ] [ "f"."id" ASC, "p"."number" ASC ]
-| | | | ) [ "f"."id", sys.row_number("f"."id", boolean "false" as "%17"."%17", 
sys.diff(sys.diff("f"."id" ASC), "p"."number" ASC) as "%20"."%20") as "line" ]
-| | | ) [ "f"."id" as "fid", "line" ]
-| | ) [ "fid" as "commented_function_signatures_6542"."fid" ] [ "line" ASC ]
-| ) [  ] [ sys.count() NOT NULL as "%23"."%23" ]
-) [ "%23"."%23" NOT NULL ]
+| | | | | | | | | | | table(sys.args) [ "args"."func_id" as "p"."func_id", 
"args"."inout" as "p"."inout", "args"."number" as "p"."number" ] COUNT 
+| | | | | | | | | | ) [ "p"."inout" = tinyint "1" ]
+| | | | | | | | | ) [ "f"."id" = "p"."func_id" ]
+| | | | | | | | ) [ "f"."id", "p"."number" ] [ "f"."id" ASC, "p"."number" ASC ]
+| | | | | | | ) [ "f"."id", "p"."number" ] [ "f"."id" ASC, "p"."number" NULLS 
LAST ]
+| | | | | | ) [ "f"."id", "p"."number" ] [ "f"."id" ASC, "p"."number" ASC ]
+| | | | | ) [ "f"."id", sys.row_number("f"."id", boolean "false" as 
"%17"."%17", sys.diff(sys.diff("f"."id" ASC), "p"."number" ASC) as "%20"."%20") 
as "line" ]
+| | | | ) [ "f"."id" as "fid", "line" ]
+| | | ) [ "fid" ] [ "line" ASC ]
+| | ) [ "fid" as "commented_function_signatures_6542"."fid" ]
+| ) [  ] [ sys.count() NOT NULL as "%24"."%24" ]
+) [ "%24"."%24" NOT NULL ]
 #select count (*) from sys.commented_function_signatures_6542;
-% .%23 # table_name
-% %23 # name
+% .%24 # table_name
+% %24 # name
 % bigint # type
 % 1 # length
 [ 0    ]
diff --git a/sql/test/json/Tests/jsonparser.Bug-6943.sql 
b/sql/test/json/Tests/jsonparser.Bug-6943.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/json/Tests/jsonparser.Bug-6943.sql
@@ -0,0 +1,2 @@
+SELECT json.isValid('"abc":"abc"');           -- false
+SELECT json.isValid('{"abc":"abc":"abc"}');   -- false
diff --git a/sql/test/miscellaneous/Tests/simple_selects.sql 
b/sql/test/miscellaneous/Tests/simple_selects.sql
--- a/sql/test/miscellaneous/Tests/simple_selects.sql
+++ b/sql/test/miscellaneous/Tests/simple_selects.sql
@@ -185,3 +185,12 @@ select cast(x as interval month) from (v
 
 select cast(92233720368547750 as interval month); --error value to large for a 
month interval
 select cast(92233720368547750 as interval second); --error, overflow in 
conversion for interval second
+
+start transaction;
+CREATE VIEW myv AS
+SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS table_name, 
fk.name AS fk_name
+  FROM sys.tables AS t, sys.keys AS k, sys.keys AS fk
+ WHERE fk.rkey = k.id and k.table_id = t.id
+ ORDER BY t.schema_id, t.name, fk.name;
+select * from myv limit 1;
+rollback;
diff --git a/sql/test/miscellaneous/Tests/simple_selects.stable.out 
b/sql/test/miscellaneous/Tests/simple_selects.stable.out
--- a/sql/test/miscellaneous/Tests/simple_selects.stable.out
+++ b/sql/test/miscellaneous/Tests/simple_selects.stable.out
@@ -362,6 +362,18 @@ stdout of test 'simple_selects` in direc
 [ NULL ]
 [ 100  ]
 [ NULL ]
+#start transaction;
+#CREATE VIEW myv AS
+#SELECT t.schema_id AS table_schema_id, t.id AS table_id, t.name AS 
table_name, fk.name AS fk_name
+#  FROM sys.tables AS t, sys.keys AS k, sys.keys AS fk
+# WHERE fk.rkey = k.id and k.table_id = t.id
+# ORDER BY t.schema_id, t.name, fk.name;
+#select * from myv limit 1;
+% .myv,        .myv,   .myv,   .myv # table_name
+% table_schema_id,     table_id,       table_name,     fk_name # name
+% int, int,    varchar,        varchar # type
+% 1,   1,      0,      0 # length
+#rollback;
 
 # 17:31:38 >  
 # 17:31:38 >  "Done."
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to