diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
index a3d32a5d96..9df7d2efdb 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
@@ -915,6 +915,7 @@ public class GenerationTool {
+ "- regular expressions depending on whitespace (Pattern.COMMENTS is turned on!)\n"
+ "- missing or inadequate object qualification\n"
+ "- the " + objectType + " are obsolete\n"
+ + "Try turning on DEBUG logging (-X in Maven, and in jOOQ) to get additional info about the schema"
);
for (Object o : list)
diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
index 5a3cf3c5cf..443326d0f1 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
@@ -2632,6 +2632,11 @@ public class JavaGenerator extends AbstractGenerator {
protected void generateUDT(SchemaDefinition schema, UDTDefinition udt) {
JavaWriter out = newJavaWriter(getFile(udt));
log.info("Generating UDT ", out.file().getName());
+
+ if (log.isDebugEnabled())
+ for (AttributeDefinition attribute : udt.getAttributes())
+ log.debug("With attribute", "name=" + attribute.getOutputName() + ", matching type names=" + attribute.getDefinedType().getMatchNames());
+
generateUDT(udt, out);
closeJavaWriter(out);
}
@@ -4813,6 +4818,17 @@ public class JavaGenerator extends AbstractGenerator {
JavaWriter out = newJavaWriter(getFile(table));
out.refConflicts(getStrategy().getJavaIdentifiers(table.getColumns()));
out.refConflicts(getStrategy().getJavaIdentifiers(table.getReferencedEmbeddables()));
+
+ log.info("Generating table", out.file().getName() +
+ " [input=" + table.getInputName() +
+ ", output=" + table.getOutputName() +
+ ", pk=" + (table.getPrimaryKey() != null ? table.getPrimaryKey().getName() : "N/A") +
+ "]");
+
+ if (log.isDebugEnabled())
+ for (ColumnDefinition column : table.getColumns())
+ log.debug("With column", "name=" + column.getOutputName() + ", matching type names=" + column.getDefinedType().getMatchNames());
+
generateTable(table, out);
closeJavaWriter(out);
}
@@ -4839,12 +4855,6 @@ public class JavaGenerator extends AbstractGenerator {
: "table";
final List parameters = table.getParameters();
- log.info("Generating table", out.file().getName() +
- " [input=" + table.getInputName() +
- ", output=" + table.getOutputName() +
- ", pk=" + (primaryKey != null ? primaryKey.getName() : "N/A") +
- "]");
-
printPackage(out, table);
if (scala) {
@@ -5758,6 +5768,7 @@ public class JavaGenerator extends AbstractGenerator {
@SuppressWarnings("unused")
protected void generateEmbeddable(SchemaDefinition schema, EmbeddableDefinition embeddable) {
JavaWriter out = newJavaWriter(getFile(embeddable, Mode.RECORD));
+ log.info("Generating embeddable", out.file().getName());
generateRecord0(embeddable, out);
closeJavaWriter(out);
}
@@ -6733,6 +6744,11 @@ public class JavaGenerator extends AbstractGenerator {
protected void generateRoutine(SchemaDefinition schema, RoutineDefinition routine) {
JavaWriter out = newJavaWriter(getFile(routine));
log.info("Generating routine", out.file().getName());
+
+ if (log.isDebugEnabled())
+ for (ParameterDefinition parameter : routine.getAllParameters())
+ log.debug("With parameter", "name=" + parameter.getOutputName() + ", matching type names=" + parameter.getDefinedType().getMatchNames());
+
generateRoutine(routine, out);
closeJavaWriter(out);
}
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java
index 625be4c644..0069617367 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java
@@ -1816,20 +1816,11 @@ public abstract class AbstractDatabase implements Database {
}
private boolean matches(DataTypeDefinition type, Pattern pattern) {
- return ( pattern.matcher(type.getType()).matches() )
- || ( type.getLength() != 0
- && pattern.matcher(type.getType() + "(" + type.getLength() + ")").matches() )
- || ( type.getScale() == 0
- && pattern.matcher(type.getType() + "(" + type.getPrecision() + ")").matches() )
- || ( pattern.matcher(type.getType() + "(" + type.getPrecision() + "," + type.getScale() + ")").matches() )
- || ( pattern.matcher(type.getType() + "(" + type.getPrecision() + ", " + type.getScale() + ")").matches() )
+ for (String matchName : type.getMatchNames())
+ if (pattern.matcher(matchName).matches())
+ return true;
- // [#5872] We should match user-defined types as well, in case of which the type might be reported
- // as USER-DEFINED (in PostgreSQL)
- || ( !StringUtils.isBlank(type.getUserType())
- && ( pattern.matcher(type.getUserType()).matches()
- || pattern.matcher(type.getQualifiedUserType().unquotedName().toString()).matches() )
- );
+ return false;
}
@Override
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/DataTypeDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/DataTypeDefinition.java
index 83412a14b1..3cf2845af5 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/DataTypeDefinition.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/DataTypeDefinition.java
@@ -37,7 +37,10 @@
*/
package org.jooq.meta;
+import java.util.List;
+
import org.jooq.Name;
+import org.jooq.meta.jaxb.ForcedType;
/**
* A definition for a data type object.
@@ -146,4 +149,9 @@ public interface DataTypeDefinition {
*/
SchemaDefinition getSchema();
+ /**
+ * The various type names by which this type can be matched by a
+ * {@link ForcedType}.
+ */
+ List getMatchNames();
}
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java
index 3a9c78e5a8..0c4aa3017c 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java
@@ -44,9 +44,14 @@ import static org.jooq.impl.DefaultDataType.normalise;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
import org.jooq.Name;
import org.jooq.SQLDialect;
+import org.jooq.tools.StringUtils;
import org.jooq.types.UByte;
import org.jooq.types.UInteger;
import org.jooq.types.ULong;
@@ -347,6 +352,29 @@ public class DefaultDataTypeDefinition implements DataTypeDefinition {
return false;
}
+ @Override
+ public List getMatchNames() {
+ Set result = new LinkedHashSet<>();
+ result.add(getType());
+
+ if (getLength() != 0)
+ result.add(getType() + "(" + getLength() + ")");
+ if (getScale() == 0)
+ result.add(getType() + "(" + getPrecision() + ")");
+
+ result.add(getType() + "(" + getPrecision() + "," + getScale() + ")");
+ result.add(getType() + "(" + getPrecision() + ", " + getScale() + ")");
+
+ // [#5872] We should match user-defined types as well, in case of which the type might be reported
+ // as USER-DEFINED (in PostgreSQL)
+ if (!StringUtils.isBlank(getUserType())) {
+ result.add(getUserType());
+ result.add(getQualifiedUserType().unquotedName().toString());
+ }
+
+ return new ArrayList<>(result);
+ }
+
@Override
public int hashCode() {
final int prime = 31;
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/derby/sys/tables/Syschecks.java b/jOOQ-meta/src/main/java/org/jooq/meta/derby/sys/tables/Syschecks.java
index 7bbd557177..3fced65f59 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/derby/sys/tables/Syschecks.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/derby/sys/tables/Syschecks.java
@@ -28,7 +28,7 @@ import org.jooq.meta.derby.sys.Sys;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Syschecks extends TableImpl {
- private static final long serialVersionUID = -1008578696;
+ private static final long serialVersionUID = -1825970802;
/**
* The reference instance of SYS.SYSCHECKS
@@ -57,7 +57,7 @@ public class Syschecks extends TableImpl {
* @deprecated Unknown data type. Please define an explicit {@link org.jooq.Binding} to specify how this type should be handled. Deprecation can be turned off using {@literal } in your code generator configuration.
*/
@java.lang.Deprecated
- public final TableField REFERENCEDCOLUMNS = createField(DSL.name("REFERENCEDCOLUMNS"), org.jooq.impl.DefaultDataType.getDefaultDataType("\"org.apache.derby.catalog.ReferencedColumns\"").nullable(false), this, "");
+ public final TableField REFERENCEDCOLUMNS = createField(DSL.name("REFERENCEDCOLUMNS"), org.jooq.impl.SQLDataType.OTHER.nullable(false), this, "");
private Syschecks(Name alias, Table aliased) {
this(alias, aliased, null);