[jOOQ/jOOQ#13143] Add code generation flags to turn off the recognition

of jOOQ-specific types
This commit is contained in:
Lukas Eder 2022-03-09 10:40:29 +01:00
parent 36c71d4c61
commit ed778cf7b3
6 changed files with 300 additions and 4 deletions

View File

@ -153,6 +153,10 @@ abstract class AbstractGenerator implements Generator {
boolean generateVarargsSetters = true;
String generateFullyQualifiedTypes = "";
boolean generateJavaTimeTypes = true;
boolean generateSpatialTypes = true;
boolean generateXmlTypes = true;
boolean generateJsonTypes = true;
boolean generateIntervalTypes = true;
boolean generateTableValuedFunctions = false;
boolean generateEmptyCatalogs = false;
boolean generateEmptySchemas = false;
@ -1183,6 +1187,46 @@ abstract class AbstractGenerator implements Generator {
this.generateJavaTimeTypes = generateJavaTimeTypes;
}
@Override
public boolean generateSpatialTypes() {
return generateSpatialTypes;
}
@Override
public void setGenerateSpatialTypes(boolean generateSpatialTypes) {
this.generateSpatialTypes = generateSpatialTypes;
}
@Override
public boolean generateXmlTypes() {
return generateXmlTypes;
}
@Override
public void setGenerateXmlTypes(boolean generateXmlTypes) {
this.generateXmlTypes = generateXmlTypes;
}
@Override
public boolean generateJsonTypes() {
return generateJsonTypes;
}
@Override
public void setGenerateJsonTypes(boolean generateJsonTypes) {
this.generateJsonTypes = generateJsonTypes;
}
@Override
public boolean generateIntervalTypes() {
return generateIntervalTypes;
}
@Override
public void setGenerateIntervalTypes(boolean generateIntervalTypes) {
this.generateIntervalTypes = generateIntervalTypes;
}
@Override
public boolean generateEmptyCatalogs() {
return generateEmptyCatalogs;

View File

@ -877,6 +877,14 @@ public class GenerationTool {
generator.setGenerateFullyQualifiedTypes(g.getGenerate().getFullyQualifiedTypes());
if (g.getGenerate().isJavaTimeTypes() != null)
generator.setGenerateJavaTimeTypes(g.getGenerate().isJavaTimeTypes());
if (g.getGenerate().isSpatialTypes() != null)
generator.setGenerateSpatialTypes(g.getGenerate().isSpatialTypes());
if (g.getGenerate().isXmlTypes() != null)
generator.setGenerateXmlTypes(g.getGenerate().isXmlTypes());
if (g.getGenerate().isJsonTypes() != null)
generator.setGenerateJsonTypes(g.getGenerate().isJsonTypes());
if (g.getGenerate().isIntervalTypes() != null)
generator.setGenerateIntervalTypes(g.getGenerate().isIntervalTypes());
if (g.getGenerate().isEmptyCatalogs() != null)
generator.setGenerateEmptyCatalogs(g.getGenerate().isEmptyCatalogs());
if (g.getGenerate().isEmptySchemas() != null)

View File

@ -42,10 +42,15 @@ import java.io.Serializable;
import java.util.Locale;
import org.jooq.Constants;
import org.jooq.JSON;
import org.jooq.JSONB;
import org.jooq.Spatial;
import org.jooq.XML;
import org.jooq.meta.Database;
import org.jooq.meta.jaxb.GeneratedAnnotationType;
import org.jooq.meta.jaxb.GeneratedSerialVersionUID;
import org.jooq.meta.jaxb.VisibilityModifier;
import org.jooq.types.Interval;
/**
* The Generator provides a basic interface for java code generation
@ -1065,6 +1070,52 @@ public interface Generator {
*/
void setGenerateJavaTimeTypes(boolean generateJavaTimeTypes);
/**
* A flag indicating whether the {@link Spatial} type support should be
* enabled.
*/
boolean generateSpatialTypes();
/**
* A flag indicating whether the {@link Spatial} type support should be
* enabled.
*/
void setGenerateSpatialTypes(boolean generateSpatialTypes);
/**
* A flag indicating whether the {@link XML} type support should be enabled.
*/
boolean generateXmlTypes();
/**
* A flag indicating whether the {@link XML} type support should be enabled.
*/
void setGenerateXmlTypes(boolean generateXmlTypes);
/**
* A flag indicating whether the {@link JSON} and {@link JSONB} type support
* should be enabled.
*/
boolean generateJsonTypes();
/**
* A flag indicating whether the {@link JSON} and {@link JSONB} type support
* should be enabled.
*/
void setGenerateJsonTypes(boolean generateJsonTypes);
/**
* A flag indicating whether the {@link Interval} type support should be
* enabled.
*/
boolean generateIntervalTypes();
/**
* A flag indicating whether the {@link Interval} type support should be
* enabled.
*/
void setGenerateIntervalTypes(boolean generateJsonTypes);
/**
* Whether empty catalogs should still be generated.
*/

View File

@ -8998,7 +8998,7 @@ public class JavaGenerator extends AbstractGenerator {
// Try finding a basic standard SQL type according to the current dialect
else {
try {
Class<?> clazz = mapJavaTimeTypes(getDataType(db, t, p, s)).getType();
Class<?> clazz = mapTypes(getDataType(db, t, p, s)).getType();
if (scala && clazz == byte[].class)
type = "scala.Array[scala.Byte]";
else if (kotlin && clazz == byte[].class)
@ -9086,7 +9086,7 @@ public class JavaGenerator extends AbstractGenerator {
String sqlDataTypeRef;
try {
dataType = mapJavaTimeTypes(getDataType(db, t, p, s));
dataType = mapTypes(getDataType(db, t, p, s));
}
// Mostly because of unsupported data types.
@ -9218,11 +9218,11 @@ public class JavaGenerator extends AbstractGenerator {
return typed.getType().isNullable() ? "?" : "";
}
private DataType<?> mapJavaTimeTypes(DataType<?> dataType) {
private DataType<?> mapTypes(DataType<?> dataType) {
DataType<?> result = dataType;
// [#4429] [#5713] This logic should be implemented in Configuration
if (dataType.isDateTime() && generateJavaTimeTypes) {
if (dataType.isDateTime() && generateJavaTimeTypes()) {
if (dataType.getType() == Date.class)
result = SQLDataType.LOCALDATE;
else if (dataType.getType() == Time.class)
@ -9231,6 +9231,15 @@ public class JavaGenerator extends AbstractGenerator {
result = SQLDataType.LOCALDATETIME;
}
// [#13143] Turn off support for some types
else if (
dataType.isSpatial() && !generateSpatialTypes() ||
dataType.isJSON() && !generateJsonTypes() ||
dataType.isXML() && !generateXmlTypes() ||
dataType.isInterval() && !generateIntervalTypes()
)
result = SQLDataType.OTHER;
return result;
}

View File

@ -212,6 +212,14 @@ public class Generate implements Serializable, XMLAppendable
protected Boolean emptySchemas = false;
@XmlElement(defaultValue = "true")
protected Boolean javaTimeTypes = true;
@XmlElement(defaultValue = "true")
protected Boolean spatialTypes = true;
@XmlElement(defaultValue = "true")
protected Boolean xmlTypes = true;
@XmlElement(defaultValue = "true")
protected Boolean jsonTypes = true;
@XmlElement(defaultValue = "true")
protected Boolean intervalTypes = true;
@XmlElement(defaultValue = "\\n")
@XmlJavaTypeAdapter(StringAdapter.class)
protected String newline = "\\n";
@ -2338,6 +2346,102 @@ public class Generate implements Serializable, XMLAppendable
this.javaTimeTypes = value;
}
/**
* A flag indicating whether the spatial type support should be enabled.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isSpatialTypes() {
return spatialTypes;
}
/**
* Sets the value of the spatialTypes property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setSpatialTypes(Boolean value) {
this.spatialTypes = value;
}
/**
* A flag indicating whether the XML type support should be enabled.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isXmlTypes() {
return xmlTypes;
}
/**
* Sets the value of the xmlTypes property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setXmlTypes(Boolean value) {
this.xmlTypes = value;
}
/**
* A flag indicating whether the JSON type support should be enabled.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isJsonTypes() {
return jsonTypes;
}
/**
* Sets the value of the jsonTypes property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setJsonTypes(Boolean value) {
this.jsonTypes = value;
}
/**
* A flag indicating whether the INTERVAL type support should be enabled.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isIntervalTypes() {
return intervalTypes;
}
/**
* Sets the value of the intervalTypes property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setIntervalTypes(Boolean value) {
this.intervalTypes = value;
}
/**
* The newline characters to be used in generated code. Whitespace characters can be used, e.g. \n, \r\n
*
@ -2868,6 +2972,26 @@ public class Generate implements Serializable, XMLAppendable
return this;
}
public Generate withSpatialTypes(Boolean value) {
setSpatialTypes(value);
return this;
}
public Generate withXmlTypes(Boolean value) {
setXmlTypes(value);
return this;
}
public Generate withJsonTypes(Boolean value) {
setJsonTypes(value);
return this;
}
public Generate withIntervalTypes(Boolean value) {
setIntervalTypes(value);
return this;
}
/**
* The newline characters to be used in generated code. Whitespace characters can be used, e.g. \n, \r\n
*
@ -2986,6 +3110,10 @@ public class Generate implements Serializable, XMLAppendable
builder.append("emptyCatalogs", emptyCatalogs);
builder.append("emptySchemas", emptySchemas);
builder.append("javaTimeTypes", javaTimeTypes);
builder.append("spatialTypes", spatialTypes);
builder.append("xmlTypes", xmlTypes);
builder.append("jsonTypes", jsonTypes);
builder.append("intervalTypes", intervalTypes);
builder.append("newline", newline);
builder.append("indentation", indentation);
builder.append("printMarginForBlockComment", printMarginForBlockComment);
@ -3811,6 +3939,42 @@ public class Generate implements Serializable, XMLAppendable
return false;
}
}
if (spatialTypes == null) {
if (other.spatialTypes!= null) {
return false;
}
} else {
if (!spatialTypes.equals(other.spatialTypes)) {
return false;
}
}
if (xmlTypes == null) {
if (other.xmlTypes!= null) {
return false;
}
} else {
if (!xmlTypes.equals(other.xmlTypes)) {
return false;
}
}
if (jsonTypes == null) {
if (other.jsonTypes!= null) {
return false;
}
} else {
if (!jsonTypes.equals(other.jsonTypes)) {
return false;
}
}
if (intervalTypes == null) {
if (other.intervalTypes!= null) {
return false;
}
} else {
if (!intervalTypes.equals(other.intervalTypes)) {
return false;
}
}
if (newline == null) {
if (other.newline!= null) {
return false;
@ -3934,6 +4098,10 @@ public class Generate implements Serializable, XMLAppendable
result = ((prime*result)+((emptyCatalogs == null)? 0 :emptyCatalogs.hashCode()));
result = ((prime*result)+((emptySchemas == null)? 0 :emptySchemas.hashCode()));
result = ((prime*result)+((javaTimeTypes == null)? 0 :javaTimeTypes.hashCode()));
result = ((prime*result)+((spatialTypes == null)? 0 :spatialTypes.hashCode()));
result = ((prime*result)+((xmlTypes == null)? 0 :xmlTypes.hashCode()));
result = ((prime*result)+((jsonTypes == null)? 0 :jsonTypes.hashCode()));
result = ((prime*result)+((intervalTypes == null)? 0 :intervalTypes.hashCode()));
result = ((prime*result)+((newline == null)? 0 :newline.hashCode()));
result = ((prime*result)+((indentation == null)? 0 :indentation.hashCode()));
result = ((prime*result)+((printMarginForBlockComment == null)? 0 :printMarginForBlockComment.hashCode()));

View File

@ -1999,6 +1999,22 @@ source code generator, rather than JDBC's java.sql types.
<p>
This flag is ignored in the commercial Java 6 distribution of jOOQ 3.9+ ]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="spatialTypes" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A flag indicating whether the spatial type support should be enabled.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="xmlTypes" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A flag indicating whether the XML type support should be enabled.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="jsonTypes" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A flag indicating whether the JSON type support should be enabled.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="intervalTypes" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A flag indicating whether the INTERVAL type support should be enabled.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="newline" type="string" default="\n" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The newline characters to be used in generated code. Whitespace characters can be used, e.g. \n, \r\n]]></jxb:javadoc></jxb:property></appinfo></annotation>