public ChangeSet(RanChangeSet ranChangeSet) { this.author = ranChangeSet.getAuthor(); this.changeLog = ranChangeSet.getChangeLog(); this.comments = ranChangeSet.getComments(); this.contexts = ranChangeSet.getContextExpression().getContexts(); this.dateExecuted = Instant .ofEpochMilli(ranChangeSet.getDateExecuted().getTime()); this.deploymentId = ranChangeSet.getDeploymentId(); this.description = ranChangeSet.getDescription(); this.execType = ranChangeSet.getExecType(); this.id = ranChangeSet.getId(); this.labels = ranChangeSet.getLabels().getLabels(); this.checksum = ((ranChangeSet.getLastCheckSum() != null) ? ranChangeSet.getLastCheckSum().toString() : null); this.orderExecuted = ranChangeSet.getOrderExecuted(); this.tag = ranChangeSet.getTag(); }
/** * Create an OpenmrsChangeSet from the given changeset * * @param changeSet * @param database */ public OpenMRSChangeSet(ChangeSet changeSet, Database database) throws Exception { setId(changeSet.getId()); setAuthor(changeSet.getAuthor()); setComments(changeSet.getComments()); setDescription(changeSet.getDescription()); setRunStatus(database.getRunStatus(changeSet)); setRanDate(database.getRanDate(changeSet)); }
/** * Interface used for callbacks when updating the database. Implement this interface and pass it * to {@link DatabaseUpdater#executeChangelog(String, Map, ChangeSetExecutorCallback)} */ public interface ChangeSetExecutorCallback { /** * This method is called after each changeset is executed. * * @param changeSet the liquibase changeset that was just run * @param numChangeSetsToRun the total number of changesets in the current file */ public void executing(ChangeSet changeSet, int numChangeSetsToRun); }
params.set("currentDateTime", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new Date())); List<ChangeSet> changeSets = changeLogs.getChangeSets(); for(ChangeSet changeSet: changeSets){ for(Change change: changeSet.getChanges()){ SqlStatement[] statements = change.generateStatements(database); Sql[] sqls = SqlGeneratorFactory.getInstance().generateSql(statements, database);
public void update(Connection connection) { logger.fine("Starting database update"); try { Liquibase liquibase = getLiquibase(connection); List<ChangeSet> changeSets = liquibase.listUnrunChangeSets((Contexts) null); if (!changeSets.isEmpty()) { if (changeSets.get(0).getId().equals(FIRST_VERSION)) { logger.info("Initializing database schema"); } else { if (logger.isLoggable(Level.FINE)) { List<RanChangeSet> ranChangeSets = liquibase.getDatabase().getRanChangeSetList(); final String msg = MessageFormat.format("Updating database from {0} to {1}", ranChangeSets.get(ranChangeSets.size() - 1).getId(), changeSets.get(changeSets.size() - 1).getId()); logger.fine(msg); } else { logger.info("Updating database"); } } liquibase.update((Contexts) null); } } catch (Exception e) { throw new RuntimeException("Failed to update database", e); } logger.fine("Completed database update"); }
Liquibase liquibase = getLiquibase(CHANGE_LOG_FILE, null); database = liquibase.getDatabase(); DatabaseChangeLog changeLog = new XMLChangeLogSAXParser().parse(CHANGE_LOG_FILE, new ChangeLogParameters(), liquibase.getFileOpener()); List<ChangeSet> changeSets = changeLog.getChangeSets();
protected OSGiXMLChangeLogSAXHandler(final String physicalChangeLogLocation, final ResourceAccessor resourceAccessor, final ChangeLogParameters changeLogParameters) { log = LogFactory.getLogger(); this.resourceAccessor = resourceAccessor; databaseChangeLog = new DatabaseChangeLog(); databaseChangeLog.setPhysicalFilePath(physicalChangeLogLocation); databaseChangeLog.setChangeLogParameters(changeLogParameters); this.changeLogParameters = changeLogParameters; changeFactory = ChangeFactory.getInstance(); preconditionFactory = PreconditionFactory.getInstance(); sqlVisitorFactory = SqlVisitorFactory.getInstance(); changeLogParserFactory = ChangeLogParserFactory.getInstance(); }
protected Status validateChangeSet(Liquibase liquibase, String changelog) throws LiquibaseException { final Status result; List<ChangeSet> changeSets = getLiquibaseUnrunChangeSets(liquibase); if (!changeSets.isEmpty()) { if (changeSets.size() == liquibase.getDatabaseChangeLog().getChangeSets().size()) { result = Status.EMPTY; } else { logger.debugf("Validation failed. Database is not up-to-date for changelog %s", changelog); result = Status.OUTDATED; } } else { logger.debugf("Validation passed. Database is up-to-date for changelog %s", changelog); result = Status.VALID; } // Needs to restart liquibase services to clear ChangeLogHistoryServiceFactory.getInstance(). // See https://issues.jboss.org/browse/KEYCLOAK-3769 for discussion relevant to why reset needs to be here resetLiquibaseServices(liquibase); return result; }
private LiquibaseBean createReport(SpringLiquibase liquibase, ChangeLogHistoryService service, DatabaseFactory factory) { try { DataSource dataSource = liquibase.getDataSource(); JdbcConnection connection = new JdbcConnection(dataSource.getConnection()); Database database = null; try { database = factory.findCorrectDatabaseImplementation(connection); String defaultSchema = liquibase.getDefaultSchema(); if (StringUtils.hasText(defaultSchema)) { database.setDefaultSchemaName(defaultSchema); } service.setDatabase(database); return new LiquibaseBean(service.getRanChangeSets().stream() .map(ChangeSet::new).collect(Collectors.toList())); } finally { if (database != null) { database.close(); } else { connection.close(); } } } catch (Exception ex) { throw new IllegalStateException("Unable to get Liquibase change sets", ex); } }
ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("src/main/resources/changelog.xml", resourceAccessor); DatabaseChangeLog databaseChangeLog = parser.parse("src/main/resources/changelog.xml", new ChangeLogParameters(), resourceAccessor);
liquibase.changelog.DatabaseChangeLog databaseChangeLog = new liquibase.changelog.DatabaseChangeLog();
@Override public String getValue(final String uri, final String localName) { return changeLogParameters.expandExpressions(attributes.getValue(uri, localName)); } }
protected void handlePreCondition(@SuppressWarnings("unused") final Precondition precondition) { databaseChangeLog.setPreconditions(rootPrecondition); }
@ReadOperation public ApplicationLiquibaseBeans liquibaseBeans() { ApplicationContext target = this.context; Map<String, ContextLiquibaseBeans> contextBeans = new HashMap<>(); while (target != null) { Map<String, LiquibaseBean> liquibaseBeans = new HashMap<>(); DatabaseFactory factory = DatabaseFactory.getInstance(); StandardChangeLogHistoryService service = new StandardChangeLogHistoryService(); this.context.getBeansOfType(SpringLiquibase.class) .forEach((name, liquibase) -> liquibaseBeans.put(name, createReport(liquibase, service, factory))); ApplicationContext parent = target.getParent(); contextBeans.put(target.getId(), new ContextLiquibaseBeans(liquibaseBeans, (parent != null) ? parent.getId() : null)); target = parent; } return new ApplicationLiquibaseBeans(contextBeans); }
protected void handleChangeSet(final ChangeSet changeSet) { databaseChangeLog.addChangeSet(changeSet); }
public String getRefactoringLevel() { String level = null; ChangeSet changeSet = getChangeSet(); if (changeSet != null && changeSet.getContexts() != null) { if (super.getChangeSet().getContexts().toString().contains("TRANSITION".toLowerCase())) { level = "TRANSITION"; } else if (super.getChangeSet().getContexts().toString().contains("RESULTING".toLowerCase())) { level = "RESULTING"; } else { level = "BASIC"; } } else { level = "BASIC"; } return level; }
params.set("currentDateTime", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new Date())); List<ChangeSet> changeSets = changeLogs.getChangeSets(); for(ChangeSet changeSet: changeSets){ for(Change change: changeSet.getChanges()){ SqlStatement[] statements = change.generateStatements(database); Sql[] sqls = SqlGeneratorFactory.getInstance().generateSql(statements, database);
if (changeSets.get(0).getId().equals(FIRST_VERSION)) { Statement statement = connection.createStatement(); try { statement.executeQuery("SELECT id FROM " + getTable("REALM", defaultSchema)); logger.infov("Updating database from {0} to {1}", FIRST_VERSION, changeSets.get(changeSets.size() - 1).getId()); liquibase.markNextChangeSetRan(null); } catch (SQLException e) { if (logger.isDebugEnabled()) { List<RanChangeSet> ranChangeSets = liquibase.getDatabase().getRanChangeSetList(); logger.debugv("Updating database from {0} to {1}", ranChangeSets.get(ranChangeSets.size() - 1).getId(), changeSets.get(changeSets.size() - 1).getId()); } else { logger.infov("Updating database");
@Override public String getValue(final String qName) { return changeLogParameters.expandExpressions(attributes.getValue(qName)); }
private void setProperty(final Object object, final String attributeName, final String attributeValue) throws IllegalAccessException, InvocationTargetException, CustomChangeException { if (object instanceof CustomChangeWrapper) { if (attributeName.equals("class")) { ((CustomChangeWrapper) object).setClass(changeLogParameters.expandExpressions(attributeValue)); } else { ((CustomChangeWrapper) object).setParam(attributeName, changeLogParameters.expandExpressions(attributeValue)); } } else { ObjectUtil.setProperty(object, attributeName, changeLogParameters.expandExpressions(attributeValue)); } }