From fd5d8abe83935e49259659eced4a6c32e9fe54f6 Mon Sep 17 00:00:00 2001 From: Pushkaraj Shirgaonkar <7028125+metacubed@users.noreply.github.com> Date: Wed, 11 Apr 2018 18:36:50 -0700 Subject: [PATCH 1/2] Test cases for existing "schemaPattern" functionality in the Maven plugin --- .../maven/MetadataExportMojoTest.java | 145 +++++++++++++++++- 1 file changed, 144 insertions(+), 1 deletion(-) diff --git a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java index 0d1625dbd..fb0d3aeff 100644 --- a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java +++ b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java @@ -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,136 @@ 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 } From c542900e9ea71cdb2561c69dfdd62b47bb39542b Mon Sep 17 00:00:00 2001 From: Pushkaraj Shirgaonkar <7028125+metacubed@users.noreply.github.com> Date: Wed, 11 Apr 2018 18:42:45 -0700 Subject: [PATCH 2/2] Allow specifying a blank value for "schemaPattern" in the Maven plugin --- .../maven/AbstractMetaDataExportMojo.java | 13 ++- .../maven/MetadataExportMojoTest.java | 101 ++++++++++++++++++ 2 files changed, 113 insertions(+), 1 deletion(-) diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java index bec52ea48..f32fb916d 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java @@ -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"; } diff --git a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java index fb0d3aeff..9378e5ca5 100644 --- a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java +++ b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java @@ -336,4 +336,105 @@ public class MetadataExportMojoTest { } // 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 }