Merge pull request #2286 from metacubed-contrib/I2282-EmptySchemaPattern

Allow blank "schemaPattern" in the Maven plugin
This commit is contained in:
John Tims 2020-07-30 18:20:51 -06:00 committed by GitHub
commit 953f82bb30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 257 additions and 2 deletions

View File

@ -18,6 +18,7 @@ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Comparator;
import java.util.regex.Pattern;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.plugin.AbstractMojo;
@ -431,7 +432,7 @@ public class AbstractMetaDataExportMojo extends AbstractMojo {
exporter.setTargetFolder(new File(targetFolder));
exporter.setNamingStrategy(namingStrategy);
exporter.setCatalogPattern(catalogPattern);
exporter.setSchemaPattern(schemaPattern);
exporter.setSchemaPattern(processBlankValues(schemaPattern));
exporter.setTableNamePattern(tableNamePattern);
exporter.setColumnAnnotations(columnAnnotations);
exporter.setValidationAnnotations(validationAnnotations);
@ -702,4 +703,14 @@ public class AbstractMetaDataExportMojo extends AbstractMojo {
boolean setToBlank = value == null || value.equalsIgnoreCase("BLANK");
return setToBlank ? "" : value;
}
private static String processBlankValues(String value) {
if (value == null) {
return null;
}
return BLANK_VALUE_PATTERN.matcher(value).replaceAll(BLANK_VALUE_REPLACEMENT);
}
private static final Pattern BLANK_VALUE_PATTERN = Pattern.compile("(^|,)BLANK(,|$)", Pattern.CASE_INSENSITIVE);
private static final String BLANK_VALUE_REPLACEMENT = "$1$2";
}

View File

@ -14,6 +14,7 @@
package com.querydsl.maven;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.File;
@ -23,7 +24,9 @@ import java.util.Collections;
import org.apache.maven.project.MavenProject;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import com.querydsl.sql.codegen.ExtendedBeanSerializer;
import com.querydsl.sql.codegen.OriginalNamingStrategy;
@ -37,12 +40,20 @@ import com.querydsl.sql.types.LocalTimeType;
public class MetadataExportMojoTest {
private final String url = "jdbc:h2:mem:testdb" + System.currentTimeMillis();
private final String url = "jdbc:h2:mem:testdb" + System.currentTimeMillis() + ";INIT=" +
"CREATE TABLE NO_SCHEMA_TABLE (COL1 INT) \\;" +
"CREATE SCHEMA SCHEMA1 \\;" +
"CREATE TABLE SCHEMA1.SCHEMA1_TABLE (COL1 INT) \\;" +
"CREATE SCHEMA SCHEMA2 \\;" +
"CREATE TABLE SCHEMA2.SCHEMA2_TABLE (COL1 INT) \\;";
private final MavenProject project = new MavenProject();
private final MetadataExportMojo mojo = new MetadataExportMojo();
@Rule
public TestName testName = new TestName();
@Before
public void setUp() {
mojo.setProject(project);
@ -193,4 +204,237 @@ public class MetadataExportMojoTest {
assertEquals(Collections.singletonList("target/export13"), project.getCompileSourceRoots());
assertTrue(new File("target/export13").exists());
}
// region Schema Pattern Matching
@Test
public void executeWithUnsetSchemaPattern() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern(null);
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithExactSchemaPattern() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithSimilarSchemaPattern() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("%EMA1");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithMismatchedSchemaPattern() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("NON_EXISTENT_SCHEMA");
mojo.execute();
assertFalse(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithMultipleSchemaPatterns() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1,SCHEMA2");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
}
// endregion Schema Pattern Matching
// region Schema Pattern Matching - Empty Values
@Test
public void executeWithEmptySchemaPattern() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithMultipleSchemaPatternsAndInterleavedEmpty() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1,,SCHEMA2");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithMultipleSchemaPatternsAndLeadingEmpty() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern(",SCHEMA2");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
}
@Test
@Ignore("Trailing empty strings are not handled correctly by the MetaDataExporter")
public void executeWithMultipleSchemaPatternsAndTrailingEmpty() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1,");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
// endregion Schema Pattern Matching - Empty Values
// region Schema Pattern Matching - BLANK Values
@Test
public void executeWithBlankUppercaseSchemaPattern() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("BLANK");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithBlankLowercaseSchemaPattern() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("blank");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithSchemaPatternContainingBlank() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1BLANK");
mojo.execute();
assertFalse(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithMultipleSchemaPatternsAndInterleavedBlank() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1,BLANK,SCHEMA2");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithMultipleSchemaPatternsAndLeadingBlank() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("BLANK,SCHEMA2");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
}
@Test
@Ignore("Trailing empty strings are not handled correctly by the MetaDataExporter")
public void executeWithMultipleSchemaPatternsAndTrailingBlank() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1,BLANK");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
@Test
public void executeWithMultipleSchemaPatternsAndContainingBlank() throws Exception {
String targetFolder = "target/" + testName.getMethodName();
mojo.setTargetFolder(targetFolder);
mojo.setSchemaPattern("SCHEMA1,SCHEMA2BLANK");
mojo.execute();
assertTrue(new File(targetFolder + "/com/example/QSchema1Table.java").exists());
assertFalse(new File(targetFolder + "/com/example/QNoSchemaTable.java").exists());
assertFalse(new File(targetFolder + "/com/example/QSchema2Table.java").exists());
}
// endregion Schema Pattern Matching - BLANK Values
}