Changeset: 9a60c2693323 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9a60c2693323
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out
        sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.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.int128
        sql/test/emptydb/Tests/check.stable.out.int128
        
sql/test/testdb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out
        sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out.int128
        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.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.int128
Branch: default
Log Message:

Upgrade: add new generate_series functions.


diffs (truncated from 610 to 300 lines):

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
@@ -327,7 +327,7 @@ static str
 sql_create_shp(Client c)
 {
        //Create the new SHPload procedures
-       const char *query = "create procedure SHPLoad(fname string, schemaname 
string, tablename string) external name shp.load;\n"
+       const char query[] = "create procedure SHPLoad(fname string, schemaname 
string, tablename string) external name shp.load;\n"
                "create procedure SHPLoad(fname string, tablename string) 
external name shp.load;\n"
                "update sys.functions set system = true where schema_id = 2000 
and name in ('shpload');";
        printf("Running database upgrade commands:\n%s\n", query);
@@ -340,7 +340,7 @@ static str
 sql_drop_shp(Client c)
 {
        //Drop the old SHP procedures (upgrade from version before shpload 
upgrade)
-       const char *query = "drop procedure if exists SHPattach(string) 
cascade;\n"
+       const char query[] = "drop procedure if exists SHPattach(string) 
cascade;\n"
                "drop procedure if exists SHPload(integer) cascade;\n"
                "drop procedure if exists SHPload(integer, geometry) 
cascade;\n";
        printf("Running database upgrade commands:\n%s\n", query);
@@ -351,7 +351,7 @@ sql_drop_shp(Client c)
 static str
 sql_update_generator(Client c)
 {
-       const char *query = "update sys.args set name = 'limit' where name = 
'last' and func_id in (select id from sys.functions where schema_id = 2000 and 
name = 'generate_series' and func like '% last %');\n"
+       const char query[] = "update sys.args set name = 'limit' where name = 
'last' and func_id in (select id from sys.functions where schema_id = 2000 and 
name = 'generate_series' and func like '% last %');\n"
                "update sys.functions set func = replace(func, ' last ', ' 
\"limit\" ') where schema_id = 2000 and name = 'generate_series' and func like 
'% last %';\n";
        return SQLstatementIntern(c, query, "update", true, false, NULL);
 }
@@ -3287,7 +3287,7 @@ sql_update_jan2022(Client c, mvc *sql)
                        list_append(l, &tp);
                        if (sql_bind_func_(sql, s->base.name, "strimp_create", 
l, F_PROC, true, true)) {
                                /* do the upgrade by removing the two functions 
*/
-                               const char *query =
+                               const char query[] =
                                        "drop filter function 
sys.strimp_filter(string, string) cascade;\n"
                                        "drop procedure 
sys.strimp_create(string, string, string) cascade;\n";
                                printf("Running database upgrade 
commands:\n%s\n", query);
@@ -5198,7 +5198,7 @@ sql_update_jun2023(Client c, mvc *sql, s
                        if (wr)
                                wr->system = 0;
 
-                       const char *query =
+                       const char query[] =
                                "drop procedure if exists wlc.master() 
cascade;\n"
                                "drop procedure if exists wlc.master(string) 
cascade;\n"
                                "drop procedure if exists wlc.stop() cascade;\n"
@@ -5555,7 +5555,7 @@ sql_update_jun2023(Client c, mvc *sql, s
        if (!sql_bind_func(sql, "sys", "pause", &t1, &t2, F_PROC, true, true)) {
                sql->session->status = 0; /* if the function was not found 
clean the error */
                sql->errstr[0] = '\0';
-               const char *query =
+               const char query[] =
                        "create function sys.queue(username string) returns 
table(\"tag\" bigint, \"sessionid\" int, \"username\" string, \"started\" 
timestamp, \"status\" string, \"query\" string, \"finished\" timestamp, 
\"maxworkers\" int, \"footprint\" int) external name sysmon.queue;\n"
                        "create procedure sys.pause(tag bigint, username 
string) external name sysmon.pause;\n"
                        "create procedure sys.resume(tag bigint, username 
string) external name sysmon.resume;\n"
@@ -5568,7 +5568,7 @@ sql_update_jun2023(Client c, mvc *sql, s
 
        /* sys.settimeout and sys.setsession where removed */
        if (sql_bind_func(sql, "sys", "settimeout", &t1, NULL, F_PROC, true, 
true)) {
-               const char *query =
+               const char query[] =
                        "drop procedure sys.settimeout(bigint) cascade;\n"
                        "drop procedure sys.settimeout(bigint, bigint) 
cascade;\n"
                        "drop procedure sys.setsession(bigint) cascade;\n";
@@ -5852,7 +5852,7 @@ sql_update_dec2023_geom(Client c, mvc *s
                        sql_table *t;
                        if ((t = mvc_bind_table(sql, s, "geometry_columns")) != 
NULL)
                                t->system = 0;
-                       const char *query =
+                       const char query[] =
                                "drop function if exists 
sys.st_intersects(geometry, geometry) cascade;\n"
                                "drop function if exists 
sys.st_dwithin(geometry, geometry, double) cascade;\n"
                                "drop view if exists sys.geometry_columns 
cascade;\n"
@@ -5914,7 +5914,7 @@ sql_update_dec2023(Client c, mvc *sql, s
 
        sql_find_subtype(&tp, "varchar", 0, 0);
        if (sql_bind_func(sql, s->base.name, "similarity", &tp, &tp, F_FUNC, 
true, true)) {
-               const char *query = "drop function sys.similarity(string, 
string) cascade;\n";
+               const char query[] = "drop function sys.similarity(string, 
string) cascade;\n";
                printf("Running database upgrade commands:\n%s\n", query);
                fflush(stdout);
                err = SQLstatementIntern(c, query, "update", true, false, NULL);
@@ -5926,7 +5926,7 @@ sql_update_dec2023(Client c, mvc *sql, s
        if (mvc_bind_table(sql, s, "describe_accessible_tables") == NULL) {
                sql->session->status = 0; /* if the view was not found clean 
the error */
                sql->errstr[0] = '\0';
-               const char *query =
+               const char query[] =
                "CREATE VIEW sys.describe_accessible_tables AS\n"
                " SELECT\n"
                " schemas.name AS schema,\n"
@@ -5955,10 +5955,10 @@ sql_update_dec2023(Client c, mvc *sql, s
                fflush(stdout);
                err = SQLstatementIntern(c, query, "update", true, false, NULL);
                if (err == MAL_SUCCEED) {
-                       query = "alter table sys.function_languages set read 
only;\n";
-                       printf("Running database upgrade commands:\n%s\n", 
query);
+                       const char query2[] = "alter table 
sys.function_languages set read only;\n";
+                       printf("Running database upgrade commands:\n%s\n", 
query2);
                        fflush(stdout);
-                       err = SQLstatementIntern(c, query, "update", true, 
false, NULL);
+                       err = SQLstatementIntern(c, query2, "update", true, 
false, NULL);
                }
        }
 
@@ -5973,7 +5973,7 @@ sql_update_dec2023(Client c, mvc *sql, s
                        if ((t = mvc_bind_table(sql, s, "dump_comments")) != 
NULL)
                                t->system = 0;
 
-                       const char *cmds =
+                       const char cmds[] =
                        "DROP FUNCTION IF EXISTS sys.dump_database(BOOLEAN) 
CASCADE;\n"
                        "DROP VIEW IF EXISTS sys.dump_comments CASCADE;\n"
                        "DROP VIEW IF EXISTS sys.describe_comments CASCADE;\n"
@@ -6061,7 +6061,7 @@ sql_update_dec2023(Client c, mvc *sql, s
                        list_append(l, &t2);
                        list_append(l, &t2);
                        if (!sql_bind_func_(sql, s->base.name, "sql_datatype", 
l, F_FUNC, true, true)) {
-                               const char *cmds =
+                               const char cmds[] =
                                "CREATE FUNCTION sys.sql_datatype(mtype 
varchar(999), digits integer, tscale integer, nameonly boolean, shortname 
boolean)\n"
                                "  RETURNS varchar(1024)\n"
                                "BEGIN\n"
@@ -6139,7 +6139,7 @@ sql_update_dec2023(Client c, mvc *sql, s
        if (info == NULL) {
                sql->session->status = 0; /* if the schema was not found clean 
the error */
                sql->errstr[0] = '\0';
-               const char *cmds =
+               const char cmds[] =
                "CREATE SCHEMA INFORMATION_SCHEMA;\n"
                "COMMENT ON SCHEMA INFORMATION_SCHEMA IS 'ISO/IEC 9075-11 
SQL/Schemata';\n"
                "update sys.schemas set system = true where name = 
'information_schema';\n"
@@ -6547,7 +6547,7 @@ sql_update_dec2023(Client c, mvc *sql, s
        if (!sql_bind_func(sql, s->base.name, "persist_unlogged", &tp, &tp, 
F_UNION, true, true)) {
                sql->session->status = 0;
                sql->errstr[0] = '\0';
-               const char *query =
+               const char query[] =
                        "CREATE FUNCTION sys.persist_unlogged(sname STRING, 
tname STRING)\n"
                        "RETURNS TABLE(\"table\" STRING, \"table_id\" INT, 
\"rowcount\" BIGINT)\n"
                        "EXTERNAL NAME sql.persist_unlogged;\n"
@@ -6579,7 +6579,7 @@ sql_update_dec2023_sp1(Client c, mvc *sq
        b = BATdescriptor(output->cols[0].b);
        if (b) {
                if (BATcount(b) > 0) {
-                       const char *query = "drop function 
json.isvalid(json);\n"
+                       const char query[] = "drop function 
json.isvalid(json);\n"
                                "create function json.isvalid(js json)\n"
                                "returns bool begin return case when js is NULL 
then NULL else true end; end;\n"
                                "GRANT EXECUTE ON FUNCTION json.isvalid(json) 
TO PUBLIC;\n"
@@ -6642,8 +6642,6 @@ sql_update_default(Client c, mvc *sql, s
        res_table *output;
        BAT *b;
 
-       (void) sql;
-       (void) s;
        err = SQLstatementIntern(c, "SELECT id FROM sys.functions WHERE 
schema_id = 2000 AND name = 'describe_type' AND func LIKE '%sql_datatype%';\n", 
"update", true, false, &output);
        if (err)
                return err;
@@ -6652,7 +6650,7 @@ sql_update_default(Client c, mvc *sql, s
                if (BATcount(b) == 0) {
                        /* do update */
                        sql_table *t;
-                       const char *query =
+                       const char query[] =
                                "update sys._columns set type_digits = 7 where 
type = 'tinyint' and type_digits <> 7;\n"
                                "update sys._columns set type_digits = 15 where 
type = 'smallint' and type_digits <> 15;\n"
                                "update sys._columns set type_digits = 31 where 
type = 'int' and type_digits <> 31;\n"
@@ -7063,6 +7061,34 @@ sql_update_default(Client c, mvc *sql, s
                BBPunfix(b->batCacheid);
        }
        res_table_destroy(output);
+       allocator *old_sa = sql->sa;
+       if ((sql->sa = sa_create(sql->pa)) != NULL) {
+               list *l;
+               if ((l = sa_list(sql->sa)) != NULL) {
+                       sql_subtype tp1, tp2;
+                       sql_find_subtype(&tp1, "date", 0, 0);
+                       list_append(l, &tp1);
+                       list_append(l, &tp1);
+                       sql_find_subtype(&tp2, "day_interval", 0, 0);
+                       list_append(l, &tp2);
+                       if (!sql_bind_func_(sql, s->base.name, 
"generate_series", l, F_UNION, true, true)) {
+                               const char query[] = "create function 
sys.generate_series(first date, \"limit\" date, stepsize interval month)\n"
+                                       "returns table (value date)\n"
+                                       "external name generator.series;\n"
+                                       "create function 
sys.generate_series(first date, \"limit\" date, stepsize interval day)\n"
+                                       "returns table (value date)\n"
+                                       "external name generator.series;\n"
+                                       "update sys.functions set system = true 
where system <> true and name = 'generate_series' and schema_id = 2000;\n";
+                               sql->session->status = 0;
+                               sql->errstr[0] = '\0';
+                               printf("Running database upgrade 
commands:\n%s\n", query);
+                               fflush(stdout);
+                               err = SQLstatementIntern(c, query, "update", 
true, false, NULL);
+                       }
+               }
+               sa_destroy(sql->sa);
+       }
+       sql->sa = old_sa;
        return err;
 }
 
diff --git 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -993,3 +993,12 @@ GRANT SELECT ON sys.describe_functions T
 update sys.functions set system = true where not system and schema_id = 2000 
and name in ('dump_database', 'describe_columns', 'describe_type');
 update sys._tables set system = true where not system and schema_id = 2000 and 
name in ('dump_comments', 'dump_tables', 'dump_functions', 
'dump_function_grants', 'describe_functions', 'describe_privileges', 
'describe_comments', 'fully_qualified_functions', 'describe_tables');
 
+Running database upgrade commands:
+create function sys.generate_series(first date, "limit" date, stepsize 
interval month)
+returns table (value date)
+external name generator.series;
+create function sys.generate_series(first date, "limit" date, stepsize 
interval day)
+returns table (value date)
+external name generator.series;
+update sys.functions set system = true where system <> true and name = 
'generate_series' and schema_id = 2000;
+
diff --git a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
@@ -981,3 +981,12 @@ GRANT SELECT ON sys.describe_functions T
 update sys.functions set system = true where not system and schema_id = 2000 
and name in ('dump_database', 'describe_columns', 'describe_type');
 update sys._tables set system = true where not system and schema_id = 2000 and 
name in ('dump_comments', 'dump_tables', 'dump_functions', 
'dump_function_grants', 'describe_functions', 'describe_privileges', 
'describe_comments', 'fully_qualified_functions', 'describe_tables');
 
+Running database upgrade commands:
+create function sys.generate_series(first date, "limit" date, stepsize 
interval month)
+returns table (value date)
+external name generator.series;
+create function sys.generate_series(first date, "limit" date, stepsize 
interval day)
+returns table (value date)
+external name generator.series;
+update sys.functions set system = true where system <> true and name = 
'generate_series' and schema_id = 2000;
+
diff --git 
a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -1062,3 +1062,12 @@ GRANT SELECT ON sys.describe_functions T
 update sys.functions set system = true where not system and schema_id = 2000 
and name in ('dump_database', 'describe_columns', 'describe_type');
 update sys._tables set system = true where not system and schema_id = 2000 and 
name in ('dump_comments', 'dump_tables', 'dump_functions', 
'dump_function_grants', 'describe_functions', 'describe_privileges', 
'describe_comments', 'fully_qualified_functions', 'describe_tables');
 
+Running database upgrade commands:
+create function sys.generate_series(first date, "limit" date, stepsize 
interval month)
+returns table (value date)
+external name generator.series;
+create function sys.generate_series(first date, "limit" date, stepsize 
interval day)
+returns table (value date)
+external name generator.series;
+update sys.functions set system = true where system <> true and name = 
'generate_series' and schema_id = 2000;
+
diff --git 
a/sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
@@ -993,3 +993,12 @@ GRANT SELECT ON sys.describe_functions T
 update sys.functions set system = true where not system and schema_id = 2000 
and name in ('dump_database', 'describe_columns', 'describe_type');
 update sys._tables set system = true where not system and schema_id = 2000 and 
name in ('dump_comments', 'dump_tables', 'dump_functions', 
'dump_function_grants', 'describe_functions', 'describe_privileges', 
'describe_comments', 'fully_qualified_functions', 'describe_tables');
 
+Running database upgrade commands:
+create function sys.generate_series(first date, "limit" date, stepsize 
interval month)
+returns table (value date)
+external name generator.series;
+create function sys.generate_series(first date, "limit" date, stepsize 
interval day)
+returns table (value date)
+external name generator.series;
+update sys.functions set system = true where system <> true and name = 
'generate_series' and schema_id = 2000;
+
diff --git a/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out 
b/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out
--- a/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out
@@ -981,3 +981,12 @@ GRANT SELECT ON sys.describe_functions T
 update sys.functions set system = true where not system and schema_id = 2000 
and name in ('dump_database', 'describe_columns', 'describe_type');
 update sys._tables set system = true where not system and schema_id = 2000 and 
name in ('dump_comments', 'dump_tables', 'dump_functions', 
'dump_function_grants', 'describe_functions', 'describe_privileges', 
'describe_comments', 'fully_qualified_functions', 'describe_tables');
 
+Running database upgrade commands:
+create function sys.generate_series(first date, "limit" date, stepsize 
interval month)
+returns table (value date)
+external name generator.series;
+create function sys.generate_series(first date, "limit" date, stepsize 
interval day)
+returns table (value date)
+external name generator.series;
+update sys.functions set system = true where system <> true and name = 
'generate_series' and schema_id = 2000;
+
diff --git a/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128
@@ -1062,3 +1062,12 @@ GRANT SELECT ON sys.describe_functions T
 update sys.functions set system = true where not system and schema_id = 2000 
and name in ('dump_database', 'describe_columns', 'describe_type');
 update sys._tables set system = true where not system and schema_id = 2000 and 
name in ('dump_comments', 'dump_tables', 'dump_functions', 
'dump_function_grants', 'describe_functions', 'describe_privileges', 
'describe_comments', 'fully_qualified_functions', 'describe_tables');
 
+Running database upgrade commands:
+create function sys.generate_series(first date, "limit" date, stepsize 
interval month)
+returns table (value date)
+external name generator.series;
+create function sys.generate_series(first date, "limit" date, stepsize 
interval day)
+returns table (value date)
+external name generator.series;
+update sys.functions set system = true where system <> true and name = 
'generate_series' and schema_id = 2000;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to