Changeset: a637c439664c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a637c439664c
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        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: Jun2020
Log Message:

Fix upgrade of system functions, especially aggregates.


diffs (truncated from 49015 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
@@ -75,96 +75,65 @@ sql_fix_system_tables(Client c, mvc *sql
                if (func->base.id >= FUNC_OIDS)
                        continue;
 
-               if (func->type == F_AGGR) {
-                       pos += snprintf(buf + pos, bufsize - pos,
-                                       "insert into sys.functions values"
-                                       " (%d, '%s', '%s', '%s', %d, %d, false,"
-                                       " %s, %s, %d, %s);\n",
-                                       func->base.id, func->base.name, 
func->imp,
-                                       func->mod, (int) FUNC_LANG_INT, (int) 
func->type,
-                                       func->varres ? "true" : "false",
-                                       func->vararg ? "true" : "false",
-                                       func->s ? func->s->base.id : s->base.id,
-                                       func->system ? "true" : "false");
-                       arg = func->res->h->data;
-                       pos += snprintf(buf + pos, bufsize - pos,
-                                       "insert into sys.args values"
-                                       " (%d, %d, 'res', '%s', %u, %u, %d, 
0);\n",
-                                       store_next_oid(), func->base.id,
-                                       arg->type.type->sqlname, 
arg->type.digits,
-                                       arg->type.scale, arg->inout);
-                       if (func->ops->h) {
-                               arg = func->ops->h->data;
+               pos += snprintf(buf + pos, bufsize - pos,
+                               "insert into sys.functions values"
+                               " (%d, '%s', '%s', '%s',"
+                               " %d, %d, %s, %s, %s, %d, %s);\n",
+                               func->base.id, func->base.name,
+                               func->imp, func->mod, (int) FUNC_LANG_INT,
+                               (int) func->type,
+                               func->side_effect ? "true" : "false",
+                               func->varres ? "true" : "false",
+                               func->vararg ? "true" : "false",
+                               func->s ? func->s->base.id : s->base.id,
+                               func->system ? "true" : "false");
+               if (func->res) {
+                       for (m = func->res->h; m; m = m->next, number++) {
+                               arg = m->data;
                                pos += snprintf(buf + pos, bufsize - pos,
-                                               "insert into sys.args values"
-                                               " (%d, %d, 'arg', '%s', %u,"
-                                               " %u, %d, 1);\n",
-                                               store_next_oid(), func->base.id,
+                                               "insert into sys.args"
+                                               " values"
+                                               " (%d, %d, 'res_%d',"
+                                               " '%s', %u, %u, %d,"
+                                               " %d);\n",
+                                               store_next_oid(),
+                                               func->base.id,
+                                               number,
                                                arg->type.type->sqlname,
-                                               arg->type.digits, 
arg->type.scale,
-                                               arg->inout);
+                                               arg->type.digits,
+                                               arg->type.scale,
+                                               arg->inout, number);
                        }
-               } else {
-                       pos += snprintf(buf + pos, bufsize - pos,
-                                       "insert into sys.functions values"
-                                       " (%d, '%s', '%s', '%s',"
-                                       " %d, %d, %s, %s, %s, %d, %s);\n",
-                                       func->base.id, func->base.name,
-                                       func->imp, func->mod, (int) 
FUNC_LANG_INT,
-                                       (int) func->type,
-                                       func->side_effect ? "true" : "false",
-                                       func->varres ? "true" : "false",
-                                       func->vararg ? "true" : "false",
-                                       func->s ? func->s->base.id : s->base.id,
-                                       func->system ? "true" : "false");
-                       if (func->res) {
-                               for (m = func->res->h; m; m = m->next, 
number++) {
-                                       arg = m->data;
-                                       pos += snprintf(buf + pos, bufsize - 
pos,
-                                                       "insert into sys.args"
-                                                       " values"
-                                                       " (%d, %d, 'res_%d',"
-                                                       " '%s', %u, %u, %d,"
-                                                       " %d);\n",
-                                                       store_next_oid(),
-                                                       func->base.id,
-                                                       number,
-                                                       arg->type.type->sqlname,
-                                                       arg->type.digits,
-                                                       arg->type.scale,
-                                                       arg->inout, number);
-                               }
-                       }
-                       for (m = func->ops->h; m; m = m->next, number++) {
-                               arg = m->data;
-                               if (arg->name)
-                                       pos += snprintf(buf + pos, bufsize - 
pos,
-                                                       "insert into sys.args"
-                                                       " values"
-                                                       " (%d, %d, '%s', '%s',"
-                                                       " %u, %u, %d, %d);\n",
-                                                       store_next_oid(),
-                                                       func->base.id,
-                                                       arg->name,
-                                                       arg->type.type->sqlname,
-                                                       arg->type.digits,
-                                                       arg->type.scale,
-                                                       arg->inout, number);
-                               else
-                                       pos += snprintf(buf + pos, bufsize - 
pos,
-                                                       "insert into sys.args"
-                                                       " values"
-                                                       " (%d, %d, 'arg_%d',"
-                                                       " '%s', %u, %u, %d,"
-                                                       " %d);\n",
-                                                       store_next_oid(),
-                                                       func->base.id,
-                                                       number,
-                                                       arg->type.type->sqlname,
-                                                       arg->type.digits,
-                                                       arg->type.scale,
-                                                       arg->inout, number);
-                       }
+               }
+               for (m = func->ops->h; m; m = m->next, number++) {
+                       arg = m->data;
+                       if (arg->name)
+                               pos += snprintf(buf + pos, bufsize - pos,
+                                               "insert into sys.args"
+                                               " values"
+                                               " (%d, %d, '%s', '%s',"
+                                               " %u, %u, %d, %d);\n",
+                                               store_next_oid(),
+                                               func->base.id,
+                                               arg->name,
+                                               arg->type.type->sqlname,
+                                               arg->type.digits,
+                                               arg->type.scale,
+                                               arg->inout, number);
+                       else
+                               pos += snprintf(buf + pos, bufsize - pos,
+                                               "insert into sys.args"
+                                               " values"
+                                               " (%d, %d, 'arg_%d',"
+                                               " '%s', %u, %u, %d,"
+                                               " %d);\n",
+                                               store_next_oid(),
+                                               func->base.id,
+                                               number,
+                                               arg->type.type->sqlname,
+                                               arg->type.digits,
+                                               arg->type.scale,
+                                               arg->inout, number);
                }
        }
 
@@ -2328,13 +2297,6 @@ sql_update_jun2020(Client c, mvc *sql, c
         * see also function load_func() in store.c */
        pos += snprintf(buf + pos, bufsize - pos,
                        "update sys.functions set language = language - 2 where 
language in (8, 9);\n");
-       sql_subtype tp;
-       sql_find_subtype(&tp, "varchar", 0, 0);
-       sql_subfunc *f = sql_bind_func(sql->sa, sys, "listagg", &tp, &tp, 
F_AGGR);
-       pos += snprintf(buf + pos, bufsize - pos,
-                       "insert into sys.args values"
-                       " (%d, %d, 'arg_2', 'varchar', 0, 0, %d, 2);\n",
-                       store_next_oid(), f->func->base.id, ARG_IN);
 
        pos += snprintf(buf + pos, bufsize - pos,
                        "update sys.args set name = name || '_' || cast(number 
as string) where name in ('arg', 'res') and func_id in (select id from 
sys.functions f where f.system);\n");
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -180,23 +180,23 @@ insert into sys.args values (30942, 62, 
 insert into sys.args values (30943, 62, 'arg_1', 'mbr', 0, 0, 1, 1);
 insert into sys.args values (30944, 62, 'arg_2', 'mbr', 0, 0, 1, 2);
 insert into sys.functions values (63, 'grouping', '', '', 0, 3, false, false, 
false, 2000, true);
-insert into sys.args values (30945, 63, 'res', 'tinyint', 8, 0, 0, 0);
-insert into sys.args values (30946, 63, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30945, 63, 'res_0', 'tinyint', 8, 0, 0, 0);
+insert into sys.args values (30946, 63, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (64, 'grouping', '', '', 0, 3, false, false, 
false, 2000, true);
-insert into sys.args values (30947, 64, 'res', 'smallint', 16, 0, 0, 0);
-insert into sys.args values (30948, 64, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30947, 64, 'res_0', 'smallint', 16, 0, 0, 0);
+insert into sys.args values (30948, 64, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (65, 'grouping', '', '', 0, 3, false, false, 
false, 2000, true);
-insert into sys.args values (30949, 65, 'res', 'int', 32, 0, 0, 0);
-insert into sys.args values (30950, 65, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30949, 65, 'res_0', 'int', 32, 0, 0, 0);
+insert into sys.args values (30950, 65, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (66, 'grouping', '', '', 0, 3, false, false, 
false, 2000, true);
-insert into sys.args values (30951, 66, 'res', 'bigint', 64, 0, 0, 0);
-insert into sys.args values (30952, 66, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30951, 66, 'res_0', 'bigint', 64, 0, 0, 0);
+insert into sys.args values (30952, 66, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (67, 'grouping', '', '', 0, 3, false, false, 
false, 2000, true);
-insert into sys.args values (30953, 67, 'res', 'hugeint', 128, 0, 0, 0);
-insert into sys.args values (30954, 67, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30953, 67, 'res_0', 'hugeint', 128, 0, 0, 0);
+insert into sys.args values (30954, 67, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (68, 'not_unique', 'not_unique', 'sql', 0, 3, 
false, false, false, 2000, true);
-insert into sys.args values (30955, 68, 'res', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (30956, 68, 'arg', 'oid', 63, 0, 1, 1);
+insert into sys.args values (30955, 68, 'res_0', 'boolean', 1, 0, 0, 0);
+insert into sys.args values (30956, 68, 'arg_1', 'oid', 63, 0, 1, 1);
 insert into sys.functions values (69, 'hash', 'hash', 'mkey', 0, 1, false, 
false, false, 2000, true);
 insert into sys.args values (30957, 69, 'res_0', 'bigint', 64, 0, 0, 0);
 insert into sys.args values (30958, 69, 'arg_1', 'any', 0, 0, 1, 1);
@@ -243,14 +243,14 @@ insert into sys.args values (30989, 78, 
 insert into sys.args values (30990, 78, 'arg_7', 'boolean', 1, 0, 1, 7);
 insert into sys.args values (30991, 78, 'arg_8', 'boolean', 1, 0, 1, 8);
 insert into sys.functions values (79, 'zero_or_one', 'zero_or_one', 'sql', 0, 
3, false, false, false, 2000, true);
-insert into sys.args values (30992, 79, 'res', 'any', 0, 0, 0, 0);
-insert into sys.args values (30993, 79, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30992, 79, 'res_0', 'any', 0, 0, 0, 0);
+insert into sys.args values (30993, 79, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (80, 'all', 'all', 'sql', 0, 3, false, false, 
false, 2000, true);
-insert into sys.args values (30994, 80, 'res', 'any', 0, 0, 0, 0);
-insert into sys.args values (30995, 80, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30994, 80, 'res_0', 'any', 0, 0, 0, 0);
+insert into sys.args values (30995, 80, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (81, 'null', 'null', 'sql', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (30996, 81, 'res', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (30997, 81, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (30996, 81, 'res_0', 'boolean', 1, 0, 0, 0);
+insert into sys.args values (30997, 81, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (82, 'any', 'any', 'sql', 0, 1, false, false, 
false, 2000, true);
 insert into sys.args values (30998, 82, 'res_0', 'boolean', 1, 0, 0, 0);
 insert into sys.args values (30999, 82, 'arg_1', 'boolean', 1, 0, 1, 1);
@@ -262,11 +262,11 @@ insert into sys.args values (31003, 83, 
 insert into sys.args values (31004, 83, 'arg_2', 'boolean', 1, 0, 1, 2);
 insert into sys.args values (31005, 83, 'arg_3', 'boolean', 1, 0, 1, 3);
 insert into sys.functions values (84, 'anyequal', 'anyequal', 'aggr', 0, 3, 
false, false, false, 2000, true);
-insert into sys.args values (31006, 84, 'res', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (31007, 84, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (31006, 84, 'res_0', 'boolean', 1, 0, 0, 0);
+insert into sys.args values (31007, 84, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (85, 'allnotequal', 'allnotequal', 'aggr', 0, 
3, false, false, false, 2000, true);
-insert into sys.args values (31008, 85, 'res', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (31009, 85, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (31008, 85, 'res_0', 'boolean', 1, 0, 0, 0);
+insert into sys.args values (31009, 85, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (86, 'sql_anyequal', 'anyequal', 'aggr', 0, 
1, false, false, false, 2000, true);
 insert into sys.args values (31010, 86, 'res_0', 'boolean', 1, 0, 0, 0);
 insert into sys.args values (31011, 86, 'arg_1', 'any', 0, 0, 1, 1);
@@ -276,11 +276,11 @@ insert into sys.args values (31013, 87, 
 insert into sys.args values (31014, 87, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.args values (31015, 87, 'arg_2', 'any', 0, 0, 1, 2);
 insert into sys.functions values (88, 'exist', 'exist', 'aggr', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (31016, 88, 'res', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (31017, 88, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (31016, 88, 'res_0', 'boolean', 1, 0, 0, 0);
+insert into sys.args values (31017, 88, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (89, 'not_exist', 'not_exist', 'aggr', 0, 3, 
false, false, false, 2000, true);
-insert into sys.args values (31018, 89, 'res', 'boolean', 1, 0, 0, 0);
-insert into sys.args values (31019, 89, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (31018, 89, 'res_0', 'boolean', 1, 0, 0, 0);
+insert into sys.args values (31019, 89, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (90, 'sql_exists', 'exist', 'aggr', 0, 1, 
false, false, false, 2000, true);
 insert into sys.args values (31020, 90, 'res_0', 'boolean', 1, 0, 0, 0);
 insert into sys.args values (31021, 90, 'arg_1', 'any', 0, 0, 1, 1);
@@ -299,11 +299,11 @@ insert into sys.args values (31029, 94, 
 insert into sys.args values (31030, 94, 'arg_2', 'varchar', 0, 0, 1, 2);
 insert into sys.args values (31031, 94, 'arg_3', 'varchar', 0, 0, 1, 3);
 insert into sys.functions values (95, 'min', 'min', 'aggr', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (31032, 95, 'res', 'any', 0, 0, 0, 0);
-insert into sys.args values (31033, 95, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (31032, 95, 'res_0', 'any', 0, 0, 0, 0);
+insert into sys.args values (31033, 95, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (96, 'max', 'max', 'aggr', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (31034, 96, 'res', 'any', 0, 0, 0, 0);
-insert into sys.args values (31035, 96, 'arg', 'any', 0, 0, 1, 1);
+insert into sys.args values (31034, 96, 'res_0', 'any', 0, 0, 0, 0);
+insert into sys.args values (31035, 96, 'arg_1', 'any', 0, 0, 1, 1);
 insert into sys.functions values (97, 'sql_min', 'min', 'calc', 0, 1, false, 
false, false, 2000, true);
 insert into sys.args values (31036, 97, 'res_0', 'any', 0, 0, 0, 0);
 insert into sys.args values (31037, 97, 'arg_1', 'any', 0, 0, 1, 1);
@@ -326,50 +326,50 @@ insert into sys.args values (31049, 101,
 insert into sys.args values (31050, 101, 'arg_2', 'any', 0, 0, 1, 2);
 insert into sys.args values (31051, 101, 'arg_3', 'any', 0, 0, 1, 3);
 insert into sys.functions values (102, 'sum', 'sum', 'aggr', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (31052, 102, 'res', 'hugeint', 128, 0, 0, 0);
-insert into sys.args values (31053, 102, 'arg', 'tinyint', 8, 0, 1, 1);
+insert into sys.args values (31052, 102, 'res_0', 'hugeint', 128, 0, 0, 0);
+insert into sys.args values (31053, 102, 'arg_1', 'tinyint', 8, 0, 1, 1);
 insert into sys.functions values (103, 'sum', 'sum', 'aggr', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (31054, 103, 'res', 'hugeint', 128, 0, 0, 0);
-insert into sys.args values (31055, 103, 'arg', 'smallint', 16, 0, 1, 1);
+insert into sys.args values (31054, 103, 'res_0', 'hugeint', 128, 0, 0, 0);
+insert into sys.args values (31055, 103, 'arg_1', 'smallint', 16, 0, 1, 1);
 insert into sys.functions values (104, 'sum', 'sum', 'aggr', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (31056, 104, 'res', 'hugeint', 128, 0, 0, 0);
-insert into sys.args values (31057, 104, 'arg', 'int', 32, 0, 1, 1);
+insert into sys.args values (31056, 104, 'res_0', 'hugeint', 128, 0, 0, 0);
+insert into sys.args values (31057, 104, 'arg_1', 'int', 32, 0, 1, 1);
 insert into sys.functions values (105, 'sum', 'sum', 'aggr', 0, 3, false, 
false, false, 2000, true);
-insert into sys.args values (31058, 105, 'res', 'hugeint', 128, 0, 0, 0);
-insert into sys.args values (31059, 105, 'arg', 'hugeint', 128, 0, 1, 1);
+insert into sys.args values (31058, 105, 'res_0', 'hugeint', 128, 0, 0, 0);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to