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