Example #1
0
 public void upgrade(InformationCallback stdout) throws PEException {
   DBHelper helper = new DBHelper(connectProperties);
   String driver = DBHelper.loadDriver(connectProperties.getProperty(DBHelper.CONN_DRIVER_CLASS));
   DBType dbType = DBType.fromDriverClass(driver);
   DBNative dbn = DBNative.DBNativeFactory.newInstance(dbType);
   helper.connect();
   try {
     CatalogSchemaVersion latest = CatalogVersions.getCurrentVersion();
     CatalogSchemaVersion current = CatalogSchemaVersion.getPersistentVersion(helper);
     CatalogVersionNumber oldestSupported = CatalogVersions.getOldestUpgradeSupported();
     if (current.getSchemaVersion() < oldestSupported.getCatalogVersion().getSchemaVersion())
       throw new PEException(
           "No upgrade available for version "
               + current.getSchemaVersion()
               + ": please dump and load");
     List<CatalogVersion> versionHistory = CatalogVersions.getVersionHistory();
     int currentlyAt = -1;
     for (int i = 0; i < versionHistory.size(); i++) {
       if (versionHistory.get(i).getSchemaVersion() == current.getSchemaVersion()) {
         currentlyAt = i;
         break;
       }
     }
     if (currentlyAt == -1)
       throw new PEException(
           "No known upgrade for catalog schema version " + current.getSchemaVersion());
     // keep track of whether an info schema upgrade is needed.  if so we will only do it at the
     // end.
     boolean requiresInfoSchemaUpgrade = false;
     int firstUpgrade = currentlyAt + 1;
     for (int i = firstUpgrade; i < versionHistory.size(); i++) {
       CatalogVersion cv = versionHistory.get(i);
       if (cv.hasInfoSchemaUpgrade()) requiresInfoSchemaUpgrade = true;
       if (cv.getSchemaVersion() == latest.getSchemaVersion())
         upgrade(helper, cv, latest, (requiresInfoSchemaUpgrade ? dbn : null), stdout);
       else
         upgrade(
             helper,
             cv,
             new CatalogSchemaVersion(cv.getSchemaVersion(), "via upgrade", "current"),
             null,
             stdout);
     }
   } finally {
     helper.disconnect();
   }
 }
Example #2
0
 private void upgrade(
     DBHelper helper,
     CatalogVersion cv,
     CatalogSchemaVersion finalVersion,
     DBNative dbn,
     InformationCallback stdout)
     throws PEException {
   try {
     helper.executeQuery("update pe_version set state = 'upgrading'");
     cv.upgrade(helper, stdout);
     if (dbn != null) upgradeInfoSchema(helper, dbn);
     helper.executeQuery("delete from pe_version");
     helper.executeQuery(finalVersion.getInsertCommand());
   } catch (SQLException sqle) {
     throw new PEException("Unable to upgrade to version " + cv.getSchemaVersion(), sqle);
   }
 }