Changeset: 67a09201ec2a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67a09201ec2a
Modified Files:
sql/backends/monet5/sql_upgrades.c
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.int128
sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Branch: default
Log Message:
Split upgrade code in general and geom parts.
diffs (198 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
@@ -1117,20 +1117,18 @@ sql_update_jul2015(Client c)
}
static str
-sql_update_dec2015(Client c, int olddb)
+sql_update_jun2016(Client c)
{
size_t bufsize = 25000, 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;
- geomsqlfix_fptr fixfunc;
if (schvar)
schema = strdup(schvar->val.sval);
pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
- /* insert upgrade code here */
#if 0
pos += snprintf(buf + pos, bufsize - pos, "drop procedure
profiler_openstream(host string, port int);");
pos += snprintf(buf + pos, bufsize - pos, "drop procedure
profiler_stethoscope(ticks int);");
@@ -1204,18 +1202,41 @@ sql_update_dec2015(Client c, int olddb)
pos += snprintf(buf + pos, bufsize - pos,
"insert into sys.systemfunctions (select id from
sys.functions where name = 'storage' and schema_id = (select id from
sys.schemas where name = 'sys') and id not in (select function_id from
sys.systemfunctions));\n");
- if ((fixfunc = geomsqlfix_get()) != NULL) {
- str geomupgrade;
- size_t gbufsize;
-
- geomupgrade = (*fixfunc)(olddb);
- gbufsize = strlen(geomupgrade) + 1;
- buf = GDKrealloc(buf, bufsize + gbufsize);
- bufsize += gbufsize;
- pos += snprintf(buf + pos, bufsize - pos, "%s", geomupgrade);
- GDKfree(geomupgrade);
+ 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_geom(Client c, int olddb)
+{
+ size_t bufsize, pos = 0;
+ char *buf, *err = NULL;
+ char *geomupgrade;
+ mvc *sql = ((backend*) c->sqlcontext)->mvc;
+ ValRecord *schvar = stack_get_var(sql, "current_schema");
+ char *schema = NULL;
+ geomsqlfix_fptr fixfunc;
+
+ if ((fixfunc = geomsqlfix_get()) == NULL)
+ return NULL;
+
+ if (schvar)
+ schema = strdup(schvar->val.sval);
+
+ geomupgrade = (*fixfunc)(olddb);
+ bufsize = strlen(geomupgrade) + 512;
+ buf = GDKmalloc(bufsize);
+ pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
+ pos += snprintf(buf + pos, bufsize - pos, "%s", geomupgrade);
+ GDKfree(geomupgrade);
if (schema) {
pos += snprintf(buf + pos, bufsize - pos, "set schema
\"%s\";\n", schema);
free(schema);
@@ -1291,19 +1312,28 @@ SQLupgrades(Client c, mvc *m)
}
}
- /* If the point type exists, but the geometry type does not exist
- * any more at the "sys" schema (i.e., the first part of the upgrade has
- * been completed succesfully), then move on to the second part */
- if (find_sql_type(mvc_bind_schema(m, "sys"), "point") &&
- (find_sql_type(mvc_bind_schema(m, "sys"), "geometry") == NULL)) {
- if ((err = sql_update_dec2015(c, 1)) != NULL) {
+ sql_find_subtype(&tp, "clob", 0, 0);
+ if (!sql_bind_func(m->sa, mvc_bind_schema(m, "sys"), "storage", &tp,
NULL, F_UNION)) {
+ if ((err = sql_update_jun2016(c)) !=NULL) {
fprintf(stderr, "!%s\n", err);
GDKfree(err);
}
- } else if (geomsqlfix_get() != NULL &&
+ }
+
+ /* If the point type exists, but the geometry type does not
+ * exist any more at the "sys" schema (i.e., the first part of
+ * the upgrade has been completed succesfully), then move on
+ * to the second part */
+ if (find_sql_type(mvc_bind_schema(m, "sys"), "point") &&
+ (find_sql_type(mvc_bind_schema(m, "sys"), "geometry") == NULL)) {
+ if ((err = sql_update_geom(c, 1)) != NULL) {
+ fprintf(stderr, "!%s\n", err);
+ GDKfree(err);
+ }
+ } else if (geomsqlfix_get() != NULL &&
!sql_find_subtype(&tp, "geometry", 0, 0)) {
// the geom module is loaded but the database is not
geom-enabled
- if ((err = sql_update_dec2015(c, 0)) != NULL) {
+ if ((err = sql_update_geom(c, 0)) != NULL) {
fprintf(stderr, "!%s\n", err);
GDKfree(err);
}
diff --git a/sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out
b/sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out
--- a/sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out
+++ b/sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out
@@ -81,6 +81,10 @@ returns table (
)
external name sql."storage";
insert into sys.systemfunctions (select id from sys.functions where name =
'storage' and schema_id = (select id from sys.schemas where name = 'sys') and
id not in (select function_id from sys.systemfunctions));
+set schema "testschema";
+
+Running database upgrade commands:
+set schema "sys";
drop function "mbr";
drop function "mbroverlaps";
drop function "geomfromtext";
diff --git a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
@@ -78,6 +78,10 @@ returns table (
)
external name sql."storage";
insert into sys.systemfunctions (select id from sys.functions where name =
'storage' and schema_id = (select id from sys.schemas where name = 'sys') and
id not in (select function_id from sys.systemfunctions));
+set schema "testschema";
+
+Running database upgrade commands:
+set schema "sys";
drop function "mbr";
drop function "mbroverlaps";
drop function "geomfromtext";
diff --git a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
--- a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
+++ b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -123,6 +123,10 @@ returns table (
)
external name sql."storage";
insert into sys.systemfunctions (select id from sys.functions where name =
'storage' and schema_id = (select id from sys.schemas where name = 'sys') and
id not in (select function_id from sys.systemfunctions));
+set schema "testschema";
+
+Running database upgrade commands:
+set schema "sys";
drop function "mbr";
drop function "mbroverlaps";
drop function "geomfromtext";
diff --git a/sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out
b/sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out
--- a/sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out
+++ b/sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out
@@ -83,6 +83,10 @@ returns table (
)
external name sql."storage";
insert into sys.systemfunctions (select id from sys.functions where name =
'storage' and schema_id = (select id from sys.schemas where name = 'sys') and
id not in (select function_id from sys.systemfunctions));
+set schema "testschema";
+
+Running database upgrade commands:
+set schema "sys";
drop function "mbr";
drop function "mbroverlaps";
drop function "geomfromtext";
diff --git a/sql/test/testdb-upgrade/Tests/upgrade.stable.out
b/sql/test/testdb-upgrade/Tests/upgrade.stable.out
--- a/sql/test/testdb-upgrade/Tests/upgrade.stable.out
+++ b/sql/test/testdb-upgrade/Tests/upgrade.stable.out
@@ -75,6 +75,10 @@ returns table (
)
external name sql."storage";
insert into sys.systemfunctions (select id from sys.functions where name =
'storage' and schema_id = (select id from sys.schemas where name = 'sys') and
id not in (select function_id from sys.systemfunctions));
+set schema "testschema";
+
+Running database upgrade commands:
+set schema "sys";
drop function "mbr";
drop function "mbroverlaps";
drop function "geomfromtext";
diff --git a/sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
b/sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
--- a/sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
+++ b/sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
@@ -120,6 +120,10 @@ returns table (
)
external name sql."storage";
insert into sys.systemfunctions (select id from sys.functions where name =
'storage' and schema_id = (select id from sys.schemas where name = 'sys') and
id not in (select function_id from sys.systemfunctions));
+set schema "testschema";
+
+Running database upgrade commands:
+set schema "sys";
drop function "mbr";
drop function "mbroverlaps";
drop function "geomfromtext";
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list