Changeset: 7856bce9a91d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7856bce9a91d
Added Files:
        sql/test/BugTracker-2019/Tests/jsonpath-validity.Bug-6792.sql
        sql/test/BugTracker-2019/Tests/jsonpath-validity.Bug-6792.stable.err
        sql/test/BugTracker-2019/Tests/jsonpath-validity.Bug-6792.stable.out
Modified Files:
        clients/mapiclient/mhelp.c
        monetdb5/modules/atoms/json.c
        sql/backends/monet5/sql_upgrades.c
        sql/benchmarks/tpch/11.sql
        sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out.int128
        sql/benchmarks/tpch/LOCKED/Tests/11.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/11.stable.out.int128
        sql/benchmarks/tpch/Tests/01-22.stable.out
        sql/benchmarks/tpch/Tests/01-22.stable.out.int128
        sql/benchmarks/tpch/Tests/11.stable.out
        sql/benchmarks/tpch/Tests/11.stable.out.int128
        sql/benchmarks/tpch/all.sql
        sql/benchmarks/tpch/queries.sql
        sql/test/BugTracker-2019/Tests/All
        sql/test/Users/Tests/columnRights.stable.err
        sql/test/Users/Tests/columnRights.stable.out
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Branch: json
Log Message:

Merge with default


diffs (truncated from 580 to 300 lines):

diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -295,7 +295,7 @@ SQLhelp sqlhelp1[] = {
         NULL},
        {"EXTRACT",
         "Built-in function",
-        "EXTRACT '(' { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND } FROM 
scalar_expression ')'",
+        "EXTRACT '(' { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | CENTURY | 
DECADE | QUARTER | WEEK | DOW | DOY } FROM scalar_expression ')'",
         NULL,
         NULL},
        {"DECLARE",
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -464,6 +464,7 @@ JSONcompile(char *expr, pattern terms[])
                }
                if (*s == '[') {
                        // array step
+                       bool closed = false;
                        s++;
                        skipblancs(s);
                        if (*s != '*') {
@@ -474,9 +475,14 @@ JSONcompile(char *expr, pattern terms[])
                                        throw(MAL, "json.path", "'*' or digit 
expected");
                        }
                        for (; *s; s++)
-                               if (*s == ']')
+                               if (*s == ']') {
+                                       closed = true;
                                        break;
+                               }
                        if (*s == 0) {
+                               if (!closed) {
+                                       throw(MAL, "json.path", "] expected");
+                               }
                                t++;
                                break;
                        }
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -216,25 +216,31 @@ sql_update_hugeint(Client c, mvc *sql, c
        /* 39_analytics_hge.sql */
        pos += snprintf(buf + pos, bufsize - pos,
                        "create aggregate stddev_samp(val HUGEINT) returns 
DOUBLE\n"
-                       "\texternal name \"aggr\".\"stdev\";\n"
+                       " external name \"aggr\".\"stdev\";\n"
                        "GRANT EXECUTE ON AGGREGATE stddev_samp(HUGEINT) TO 
PUBLIC;\n"
                        "create aggregate stddev_pop(val HUGEINT) returns 
DOUBLE\n"
-                       "\texternal name \"aggr\".\"stdevp\";\n"
+                       " external name \"aggr\".\"stdevp\";\n"
                        "GRANT EXECUTE ON AGGREGATE stddev_pop(HUGEINT) TO 
PUBLIC;\n"
                        "create aggregate var_samp(val HUGEINT) returns 
DOUBLE\n"
-                       "\texternal name \"aggr\".\"variance\";\n"
+                       " external name \"aggr\".\"variance\";\n"
                        "GRANT EXECUTE ON AGGREGATE var_samp(HUGEINT) TO 
PUBLIC;\n"
                        "create aggregate var_pop(val HUGEINT) returns DOUBLE\n"
-                       "\texternal name \"aggr\".\"variancep\";\n"
+                       " external name \"aggr\".\"variancep\";\n"
                        "GRANT EXECUTE ON AGGREGATE var_pop(HUGEINT) TO 
PUBLIC;\n"
                        "create aggregate median(val HUGEINT) returns HUGEINT\n"
-                       "\texternal name \"aggr\".\"median\";\n"
+                       " external name \"aggr\".\"median\";\n"
                        "GRANT EXECUTE ON AGGREGATE median(HUGEINT) TO 
PUBLIC;\n"
                        "create aggregate quantile(val HUGEINT, q DOUBLE) 
returns HUGEINT\n"
-                       "\texternal name \"aggr\".\"quantile\";\n"
+                       " external name \"aggr\".\"quantile\";\n"
                        "GRANT EXECUTE ON AGGREGATE quantile(HUGEINT, DOUBLE) 
TO PUBLIC;\n"
+                       "create aggregate median_avg(val HUGEINT) returns 
DOUBLE\n"
+                       " external name \"aggr\".\"median_avg\";\n"
+                       "GRANT EXECUTE ON AGGREGATE median_avg(HUGEINT) TO 
PUBLIC;\n"
+                       "create aggregate quantile_avg(val HUGEINT, q DOUBLE) 
returns DOUBLE\n"
+                       " external name \"aggr\".\"quantile_avg\";\n"
+                       "GRANT EXECUTE ON AGGREGATE quantile_avg(HUGEINT, 
DOUBLE) TO PUBLIC;\n"
                        "create aggregate corr(e1 HUGEINT, e2 HUGEINT) returns 
DOUBLE\n"
-                       "\texternal name \"aggr\".\"corr\";\n"
+                       " external name \"aggr\".\"corr\";\n"
                        "GRANT EXECUTE ON AGGREGATE corr(HUGEINT, HUGEINT) TO 
PUBLIC;\n");
 
        /* 40_json_hge.sql */
@@ -244,7 +250,7 @@ sql_update_hugeint(Client c, mvc *sql, c
                        "GRANT EXECUTE ON FUNCTION json.filter(json, hugeint) 
TO PUBLIC;\n");
 
        pos += snprintf(buf + pos, bufsize - pos,
-                       "update sys.functions set system = true where name in 
('fuse', 'generate_series', 'stddev_samp', 'stddev_pop', 'var_samp', 'var_pop', 
'median', 'quantile', 'corr') and schema_id = (select id from sys.schemas where 
name = 'sys');\n"
+                       "update sys.functions set system = true where name in 
('fuse', 'generate_series', 'stddev_samp', 'stddev_pop', 'var_samp', 'var_pop', 
'median', 'median_avg', 'quantile', 'quantile_avg', 'corr') and schema_id = 
(select id from sys.schemas where name = 'sys');\n"
                        "update sys.functions set system = true where name = 
'filter' and schema_id = (select id from sys.schemas where name = 'json');\n");
 
        pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", 
prev_schema);
@@ -2306,6 +2312,45 @@ sql_update_nov2019(Client c, mvc *sql, c
        return err;             /* usually MAL_SUCCEED */
 }
 
+#ifdef HAVE_HGE
+static str
+sql_update_nov2019_sp1_hugeint(Client c, mvc *sql, const char *prev_schema, 
bool *systabfixed)
+{
+       size_t bufsize = 1024, pos = 0;
+       char *buf, *err;
+
+       if (!*systabfixed &&
+           (err = sql_fix_system_tables(c, sql, prev_schema)) != NULL)
+               return err;
+       *systabfixed = true;
+
+       if ((buf = GDKmalloc(bufsize)) == NULL)
+               throw(SQL, "sql_update_hugeint", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+
+       pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
+
+       /* 39_analytics_hge.sql */
+       pos += snprintf(buf + pos, bufsize - pos,
+                       "create aggregate median_avg(val HUGEINT) returns 
DOUBLE\n"
+                       " external name \"aggr\".\"median_avg\";\n"
+                       "GRANT EXECUTE ON AGGREGATE median_avg(HUGEINT) TO 
PUBLIC;\n"
+                       "create aggregate quantile_avg(val HUGEINT, q DOUBLE) 
returns DOUBLE\n"
+                       " external name \"aggr\".\"quantile_avg\";\n"
+                       "GRANT EXECUTE ON AGGREGATE quantile_avg(HUGEINT, 
DOUBLE) TO PUBLIC;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos,
+                       "update sys.functions set system = true where name in 
('median_avg', 'quantile_avg') and schema_id = (select id from sys.schemas 
where name = 'sys');\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", 
prev_schema);
+       assert(pos < bufsize);
+
+       printf("Running database upgrade commands:\n%s\n", buf);
+       err = SQLstatementIntern(c, &buf, "update", true, false, NULL);
+       GDKfree(buf);
+       return err;             /* usually MAL_SUCCEED */
+}
+#endif
+
 static str
 sql_update_default(Client c, mvc *sql, const char *prev_schema)
 {
@@ -2757,6 +2802,19 @@ SQLupgrades(Client c, mvc *m)
                }
        }
 
+#ifdef HAVE_HGE
+       if (!res && have_hge) {
+               sql_find_subtype(&tp, "hugeint", 0, 0);
+               if (!sql_bind_aggr(m->sa, s, "median_avg", &tp)) {
+                       if ((err = sql_update_nov2019_sp1_hugeint(c, m, 
prev_schema, &systabfixed)) != NULL) {
+                               fprintf(stderr, "!%s\n", err);
+                               freeException(err);
+                               res = -1;
+                       }
+               }
+       }
+#endif
+
        if (!res && !sql_bind_func(m->sa, s, "suspend_log_flushing", NULL, 
NULL, F_PROC)) {
                if ((err = sql_update_default(c, m, prev_schema)) != NULL) {
                        fprintf(stderr, "!%s\n", err);
diff --git a/sql/benchmarks/tpch/11.sql b/sql/benchmarks/tpch/11.sql
--- a/sql/benchmarks/tpch/11.sql
+++ b/sql/benchmarks/tpch/11.sql
@@ -16,8 +16,8 @@ group by
        ps_partkey having
                sum(ps_supplycost * ps_availqty) > (
                        select
-                               sum(ps_supplycost * ps_availqty) * 0.0100000000
-                       --                                         ^^^^^^^^^^^^
+                               sum(ps_supplycost * ps_availqty) * 0.01000000
+                       --                                         ^^^^^^^^^^
                        -- The above constant needs to be adjusted according
                        -- to the scale factor (SF): constant = 0.0001 / SF.
                        from
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
@@ -569,7 +569,7 @@ stdout of test '01-22` in directory 'sql
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out.int128 
b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out.int128
--- a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out.int128
+++ b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out.int128
@@ -569,7 +569,7 @@ stdout of test '01-22` in directory 'sql
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out
@@ -33,7 +33,7 @@ stdout of test '11` in directory 'sql/be
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out.int128 
b/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out.int128
--- a/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out.int128
+++ b/sql/benchmarks/tpch/LOCKED/Tests/11.stable.out.int128
@@ -33,7 +33,7 @@ stdout of test '11` in directory 'sql/be
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/Tests/01-22.stable.out 
b/sql/benchmarks/tpch/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/Tests/01-22.stable.out
@@ -569,7 +569,7 @@ stdout of test '01-22` in directory 'sql
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/Tests/01-22.stable.out.int128 
b/sql/benchmarks/tpch/Tests/01-22.stable.out.int128
--- a/sql/benchmarks/tpch/Tests/01-22.stable.out.int128
+++ b/sql/benchmarks/tpch/Tests/01-22.stable.out.int128
@@ -569,7 +569,7 @@ stdout of test '01-22` in directory 'sql
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/Tests/11.stable.out 
b/sql/benchmarks/tpch/Tests/11.stable.out
--- a/sql/benchmarks/tpch/Tests/11.stable.out
+++ b/sql/benchmarks/tpch/Tests/11.stable.out
@@ -33,7 +33,7 @@ stdout of test '11` in directory 'sql/be
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/Tests/11.stable.out.int128 
b/sql/benchmarks/tpch/Tests/11.stable.out.int128
--- a/sql/benchmarks/tpch/Tests/11.stable.out.int128
+++ b/sql/benchmarks/tpch/Tests/11.stable.out.int128
@@ -33,7 +33,7 @@ stdout of test '11` in directory 'sql/be
 #      sum(ps_supplycost * ps_availqty) >
 #      (
 #              select
-#                      sum(ps_supplycost * ps_availqty) * 0.0100000000
+#                      sum(ps_supplycost * ps_availqty) * 0.01000000
 #                      -- The above constant needs to be adjusted according
 #                      -- to the scale factor (SF): constant = 0.0001 / SF.
 #              from
diff --git a/sql/benchmarks/tpch/all.sql b/sql/benchmarks/tpch/all.sql
--- a/sql/benchmarks/tpch/all.sql
+++ b/sql/benchmarks/tpch/all.sql
@@ -41,7 +41,7 @@ select c_custkey, c_name, sum(l_extended
 
 
 
-select ps_partkey, sum(ps_supplycost * ps_availqty) as value from partsupp, 
supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and 
n_name = 'GERMANY' group by ps_partkey having sum(ps_supplycost * ps_availqty) 
> (select sum(ps_supplycost * ps_availqty) * 0.0100000000 from partsupp, 
supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and 
n_name = 'GERMANY') order by value desc;
+select ps_partkey, sum(ps_supplycost * ps_availqty) as value from partsupp, 
supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and 
n_name = 'GERMANY' group by ps_partkey having sum(ps_supplycost * ps_availqty) 
> (select sum(ps_supplycost * ps_availqty) * 0.01000000 from partsupp, 
supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and 
n_name = 'GERMANY') order by value desc;
 
 
 
diff --git a/sql/benchmarks/tpch/queries.sql b/sql/benchmarks/tpch/queries.sql
--- a/sql/benchmarks/tpch/queries.sql
+++ b/sql/benchmarks/tpch/queries.sql
@@ -328,7 +328,7 @@ group by
        ps_partkey having
                sum(ps_supplycost * ps_availqty) > (
                        select
-                               sum(ps_supplycost * ps_availqty) * 0.0100000000
+                               sum(ps_supplycost * ps_availqty) * 0.01000000
                        from
                                partsupp,
                                supplier,
diff --git a/sql/test/BugTracker-2019/Tests/All 
b/sql/test/BugTracker-2019/Tests/All
--- a/sql/test/BugTracker-2019/Tests/All
+++ b/sql/test/BugTracker-2019/Tests/All
@@ -49,3 +49,4 @@ index-insert-crash.Bug-6781
 avg-changes-value-scale.Bug-6783
 isaUUID.Bug-6784
 count-distinct.Bug-6790
+jsonpath-validity.Bug-6792
diff --git a/sql/test/BugTracker-2019/Tests/jsonpath-validity.Bug-6792.sql 
b/sql/test/BugTracker-2019/Tests/jsonpath-validity.Bug-6792.sql
new file mode 100644
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to