Changeset: 8a33419b00d7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8a33419b00d7
Modified Files:
clients/Tests/SQL-dump.stable.out
clients/Tests/SQL-dump.stable.out.int128
sql/backends/monet5/sql_upgrades.c
sql/common/sql_types.c
sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain/Tests/check.stable.out
sql/test/emptydb-upgrade-chain/Tests/check.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/check.stable.out.int128
sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade/Tests/check.stable.out
sql/test/emptydb-upgrade/Tests/check.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
sql/test/emptydb/Tests/check.stable.out.int128
sql/test/leaks/Tests/check1.stable.out.int128
sql/test/leaks/Tests/check2.stable.out.int128
sql/test/leaks/Tests/check3.stable.out.int128
sql/test/leaks/Tests/check4.stable.out.int128
sql/test/leaks/Tests/check5.stable.out.int128
sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out
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
Branch: no-wrd
Log Message:
Upgrade to no-wrd version.
Reintroduced the SQL-level type WRD so that we can deal with old databases.
Upgrading from a database created with the Jul2015 release crashes.
diffs (truncated from 93254 to 300 lines):
diff --git a/clients/Tests/SQL-dump.stable.out
b/clients/Tests/SQL-dump.stable.out
--- a/clients/Tests/SQL-dump.stable.out
+++ b/clients/Tests/SQL-dump.stable.out
@@ -6900,6 +6900,7 @@ drop function pcre_replace(string, strin
[ "sys", "lng", "bigint", 64, 1, 2, 7 ]
[ "sys", "lng", "decimal", 19, 1, 10, 10 ]
[ "sys", "lng", "sec_interval", 13, 1, 10, 9 ]
+[ "sys", "lng", "wrd", 64, 1, 2, 7 ]
[ "sys", "mbr", "mbr", 0, 0, 0, 16 ]
[ "sys", "oid", "oid", 63, 0, 2, 6 ]
[ "sys", "ptr", "ptr", 0, 0, 0, 1 ]
diff --git a/clients/Tests/SQL-dump.stable.out.int128
b/clients/Tests/SQL-dump.stable.out.int128
--- a/clients/Tests/SQL-dump.stable.out.int128
+++ b/clients/Tests/SQL-dump.stable.out.int128
@@ -7449,6 +7449,7 @@ drop function pcre_replace(string, strin
[ "sys", "lng", "bigint", 64, 1, 2, 7 ]
[ "sys", "lng", "decimal", 18, 1, 10, 10 ]
[ "sys", "lng", "sec_interval", 13, 1, 10, 9 ]
+[ "sys", "lng", "wrd", 64, 1, 2, 7 ]
[ "sys", "mbr", "mbr", 0, 0, 0, 16 ]
[ "sys", "oid", "oid", 63, 0, 2, 6 ]
[ "sys", "ptr", "ptr", 0, 0, 0, 1 ]
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
@@ -1703,6 +1703,84 @@ sql_update_default(Client c, mvc *sql)
pos += snprintf(buf + pos, bufsize - pos,
"insert into sys.systemfunctions (select f.id from
sys.functions f, sys.schemas s where f.name in ('createorderindex',
'droporderindex', 'storagemodelinit') and f.type = %d and f.schema_id = s.id
and s.name = 'sys');\n",
F_PROC);
+ pos += snprintf(buf + pos, bufsize - pos,
+ "delete from systemfunctions where function_id not in
(select id from functions);\n");
+
+ if (schema) {
+ pos += snprintf(buf + pos, bufsize - pos, "set schema
\"%s\";\n", schema);
+ free(schema);
+ }
+
+ assert(pos < bufsize);
+ printf("Running database upgrade commands:\n%s\n", buf);
+ err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL);
+ GDKfree(buf);
+ return err; /* usually MAL_SUCCEED */
+}
+
+static str
+sql_update_nowrd(Client c, mvc *sql)
+{
+ size_t bufsize = 10240, pos = 0;
+ char *buf = GDKmalloc(bufsize), *err = NULL;
+ ValRecord *schvar = stack_get_var(sql, "current_schema");
+ char *schema = NULL;
+ sql_schema *s;
+
+ s = mvc_bind_schema(sql, "sys");
+ if (schvar)
+ schema = strdup(schvar->val.sval);
+ pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
+
+ {
+ sql_table *t;
+
+ if ((t = mvc_bind_table(sql, s, "querylog_calls")) != NULL)
+ t->system = 0;
+ if ((t = mvc_bind_table(sql, s, "querylog_history")) != NULL)
+ t->system = 0;
+ }
+
+ /* 15_querylog.sql */
+ pos += snprintf(buf + pos, bufsize - pos,
+ "drop view sys.querylog_history;\n"
+ "drop view sys.querylog_calls;\n"
+ "drop function sys.querylog_calls();\n"
+ "create function sys.querylog_calls()\n"
+ "returns table(\n"
+ " id oid,\n"
+ " \"start\" timestamp,\n"
+ " \"stop\" timestamp,\n"
+ " arguments string,\n"
+ " tuples bigint,\n"
+ " run bigint,\n"
+ " ship bigint,\n"
+ " cpu int,\n"
+ " io int\n"
+ ")\n"
+ "external name sql.querylog_calls;\n"
+ "create view sys.querylog_calls as select * from
sys.querylog_calls();\n"
+ "create view sys.querylog_history as\n"
+ "select qd.*, ql.\"start\",ql.\"stop\", ql.arguments,
ql.tuples, ql.run, ql.ship, ql.cpu, ql.io\n"
+ "from sys.querylog_catalog() qd, sys.querylog_calls()
ql\n"
+ "where qd.id = ql.id and qd.owner = user;\n"
+ "update _tables set system = true where name in
('querylog_calls', 'querylog_history') and schema_id = (select id from schemas
where name = 'sys');\n");
+
+ /* 39_analytics.sql */
+ pos += snprintf(buf + pos, bufsize - pos,
+ "drop aggregate sys.stddev_pop(wrd);\n"
+ "drop aggregate sys.stddev_samp(wrd);\n"
+ "drop aggregate sys.var_pop(wrd);\n"
+ "drop aggregate sys.var_samp(wrd);\n"
+ "drop aggregate sys.median(wrd);\n"
+ "drop aggregate sys.quantile(wrd, double);\n"
+ "drop aggregate sys.corr(wrd, wrd);\n");
+
+ pos += snprintf(buf + pos, bufsize - pos,
+ "insert into sys.systemfunctions (select f.id from
sys.functions f, sys.schemas s where f.name in ('querylog_calls') and f.type =
%d and f.schema_id = s.id and s.name = 'sys');\n",
+ F_UNION);
+ pos += snprintf(buf + pos, bufsize - pos,
+ "delete from systemfunctions where function_id not in
(select id from functions);\n");
if (schema) {
pos += snprintf(buf + pos, bufsize - pos, "set schema
\"%s\";\n", schema);
@@ -1825,4 +1903,12 @@ SQLupgrades(Client c, mvc *m)
GDKfree(err);
}
}
+
+ sql_find_subtype(&tp, "wrd", 0, 0);
+ if (sql_bind_func(m->sa, s, "median", &tp, NULL, F_AGGR)) {
+ if ((err = sql_update_nowrd(c, m)) != NULL) {
+ fprintf(stderr, "!%s\n", err);
+ GDKfree(err);
+ }
+ }
}
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -1230,6 +1230,7 @@ sqltypeinit( sql_allocator *sa)
sql_type **strings, **numerical;
sql_type **decimals, **floats, **dates, **end, **t;
sql_type *STR, *BTE, *SHT, *INT, *LNG, *OID, *BIT, *DBL, *DEC;
+ sql_type *WRD;
#ifdef HAVE_HGE
sql_type *HGE = NULL;
#endif
@@ -1266,8 +1267,14 @@ sqltypeinit( sql_allocator *sa)
BTE = *t++ = sql_create_type(sa, "TINYINT", 8, SCALE_FIX, 2, EC_NUM,
"bte");
SHT = *t++ = sql_create_type(sa, "SMALLINT", 16, SCALE_FIX, 2, EC_NUM,
"sht");
INT = *t++ = sql_create_type(sa, "INT", 32, SCALE_FIX, 2, EC_NUM,
"int");
+#if SIZEOF_SIZE_T == SIZEOF_INT
+ WRD = *t++ = sql_create_type(sa, "WRD", 32, SCALE_FIX, 2, EC_NUM,
"int");
+#endif
LargestINT =
LNG = *t++ = sql_create_type(sa, "BIGINT", 64, SCALE_FIX, 2, EC_NUM,
"lng");
+#if SIZEOF_SIZE_T == SIZEOF_LNG
+ WRD = *t++ = sql_create_type(sa, "WRD", 64, SCALE_FIX, 2, EC_NUM,
"lng");
+#endif
#ifdef HAVE_HGE
if (have_hge) {
LargestINT =
@@ -1444,8 +1451,11 @@ sqltypeinit( sql_allocator *sa)
}
#endif
- for (t = numerical; t < dates; t++)
+ for (t = numerical; t < dates; t++) {
+ if (*t == WRD)
+ continue;
sql_create_func(sa, "mod", "calc", "%", *t, *t, *t, SCALE_FIX);
+ }
for (t = floats; t < dates; t++) {
sql_create_aggr(sa, "sum", "aggr", "sum", *t, *t);
@@ -1496,7 +1506,11 @@ sqltypeinit( sql_allocator *sa)
/* allow smaller types for arguments of mul/div */
for (t = numerical, t++; t != decimals; t++) {
sql_type **u;
+ if (*t == WRD)
+ continue;
for (u = numerical, u++; u != decimals; u++) {
+ if (*u == WRD)
+ continue;
if (t != u && (*t)->localtype > (*u)->localtype) {
sql_create_func(sa, "sql_mul", "calc", "*", *t,
*u, *t, SCALE_MUL);
sql_create_func(sa, "sql_div", "calc", "/", *t,
*u, *t, SCALE_DIV);
@@ -1505,7 +1519,11 @@ sqltypeinit( sql_allocator *sa)
}
/* all numericals */
for (t = numerical; *t != TME; t++) {
- sql_subtype *lt = sql_bind_localtype((*t)->base.name);
+ sql_subtype *lt;
+
+ if (*t == WRD)
+ continue;
+ lt = sql_bind_localtype((*t)->base.name);
sql_create_func(sa, "sql_sub", "calc", "-", *t, *t, *t,
SCALE_FIX);
sql_create_func(sa, "sql_add", "calc", "+", *t, *t, *t,
SCALE_FIX);
@@ -1540,6 +1558,8 @@ sqltypeinit( sql_allocator *sa)
for (t = decimals, t++; t != floats; t++) {
sql_type **u;
for (u = numerical; u != floats; u++) {
+ if (*u == WRD)
+ continue;
if (*u == OID)
continue;
if ((*t)->localtype > (*u)->localtype) {
@@ -1555,8 +1575,13 @@ sqltypeinit( sql_allocator *sa)
for (t = numerical; t < end; t++) {
sql_type **u;
- for (u = numerical; u < end; u++)
+ if (*t == WRD)
+ continue;
+ for (u = numerical; u < end; u++) {
+ if (*u == WRD)
+ continue;
sql_create_func(sa, "scale_up", "calc", "*", *u, *t,
*t, SCALE_NONE);
+ }
}
for (t = floats; t < dates; t++) {
diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128
b/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128
@@ -788,7 +788,6 @@ create function contains(a geometry, x d
create aggregate corr(e1 tinyint, e2 tinyint) returns tinyint external name
"aggr"."corr";
create aggregate corr(e1 smallint, e2 smallint) returns smallint external name
"aggr"."corr";
create aggregate corr(e1 integer, e2 integer) returns integer external name
"aggr"."corr";
-create aggregate corr(e1 wrd, e2 wrd) returns wrd external name "aggr"."corr";
create aggregate corr(e1 bigint, e2 bigint) returns bigint external name
"aggr"."corr";
create aggregate corr(e1 real, e2 real) returns real external name
"aggr"."corr";
create aggregate corr(e1 double, e2 double) returns double external name
"aggr"."corr";
@@ -881,7 +880,6 @@ create function sys.md5(v string) return
create aggregate median(val tinyint) returns tinyint external name
"aggr"."median";
create aggregate median(val smallint) returns smallint external name
"aggr"."median";
create aggregate median(val integer) returns integer external name
"aggr"."median";
-create aggregate median(val wrd) returns wrd external name "aggr"."median";
create aggregate median(val bigint) returns bigint external name
"aggr"."median";
create aggregate median(val decimal) returns decimal external name
"aggr"."median";
create aggregate median(val real) returns real external name "aggr"."median";
@@ -906,7 +904,6 @@ create procedure sys.pause(tag bigint) e
create aggregate quantile(val tinyint, q double) returns tinyint external name
"aggr"."quantile";
create aggregate quantile(val smallint, q double) returns smallint external
name "aggr"."quantile";
create aggregate quantile(val integer, q double) returns integer external name
"aggr"."quantile";
-create aggregate quantile(val wrd, q double) returns wrd external name
"aggr"."quantile";
create aggregate quantile(val bigint, q double) returns bigint external name
"aggr"."quantile";
create aggregate quantile(val decimal, q double) returns decimal external name
"aggr"."quantile";
create aggregate quantile(val real, q double) returns real external name
"aggr"."quantile";
@@ -917,7 +914,7 @@ create aggregate quantile(val timestamp,
create aggregate quantile(val hugeint, q double) returns hugeint external name
"aggr"."quantile";
create function sys.querycache() returns table (query string, count int)
external name sql.dump_cache;
create procedure sys.querylog(filename string) external name sql.logfile;
-create function sys.querylog_calls() returns table(id oid, "start" timestamp,
"stop" timestamp, arguments string, tuples wrd, run bigint, ship bigint, cpu
int, io int) external name sql.querylog_calls;
+create function sys.querylog_calls() returns table(id oid, "start" timestamp,
"stop" timestamp, arguments string, tuples bigint, run bigint, ship bigint, cpu
int, io int) external name sql.querylog_calls;
create function sys.querylog_catalog() returns table(id oid, owner string,
defined timestamp, query string, pipe string, "plan" string, mal int, optimize
bigint) external name sql.querylog_catalog;
create procedure sys.querylog_disable() external name sql.querylog_disable;
create procedure sys.querylog_empty() external name sql.querylog_empty;
@@ -1060,7 +1057,6 @@ create function st_z(geom geometry) retu
create aggregate stddev_pop(val tinyint) returns double external name
"aggr"."stdevp";
create aggregate stddev_pop(val smallint) returns double external name
"aggr"."stdevp";
create aggregate stddev_pop(val integer) returns double external name
"aggr"."stdevp";
-create aggregate stddev_pop(val wrd) returns double external name
"aggr"."stdevp";
create aggregate stddev_pop(val bigint) returns double external name
"aggr"."stdevp";
create aggregate stddev_pop(val real) returns double external name
"aggr"."stdevp";
create aggregate stddev_pop(val double) returns double external name
"aggr"."stdevp";
@@ -1071,7 +1067,6 @@ create aggregate stddev_pop(val hugeint)
create aggregate stddev_samp(val tinyint) returns double external name
"aggr"."stdev";
create aggregate stddev_samp(val smallint) returns double external name
"aggr"."stdev";
create aggregate stddev_samp(val integer) returns double external name
"aggr"."stdev";
-create aggregate stddev_samp(val wrd) returns double external name
"aggr"."stdev";
create aggregate stddev_samp(val bigint) returns double external name
"aggr"."stdev";
create aggregate stddev_samp(val real) returns double external name
"aggr"."stdev";
create aggregate stddev_samp(val double) returns double external name
"aggr"."stdev";
@@ -1101,7 +1096,6 @@ CREATE FUNCTION var() RETURNS TABLE(name
create aggregate var_pop(val tinyint) returns double external name
"aggr"."variancep";
create aggregate var_pop(val smallint) returns double external name
"aggr"."variancep";
create aggregate var_pop(val integer) returns double external name
"aggr"."variancep";
-create aggregate var_pop(val wrd) returns double external name
"aggr"."variancep";
create aggregate var_pop(val bigint) returns double external name
"aggr"."variancep";
create aggregate var_pop(val real) returns double external name
"aggr"."variancep";
create aggregate var_pop(val double) returns double external name
"aggr"."variancep";
@@ -1112,7 +1106,6 @@ create aggregate var_pop(val hugeint) re
create aggregate var_samp(val tinyint) returns double external name
"aggr"."variance";
create aggregate var_samp(val smallint) returns double external name
"aggr"."variance";
create aggregate var_samp(val integer) returns double external name
"aggr"."variance";
-create aggregate var_samp(val wrd) returns double external name
"aggr"."variance";
create aggregate var_samp(val bigint) returns double external name
"aggr"."variance";
create aggregate var_samp(val real) returns double external name
"aggr"."variance";
create aggregate var_samp(val double) returns double external name
"aggr"."variance";
@@ -1409,7 +1402,7 @@ drop function pcre_replace(string, strin
[ "querylog_calls", "start", "timestamp", 7, 0, NULL,
true, 1, NULL ]
[ "querylog_calls", "stop", "timestamp", 7, 0, NULL, true,
2, NULL ]
[ "querylog_calls", "arguments", "clob", 0, 0, NULL, true,
3, NULL ]
-[ "querylog_calls", "tuples", "wrd", 64, 0, NULL, true,
4, NULL ]
+[ "querylog_calls", "tuples", "bigint", 64, 0, NULL,
true, 4, NULL ]
[ "querylog_calls", "run", "bigint", 64, 0, NULL, true,
5, NULL ]
[ "querylog_calls", "ship", "bigint", 64, 0, NULL, true,
6, NULL ]
[ "querylog_calls", "cpu", "int", 32, 0, NULL, true, 7,
NULL ]
@@ -1433,7 +1426,7 @@ drop function pcre_replace(string, strin
[ "querylog_history", "start", "timestamp", 7, 0, NULL,
true, 8, NULL ]
[ "querylog_history", "stop", "timestamp", 7, 0, NULL, true,
9, NULL ]
[ "querylog_history", "arguments", "clob", 0, 0, NULL, true,
10, NULL ]
-[ "querylog_history", "tuples", "wrd", 64, 0, NULL, true,
11, NULL ]
+[ "querylog_history", "tuples", "bigint", 64, 0, NULL,
true, 11, NULL ]
[ "querylog_history", "run", "bigint", 64, 0, NULL, true,
12, NULL ]
[ "querylog_history", "ship", "bigint", 64, 0, NULL, true,
13, NULL ]
[ "querylog_history", "cpu", "int", 32, 0, NULL, true, 14,
NULL ]
@@ -1538,10 +1531,10 @@ drop function pcre_replace(string, strin
[ "tablestoragemodel", "schema", "clob", 0, 0, NULL, true,
0, NULL ]
[ "tablestoragemodel", "table", "clob", 0, 0, NULL, true,
1, NULL ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list