Changeset: e32cde70600d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e32cde70600d
Added Files:
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Modified Files:
        gdk/gdk_bbp.c
        sql/backends/monet5/sql_upgrades.c
        sql/common/sql_types.c
Branch: default
Log Message:

Implemented upgrade from 64 to 128 bit database.


diffs (truncated from 344 to 300 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -987,7 +987,7 @@ BBPheader(FILE *fp, oid *BBPoid, int *OI
                         "expected pointer size %d, got %d, expected OID size 
%d, got %d.",
                         SIZEOF_SIZE_T, ptrsize, SIZEOF_OID, oidsize);
        }
-       if (intsize != SIZEOF_MAX_INT) {
+       if (intsize > SIZEOF_MAX_INT) {
                GDKfatal("BBPinit: database created with incompatible server:\n"
                         "expected max. integer size %d, got %d.",
                         SIZEOF_MAX_INT, intsize);
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
@@ -1010,6 +1010,113 @@ sql_update_oct2014_sp1(Client c)
        return err;             /* usually MAL_SUCCEED */
 }
 
+#ifdef HAVE_HGE
+static str
+sql_update_hugeint(Client c)
+{
+       size_t bufsize = 8192, pos = 0;
+       char *buf = GDKmalloc(bufsize), *err = NULL;
+       mvc *sql = ((backend*) c->sqlcontext)->mvc;
+       ValRecord *schvar = stack_get_var(sql, "current_schema");
+       char *schema = NULL;
+
+       if (schvar)
+               schema = strdup(schvar->val.sval);
+
+       pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create function sys.fuse(one 
bigint, two bigint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns hugeint\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name udf.fuse;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create function 
sys.generate_series(first hugeint, last hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns table (value 
hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
generator.series;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create function 
sys.generate_series(first hugeint, last hugeint, stepsize hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns table (value 
hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
generator.series;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create aggregate 
sys.stddev_samp(val hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns double\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
aggr.stdev;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create aggregate 
sys.stddev_pop(val hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns double\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
aggr.stdevp;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create aggregate 
sys.var_samp(val hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns double\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
aggr.variance;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create aggregate 
sys.var_pop(val hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns double\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
aggr.variancep;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create aggregate 
sys.median(val hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns hugeint\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
aggr.median;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create aggregate 
sys.quantile(val hugeint, q double)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns hugeint\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
aggr.quantile;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create aggregate sys.corr(e1 
hugeint, e2 hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns hugeint\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name aggr.corr;\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "create function 
json.filter(js json, name hugeint)\n");
+       pos += snprintf(buf + pos, bufsize - pos, "returns json\n");
+       pos += snprintf(buf + pos, bufsize - pos, "external name 
json.filter;\n");
+       pos += snprintf(buf + pos, bufsize - pos, "drop view 
sys.tablestoragemodel;\n");
+       pos += snprintf(buf + pos, bufsize - pos, "create view 
sys.tablestoragemodel\n");
+       pos += snprintf(buf + pos, bufsize - pos, "as select 
\"schema\",\"table\",max(count) as \"count\",\n");
+       pos += snprintf(buf + pos, bufsize - pos, "\tsum(columnsize) as 
columnsize,\n");
+       pos += snprintf(buf + pos, bufsize - pos, "\tsum(heapsize) as 
heapsize,\n");
+       pos += snprintf(buf + pos, bufsize - pos, "\tsum(hashes) as hashes,\n");
+       pos += snprintf(buf + pos, bufsize - pos, "\tsum(imprints) as 
imprints,\n");
+       pos += snprintf(buf + pos, bufsize - pos, "\tsum(case when sorted = 
false then 8 * count else 0 end) as auxillary\n");
+       pos += snprintf(buf + pos, bufsize - pos, "from sys.storagemodel() 
group by \"schema\",\"table\";\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "insert into 
sys.systemfunctions (select id from sys.functions where name in ('fuse', 
'generate_series', 'stddev_samp', 'stddev_pop', 'var_samp', 'var_pop', 
'median', 'quantile', 'corr', 'tablestoragemodel') and schema_id = (select id 
from sys.schemas where name = 'sys') and id not in (select function_id from 
sys.systemfunctions));\n");
+       pos += snprintf(buf + pos, bufsize - pos, "insert into 
sys.systemfunctions (select id from sys.functions where name = 'filter' and 
schema_id = (select id from sys.schemas where name = 'json') and id not in 
(select function_id from sys.systemfunctions));\n");
+       pos += snprintf(buf + pos, bufsize - pos, "update sys._tables set 
system = true where name = 'tablestoragemodel' and schema_id = (select id from 
sys.schemas where name = 'sys');\n");
+
+       pos += snprintf(buf + pos, bufsize - pos, "insert into sys.types 
values(%d, 'hge', 'hugeint', 128, 1, 2, 6, 0);\n", store_next_oid());
+       pos += snprintf(buf + pos, bufsize - pos, "insert into sys.types 
values(%d, 'hge', 'decimal', 39, 1, 10, 8, 0);\n", store_next_oid());
+       pos += snprintf(buf + pos, bufsize - pos, "update sys.types set digits 
= 18 where systemname = 'lng' and sqlname = 'decimal';\n");
+
+       {
+               char *msg;
+               mvc *sql = NULL;
+
+               if ((msg = getSQLContext(c, c->curprg->def, &sql, NULL)) != 
MAL_SUCCEED) {
+                       GDKfree(msg);
+               } else {
+                       sql_schema *s;
+
+                       if ((s = mvc_bind_schema(sql, "sys")) != NULL) {
+                               sql_table *t;
+
+                               if ((t = mvc_bind_table(sql, s, 
"tablestoragemodel")) != NULL)
+                                       t->system = 0;
+                       }
+               }
+       }
+
+       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 */
+}
+#endif
+
 static str
 sql_update_feb2015(Client c)
 {
@@ -1105,6 +1212,17 @@ SQLupgrades(Client c, mvc *m)
                        GDKfree(err);
                }
        }
+
+#ifdef HAVE_HGE
+       sql_find_subtype(&tp, "hugeint", 0, 0);
+       if (!sql_bind_aggr(m->sa, mvc_bind_schema(m, "sys"), "var_pop", &tp)) {
+               if ((err = sql_update_hugeint(c)) != NULL) {
+                       fprintf(stderr, "!%s\n", err);
+                       GDKfree(err);
+               }
+       }
+#endif
+
        /* add missing features needed beyond Oct 2014 */
        sql_find_subtype(&tp, "timestamp", 0, 0);
        if ( 0 &&  !sql_bind_func(m->sa, mvc_bind_schema(m, "sys"), "epoch", 
&tp, NULL, F_FUNC) ){
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
@@ -1110,8 +1110,7 @@ many of the function signatures can be o
 database kernel, we have chosen for this explicit scheme for one
 simple reason. The SQL standard dictates the types and we have to
 check their availability in the kernel only. The kernel itself could
-include manyfunctions for which their is no standard.
-lead to unexpected
+include many functions for which there is no standard.
 */
 
 static void
diff --git a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 
b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
new file mode 100644
--- /dev/null
+++ b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -0,0 +1,88 @@
+stdout of test 'upgrade` in directory 'sql/test/testdb-upgrade-chain` itself:
+
+
+# 15:17:06 >  
+# 15:17:06 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"gdk_dbfarm=/ufs/sjoerd/Monet-stable/var/MonetDB" "--set" "mapi_open=true" 
"--set" "mapi_port=36250" "--set" "monet_prompt=" "--trace" "--forcemito" 
"--set" "mal_listing=2" "--dbname=mTests_test_testdb-upgrade-chain" "--set" 
"mal_listing=0"
+# 15:17:06 >  
+
+# MonetDB 5 server v11.11.8 (hg id: 34fcf4e7226d+)
+# This is an unreleased version
+# Serving database 'mTests_test_testdb-upgrade-chain', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
+# Found 15.629 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://madrid.ins.cwi.nl:36250/
+# MonetDB/GIS module loaded
+# MonetDB/JAQL module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+Running database upgrade commands:
+set schema "sys";
+create function sys.fuse(one bigint, two bigint)
+returns hugeint
+external name udf.fuse;
+create function sys.generate_series(first hugeint, last hugeint)
+returns table (value hugeint)
+external name generator.series;
+create function sys.generate_series(first hugeint, last hugeint, stepsize 
hugeint)
+returns table (value hugeint)
+external name generator.series;
+create aggregate sys.stddev_samp(val hugeint)
+returns double
+external name aggr.stdev;
+create aggregate sys.stddev_pop(val hugeint)
+returns double
+external name aggr.stdevp;
+create aggregate sys.var_samp(val hugeint)
+returns double
+external name aggr.variance;
+create aggregate sys.var_pop(val hugeint)
+returns double
+external name aggr.variancep;
+create aggregate sys.median(val hugeint)
+returns hugeint
+external name aggr.median;
+create aggregate sys.quantile(val hugeint, q double)
+returns hugeint
+external name aggr.quantile;
+create aggregate sys.corr(e1 hugeint, e2 hugeint)
+returns hugeint
+external name aggr.corr;
+create function json.filter(js json, name hugeint)
+returns json
+external name json.filter;
+drop view sys.tablestoragemodel;
+create view sys.tablestoragemodel
+as select "schema","table",max(count) as "count",
+       sum(columnsize) as columnsize,
+       sum(heapsize) as heapsize,
+       sum(hashes) as hashes,
+       sum(imprints) as imprints,
+       sum(case when sorted = false then 8 * count else 0 end) as auxillary
+from sys.storagemodel() group by "schema","table";
+insert into sys.systemfunctions (select id from sys.functions where name in 
('fuse', 'generate_series', 'stddev_samp', 'stddev_pop', 'var_samp', 'var_pop', 
'median', 'quantile', 'corr', 'tablestoragemodel') and schema_id = (select id 
from sys.schemas where name = 'sys') and id not in (select function_id from 
sys.systemfunctions));
+insert into sys.systemfunctions (select id from sys.functions where name = 
'filter' and schema_id = (select id from sys.schemas where name = 'json') and 
id not in (select function_id from sys.systemfunctions));
+update sys._tables set system = true where name = 'tablestoragemodel' and 
schema_id = (select id from sys.schemas where name = 'sys');
+insert into sys.types values(7233, 'hge', 'hugeint', 128, 1, 2, 6, 0);
+insert into sys.types values(7234, 'hge', 'decimal', 39, 1, 10, 8, 0);
+update sys.types set digits = 18 where systemname = 'lng' and sqlname = 
'decimal';
+set schema "testschema";
+
+# 09:43:35 >  
+# 09:43:35 >  "/usr/bin/python2" "upgrade.SQL.py" "upgrade"
+# 09:43:35 >  
+
+#select count(*) from testschema.smallstring;
+% testschema.L1 # table_name
+% L1 # name
+% wrd # type
+% 2 # length
+[ 66   ]
+
+# 15:17:06 >  
+# 15:17:06 >  "Done."
+# 15:17:06 >  
+
diff --git a/sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 
b/sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
new file mode 100644
--- /dev/null
+++ b/sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
@@ -0,0 +1,86 @@
+stdout of test 'upgrade` in directory 'sql/test/testdb-upgrade` itself:
+
+
+# 21:49:40 >  
+# 21:49:40 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=30515" "--set" 
"mapi_usock=/var/tmp/mtest-14642/.s.monetdb.30515" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/ufs/sjoerd/Monet-devel/var/MonetDB/mTests_sql_test_testdb-upgrade" 
"--set" "mal_listing=0"
+# 21:49:40 >  
+
+# MonetDB 5 server v11.16.0 (hg id: fd9db07674cf+)
+# This is an unreleased version
+# Serving database 'mTests_sql_test_testdb-upgrade', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
+# Found 15.591 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+
+
+Ready.
+Running database upgrade commands:
+set schema "sys";
+create function sys.fuse(one bigint, two bigint)
+returns hugeint
+external name udf.fuse;
+create function sys.generate_series(first hugeint, last hugeint)
+returns table (value hugeint)
+external name generator.series;
+create function sys.generate_series(first hugeint, last hugeint, stepsize 
hugeint)
+returns table (value hugeint)
+external name generator.series;
+create aggregate sys.stddev_samp(val hugeint)
+returns double
+external name aggr.stdev;
+create aggregate sys.stddev_pop(val hugeint)
+returns double
+external name aggr.stdevp;
+create aggregate sys.var_samp(val hugeint)
+returns double
+external name aggr.variance;
+create aggregate sys.var_pop(val hugeint)
+returns double
+external name aggr.variancep;
+create aggregate sys.median(val hugeint)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to