Changeset: 8f4c6b364de1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8f4c6b364de1
Modified Files:
monetdb5/modules/mal/pcre.c
sql/backends/monet5/sql_upgrades.c
sql/server/rel_select.c
sql/server/sql_env.c
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade/Tests/upgrade.stable.out
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.err
sql/test/subquery/Tests/subquery6.sql
sql/test/subquery/Tests/subquery6.stable.out
sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit
sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
testing/Mtest.py.in
Branch: unlock
Log Message:
merged
diffs (truncated from 942 to 300 lines):
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -1449,8 +1449,8 @@ sql2pcre(str *r, const char *pat, const
if (strlen(esc_str) > 1)
throw(MAL, "pcre.sql2pcre", SQLSTATE(22019) ILLEGAL_ARGUMENT ":
ESCAPE string must have length 1");
- if (pat == NULL )
- throw(MAL, "pcre.sql2pcre", OPERATION_FAILED);
+ if (pat == NULL)
+ throw(MAL, "pcre.sql2pcre", SQLSTATE(22019) ILLEGAL_ARGUMENT ":
(I)LIKE pattern must not be NULL");
ppat = GDKmalloc(strlen(pat)*3+3 /* 3 = "^'the translated regexp'$0"
*/);
if (ppat == NULL)
throw(MAL, "pcre.sql2pcre", SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -1511,7 +1511,7 @@ sql2pcre(str *r, const char *pat, const
GDKfree(*r);
*r = NULL;
if (escaped)
- throw(MAL, "pcre.sql2pcre", OPERATION_FAILED);
+ throw(MAL, "pcre.sql2pcre", SQLSTATE(22019)
ILLEGAL_ARGUMENT ": (I)LIKE pattern must not end with escape character");
*r = GDKstrdup(str_nil);
if (*r == NULL)
throw(MAL, "pcre.sql2pcre", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
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
@@ -215,15 +215,39 @@ sql_update_hugeint(Client c, mvc *sql, c
"create aggregate stddev_samp(val HUGEINT) returns
DOUBLE\n"
" external name \"aggr\".\"stdev\";\n"
"GRANT EXECUTE ON AGGREGATE stddev_samp(HUGEINT) TO
PUBLIC;\n"
+ "create window stddev_samp(val HUGEINT) returns
DOUBLE\n"
+ " external name \"sql\".\"stdev\";\n"
+ "GRANT EXECUTE ON WINDOW stddev_samp(HUGEINT) TO
PUBLIC;\n"
"create aggregate stddev_pop(val HUGEINT) returns
DOUBLE\n"
" external name \"aggr\".\"stdevp\";\n"
"GRANT EXECUTE ON AGGREGATE stddev_pop(HUGEINT) TO
PUBLIC;\n"
+ "create window stddev_pop(val HUGEINT) returns DOUBLE\n"
+ " external name \"sql\".\"stdevp\";\n"
+ "GRANT EXECUTE ON WINDOW stddev_pop(HUGEINT) TO
PUBLIC;\n"
"create aggregate var_samp(val HUGEINT) returns
DOUBLE\n"
" external name \"aggr\".\"variance\";\n"
"GRANT EXECUTE ON AGGREGATE var_samp(HUGEINT) TO
PUBLIC;\n"
+ "create window var_samp(val HUGEINT) returns DOUBLE\n"
+ " external name \"sql\".\"variance\";\n"
+ "GRANT EXECUTE ON WINDOW var_samp(HUGEINT) TO PUBLIC;\n"
+ "create aggregate covar_samp(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"aggr\".\"covariance\";\n"
+ "GRANT EXECUTE ON AGGREGATE covar_samp(HUGEINT,
HUGEINT) TO PUBLIC;\n"
+ "create window covar_samp(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"sql\".\"covariance\";\n"
+ "GRANT EXECUTE ON WINDOW covar_samp(HUGEINT, HUGEINT)
TO PUBLIC;\n"
"create aggregate var_pop(val HUGEINT) returns DOUBLE\n"
" external name \"aggr\".\"variancep\";\n"
"GRANT EXECUTE ON AGGREGATE var_pop(HUGEINT) TO
PUBLIC;\n"
+ "create window var_pop(val HUGEINT) returns DOUBLE\n"
+ " external name \"sql\".\"variancep\";\n"
+ "GRANT EXECUTE ON WINDOW var_pop(HUGEINT) TO PUBLIC;\n"
+ "create aggregate covar_pop(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"aggr\".\"covariancep\";\n"
+ "GRANT EXECUTE ON AGGREGATE covar_pop(HUGEINT, HUGEINT)
TO PUBLIC;\n"
+ "create window covar_pop(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"sql\".\"covariancep\";\n"
+ "GRANT EXECUTE ON WINDOW covar_pop(HUGEINT, HUGEINT) TO
PUBLIC;\n"
"create aggregate median(val HUGEINT) returns HUGEINT\n"
" external name \"aggr\".\"median\";\n"
"GRANT EXECUTE ON AGGREGATE median(HUGEINT) TO
PUBLIC;\n"
@@ -238,7 +262,10 @@ sql_update_hugeint(Client c, mvc *sql, c
"GRANT EXECUTE ON AGGREGATE quantile_avg(HUGEINT,
DOUBLE) TO PUBLIC;\n"
"create aggregate corr(e1 HUGEINT, e2 HUGEINT) returns
DOUBLE\n"
" external name \"aggr\".\"corr\";\n"
- "GRANT EXECUTE ON AGGREGATE corr(HUGEINT, HUGEINT) TO
PUBLIC;\n");
+ "GRANT EXECUTE ON AGGREGATE corr(HUGEINT, HUGEINT) TO
PUBLIC;\n"
+ "create window corr(e1 HUGEINT, e2 HUGEINT) returns
DOUBLE\n"
+ " external name \"sql\".\"corr\";\n"
+ "GRANT EXECUTE ON WINDOW corr(HUGEINT, HUGEINT) TO
PUBLIC;\n");
/* 40_json_hge.sql */
pos += snprintf(buf + pos, bufsize - pos,
@@ -249,9 +276,10 @@ sql_update_hugeint(Client c, mvc *sql, c
pos += snprintf(buf + pos, bufsize - pos,
"update sys.functions set system = true where system <>
true and name in ('fuse') and schema_id = (select id from sys.schemas where
name = 'sys') and type = %d;\n"
"update sys.functions set system = true where system <>
true and name in ('generate_series') and schema_id = (select id from
sys.schemas where name = 'sys') and type = %d;\n"
- "update sys.functions set system = true where system <>
true and name in ('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') and type = %d;\n"
+ "update sys.functions set system = true where system <>
true and name in ('stddev_samp', 'stddev_pop', 'var_samp', 'covar_samp',
'var_pop', 'covar_pop', 'median', 'median_avg', 'quantile', 'quantile_avg',
'corr') and schema_id = (select id from sys.schemas where name = 'sys') and
type = %d;\n"
+ "update sys.functions set system = true where system <>
true and name in ('stddev_samp', 'stddev_pop', 'var_samp', 'covar_samp',
'var_pop', 'covar_pop', 'corr') and schema_id = (select id from sys.schemas
where name = 'sys') and type = %d;\n"
"update sys.functions set system = true where system <>
true and name = 'filter' and schema_id = (select id from sys.schemas where name
= 'json') and type = %d;\n",
- (int) F_FUNC, (int) F_UNION, (int) F_AGGR, (int)
F_FUNC);
+ (int) F_FUNC, (int) F_UNION, (int) F_AGGR, (int)
F_ANALYTIC, (int) F_FUNC);
pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n",
prev_schema);
assert(pos < bufsize);
@@ -1942,6 +1970,64 @@ sql_update_jun2020_bam(Client c, mvc *m,
return err;
}
+
+#ifdef HAVE_HGE
+static str
+sql_update_jun2020_sp1_hugeint(Client c, const char *prev_schema)
+{
+ size_t bufsize = 8192, pos = 0;
+ char *buf, *err;
+
+ if ((buf = GDKmalloc(bufsize)) == NULL)
+ throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+ pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
+
+ /* 39_analytics_hge.sql */
+ pos += snprintf(buf + pos, bufsize - pos,
+ "create window stddev_samp(val HUGEINT) returns
DOUBLE\n"
+ " external name \"sql\".\"stdev\";\n"
+ "GRANT EXECUTE ON WINDOW stddev_samp(HUGEINT) TO
PUBLIC;\n"
+ "create window stddev_pop(val HUGEINT) returns DOUBLE\n"
+ " external name \"sql\".\"stdevp\";\n"
+ "GRANT EXECUTE ON WINDOW stddev_pop(HUGEINT) TO
PUBLIC;\n"
+ "create window var_samp(val HUGEINT) returns DOUBLE\n"
+ " external name \"sql\".\"variance\";\n"
+ "GRANT EXECUTE ON WINDOW var_samp(HUGEINT) TO PUBLIC;\n"
+ "create aggregate covar_samp(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"aggr\".\"covariance\";\n"
+ "GRANT EXECUTE ON AGGREGATE covar_samp(HUGEINT,
HUGEINT) TO PUBLIC;\n"
+ "create window covar_samp(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"sql\".\"covariance\";\n"
+ "GRANT EXECUTE ON WINDOW covar_samp(HUGEINT, HUGEINT)
TO PUBLIC;\n"
+ "create window var_pop(val HUGEINT) returns DOUBLE\n"
+ " external name \"sql\".\"variancep\";\n"
+ "GRANT EXECUTE ON WINDOW var_pop(HUGEINT) TO PUBLIC;\n"
+ "create aggregate covar_pop(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"aggr\".\"covariancep\";\n"
+ "GRANT EXECUTE ON AGGREGATE covar_pop(HUGEINT, HUGEINT)
TO PUBLIC;\n"
+ "create window covar_pop(e1 HUGEINT, e2 HUGEINT)
returns DOUBLE\n"
+ " external name \"sql\".\"covariancep\";\n"
+ "GRANT EXECUTE ON WINDOW covar_pop(HUGEINT, HUGEINT) TO
PUBLIC;\n"
+ "create window corr(e1 HUGEINT, e2 HUGEINT) returns
DOUBLE\n"
+ " external name \"sql\".\"corr\";\n"
+ "GRANT EXECUTE ON WINDOW corr(HUGEINT, HUGEINT) TO
PUBLIC;\n");
+
+ pos += snprintf(buf + pos, bufsize - pos,
+ "update sys.functions set system = true where system <>
true and name in ('covar_samp', 'covar_pop') and schema_id = (select id from
sys.schemas where name = 'sys') and type = %d;\n"
+ "update sys.functions set system = true where system <>
true and name in ('stddev_samp', 'stddev_pop', 'var_samp', 'covar_samp',
'var_pop', 'covar_pop', 'corr') and schema_id = (select id from sys.schemas
where name = 'sys') and type = %d;\n",
+ (int) F_AGGR, (int) F_ANALYTIC);
+
+ 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_semantics(Client c)
{
@@ -2017,13 +2103,13 @@ sql_update_default(Client c, mvc *sql, c
/* scoping branch changes */
pos += snprintf(buf + pos, bufsize - pos,
"drop function \"sys\".\"var\"();\n"
- "create function \"sys\".\"var\"()\n"
- "returns table(\n"
- "\"schema\" string,\n"
- "\"name\" string,\n"
- "\"type\" string,\n"
- "\"value\" string)\n"
- " external name
\"sql\".\"sql_variables\";\n"
+ "create function \"sys\".\"var\"() "
+ "returns table("
+ "\"schema\" string, "
+ "\"name\" string, "
+ "\"type\" string, "
+ "\"value\" string) "
+ "external name
\"sql\".\"sql_variables\";\n"
"grant execute on function
\"sys\".\"var\" to public;\n");
pos += snprintf(buf + pos, bufsize - pos,
@@ -2048,7 +2134,6 @@ sql_update_default(Client c, mvc *sql, c
return err; /* usually MAL_SUCCEED */
}
-
int
SQLupgrades(Client c, mvc *m)
{
@@ -2230,6 +2315,19 @@ SQLupgrades(Client c, mvc *m)
return -1;
}
+#ifdef HAVE_HGE
+ if (have_hge) {
+ sql_find_subtype(&tp, "hugeint", 0, 0);
+ if (!sql_bind_func(m->sa, s, "covar_pop", &tp, &tp, F_AGGR) &&
+ (err = sql_update_jun2020_sp1_hugeint(c, prev_schema)) !=
NULL) {
+ TRC_CRITICAL(SQL_PARSER, "%s\n", err);
+ freeException(err);
+ GDKfree(prev_schema);
+ return -1;
+ }
+ }
+#endif
+
if ((err = sql_update_default(c, m, prev_schema)) != NULL) {
TRC_CRITICAL(SQL_PARSER, "%s\n", err);
freeException(err);
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
@@ -1702,7 +1702,7 @@ rel_filter(mvc *sql, sql_rel *rel, list
else
return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column in query results without an aggregate
function");
}
- if (exps_card(r) <= CARD_ATOM && exps_are_atoms(r)) {
+ if (exps_card(r) <= CARD_ATOM && (exps_are_atoms(r) ||
exps_have_freevar(sql, r) || exps_have_freevar(sql, l))) {
if (exps_card(l) == exps_card(r) || rel->processed) /* bin
compare op */
return rel_select(sql->sa, rel, e);
diff --git a/sql/server/sql_env.c b/sql/server/sql_env.c
--- a/sql/server/sql_env.c
+++ b/sql/server/sql_env.c
@@ -99,6 +99,6 @@ sql_create_env(mvc *m, sql_schema *s)
/* add function */
ops = sa_list(m->sa);
- mvc_create_func(m, NULL, s, "var", ops, res, F_UNION, FUNC_LANG_SQL,
"sql", "sql_variables", "CREATE FUNCTION \"sys\".\"var\"() RETURNS
TABLE(\"schema\" string, \"name\" string, \"type\" string, \"value\" string)
EXTERNAL NAME \"sql\".\"sql_variables\";", FALSE, FALSE, TRUE);
+ mvc_create_func(m, NULL, s, "var", ops, res, F_UNION, FUNC_LANG_SQL,
"sql", "sql_variables", "create function \"sys\".\"var\"() returns
table(\"schema\" string, \"name\" string, \"type\" string, \"value\" string)
external name \"sql\".\"sql_variables\";", FALSE, FALSE, TRUE);
return 0;
}
diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -38,13 +38,7 @@ grant select on sys.queue to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue' and type = 5;
update sys._tables set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue';
drop function "sys"."var"();
-create function "sys"."var"()
-returns table(
-"schema" string,
-"name" string,
-"type" string,
-"value" string)
- external name "sql"."sql_variables";
+create function "sys"."var"() returns table("schema" string, "name" string,
"type" string, "value" string) external name "sql"."sql_variables";
grant execute on function "sys"."var" to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'var' and type = 5;
set schema "sys";
diff --git
a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
---
a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
+++
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
@@ -38,13 +38,7 @@ grant select on sys.queue to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue' and type = 5;
update sys._tables set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue';
drop function "sys"."var"();
-create function "sys"."var"()
-returns table(
-"schema" string,
-"name" string,
-"type" string,
-"value" string)
- external name "sql"."sql_variables";
+create function "sys"."var"() returns table("schema" string, "name" string,
"type" string, "value" string) external name "sql"."sql_variables";
grant execute on function "sys"."var" to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'var' and type = 5;
set schema "sys";
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
@@ -38,13 +38,7 @@ grant select on sys.queue to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue' and type = 5;
update sys._tables set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue';
drop function "sys"."var"();
-create function "sys"."var"()
-returns table(
-"schema" string,
-"name" string,
-"type" string,
-"value" string)
- external name "sql"."sql_variables";
+create function "sys"."var"() returns table("schema" string, "name" string,
"type" string, "value" string) external name "sql"."sql_variables";
grant execute on function "sys"."var" to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'var' and type = 5;
set schema "sys";
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
@@ -38,13 +38,7 @@ grant select on sys.queue to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue' and type = 5;
update sys._tables set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'queue';
drop function "sys"."var"();
-create function "sys"."var"()
-returns table(
-"schema" string,
-"name" string,
-"type" string,
-"value" string)
- external name "sql"."sql_variables";
+create function "sys"."var"() returns table("schema" string, "name" string,
"type" string, "value" string) external name "sql"."sql_variables";
grant execute on function "sys"."var" to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'var' and type = 5;
set schema "sys";
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list