Allow schema upgrades to display messages

It's possible that the execution of a SQL statement is not critical to
the success of a schema upgrade. An example of this is a function that
during the upgrade gets removed from the database. It is possible that
this function may have been removed by the user manually, and the fact
that it is already missing should not block the upgrade from
proceeding.

Bug: 500
Change-Id: Ie9aa0d732f884a6d749d864ee3a43d257af272b7
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java
index 0ca6862..ee05575 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java
@@ -92,7 +92,7 @@
     final JdbcExecutor e = new JdbcExecutor(s);
     try {
       s.updateSchema(e);
-      migrateData(db);
+      migrateData(db, ui);
 
       final List<String> pruneList = new ArrayList<String>();
       s.pruneSchema(new StatementExecutor() {
@@ -119,7 +119,7 @@
    * (removes deleted columns/tables).
    */
   @SuppressWarnings("unused")
-  protected void migrateData(ReviewDb db) throws OrmException, SQLException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
   }
 
   /** Mark the current schema version. */
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_21.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_21.java
index 7ecf66c..ed50f7f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_21.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_21.java
@@ -36,7 +36,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws OrmException, SQLException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
     JdbcSchema jdbc = (JdbcSchema) db;
     SystemConfig sc = db.systemConfig().get(new SystemConfig.Key());
 
@@ -55,7 +55,11 @@
       }
 
       if (jdbc.getDialect() instanceof DialectMySQL) {
-        s.execute("DROP FUNCTION nextval_project_id");
+        try {
+          s.execute("DROP FUNCTION nextval_project_id");
+        } catch (SQLException se) {
+          ui.message("warning: could not delete function nextval_project_id");
+        }
 
       } else if (jdbc.getDialect() instanceof DialectH2) {
         s.execute("ALTER TABLE projects DROP CONSTRAINT"
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_22.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_22.java
index 2de38d1..8e24aa2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_22.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_22.java
@@ -39,7 +39,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws OrmException, SQLException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
     Statement s = ((JdbcSchema) db).getConnection().createStatement();
     try {
       ResultSet results =
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_23.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_23.java
index 92b7d2e..413fa4e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_23.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_23.java
@@ -35,7 +35,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws OrmException, SQLException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
     Collection<AccountGroupName> names = new ArrayList<AccountGroupName>();
     Statement queryStmt = ((JdbcSchema) db).getConnection().createStatement();
     try {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_25.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_25.java
index 063f676..febe3d9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_25.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_25.java
@@ -41,7 +41,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws OrmException, SQLException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
     nonActions = new HashSet<ApprovalCategory.Id>();
     for (ApprovalCategory c : db.approvalCategories().all()) {
       if (!c.isAction()) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_26.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_26.java
index 84ef3b0..9c76af2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_26.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_26.java
@@ -30,7 +30,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws SQLException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws SQLException {
     if (((JdbcSchema) db).getDialect() instanceof DialectMySQL) {
       Statement stmt = ((JdbcSchema) db).getConnection().createStatement();
       try {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_27.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_27.java
index 7f725ba..f8febec 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_27.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_27.java
@@ -39,7 +39,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws SQLException, OrmException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws SQLException, OrmException {
     Statement stmt = ((JdbcSchema) db).getConnection().createStatement();
     try {
       final SqlDialect dialect = ((JdbcSchema) db).getDialect();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_28.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_28.java
index 2f2567e..5e231d7 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_28.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_28.java
@@ -37,7 +37,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws OrmException, SQLException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
     final SystemConfig cfg = db.systemConfig().get(new SystemConfig.Key());
     ApprovalCategory cat;
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_30.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_30.java
index f3028568..7285e32 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_30.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_30.java
@@ -30,7 +30,7 @@
   }
 
   @Override
-  protected void migrateData(ReviewDb db) throws OrmException {
+  protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException {
     db.approvalCategoryValues().insert(
         Collections.singleton(new ApprovalCategoryValue(
             new ApprovalCategoryValue.Id(ApprovalCategory.FORGE_IDENTITY,