public void upgradeBaseSchema(Connection conn, int currentVersion) { if (!isLoaded()) { throw new TajoInternalError("Database schema files are not loaded."); } final List<SchemaPatch> candidatePatches = new ArrayList<>(); Statement stmt; for (SchemaPatch patch : this.catalogStore.getPatches()) { if (currentVersion >= patch.getPriorVersion()) { candidatePatches.add(patch); } } Collections.sort(candidatePatches); try { stmt = conn.createStatement(); } catch (SQLException e) { throw new TajoInternalError(e); } for (SchemaPatch patch : candidatePatches) { for (DatabaseObject object : patch.getObjects()) { try { stmt.executeUpdate(object.getSql()); LOG.info(object.getName() + " " + object.getType() + " was created or altered."); } catch (SQLException e) { throw new TajoInternalError(e); } } } CatalogUtil.closeQuietly(stmt); }
protected void mergePatches(List<SchemaPatch> patches) { final List<DatabaseObject> objects = new ArrayList<>(); Collections.sort(patches); for (SchemaPatch patch : patches) { validatePatch(patches, patch); objects.clear(); List<DatabaseObject> tempObjects = new ArrayList<>(); tempObjects.addAll(patch.getObjects()); patch.clearObjects(); patch.addObjects(mergeDatabaseObjects(tempObjects)); targetStore.addPatch(patch); } }