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