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

Reply via email to