ToStringBuilder toStringBuilder() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) .append(this.getSchema()) .append(this.getChangeName()) .append(this.getObjectName()) .append(this.getChangeType()) .append(this.getConvertedContent()) .append(this.getContentHash()) .append(this.getOrderWithinObject()) ; }
ToStringBuilder toStringBuilder() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) .append(this.getSchema()) .append(this.getChangeName()) .append(this.getObjectName()) .append(this.getChangeType()) .append(this.getConvertedContent()) .append(this.getContentHash()) .append(this.getOrderWithinObject()) ; }
public String getDisplayString() { StringBuilder sb = new StringBuilder(); if (isRollbackActivated()) { sb.append("ROLLING BACK: "); } sb.append(String.format( "Object [%s]; ChangeName [%s]; Type [%s]; LogicalSchema [%s]" , this.getObjectName() , this.getChangeName() , this.getChangeType().getName() , this.getSchema() )); return sb.toString(); }
public String getDisplayString() { StringBuilder sb = new StringBuilder(); if (isRollbackActivated()) { sb.append("ROLLING BACK: "); } sb.append(String.format( "Object [%s]; ChangeName [%s]; Type [%s]; LogicalSchema [%s]" , this.getObjectName() , this.getChangeName() , this.getChangeType().getName() , this.getSchema() )); return sb.toString(); }
@Override public String valueOf(Change c) { return c.getDbObjectKey() + ":" + c.getChangeName(); } }).castToList(), containsInAnyOrder(
private Bson getChangeFilter(Change change) { return Filters.and( Filters.eq(changeNameColumn, change.getChangeName()), Filters.eq("OBJECTNAME", change.getObjectName()) ); }
private Bson getChangeFilter(Change change) { return Filters.and( Filters.eq(changeNameColumn, change.getChangeName()), Filters.eq("OBJECTNAME", change.getObjectName()) ); }
@Override public boolean accept(ChangeCommand command) { return expectedClass.isAssignableFrom(command.getClass()) && expectedArtifact.getObjectName().equals(command.getChanges().getFirst().getObjectName()) && expectedArtifact.getChangeName().equals(command.getChanges().getFirst().getChangeName()); } };
@Override public void deleteChange(Change change) { MongoCollection<Document> auditCollection = getAuditCollection(change); auditCollection.deleteOne(Filters.and( Filters.eq(changeNameColumn, change.getChangeName()), Filters.eq("OBJECTNAME", change.getObjectName()) )); }
@Override public void value(Connection conn) { sqlExecutor.getJdbcTemplate().update( conn, "DELETE FROM " + env.getPlatform().getSchemaPrefix(change.getPhysicalSchema(env)) + dbChangeTable + " WHERE " + changeNameColumn + " = ? AND OBJECTNAME = ?" , change.getChangeName(), change.getObjectName()); } });
@Override public void deleteChange(Change change) { MongoCollection<Document> auditCollection = getAuditCollection(change); auditCollection.deleteOne(Filters.and( Filters.eq(changeNameColumn, change.getChangeName()), Filters.eq("OBJECTNAME", change.getObjectName()) )); }
@Override public void value(Connection conn) { sqlExecutor.getJdbcTemplate().update( conn, "DELETE FROM " + env.getPlatform().getSchemaPrefix(change.getPhysicalSchema(env)) + dbChangeTable + " WHERE " + changeNameColumn + " = ? AND OBJECTNAME = ?" , change.getChangeName(), change.getObjectName()); } });
@Override public void updateOrInsertChange(Change change, DeployExecution deployExecution) { MongoCollection<Document> auditCollection = getAuditCollection(change); MutableList<Document> docs = iterableToCollection(auditCollection.find(getChangeFilter(change))); if (docs.size() > 1) { throw new IllegalStateException("Not expecting multiple changes for this key [" + change.getObjectName() + "." + change.getChangeName() + "], but found " + docs); } else if (docs.isEmpty()) { insertNewChange(change, deployExecution); } else { Document previousDoc = docs.get(0); Date timeInserted = previousDoc.getDate(timeInsertedColumn); auditCollection.replaceOne(getChangeFilter(change), createDocFromChange(change, deployExecution, timeInserted)); } }
@Override public void updateOrInsertChange(Change change, DeployExecution deployExecution) { MongoCollection<Document> auditCollection = getAuditCollection(change); MutableList<Document> docs = iterableToCollection(auditCollection.find(getChangeFilter(change))); if (docs.size() > 1) { throw new IllegalStateException("Not expecting multiple changes for this key [" + change.getObjectName() + "." + change.getChangeName() + "], but found " + docs); } else if (docs.isEmpty()) { insertNewChange(change, deployExecution); } else { Document previousDoc = docs.get(0); Date timeInserted = previousDoc.getDate(timeInsertedColumn); auditCollection.replaceOne(getChangeFilter(change), createDocFromChange(change, deployExecution, timeInserted)); } }
private Document createDocFromChange(Change change, DeployExecution deployExecution, Date insertTimestamp) { Date currentTimestamp = getCurrentTimestamp(); return new Document() .append("ARTFTYPE", change instanceof ChangeIncremental ? "I" : "R") .append("DBSCHEMA", change.getSchema()) .append("ACTIVE", change.isActive() ? 1 : 0) .append("CHANGETYPE", change.getChangeType().getName()) .append("CONTENTHASH", change.getContentHash()) .append(changeNameColumn, change.getChangeName()) .append("OBJECTNAME", change.getObjectName()) .append(rollbackContentColumn, change.getRollbackContent()) .append(deployUserIdColumn, deployUserId) .append(timeInsertedColumn, ObjectUtils.firstNonNull(insertTimestamp, currentTimestamp)) .append(timeUpdatedColumn, currentTimestamp) .append(insertDeployExecutionIdColumn, deployExecution.getId()) .append(updateDeployExecutionIdColumn, deployExecution.getId()); }
private Document createDocFromChange(Change change, DeployExecution deployExecution, Date insertTimestamp) { Date currentTimestamp = getCurrentTimestamp(); return new Document() .append("ARTFTYPE", change instanceof ChangeIncremental ? "I" : "R") .append("DBSCHEMA", change.getSchema()) .append("ACTIVE", change.isActive() ? 1 : 0) .append("CHANGETYPE", change.getChangeType().getName()) .append("CONTENTHASH", change.getContentHash()) .append(changeNameColumn, change.getChangeName()) .append("OBJECTNAME", change.getObjectName()) .append(rollbackContentColumn, change.getRollbackContent()) .append(deployUserIdColumn, deployUserId) .append(timeInsertedColumn, ObjectUtils.firstNonNull(insertTimestamp, currentTimestamp)) .append(timeUpdatedColumn, currentTimestamp) .append(insertDeployExecutionIdColumn, deployExecution.getId()) .append(updateDeployExecutionIdColumn, deployExecution.getId()); }
private void insertNewChangeInternal(Connection conn, Change change, DeployExecution deployExecution) { JdbcHelper jdbcTemplate = sqlExecutor.getJdbcTemplate(); Timestamp currentTimestamp = getCurrentTimestamp(); jdbcTemplate.update( conn, "INSERT INTO " + env.getPlatform().getSchemaPrefix(change.getPhysicalSchema(env)) + dbChangeTable + " (ARTFTYPE, DBSCHEMA, ACTIVE, CHANGETYPE, CONTENTHASH, " + changeNameColumn + ", OBJECTNAME, " + rollbackContentColumn + ", " + deployUserIdColumn + ", " + timeInsertedColumn + ", " + timeUpdatedColumn + ", " + insertDeployExecutionIdColumn + ", " + updateDeployExecutionIdColumn + ") " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , change instanceof ChangeIncremental ? "I" : "R" , change.getSchema() , change.isActive() ? 1 : 0 , change.getChangeType().getName() , change.getContentHash() , change.getChangeName() , change.getObjectName() , change.getRollbackContent() , deployUserId , currentTimestamp , currentTimestamp , deployExecution.getId() , deployExecution.getId() ); }
private int updateInternal(Connection conn, Change artifact, DeployExecution deployExecution) { return sqlExecutor.getJdbcTemplate().update( conn, "UPDATE " + env.getPlatform().getSchemaPrefix(artifact.getPhysicalSchema(env)) + dbChangeTable + " SET " + "ARTFTYPE = ?, " + "DBSCHEMA = ?, " + "ACTIVE = ?, " + "CHANGETYPE = ?, " + "CONTENTHASH = ?, " + rollbackContentColumn + " = ?, " + deployUserIdColumn + " = ?, " + timeUpdatedColumn + " = ?, " + updateDeployExecutionIdColumn + " = ? " + "WHERE " + changeNameColumn + " = ? AND OBJECTNAME = ?" , artifact instanceof ChangeIncremental ? "I" : "R" , artifact.getSchema() , artifact.isActive() ? 1 : 0 , artifact.getChangeType().getName() , artifact.getContentHash() , artifact.getRollbackContent() , deployUserId , getCurrentTimestamp() , deployExecution.getId() , artifact.getChangeName() , artifact.getObjectName() ); }
private void insertNewChangeInternal(Connection conn, Change change, DeployExecution deployExecution) { JdbcHelper jdbcTemplate = sqlExecutor.getJdbcTemplate(); Timestamp currentTimestamp = getCurrentTimestamp(); jdbcTemplate.update( conn, "INSERT INTO " + env.getPlatform().getSchemaPrefix(change.getPhysicalSchema(env)) + dbChangeTable + " (ARTFTYPE, DBSCHEMA, ACTIVE, CHANGETYPE, CONTENTHASH, " + changeNameColumn + ", OBJECTNAME, " + rollbackContentColumn + ", " + deployUserIdColumn + ", " + timeInsertedColumn + ", " + timeUpdatedColumn + ", " + insertDeployExecutionIdColumn + ", " + updateDeployExecutionIdColumn + ") " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , change instanceof ChangeIncremental ? "I" : "R" , change.getSchema() , change.isActive() ? 1 : 0 , change.getChangeType().getName() , change.getContentHash() , change.getChangeName() , change.getObjectName() , change.getRollbackContent() , deployUserId , currentTimestamp , currentTimestamp , deployExecution.getId() , deployExecution.getId() ); }
@Test public void testIncrementalTableChange() { Change tabB0Dep = new ChangeIncremental(tableChangeType, "schema", "tabB", "b0", 0, "chng1", CONTENT); Change tabB0Src = new ChangeIncremental(tableChangeType, "schema", "tabB", "b0", 0, "chng1", CONTENT); Change tabB1FkSrc = new ChangeIncremental(foreignKeyChangeType, "schema", "tabB", "b1", 1, "chng1.5fk", CONTENT); Change tabB3Dep = new ChangeIncremental(tableChangeType, "schema", "tabB", "b3", 3, "chng3ToBeRolledback1", CONTENT); Change tabB3Src = new ChangeIncremental(tableChangeType, "schema", "tabB", tabB3Dep.getChangeName(), 3, "chng3ToBeRolledback1", CONTENT, "rollback", true); Change tabB4Src = new ChangeIncremental(tableChangeType, "schema", "tabB", "b4", 4, "chng4Insertion", CONTENT); Change tabB5Src = new ChangeIncremental(tableChangeType, "schema", "tabB", "b5", 5, "chng5AlreadyRolledBack", CONTENT, "rollback", true); Change tabB6Dep = new ChangeIncremental(tableChangeType, "schema", "tabB", "b6", 6, "chng6ToBeRolledback2", CONTENT); Change tabB6Src = new ChangeIncremental(tableChangeType, "schema", "tabB", tabB6Dep.getChangeName(), 6, "chng6ToBeRolledback2", CONTENT, "rollback", true); ListIterable<ChangeCommand> changeset = cmdCalc.calculateCommands(tableChangeType, Lists.mutable.of( new ChangePair(tabB0Src, tabB0Dep) , new ChangePair(tabB1FkSrc, null) , new ChangePair(tabB3Src, tabB3Dep) , new ChangePair(tabB4Src, null) , new ChangePair(tabB5Src, null) , new ChangePair(tabB6Src, tabB6Dep) ), unusedChangesArg, false); assertEquals(4, changeset.size()); Verify.assertAnySatisfy(changeset, assertValue(UndeployChangeCommand.class, tabB3Src)); Verify.assertAnySatisfy(changeset, assertValue(DeployChangeCommand.class, tabB4Src)); Verify.assertAnySatisfy(changeset, assertValue(UndeployChangeCommand.class, tabB6Src)); Verify.assertAnySatisfy(changeset, assertValue(DeployChangeCommand.class, tabB1FkSrc)); }