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

Reply via email to