[#3093] Add code-generation configuration to treat UNIQUE keys as primary keys to generate UpdatableTables
This commit is contained in:
parent
053ac010fe
commit
06b20164f4
@ -290,6 +290,7 @@ public class GenerationTool {
|
||||
database.setIncludeExcludeColumns(TRUE.equals(d.isIncludeExcludeColumns()));
|
||||
database.setRecordVersionFields(new String[] { defaultString(d.getRecordVersionFields()) });
|
||||
database.setRecordTimestampFields(new String[] { defaultString(d.getRecordTimestampFields()) });
|
||||
database.setOverridePrimaryKeys(new String[] { defaultString(d.getOverridePrimaryKeys()) });
|
||||
database.setConfiguredCustomTypes(d.getCustomTypes());
|
||||
database.setConfiguredEnumTypes(d.getEnumTypes());
|
||||
database.setConfiguredForcedTypes(d.getForcedTypes());
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
|
||||
<bindingDirectory>src/main/resources/xjb</bindingDirectory>
|
||||
<schemaIncludes>
|
||||
<include>jooq-codegen-3.3.0.xsd</include>
|
||||
<include>jooq-codegen-3.4.0.xsd</include>
|
||||
</schemaIncludes>
|
||||
<generatePackage>org.jooq.util.jaxb</generatePackage>
|
||||
<args>
|
||||
|
||||
@ -90,6 +90,7 @@ public abstract class AbstractDatabase implements Database {
|
||||
private boolean includeExcludeColumns;
|
||||
private String[] recordVersionFields;
|
||||
private String[] recordTimestampFields;
|
||||
private String[] overridePrimaryKeys;
|
||||
private boolean supportsUnsignedTypes;
|
||||
private boolean dateAsTimestamp;
|
||||
private List<Schema> configuredSchemata;
|
||||
@ -327,6 +328,16 @@ public abstract class AbstractDatabase implements Database {
|
||||
return recordTimestampFields;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOverridePrimaryKeys(String[] overridePrimaryKeys) {
|
||||
this.overridePrimaryKeys = overridePrimaryKeys;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getOverridePrimaryKeys() {
|
||||
return overridePrimaryKeys;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setConfiguredEnumTypes(List<EnumType> configuredEnumTypes) {
|
||||
this.configuredEnumTypes = configuredEnumTypes;
|
||||
@ -785,22 +796,26 @@ public abstract class AbstractDatabase implements Database {
|
||||
List<T> result = new ArrayList<T>();
|
||||
|
||||
definitionsLoop: for (T definition : definitions) {
|
||||
for (String exclude : excludes) {
|
||||
if (exclude != null &&
|
||||
(definition.getName().matches(exclude.trim()) ||
|
||||
definition.getQualifiedName().matches(exclude.trim()))) {
|
||||
if (excludes != null) {
|
||||
for (String exclude : excludes) {
|
||||
if (exclude != null &&
|
||||
(definition.getName().matches(exclude.trim()) ||
|
||||
definition.getQualifiedName().matches(exclude.trim()))) {
|
||||
|
||||
continue definitionsLoop;
|
||||
continue definitionsLoop;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (String include : includes) {
|
||||
if (include != null &&
|
||||
(definition.getName().matches(include.trim()) ||
|
||||
definition.getQualifiedName().matches(include.trim()))) {
|
||||
if (includes != null) {
|
||||
for (String include : includes) {
|
||||
if (include != null &&
|
||||
(definition.getName().matches(include.trim()) ||
|
||||
definition.getQualifiedName().matches(include.trim()))) {
|
||||
|
||||
result.add(definition);
|
||||
continue definitionsLoop;
|
||||
result.add(definition);
|
||||
continue definitionsLoop;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -842,6 +857,13 @@ public abstract class AbstractDatabase implements Database {
|
||||
log.error("Error while fetching check constraints", e);
|
||||
}
|
||||
|
||||
try {
|
||||
overridePrimaryKeys(result);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("Error while overriding primary keys", e);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -862,6 +884,17 @@ public abstract class AbstractDatabase implements Database {
|
||||
return fetched.size() + " (" + included.size() + " included, " + (fetched.size() - included.size()) + " excluded)";
|
||||
}
|
||||
|
||||
private final void overridePrimaryKeys(DefaultRelations r) {
|
||||
List<UniqueKeyDefinition> allKeys = r.getUniqueKeys();
|
||||
List<UniqueKeyDefinition> filteredKeys = filterExcludeInclude(allKeys, null, overridePrimaryKeys);
|
||||
|
||||
log.info("Overriding primary keys", fetchedSize(allKeys, filteredKeys));
|
||||
|
||||
for (UniqueKeyDefinition key : filteredKeys) {
|
||||
r.overridePrimaryKey(key);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new Factory
|
||||
*/
|
||||
|
||||
@ -259,6 +259,18 @@ public interface Database {
|
||||
*/
|
||||
String[] getRecordTimestampFields();
|
||||
|
||||
/**
|
||||
* Unique keys matching these regular expressions will be considered as
|
||||
* primary keys in generated code.
|
||||
*/
|
||||
void setOverridePrimaryKeys(String[] primaryKeys);
|
||||
|
||||
/**
|
||||
* Unique keys matching these regular expressions will be considered as
|
||||
* primary keys in generated code.
|
||||
*/
|
||||
String[] getOverridePrimaryKeys();
|
||||
|
||||
/**
|
||||
* Database objects matching any of these field names will be generated as
|
||||
* custom types.
|
||||
|
||||
@ -42,10 +42,12 @@ package org.jooq.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jooq.tools.JooqLogger;
|
||||
@ -98,6 +100,31 @@ public class DefaultRelations implements Relations {
|
||||
key.getKeyColumns().add(column);
|
||||
}
|
||||
|
||||
public void overridePrimaryKey(UniqueKeyDefinition key) {
|
||||
UniqueKeyDefinition old = null;
|
||||
|
||||
// Remove the existing key from the column -> key mapping
|
||||
primaryKeysByColumn = null;
|
||||
|
||||
// Remove the existing key from the key mapping
|
||||
Iterator<Entry<Key, UniqueKeyDefinition>> it = primaryKeys.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Entry<Key, UniqueKeyDefinition> entry = it.next();
|
||||
|
||||
if (entry.getValue().getTable().equals(key.getTable())) {
|
||||
old = entry.getValue();
|
||||
it.remove();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Add the new primary key
|
||||
primaryKeys.put(key(key.getTable(), key.getName()), key);
|
||||
log.info("Overriding primary key", "Table : " + key.getTable() +
|
||||
", previous key : " + ((old == null) ? "none" : old.getName()) +
|
||||
", new key : " + key.getName());
|
||||
}
|
||||
|
||||
private UniqueKeyDefinition getUniqueKey(String keyName, ColumnDefinition column, boolean isPK) {
|
||||
UniqueKeyDefinition key = uniqueKeys.get(key(column, keyName));
|
||||
|
||||
@ -208,8 +235,6 @@ public class DefaultRelations implements Relations {
|
||||
return new ArrayList<UniqueKeyDefinition>(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public List<UniqueKeyDefinition> getUniqueKeys(SchemaDefinition schema) {
|
||||
Set<UniqueKeyDefinition> result = new LinkedHashSet<UniqueKeyDefinition>();
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<jaxb:globalBindings>
|
||||
|
||||
<!-- Force all classes implements Serializable -->
|
||||
<xjc:serializable uid="330" />
|
||||
<xjc:serializable uid="340" />
|
||||
|
||||
<!-- [#2401] Trim unnecessary whitespace from configuration -->
|
||||
<xjc:javaType name="java.lang.String" xmlType="xs:string" adapter="org.jooq.util.jaxb.tools.TrimAdapter"/>
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
|
||||
<!-- Annotate the following classes with @SuppressWarnings -->
|
||||
<jaxb:bindings schemaLocation="../xsd/jooq-codegen-3.3.0.xsd" multiple="true" node="//xs:complexType">
|
||||
<jaxb:bindings schemaLocation="../xsd/jooq-codegen-3.4.0.xsd" multiple="true" node="//xs:complexType">
|
||||
<annox:annotate>
|
||||
<annox:annotate annox:class="java.lang.SuppressWarnings" value="all" />
|
||||
</annox:annotate>
|
||||
|
||||
632
jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.4.0.xsd
Normal file
632
jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.4.0.xsd
Normal file
@ -0,0 +1,632 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:tns="http://www.jooq.org/xsd/jooq-codegen-3.4.0.xsd"
|
||||
targetNamespace="http://www.jooq.org/xsd/jooq-codegen-3.4.0.xsd"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<element name="configuration">
|
||||
<complexType>
|
||||
<all>
|
||||
|
||||
<!--
|
||||
The JDBC configuration element contains information about how
|
||||
to set up the database connection used for source code generation
|
||||
-->
|
||||
<element name="jdbc" type="tns:Jdbc" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
The GENERATOR configuration element contains information about
|
||||
source code generation itself
|
||||
-->
|
||||
<element name="generator" type="tns:Generator" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
</element>
|
||||
|
||||
<complexType name="Jdbc">
|
||||
<all>
|
||||
<!-- The JDBC driver -->
|
||||
<element name="driver" type="string" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!-- The JDBC connection URL -->
|
||||
<element name="url" type="string" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!-- Deprecated. Use database schema configuration elements instead -->
|
||||
<element name="schema" type="string" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
The JDBC connection user. Be sure this user has all required
|
||||
GRANTs to the dictionary views/tables to generate the desired artefacts
|
||||
-->
|
||||
<element name="user" type="string" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!-- The JDBC connection password -->
|
||||
<element name="password" type="string" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Enlist custom JDBC driver properties that are provided to the
|
||||
java.sql.DriverManager when fetching a connection
|
||||
-->
|
||||
<element name="properties" type="tns:Properties" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Properties">
|
||||
<sequence>
|
||||
<element name="property" type="tns:Property" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Property">
|
||||
<all>
|
||||
<element name="key" type="string" minOccurs="1" maxOccurs="1"/>
|
||||
<element name="value" type="string" minOccurs="1" maxOccurs="1"/>
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Generator">
|
||||
<all>
|
||||
<!--
|
||||
The class used to generate source code. You may override this with
|
||||
your custom source code generator
|
||||
-->
|
||||
<element name="name" type="string" default="org.jooq.util.DefaultGenerator"
|
||||
minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!-- The naming strategy used for class and field names -->
|
||||
<element name="strategy" type="tns:Strategy" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!-- The jooq-meta configuration -->
|
||||
<element name="database" type="tns:Database" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!-- The jooq-codegen configuration -->
|
||||
<element name="generate" type="tns:Generate" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!-- Some information about generation output -->
|
||||
<element name="target" type="tns:Target" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Strategy">
|
||||
<choice>
|
||||
<!--
|
||||
The class used to provide a naming strategy for generated source
|
||||
code. You may override this with your custom naming strategy
|
||||
-->
|
||||
<element name="name" type="string" minOccurs="0" maxOccurs="1"
|
||||
default="org.jooq.util.DefaultGeneratorStrategy" />
|
||||
|
||||
<!--
|
||||
The matcher strategy configuration used when applying an
|
||||
XML-based strategy
|
||||
-->
|
||||
<element name="matchers" type="tns:Matchers" minOccurs="0" maxOccurs="1"/>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Matchers can be used to provide a naming strategy by regular expression configuration.
|
||||
-->
|
||||
<complexType name="Matchers">
|
||||
<sequence>
|
||||
|
||||
<!--
|
||||
Specify 0..n schema matchers in order to provide a naming strategy for objects
|
||||
created from schemas.
|
||||
-->
|
||||
<element name="schemas" type="tns:MatchersSchemasType" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
Specify 0..n table matchers in order to provide a naming strategy for objects
|
||||
created from database tables.
|
||||
-->
|
||||
<element name="tables" type="tns:MatchersTablesType" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
Specify 0..n field matchers in order to provide a naming strategy for objects
|
||||
created from table fields.
|
||||
-->
|
||||
<element name="fields" type="tns:MatchersFieldsType" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
Specify 0..n routine matchers in order to provide a naming strategy for objects
|
||||
created from routines.
|
||||
-->
|
||||
<element name="routines" type="tns:MatchersRoutinesType" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
Specify 0..n sequence matchers in order to provide a naming strategy for objects
|
||||
created from sequences.
|
||||
-->
|
||||
<element name="sequences" type="tns:MatchersSequencesType" minOccurs="0" maxOccurs="1"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersSchemasType">
|
||||
<sequence>
|
||||
<element name="schema" type="tns:MatchersSchemaType" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersSchemaType">
|
||||
<all>
|
||||
|
||||
<!--
|
||||
This schema matcher applies to all unqualified or qualified schema names
|
||||
matched by this expression. If left empty, this matcher applies to all schemas.
|
||||
-->
|
||||
<element name="expression" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated org.jooq.Schema object.
|
||||
-->
|
||||
<element name="schemaClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1" />
|
||||
<element name="schemaIdentifier" type="tns:MatcherRule" minOccurs="0" maxOccurs="1" />
|
||||
<element name="schemaImplements" type="string" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersTablesType">
|
||||
<sequence>
|
||||
<element name="table" type="tns:MatchersTableType" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersTableType">
|
||||
<all>
|
||||
|
||||
<!--
|
||||
This table matcher applies to all unqualified or qualified table names
|
||||
matched by this expression. If left empty, this matcher applies to all tables.
|
||||
-->
|
||||
<element name="expression" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated org.jooq.Table object.
|
||||
-->
|
||||
<element name="tableClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="tableIdentifier" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="tableImplements" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated org.jooq.Record object.
|
||||
-->
|
||||
<element name="recordClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="recordImplements" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated interface, implemented by
|
||||
generated org.jooq.Record objects and by generated POJOs.
|
||||
-->
|
||||
<element name="interfaceClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="interfaceImplements" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated org.jooq.DAO object.
|
||||
-->
|
||||
<element name="daoClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="daoImplements" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated POJO object.
|
||||
-->
|
||||
<element name="pojoClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="pojoExtends" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="pojoImplements" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersFieldsType">
|
||||
<sequence>
|
||||
<element name="field" type="tns:MatchersFieldType" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersFieldType">
|
||||
<all>
|
||||
|
||||
<!--
|
||||
This field matcher applies to all unqualified or qualified field names
|
||||
matched by this expression. If left empty, this matcher applies to all fields.
|
||||
-->
|
||||
<element name="expression" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated org.jooq.Field object.
|
||||
-->
|
||||
<element name="fieldIdentifier" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="fieldMember" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="fieldSetter" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="fieldGetter" type="tns:MatcherRule" minOccurs="0" maxOccurs="1"/>
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersRoutinesType">
|
||||
<sequence>
|
||||
<element name="routine" type="tns:MatchersRoutineType" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersRoutineType">
|
||||
<all>
|
||||
|
||||
<!--
|
||||
This routine matcher applies to all unqualified or qualified routine names
|
||||
matched by this expression. If left empty, this matcher applies to all routines.
|
||||
-->
|
||||
<element name="expression" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of a generated org.jooq.Routine object.
|
||||
-->
|
||||
<element name="routineClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1" />
|
||||
<element name="routineMethod" type="tns:MatcherRule" minOccurs="0" maxOccurs="1" />
|
||||
<element name="routineImplements" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersSequencesType">
|
||||
<sequence>
|
||||
<element name="sequence" type="tns:MatchersSequenceType" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatchersSequenceType">
|
||||
<all>
|
||||
|
||||
<!--
|
||||
This sequence matcher applies to all unqualified or qualified sequence names
|
||||
matched by this expression. If left empty, this matcher applies to all sequences.
|
||||
-->
|
||||
<element name="expression" type="string" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
These elements influence the naming of the generated Sequences class.
|
||||
-->
|
||||
<element name="sequenceIdentifier" type="tns:MatcherRule" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="MatcherRule">
|
||||
<all>
|
||||
<element name="transform" type="tns:MatcherTransformType" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="expression" type="string" minOccurs="1" maxOccurs="1"/>
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="MatcherTransformType">
|
||||
<restriction base="string">
|
||||
<enumeration value="AS_IS"/>
|
||||
<enumeration value="LOWER"/>
|
||||
<enumeration value="UPPER"/>
|
||||
<enumeration value="CAMEL"/>
|
||||
<enumeration value="PASCAL"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<complexType name="Database">
|
||||
<all>
|
||||
<!--
|
||||
The database dialect from jooq-meta. Available dialects are
|
||||
named org.util.[database].[database]Database. Known values are:
|
||||
|
||||
org.jooq.util.ase.ASEDatabase
|
||||
org.jooq.util.cubrid.CUBRIDDatabase
|
||||
org.jooq.util.db2.DB2Database
|
||||
org.jooq.util.derby.DerbyDatabase
|
||||
org.jooq.util.h2.H2Database
|
||||
org.jooq.util.hsqldb.HSQLDBDatabase
|
||||
org.jooq.util.ingres.IngresDatabase
|
||||
org.jooq.util.mysql.MySQLDatabase
|
||||
org.jooq.util.oracle.OracleDatabase
|
||||
org.jooq.util.postgres.PostgresDatabase
|
||||
org.jooq.util.sqlite.SQLiteDatabaes
|
||||
org.jooq.util.sqlserver.SQLServerDatabase
|
||||
org.jooq.util.sybase.SybaseDatabase
|
||||
|
||||
You can also provide your own org.jooq.util.Database implementation
|
||||
here, if your database is currently not supported
|
||||
-->
|
||||
<element name="name" type="string" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
All elements that are generated from your schema (A Java regular expression.
|
||||
Use the pipe to separate several expressions) Watch out for
|
||||
case-sensitivity. Depending on your database, this might be
|
||||
important! You can create case-insensitive regular expressions
|
||||
using this syntax: (?i:expr)A comma-separated list of regular
|
||||
expressions
|
||||
-->
|
||||
<element name="includes" type="string" default=".*" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
All elements that are excluded from your schema (A Java regular expression.
|
||||
Use the pipe to separate several expressions). Excludes match before
|
||||
includes
|
||||
-->
|
||||
<element name="excludes" type="string" default="" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
This flag indicates whether include / exclude patterns should also match
|
||||
columns within tables.
|
||||
-->
|
||||
<element name="includeExcludeColumns" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
All table and view columns that are used as "version" fields for
|
||||
optimistic locking (A Java regular expression. Use the pipe to separate several expressions).
|
||||
See UpdatableRecord.store() and UpdatableRecord.delete() for details
|
||||
-->
|
||||
<element name="recordVersionFields" type="string" default="" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
All table and view columns that are used as "timestamp" fields for
|
||||
optimistic locking (A Java regular expression. Use the pipe to separate several expressions).
|
||||
See UpdatableRecord.store() and UpdatableRecord.delete() for details
|
||||
-->
|
||||
<element name="recordTimestampFields" type="string" default="" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
All (UNIQUE) key names that should be used instead of primary keys on
|
||||
generated UpdatableRecords, to be used with
|
||||
|
||||
- UpdatableRecord.store()
|
||||
- UpdatableRecord.update()
|
||||
- UpdatableRecord.delete()
|
||||
- UpdatableRecord.refresh()
|
||||
|
||||
If several keys match, a warning is emitted and the first one encountered will be used.
|
||||
-->
|
||||
<element name="overridePrimaryKeys" type="string" default="" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate java.sql.Timestamp fields for DATE columns. This is
|
||||
particularly useful for Oracle databases
|
||||
-->
|
||||
<element name="dateAsTimestamp" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate jOOU data types for your unsigned data types, which are
|
||||
not natively supported in Java
|
||||
-->
|
||||
<element name="unsignedTypes" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
The schema that is used locally as a source for meta information.
|
||||
This could be your development schema or the production schema, etc
|
||||
This cannot be combined with the schemata element.
|
||||
If left empty (and without any schemata element), jOOQ will generate all available schemata.
|
||||
For backwards compatibility, this defaults to jdbc/schema
|
||||
-->
|
||||
<element name="inputSchema" type="string" default="" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
The schema that is used in generated source code. This will be the
|
||||
production schema. Use this to override your local development
|
||||
schema name for source code generation. If not specified, this
|
||||
will be the same as the input-schema.
|
||||
-->
|
||||
<element name="outputSchema" type="string" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
A configuration element to configure several input and/or output
|
||||
schemata for jooq-meta, in case you're using jooq-meta in a multi-
|
||||
schema environment
|
||||
-->
|
||||
<element name="schemata" type="tns:Schemata" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
A configuration element to configure custom types introduced to jOOQ
|
||||
using converters
|
||||
-->
|
||||
<element name="customTypes" type="tns:CustomTypes" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
A configuration element to configure synthetic enum types
|
||||
This is EXPERIMENTAL / DEPRECATED functionality. Do not re-use
|
||||
-->
|
||||
<element name="enumTypes" type="tns:EnumTypes" minOccurs="0" maxOccurs="1"/>
|
||||
|
||||
<!--
|
||||
A configuration element to configure type overrides for generated
|
||||
artefacts (e.g. in combination with enumTypes)
|
||||
-->
|
||||
<element name="forcedTypes" type="tns:ForcedTypes" minOccurs="0" maxOccurs="1"/>
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Schemata">
|
||||
<sequence>
|
||||
<!--
|
||||
A configuration element for a single schema in multi-schema
|
||||
environments
|
||||
-->
|
||||
<element name="schema" type="tns:Schema" minOccurs="1" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Schema">
|
||||
<all>
|
||||
<!-- See also database/inputSchema -->
|
||||
<element name="inputSchema" type="string" default="" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!-- See also database/outputSchema -->
|
||||
<element name="outputSchema" type="string" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="CustomTypes">
|
||||
<sequence>
|
||||
<!-- A configuration element for a custom type -->
|
||||
<element name="customType" type="tns:CustomType" minOccurs="0" maxOccurs="unbounded" />
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="EnumTypes">
|
||||
<sequence>
|
||||
<!-- A configuration element for a synthetic enum type -->
|
||||
<element name="enumType" type="tns:EnumType" minOccurs="0" maxOccurs="unbounded" />
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="ForcedTypes">
|
||||
<sequence>
|
||||
<!-- A configuration element for a forced type override -->
|
||||
<element name="forcedType" type="tns:ForcedType" minOccurs="0" maxOccurs="unbounded" />
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="CustomType">
|
||||
<all>
|
||||
<!-- The name of the custom type -->
|
||||
<element name="name" type="string" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!-- A converter implementation for the custom type -->
|
||||
<element name="converter" type="string" minOccurs="1" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="EnumType">
|
||||
<all>
|
||||
<!-- The name of the synthetic enum type -->
|
||||
<element name="name" type="string" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!-- A comma separated (CSV format) list of enum literals -->
|
||||
<element name="literals" type="string" minOccurs="1" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="ForcedType">
|
||||
<all>
|
||||
<!-- The name of the type to be forced upon various artefacts -->
|
||||
<element name="name" type="string" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
A Java regular expression matching columns, parameters, attributes,
|
||||
etc to be forced to have this type. If provided, both "expressions" and
|
||||
"types" must match.
|
||||
-->
|
||||
<element name="expression" type="string" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
The same as expression. This is kept for backwards compatibility reasons.
|
||||
-->
|
||||
<element name="expressions" type="string" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
A Java regular expression matching data types to be forced to have this
|
||||
type. If provided, both "expressions" and "types" must match.
|
||||
-->
|
||||
<element name="types" type="string" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Generate">
|
||||
<all>
|
||||
<!--
|
||||
Primary key / foreign key relations should be generated and used.
|
||||
This is a prerequisite for various advanced features
|
||||
-->
|
||||
<element name="relations" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!-- Generate deprecated code for backwards compatibility -->
|
||||
<element name="deprecated" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Do not reuse this property. It is deprecated as of jOOQ 3.3.0
|
||||
-->
|
||||
<element name="instanceFields" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate the javax.annotation.Generated annotation to indicate
|
||||
jOOQ version used for source code
|
||||
-->
|
||||
<element name="generatedAnnotation" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate TableRecord classes. Disable this when you don't
|
||||
need the additional type-safety
|
||||
-->
|
||||
<element name="records" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate POJOs for usage of the ResultQuery.fetchInto(Class) API
|
||||
-->
|
||||
<element name="pojos" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate immutable POJOs for usage of the ResultQuery.fetchInto(Class) API
|
||||
This overrides any value set in <pojos/>
|
||||
-->
|
||||
<element name="immutablePojos" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate interfaces that will be implemented by records and/or pojos.
|
||||
You can also use these interfaces in Record.into(Class<?>) and similar
|
||||
methods, to let jOOQ return proxy objects for them.
|
||||
-->
|
||||
<element name="interfaces" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate DAOs in addition to POJO classes
|
||||
-->
|
||||
<element name="daos" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Annotate POJOs and Records with JPA annotations for increased
|
||||
compatibility and better integration with JPA/Hibernate, etc
|
||||
-->
|
||||
<element name="jpaAnnotations" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Annotate POJOs and Records with JSR-303 validation annotations
|
||||
-->
|
||||
<element name="validationAnnotations" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Allow to turn off the generation of global object references, which include
|
||||
|
||||
- Tables.java
|
||||
- Sequences.java
|
||||
- UDTs.java
|
||||
|
||||
Turning off the generation of the above files may be necessary for very
|
||||
large schemas, which exceed the amount of allowed constants in a class's
|
||||
constant pool (64k) or, whose static initialiser would exceed 64k of
|
||||
byte code
|
||||
-->
|
||||
<element name="globalObjectReferences" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate fluent setters in
|
||||
|
||||
- records
|
||||
- pojos
|
||||
- interfaces
|
||||
|
||||
Fluent setters are against the JavaBeans specification, but can be quite
|
||||
useful to those users who do not depend on EL, JSP, JSF, etc.
|
||||
-->
|
||||
<element name="fluentSetters" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
<complexType name="Target">
|
||||
<all>
|
||||
<!--
|
||||
The destination package of your generated classes (within the
|
||||
destination directory)
|
||||
|
||||
jOOQ may append the schema name to this package if generating multiple schemas,
|
||||
e.g. org.jooq.generated.schema1
|
||||
org.jooq.generated.schema2
|
||||
-->
|
||||
<element name="packageName" type="string" default="org.jooq.generated" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!-- The destination directory of your generated classes -->
|
||||
<element name="directory" type="string" default="target/generated-sources/jooq" />
|
||||
</all>
|
||||
</complexType>
|
||||
</schema>
|
||||
Loading…
Reference in New Issue
Block a user