Changeset: dff65d24e6dd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/dff65d24e6dd
Modified Files:
        sql/backends/monet5/sql_upgrades.c
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.32bit
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64
        
sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
        sql/test/emptydb/Tests/check.SQL.py
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        
sql/test/testdb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out.32bit
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        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: default
Log Message:

Reduced the number of errors in the chained upgrade check tests.
What's left is a mess in the sys.dependencies table.


diffs (truncated from 2953 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
@@ -298,6 +298,24 @@ sql_update_hugeint(Client c, mvc *sql)
 }
 #endif
 
+#ifdef HAVE_SHP
+static str
+sql_update_shp(Client c)
+{
+       const char *query = "create procedure SHPattach(fname string) external 
name shp.attach;\ncreate procedure SHPload(fid integer) external name 
shp.import;\ncreate procedure SHPload(fid integer, filter geometry) external 
name shp.import;\nupdate sys.functions set system = true where schema_id = 2000 
and name in ('shpattach', 'shpload');\n";
+       printf("Running database upgrade commands:\n%s\n", query);
+       return SQLstatementIntern(c, query, "update", true, false, NULL);
+}
+#endif
+
+static str
+sql_update_generator(Client c)
+{
+       const char *query = "update sys.args set name = 'limit' where name = 
'last' and func_id in (select id from sys.functions where schema_id = 2000 and 
name = 'generate_series' and func like '% last %');\n"
+               "update sys.functions set func = replace(func, ' last ', ' 
\"limit\" ') where schema_id = 2000 and name = 'generate_series' and func like 
'% last %';\n";
+       return SQLstatementIntern(c, query, "update", true, false, NULL);
+}
+
 static str
 sql_drop_functions_dependencies_Xs_on_Ys(Client c)
 {
@@ -4597,6 +4615,27 @@ SQLupgrades(Client c, mvc *m)
        }
 #endif
 
+#ifdef HAVE_SHP
+       if (backend_has_module(&(int){0}, "shp")) {
+               sql_find_subtype(&tp, "varchar", 0, 0);
+               if (!sql_bind_func(m, s->base.name, "shpattach", &tp, NULL, 
F_PROC)) {
+                       m->session->status = 0; /* if the function was not 
found clean the error */
+                       m->errstr[0] = '\0';
+                       if ((err = sql_update_shp(c)) != NULL) {
+                               TRC_CRITICAL(SQL_PARSER, "%s\n", err);
+                               freeException(err);
+                               return -1;
+                       }
+               }
+       }
+#endif
+
+       if ((err = sql_update_generator(c)) != NULL) {
+               TRC_CRITICAL(SQL_PARSER, "%s\n", err);
+               freeException(err);
+               return -1;
+       }
+
        f = sql_bind_func_(m, s->base.name, "env", NULL, F_UNION);
        m->session->status = 0; /* if the function was not found clean the 
error */
        m->errstr[0] = '\0';
diff --git 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -3980,6 +3980,12 @@ insert into sys.functions values (1055, 
 insert into sys.functions values (1056, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
 Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
+Running database upgrade commands:
 update sys.args set type = 'decimal', type_digits = 18, type_scale = 3 where 
func_id in (select id from sys.functions where name = 'epoch_ms' and schema_id 
= 2000) and number = 0 and type = 'bigint';
 drop view sys.tracelog;
 drop function sys.tracelog();
diff --git 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
--- 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
+++ 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
@@ -3980,6 +3980,12 @@ insert into sys.functions values (1055, 
 insert into sys.functions values (1056, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
 Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
+Running database upgrade commands:
 update sys.args set type = 'decimal', type_digits = 18, type_scale = 3 where 
func_id in (select id from sys.functions where name = 'epoch_ms' and schema_id 
= 2000) and number = 0 and type = 'bigint';
 drop view sys.tracelog;
 drop function sys.tracelog();
diff --git a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
@@ -3408,6 +3408,12 @@ insert into sys.functions values (910, '
 insert into sys.functions values (911, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
 Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
+Running database upgrade commands:
 update sys.args set type = 'decimal', type_digits = 18, type_scale = 3 where 
func_id in (select id from sys.functions where name = 'epoch_ms' and schema_id 
= 2000) and number = 0 and type = 'bigint';
 drop view sys.tracelog;
 drop function sys.tracelog();
diff --git 
a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.32bit 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.32bit
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.32bit
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.32bit
@@ -3408,6 +3408,12 @@ insert into sys.functions values (910, '
 insert into sys.functions values (911, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
 Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
+Running database upgrade commands:
 update sys.args set type = 'decimal', type_digits = 18, type_scale = 3 where 
func_id in (select id from sys.functions where name = 'epoch_ms' and schema_id 
= 2000) and number = 0 and type = 'bigint';
 drop view sys.tracelog;
 drop function sys.tracelog();
diff --git 
a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -4049,6 +4049,12 @@ update sys.functions set system = true w
 update sys.functions set system = true where system <> true and name = 
'filter' and schema_id = (select id from sys.schemas where name = 'json') and 
type = 1;
 
 Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
+Running database upgrade commands:
 update sys.args set type = 'decimal', type_digits = 18, type_scale = 3 where 
func_id in (select id from sys.functions where name = 'epoch_ms' and schema_id 
= 2000) and number = 0 and type = 'bigint';
 drop view sys.tracelog;
 drop function sys.tracelog();
diff --git 
a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64
--- a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64
+++ b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64
@@ -3408,6 +3408,12 @@ insert into sys.functions values (910, '
 insert into sys.functions values (911, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
 Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
+Running database upgrade commands:
 update sys.args set type = 'decimal', type_digits = 18, type_scale = 3 where 
func_id in (select id from sys.functions where name = 'epoch_ms' and schema_id 
= 2000) and number = 0 and type = 'bigint';
 drop view sys.tracelog;
 drop function sys.tracelog();
diff --git 
a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
--- 
a/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
+++ 
b/sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
@@ -4049,6 +4049,12 @@ update sys.functions set system = true w
 update sys.functions set system = true where system <> true and name = 
'filter' and schema_id = (select id from sys.schemas where name = 'json') and 
type = 1;
 
 Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
+Running database upgrade commands:
 update sys.args set type = 'decimal', type_digits = 18, type_scale = 3 where 
func_id in (select id from sys.functions where name = 'epoch_ms' and schema_id 
= 2000) and number = 0 and type = 'bigint';
 drop view sys.tracelog;
 drop function sys.tracelog();
diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -3979,3 +3979,9 @@ insert into sys.args values (51444, 1054
 insert into sys.functions values (1055, 'sys_update_schemas', 
'update_schemas', 'sql', 0, 2, true, false, false, 2000, true, true);
 insert into sys.functions values (1056, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
+Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
diff --git 
a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128 
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
@@ -3979,3 +3979,9 @@ insert into sys.args values (51439, 1054
 insert into sys.functions values (1055, 'sys_update_schemas', 
'update_schemas', 'sql', 0, 2, true, false, false, 2000, true, true);
 insert into sys.functions values (1056, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
+Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
@@ -3407,3 +3407,9 @@ insert into sys.args values (45292, 909,
 insert into sys.functions values (910, 'sys_update_schemas', 'update_schemas', 
'sql', 0, 2, true, false, false, 2000, true, true);
 insert into sys.functions values (911, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
+Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
@@ -3407,3 +3407,9 @@ insert into sys.args values (45292, 909,
 insert into sys.functions values (910, 'sys_update_schemas', 'update_schemas', 
'sql', 0, 2, true, false, false, 2000, true, true);
 insert into sys.functions values (911, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
+Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
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
@@ -4048,3 +4048,9 @@ update sys.functions set system = true w
 update sys.functions set system = true where system <> true and name in 
('stddev_samp', 'stddev_pop', 'var_samp', 'covar_samp', 'var_pop', 'covar_pop', 
'corr') and schema_id = (select id from sys.schemas where name = 'sys') and 
type = 6;
 update sys.functions set system = true where system <> true and name = 
'filter' and schema_id = (select id from sys.schemas where name = 'json') and 
type = 1;
 
+Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64
@@ -3407,3 +3407,9 @@ insert into sys.args values (45287, 909,
 insert into sys.functions values (910, 'sys_update_schemas', 'update_schemas', 
'sql', 0, 2, true, false, false, 2000, true, true);
 insert into sys.functions values (911, 'sys_update_tables', 'update_tables', 
'sql', 0, 2, true, false, false, 2000, true, true);
 
+Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
diff --git 
a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
@@ -4048,3 +4048,9 @@ update sys.functions set system = true w
 update sys.functions set system = true where system <> true and name in 
('stddev_samp', 'stddev_pop', 'var_samp', 'covar_samp', 'var_pop', 'covar_pop', 
'corr') and schema_id = (select id from sys.schemas where name = 'sys') and 
type = 6;
 update sys.functions set system = true where system <> true and name = 
'filter' and schema_id = (select id from sys.schemas where name = 'json') and 
type = 1;
 
+Running database upgrade commands:
+create procedure SHPattach(fname string) external name shp.attach;
+create procedure SHPload(fid integer) external name shp.import;
+create procedure SHPload(fid integer, filter geometry) external name 
shp.import;
+update sys.functions set system = true where schema_id = 2000 and name in 
('shpattach', 'shpload');
+
diff --git a/sql/test/emptydb/Tests/check.SQL.py 
b/sql/test/emptydb/Tests/check.SQL.py
--- a/sql/test/emptydb/Tests/check.SQL.py
+++ b/sql/test/emptydb/Tests/check.SQL.py
@@ -386,10 +386,6 @@ with process.client('sql', format='csv',
 
     clt.stdin.write("select E'\\\\dSt ' || s.name || '.' || t.name from 
sys._tables t, sys.schemas s where t.schema_id = s.id and t.query is null order 
by s.name, t.name;\n")
 
-    clt.stdin.write("select E'\\\\dSv ' || s.name || '.' || t.name from 
sys._tables t, sys.schemas s where t.schema_id = s.id and t.query is not null 
order by s.name, t.name;\n")
-
-    clt.stdin.write("select proj from (select distinct E'\\\\dSf ' || s.name 
|| '.\"' || f.name || '\"' as proj from sys.functions f, sys.schemas s where 
f.language between 1 and 2 and f.schema_id = s.id and s.name = 'sys') as 
proj(proj) order by proj;\n")
-
     out, err = clt.communicate()
     out = re.sub('^"(.*)"$', r'\1', out, flags=re.MULTILINE).replace('"\n', 
'\n').replace('\n"', '\n').replace('""', '"').replace(r'\\', '\\')
 
diff --git a/sql/test/emptydb/Tests/check.stable.out 
b/sql/test/emptydb/Tests/check.stable.out
--- a/sql/test/emptydb/Tests/check.stable.out
+++ b/sql/test/emptydb/Tests/check.stable.out
@@ -58,330 +58,6 @@
 \dSt tmp.keys
 \dSt tmp.objects
 \dSt tmp.triggers
-\dSv logging.compinfo
-\dSv sys.columns
-\dSv sys.dependencies_vw
-\dSv sys.dependency_args_on_types
-\dSv sys.dependency_columns_on_functions
-\dSv sys.dependency_columns_on_indexes
-\dSv sys.dependency_columns_on_keys
-\dSv sys.dependency_columns_on_procedures
-\dSv sys.dependency_columns_on_triggers
-\dSv sys.dependency_columns_on_types
-\dSv sys.dependency_columns_on_views
-\dSv sys.dependency_functions_on_functions
-\dSv sys.dependency_functions_on_procedures
-\dSv sys.dependency_functions_on_triggers
-\dSv sys.dependency_functions_on_types
-\dSv sys.dependency_functions_on_views
-\dSv sys.dependency_keys_on_foreignkeys
-\dSv sys.dependency_owners_on_schemas
-\dSv sys.dependency_schemas_on_users
-\dSv sys.dependency_tables_on_foreignkeys
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to