@Override public String handleAnySqlPostTranslation(String string, ChangeInput change) { if (change != null && change.getMetadataSection() != null && change.getMetadataSection().isTogglePresent(TextMarkupDocumentReader.TOGGLE_DISABLE_QUOTED_IDENTIFIERS)) { if (!change.getChangeKey().getChangeType().getName().equals(ChangeType.VIEW_STR)) { // only needed for HSQL seemingly for views only, seemingly not for H2 string = string.replace('"', '\''); } } Matcher varbinaryDefaultMatcher = this.varbinaryDefaultPattern.matcher(string); if (varbinaryDefaultMatcher.find()) { string = varbinaryDefaultMatcher.replaceFirst("varbinary(1)" + varbinaryDefaultMatcher.group(1)); } return string; }
/** * This getDbObjectKey() string concatenation is a kludge until we refactor the DB object stuff itself out to its * own object */ public String getDbObjectKey() { return this.getObjectKey().getSchema() + ":" + this.getObjectName(); }
@Override public ChangeInput valueOf(Pair<String, Integer> object) { String content = object.getOne(); int index = object.getTwo(); ChangeType changeType = getChangeType(content, defaultChangeType); String changeName = "baseline-change-" + index; boolean active = true; String rollbackIfAlreadyDeployedCommand = null; String rollbackContent = null; ChangeInput change = new ChangeInput(false); change.setChangeKey(new ChangeKey(schema, changeType, objectName, changeName)); change.setOrder(index); change.setContentHash(contentHashStrategy.hashContent(content)); change.setContent(content); change.setRollbackIfAlreadyDeployedContent(rollbackIfAlreadyDeployedCommand); change.setActive(active); change.setRollbackContent(rollbackContent); change.setFileLocation(file); return change; } });
private ChangeInput create3(ChangeType changeType, String schema, String objectName, String changeName, int orderWithinObject, String hash, String content, String rollbackIfAlreadyDeployedContent, boolean active, ImmutableList<ArtifactRestrictions> restrictions) { ChangeInput changeInput = new ChangeInput(false); changeInput.setChangeKey(new ChangeKey(schema, changeType, objectName, changeName)); changeInput.setOrderWithinObject(orderWithinObject); changeInput.setContentHash(hash); changeInput.setContent(content); changeInput.setRollbackIfAlreadyDeployedContent(rollbackIfAlreadyDeployedContent); changeInput.setActive(active); changeInput.setRestrictions(restrictions); return changeInput; }
@Test public void testDbChange() { ChangeInput change = new TableChangeParser(new EmptyContentHashStrategy(), getChangeType) .value(tableChangeType, null, "//// CHANGE name=chng5Rollback applyGrants=true INACTIVE baselinedChanges=\"a,b,c\" \nmychange\n\n// ROLLBACK-IF-ALREADY-DEPLOYED\nmyrollbackcommand\n", objectName , "schem", null).get(0); assertEquals("schem", change.getObjectKey().getSchema()); assertEquals("chng5Rollback", change.getChangeKey().getChangeName()); assertEquals("mychange\n", change.getContent()); assertEquals("mychan", change.getContentHash()); assertEquals("myrollbackcommand", change.getRollbackIfAlreadyDeployedContent()); assertEquals(UnifiedSet.newSetWith("a", "b", "c"), change.getBaselinedChanges().toSet()); assertFalse(change.isActive()); assertTrue(change.getApplyGrants()); }
private ChangeInput create(ChangeType changeType, String schema, String objectName, String changeName, int orderWithinObject, String hash, String content) { ChangeInput changeInput = new ChangeInput(false); changeInput.setChangeKey(new ChangeKey(schema, changeType, objectName, changeName)); changeInput.setOrderWithinObject(orderWithinObject); changeInput.setContentHash(hash); changeInput.setContent(content); return changeInput; } private ChangeInput create2(ChangeType changeType, String schema, String objectName, String changeName,
@Test public void readFileWithBody() throws Exception { RerunnableChangeParser parser = new RerunnableChangeParser(); String fileContent = "main\n" + "//// BODY\n" + "body content\n" + ""; ChangeType mainChangeType = mock(ChangeType.class); ChangeType bodyChangeType = mock(ChangeType.class); when(mainChangeType.getBodyChangeType()).thenReturn(bodyChangeType); ImmutableList<ChangeInput> changes = parser.value(mainChangeType, null, fileContent, objectName, "schema", null); Verify.assertSize(2, changes); ChangeInput c1 = changes.get(0); assertEquals(objectName, c1.getObjectName()); assertEquals("main", c1.getContent()); ChangeInput c2 = changes.get(1); assertEquals(objectName, c2.getObjectName()); assertEquals("body", c2.getChangeKey().getChangeName()); assertEquals("body content", c2.getContent()); }
assertThat("Mismatch on row " + i + " on changeKey", changes.get(i).getChangeKey(), equalTo(expected.get(i).getChangeKey())); assertThat("Mismatch on row " + i + " on content", changes.get(i).getContent(), equalToIgnoringWhiteSpace(expected.get(i).getContent())); ImmutableList<ArtifactRestrictions> restrictions = expected.get(i).getRestrictions() == null ? Lists.immutable.of( new ArtifactEnvironmentRestrictions(UnifiedSet.newSetWith("q1"), UnifiedSet.<String>newSet()), new ArtifactPlatformRestrictions(UnifiedSet.newSetWith("DB2", "SYBASE_ASE", "HSQL"), UnifiedSet.<String>newSet()) ) : expected.get(i).getRestrictions(); assertEquals(2, changes.get(i).getRestrictions().size()); assertRestrictions(ArtifactEnvironmentRestrictions.class, restrictions, changes.get(i)); assertRestrictions(ArtifactPlatformRestrictions.class, restrictions, changes.get(i));
@Test public void readFileWithMetaAndDrop() throws Exception { RerunnableChangeParser parser = new RerunnableChangeParser(); String fileContent = "\n" + "//// METADATA dependencies=\"abc,123\"\n" + "mycontent\n" + "line2\n" + "//// DROP_COMMAND\n" + "mydrop" + ""; ImmutableList<ChangeInput> changes = parser.value(mock(ChangeType.class), null, fileContent, objectName, "schema", null); Verify.assertSize(1, changes); ChangeInput change = changes.get(0); assertEquals(objectName, change.getObjectName()); assertEquals("mycontent\nline2", change.getContent()); assertEquals(Sets.immutable.with(new CodeDependency("abc", CodeDependencyType.EXPLICIT), new CodeDependency("123", CodeDependencyType.EXPLICIT)), change.getCodeDependencies()); assertEquals("mydrop", change.getDropContent()); }
@Override public final String prepare(String sql, final ChangeInput change, final Environment env) { if (change != null && Objects.equals(change.getChangeKey().getChangeType().getName(), ChangeType.STATICDATA_STR) && !StaticDataChangeTypeBehavior.isInsertModeStaticData(sql)) { return sql; } sql = CommentRemover.removeComments(sql, change != null ? change.getChangeKey().toString() : sql); MutableList<String> sqls = MultiLineStringSplitter.createSplitterOnSpaceAndLine("GO").valueOf(sql); MutableList<String> convertedSqls = sqls.collect(new Function<String, String>() { @Override public String valueOf(String object) { return InMemoryTranslator.this.translateStatement(object, change); } }); return convertedSqls.makeString("\n\nGO\n\n"); }
@Test public void readSimpleFile() throws Exception { RerunnableChangeParser parser = new RerunnableChangeParser(); String fileContent = "\n" + "mycontent" + ""; ImmutableList<ChangeInput> changes = parser.value(mock(ChangeType.class), null, fileContent, objectName, "schema", null); Verify.assertSize(1, changes); ChangeInput change = changes.get(0); assertEquals(objectName, change.getObjectName()); assertEquals("\nmycontent", change.getContent()); assertEquals(null, change.getDropContent()); }
@Override public Object valueOf(ChangeInput it) { return it.getObjectName(); } }, "MyTemplate2")));
public String getChangeTypeName() { return this.getObjectKey().getChangeTypeName(); }
assertThat(changes.get(0).getContent(), containsString("CREATE TABLE")); assertThat(changes.get(1).getContent(), containsString("PRIMARY KEY")); assertThat(changes.get(2).getContent(), containsString("CREATE INDEX")); assertThat(changes.get(3).getContent(), containsString("ADD COLUMN")); assertThat(changes.get(4).getContent(), containsString("FOREIGN KEY"));
private ChangeInput create2(ChangeType changeType, String schema, String objectName, String changeName, int orderWithinObject, String hash, String content, String rollbackIfAlreadyDeployedContent, boolean active) { ChangeInput changeInput = new ChangeInput(false); changeInput.setChangeKey(new ChangeKey(schema, changeType, objectName, changeName)); changeInput.setOrderWithinObject(orderWithinObject); changeInput.setContentHash(hash); changeInput.setContent(content); changeInput.setRollbackIfAlreadyDeployedContent(rollbackIfAlreadyDeployedContent); changeInput.setActive(active); return changeInput; } private ChangeInput create3(ChangeType changeType, String schema, String objectName, String changeName,
@Test public void testDbChange2DiffValues() { ChangeInput change = new TableChangeParser(new EmptyContentHashStrategy(), getChangeType) .value(tableChangeType, null, "//// CHANGE name=chng5Rollback INACTIVE baselinedChanges=\"a,b,c\" \nmychange\n\n// ROLLBACK-IF-ALREADY-DEPLOYED\nmyrollbackcommand\n", objectName , "schem", null).get(0); assertEquals("schem", change.getObjectKey().getSchema()); assertEquals("chng5Rollback", change.getChangeKey().getChangeName()); assertEquals("mychange\n", change.getContent()); assertEquals("mychan", change.getContentHash()); assertEquals("myrollbackcommand", change.getRollbackIfAlreadyDeployedContent()); assertEquals(UnifiedSet.newSetWith("a", "b", "c"), change.getBaselinedChanges().toSet()); assertFalse(change.isActive()); assertNull(change.getApplyGrants()); }
@Override public final String prepare(String sql, final ChangeInput change, final Environment env) { if (change != null && Objects.equals(change.getChangeKey().getChangeType().getName(), ChangeType.STATICDATA_STR) && !StaticDataChangeTypeBehavior.isInsertModeStaticData(sql)) { return sql; } sql = CommentRemover.removeComments(sql, change != null ? change.getChangeKey().toString() : sql); MutableList<String> sqls = MultiLineStringSplitter.createSplitterOnSpaceAndLine("GO").valueOf(sql); MutableList<String> convertedSqls = sqls.collect(new Function<String, String>() { @Override public String valueOf(String object) { return InMemoryTranslator.this.translateStatement(object, change); } }); return convertedSqls.makeString("\n\nGO\n\n"); }
@Override public Object valueOf(ChangeInput it) { return it.getObjectName(); } }, "MyTemplate1")));
public String getChangeTypeName() { return this.getObjectKey().getChangeTypeName(); }
@Override public ChangeInput valueOf(Pair<String, Integer> object) { String content = object.getOne(); int index = object.getTwo(); ChangeType changeType = getChangeType(content, defaultChangeType); String changeName = "baseline-change-" + index; boolean active = true; String rollbackIfAlreadyDeployedCommand = null; String rollbackContent = null; ChangeInput change = new ChangeInput(false); change.setChangeKey(new ChangeKey(schema, changeType, objectName, changeName)); change.setOrder(index); change.setContentHash(contentHashStrategy.hashContent(content)); change.setContent(content); change.setRollbackIfAlreadyDeployedContent(rollbackIfAlreadyDeployedCommand); change.setActive(active); change.setRollbackContent(rollbackContent); change.setFileLocation(file); return change; } });