From d1db55a5562bc02e96bf1ff16b99ef653647c93c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 25 Jul 2014 16:38:44 +0200 Subject: [PATCH] [#3451] Add XMLDatabase to generate a database schema from an XML file - First draft --- .../java/org/jooq/util/GenerationTool.java | 20 +- .../java/org/jooq/util/JavaGenerator.java | 8 +- jOOQ-meta/pom.xml | 56 +- .../java/org/jooq/util/AbstractDatabase.java | 11 + .../src/main/java/org/jooq/util/Database.java | 6 + .../java/org/jooq/util/xml/XMLDatabase.java | 210 ++++++ .../org/jooq/util/xml/XMLTableDefinition.java | 110 +++ .../main/resources/xjb/codegen/binding.xjb | 27 + .../src/main/resources/xjb/meta/binding.xjb | 27 + .../main/resources/xsd/jooq-codegen-3.5.0.xsd | 692 ++++++++++++++++++ .../main/resources/xsd/jooq-meta-3.5.0.xsd | 85 +++ jOOQ-test/pom.xml | 160 ++++ jOOQ-test/src/main/resources/database.xml | 36 + .../test/oracle4/generatedclasses/Keys.java | 33 + .../oracle4/generatedclasses/Sequences.java | 18 + .../test/oracle4/generatedclasses/Tables.java | 18 + .../test/oracle4/generatedclasses/Test.java | 49 ++ .../generatedclasses/tables/TAuthor.java | 68 ++ .../tables/pojos/TAuthor.java | 35 + .../tables/records/TAuthorRecord.java | 104 +++ 20 files changed, 1760 insertions(+), 13 deletions(-) create mode 100644 jOOQ-meta/src/main/java/org/jooq/util/xml/XMLDatabase.java create mode 100644 jOOQ-meta/src/main/java/org/jooq/util/xml/XMLTableDefinition.java create mode 100644 jOOQ-meta/src/main/resources/xjb/codegen/binding.xjb create mode 100644 jOOQ-meta/src/main/resources/xjb/meta/binding.xjb create mode 100644 jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd create mode 100644 jOOQ-meta/src/main/resources/xsd/jooq-meta-3.5.0.xsd create mode 100644 jOOQ-test/src/main/resources/database.xml create mode 100644 jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Keys.java create mode 100644 jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Sequences.java create mode 100644 jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Tables.java create mode 100644 jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Test.java create mode 100644 jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/TAuthor.java create mode 100644 jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/pojos/TAuthor.java create mode 100644 jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/records/TAuthorRecord.java diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java index 451fd649e4..d6ee5cb0ac 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -189,15 +189,10 @@ public class GenerationTool { // Initialise connection // --------------------- - if (connection == null) { - errorIfNull(j, "The tag is mandatory."); + if (connection == null && j != null) { Class driver = (Class) loadClass(driverClass(j)); - Properties properties = new Properties(); - for (Property p : j.getProperties()) { - properties.put(p.getKey(), p.getValue()); - } - + Properties properties = properties(j.getProperties()); if (!properties.containsKey("user")) properties.put("user", defaultString(j.getUser())); if (!properties.containsKey("password")) @@ -246,6 +241,7 @@ public class GenerationTool { ? databaseClass(j) : (Class) loadClass(databaseName); Database database = databaseClass.newInstance(); + database.setProperties(properties(d.getProperties())); List schemata = d.getSchemata(); @@ -384,6 +380,16 @@ public class GenerationTool { } } + private Properties properties(List properties) { + Properties result = new Properties(); + + for (Property p : properties) { + result.put(p.getKey(), p.getValue()); + } + + return result; + } + private String driverClass(Jdbc j) { String result = j.getDriver(); diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index d559e82f92..e13b349fae 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -46,6 +46,7 @@ import static org.jooq.tools.StringUtils.defaultString; import java.io.File; import java.lang.reflect.TypeVariable; +import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; @@ -141,9 +142,12 @@ public class JavaGenerator extends AbstractGenerator { public final void generate(Database db) { this.database = db; - String url = null; + String url = ""; try { - url = database.getConnection().getMetaData().getURL(); + Connection connection = database.getConnection(); + + if (connection != null) + url = connection.getMetaData().getURL(); } catch (SQLException ignore) {} diff --git a/jOOQ-meta/pom.xml b/jOOQ-meta/pom.xml index 41798b2e01..73257f4a81 100644 --- a/jOOQ-meta/pom.xml +++ b/jOOQ-meta/pom.xml @@ -37,7 +37,7 @@ 0.8.1 - configuration + codegen generate @@ -46,9 +46,9 @@ true false src/main/resources/xsd - src/main/resources/xjb + src/main/resources/xjb/codegen - jooq-codegen-3.4.0.xsd + jooq-codegen-3.5.0.xsd org.jooq.util.jaxb @@ -79,7 +79,55 @@ org.jvnet.jaxb2_commons jaxb2-basics-annotate 0.6.2 - + + + + + + + xml + + generate + + + true + true + false + src/main/resources/xsd + src/main/resources/xjb/meta + + jooq-meta-3.5.0.xsd + + org.jooq.util.xml.jaxb + + -Xxew + -Xxew:instantiate lazy + -Xxew:delete + -Xfluent-api + -Xdefault-value + -Xannotate + + + + com.github.jaxb-xew-plugin + jaxb-xew-plugin + 1.0 + + + org.jvnet.jaxb2_commons + jaxb2-fluent-api + 3.0 + + + org.jvnet.jaxb2_commons + jaxb2-default-value + 1.1 + + + org.jvnet.jaxb2_commons + jaxb2-basics-annotate + 0.6.2 + diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java index 967dbd98f2..81b323b9f9 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java @@ -55,6 +55,7 @@ import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.regex.Pattern; import javax.xml.bind.JAXB; @@ -86,6 +87,7 @@ public abstract class AbstractDatabase implements Database { // Configuration elements // ------------------------------------------------------------------------- + private Properties properties; private SQLDialect dialect; private Connection connection; private DSLContext create; @@ -283,6 +285,15 @@ public abstract class AbstractDatabase implements Database { this.configuredSchemata = schemata; } + @Override + public final void setProperties(Properties properties) { + this.properties = properties; + } + + public final Properties getProperties() { + return properties; + } + @Override public final void setExcludes(String[] excludes) { this.excludes = excludes; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/Database.java b/jOOQ-meta/src/main/java/org/jooq/util/Database.java index 973a70ec32..d345ca8400 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Database.java @@ -43,6 +43,7 @@ package org.jooq.util; import java.sql.Connection; import java.util.List; +import java.util.Properties; import org.jooq.DSLContext; import org.jooq.SQLDialect; @@ -375,4 +376,9 @@ public interface Database { * Check for the existence of a table in the dictionary views. */ boolean exists(Table table); + + /** + * Database properties. + */ + void setProperties(Properties properties); } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/xml/XMLDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/xml/XMLDatabase.java new file mode 100644 index 0000000000..865cee1978 --- /dev/null +++ b/jOOQ-meta/src/main/java/org/jooq/util/xml/XMLDatabase.java @@ -0,0 +1,210 @@ +/** + * Copyright (c) 2009-2014, Data Geekery GmbH (http://www.datageekery.com) + * All rights reserved. + * + * This work is dual-licensed + * - under the Apache Software License 2.0 (the "ASL") + * - under the jOOQ License and Maintenance Agreement (the "jOOQ License") + * ============================================================================= + * You may choose which license applies to you: + * + * - If you're using this work with Open Source databases, you may choose + * either ASL or jOOQ License. + * - If you're using this work with at least one commercial database, you must + * choose jOOQ License + * + * For more information, please visit http://www.jooq.org/licenses + * + * Apache Software License 2.0: + * ----------------------------------------------------------------------------- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * jOOQ License and Maintenance Agreement: + * ----------------------------------------------------------------------------- + * Data Geekery grants the Customer the non-exclusive, timely limited and + * non-transferable license to install and use the Software under the terms of + * the jOOQ License and Maintenance Agreement. + * + * This library is distributed with a LIMITED WARRANTY. See the jOOQ License + * and Maintenance Agreement for more details: http://www.jooq.org/licensing + */ + +package org.jooq.util.xml; + +import java.io.File; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.JAXB; + +import org.jooq.DSLContext; +import org.jooq.SQLDialect; +import org.jooq.impl.DSL; +import org.jooq.util.AbstractDatabase; +import org.jooq.util.ArrayDefinition; +import org.jooq.util.DataTypeDefinition; +import org.jooq.util.DefaultDataTypeDefinition; +import org.jooq.util.DefaultRelations; +import org.jooq.util.DefaultSequenceDefinition; +import org.jooq.util.EnumDefinition; +import org.jooq.util.PackageDefinition; +import org.jooq.util.RoutineDefinition; +import org.jooq.util.SchemaDefinition; +import org.jooq.util.SequenceDefinition; +import org.jooq.util.TableDefinition; +import org.jooq.util.UDTDefinition; +import org.jooq.util.xml.jaxb.InformationSchema; +import org.jooq.util.xml.jaxb.Schema; +import org.jooq.util.xml.jaxb.Sequence; +import org.jooq.util.xml.jaxb.Table; + +/** + * The XML Database. + * + * @author Lukas Eder + */ +public class XMLDatabase extends AbstractDatabase { + + InformationSchema info; + + private InformationSchema info() { + if (info == null) { + info = JAXB.unmarshal(new File(getProperties().getProperty("xml-file")), InformationSchema.class); + } + + return info; + } + + @Override + protected DSLContext create0() { + + @SuppressWarnings("deprecation") + SQLDialect dialect = SQLDialect.SQL99; + + try { + dialect = SQLDialect.valueOf(getProperties().getProperty("dialect")); + } + catch (Exception ignore) {} + + return DSL.using(dialect); + } + + @Override + protected void loadPrimaryKeys(DefaultRelations relations) throws SQLException { + } + + @Override + protected void loadUniqueKeys(DefaultRelations relations) throws SQLException { + } + + @Override + protected void loadForeignKeys(DefaultRelations relations) throws SQLException { + } + + @Override + protected void loadCheckConstraints(DefaultRelations r) throws SQLException { + } + + @Override + protected List getSchemata0() throws SQLException { + List result = new ArrayList(); + + for (Schema schema : info().getSchemata()) { + if (getInputSchemata().contains(schema.getSchemaName())) { + result.add(new SchemaDefinition(this, schema.getSchemaName(), null)); + } + } + + return result; + } + + + @Override + protected List getSequences0() throws SQLException { + List result = new ArrayList(); + + for (Sequence sequence : info().getSequences()) { + if (getInputSchemata().contains(sequence.getSequenceSchema())) { + SchemaDefinition schema = getSchema(sequence.getSequenceSchema()); + DataTypeDefinition type = new DefaultDataTypeDefinition( + this, + schema, + sequence.getDataType(), + sequence.getCharacterMaximumLength(), + sequence.getNumericPrecision(), + sequence.getNumericScale(), + false, + false + ); + + result.add(new DefaultSequenceDefinition(schema, sequence.getSequenceName(), type)); + } + } + + return result; + } + + @Override + protected List getTables0() throws SQLException { + List result = new ArrayList(); + + for (Table table : info().getTables()) { + if (getInputSchemata().contains(table.getTableSchema())) { + SchemaDefinition schema = getSchema(table.getTableSchema()); + + result.add(new XMLTableDefinition(schema, info(), table)); + } + } + + return result; + } + + @Override + protected List getEnums0() throws SQLException { + List result = new ArrayList(); + return result; + } + + @Override + protected List getUDTs0() throws SQLException { + List result = new ArrayList(); + return result; + } + + @Override + protected List getArrays0() throws SQLException { + List result = new ArrayList(); + return result; + } + + @Override + protected List getRoutines0() throws SQLException { + List result = new ArrayList(); + return result; + } + + @Override + protected List getPackages0() throws SQLException { + List result = new ArrayList(); + return result; + } + + static int unbox(Integer i) { + return i == null ? 0 : i.intValue(); + } + + static long unbox(Long l) { + return l == null ? 0L : l.longValue(); + } +} diff --git a/jOOQ-meta/src/main/java/org/jooq/util/xml/XMLTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/xml/XMLTableDefinition.java new file mode 100644 index 0000000000..67d7033370 --- /dev/null +++ b/jOOQ-meta/src/main/java/org/jooq/util/xml/XMLTableDefinition.java @@ -0,0 +1,110 @@ +/** + * Copyright (c) 2009-2014, Data Geekery GmbH (http://www.datageekery.com) + * All rights reserved. + * + * This work is dual-licensed + * - under the Apache Software License 2.0 (the "ASL") + * - under the jOOQ License and Maintenance Agreement (the "jOOQ License") + * ============================================================================= + * You may choose which license applies to you: + * + * - If you're using this work with Open Source databases, you may choose + * either ASL or jOOQ License. + * - If you're using this work with at least one commercial database, you must + * choose jOOQ License + * + * For more information, please visit http://www.jooq.org/licenses + * + * Apache Software License 2.0: + * ----------------------------------------------------------------------------- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * jOOQ License and Maintenance Agreement: + * ----------------------------------------------------------------------------- + * Data Geekery grants the Customer the non-exclusive, timely limited and + * non-transferable license to install and use the Software under the terms of + * the jOOQ License and Maintenance Agreement. + * + * This library is distributed with a LIMITED WARRANTY. See the jOOQ License + * and Maintenance Agreement for more details: http://www.jooq.org/licensing + */ +package org.jooq.util.xml; + +import static org.jooq.util.xml.XMLDatabase.unbox; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.jooq.tools.StringUtils; +import org.jooq.util.AbstractTableDefinition; +import org.jooq.util.ColumnDefinition; +import org.jooq.util.DataTypeDefinition; +import org.jooq.util.DefaultColumnDefinition; +import org.jooq.util.DefaultDataTypeDefinition; +import org.jooq.util.SchemaDefinition; +import org.jooq.util.xml.jaxb.Column; +import org.jooq.util.xml.jaxb.InformationSchema; +import org.jooq.util.xml.jaxb.Table; + +/** + * @author Lukas Eder + */ +public class XMLTableDefinition extends AbstractTableDefinition { + + private final InformationSchema info; + private final Table table; + + public XMLTableDefinition(SchemaDefinition schema, InformationSchema info, Table table) { + super(schema, table.getTableName(), ""); + + this.info = info; + this.table = table; + } + + @Override + protected List getElements0() throws SQLException { + List result = new ArrayList(); + + for (Column column : info.getColumns()) { + if (StringUtils.equals(table.getTableCatalog(), column.getTableCatalog()) && + StringUtils.equals(table.getTableSchema(), column.getTableSchema()) && + StringUtils.equals(table.getTableName(), column.getTableName())) { + + SchemaDefinition schema = getDatabase().getSchema(column.getTableSchema()); + + DataTypeDefinition type = new DefaultDataTypeDefinition( + getDatabase(), + schema, + column.getDataType(), + unbox(column.getCharacterMaximumLength()), + unbox(column.getNumericPrecision()), + unbox(column.getNumericScale()), + column.isIsNullable(), + column.getColumnDefault() != null + ); + + result.add(new DefaultColumnDefinition( + this, + column.getColumnName(), + unbox(column.getOrdinalPosition()), + type, + column.getIdentityGeneration() != null, + "" + )); + } + } + + return result; + } +} diff --git a/jOOQ-meta/src/main/resources/xjb/codegen/binding.xjb b/jOOQ-meta/src/main/resources/xjb/codegen/binding.xjb new file mode 100644 index 0000000000..25be9e704b --- /dev/null +++ b/jOOQ-meta/src/main/resources/xjb/codegen/binding.xjb @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jOOQ-meta/src/main/resources/xjb/meta/binding.xjb b/jOOQ-meta/src/main/resources/xjb/meta/binding.xjb new file mode 100644 index 0000000000..20c62cfc6e --- /dev/null +++ b/jOOQ-meta/src/main/resources/xjb/meta/binding.xjb @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd new file mode 100644 index 0000000000..ff802fc2c5 --- /dev/null +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd @@ -0,0 +1,692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-meta-3.5.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-meta-3.5.0.xsd new file mode 100644 index 0000000000..52a32300ee --- /dev/null +++ b/jOOQ-meta/src/main/resources/xsd/jooq-meta-3.5.0.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jOOQ-test/pom.xml b/jOOQ-test/pom.xml index 741e821399..370b556f8c 100644 --- a/jOOQ-test/pom.xml +++ b/jOOQ-test/pom.xml @@ -4237,6 +4237,166 @@ xxxxxxxxxx + xxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxx + xxxxxxxxx + xxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + xxxxxxxxxxxx + xxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxx + xxxxxxxxxxxxxxxxxxxxx + xxxxxxxx + + xxxxxxxxxxxxxxx + xxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxx + xxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxx + xxxxxxxxxx + xxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxx + xxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxx + xxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxx + xxxxxxxxxxx + + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxxxx + + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + + xxxx xxxxxxx xxxxx xx xxxxxxxx xxxxx xxxx xxxxxxxxx xxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxxxxxxx + xxxxxxxxxxx + xxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxx + xxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxxxxx + xxxxxxxxxxxx + xxxxxxxxxxxxx + xxxxxxxxx + xxxxxxxxxx + xxxxxxxx + xxxxxxxxxx + + xxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxx diff --git a/jOOQ-test/src/main/resources/database.xml b/jOOQ-test/src/main/resources/database.xml new file mode 100644 index 0000000000..126d9a98b5 --- /dev/null +++ b/jOOQ-test/src/main/resources/database.xml @@ -0,0 +1,36 @@ + + + + + TEST + + + + + + TEST + T_AUTHOR +
+
+ + + + TEST + T_AUTHOR + ID + NUMBER + 7 + 1 + false + + + + + + TEST + S_AUTHOR_ID + NUMBER + 7 + + +
diff --git a/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Keys.java b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Keys.java new file mode 100644 index 0000000000..65b4ed6b15 --- /dev/null +++ b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Keys.java @@ -0,0 +1,33 @@ +/** + * This class is generated by jOOQ + */ +package org.jooq.test.oracle4.generatedclasses; + +/** + * This class is generated by jOOQ. + * + * A class modelling foreign key relationships between tables of the TEST + * schema + */ +@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Keys { + + // ------------------------------------------------------------------------- + // IDENTITY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // UNIQUE and PRIMARY KEY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // FOREIGN KEY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // [#1459] distribute members to avoid static initialisers > 64kb + // ------------------------------------------------------------------------- +} diff --git a/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Sequences.java b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Sequences.java new file mode 100644 index 0000000000..25f3398101 --- /dev/null +++ b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Sequences.java @@ -0,0 +1,18 @@ +/** + * This class is generated by jOOQ + */ +package org.jooq.test.oracle4.generatedclasses; + +/** + * This class is generated by jOOQ. + * + * Convenience access to all sequences in TEST + */ +@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Sequences { + + /** + * The sequence TEST.S_AUTHOR_ID + */ + public static final org.jooq.Sequence S_AUTHOR_ID = new org.jooq.impl.SequenceImpl("S_AUTHOR_ID", org.jooq.test.oracle4.generatedclasses.Test.TEST, org.jooq.impl.SQLDataType.INTEGER.nullable(false)); +} diff --git a/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Tables.java b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Tables.java new file mode 100644 index 0000000000..eac895fc48 --- /dev/null +++ b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Tables.java @@ -0,0 +1,18 @@ +/** + * This class is generated by jOOQ + */ +package org.jooq.test.oracle4.generatedclasses; + +/** + * This class is generated by jOOQ. + * + * Convenience access to all tables in TEST + */ +@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Tables { + + /** + * The table TEST.T_AUTHOR + */ + public static final org.jooq.test.oracle4.generatedclasses.tables.TAuthor T_AUTHOR = org.jooq.test.oracle4.generatedclasses.tables.TAuthor.T_AUTHOR; +} diff --git a/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Test.java b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Test.java new file mode 100644 index 0000000000..3508780069 --- /dev/null +++ b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/Test.java @@ -0,0 +1,49 @@ +/** + * This class is generated by jOOQ + */ +package org.jooq.test.oracle4.generatedclasses; + +/** + * This class is generated by jOOQ. + */ +@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Test extends org.jooq.impl.SchemaImpl { + + private static final long serialVersionUID = 1552778377; + + /** + * The singleton instance of TEST + */ + public static final Test TEST = new Test(); + + /** + * No further instances allowed + */ + private Test() { + super("TEST"); + } + + @Override + public final java.util.List> getSequences() { + java.util.List result = new java.util.ArrayList(); + result.addAll(getSequences0()); + return result; + } + + private final java.util.List> getSequences0() { + return java.util.Arrays.>asList( + org.jooq.test.oracle4.generatedclasses.Sequences.S_AUTHOR_ID); + } + + @Override + public final java.util.List> getTables() { + java.util.List result = new java.util.ArrayList(); + result.addAll(getTables0()); + return result; + } + + private final java.util.List> getTables0() { + return java.util.Arrays.>asList( + org.jooq.test.oracle4.generatedclasses.tables.TAuthor.T_AUTHOR); + } +} diff --git a/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/TAuthor.java b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/TAuthor.java new file mode 100644 index 0000000000..db2b234f98 --- /dev/null +++ b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/TAuthor.java @@ -0,0 +1,68 @@ +/** + * This class is generated by jOOQ + */ +package org.jooq.test.oracle4.generatedclasses.tables; + +/** + * This class is generated by jOOQ. + */ +@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TAuthor extends org.jooq.impl.TableImpl { + + private static final long serialVersionUID = 799437775; + + /** + * The singleton instance of TEST.T_AUTHOR + */ + public static final org.jooq.test.oracle4.generatedclasses.tables.TAuthor T_AUTHOR = new org.jooq.test.oracle4.generatedclasses.tables.TAuthor(); + + /** + * The class holding records for this type + */ + @Override + public java.lang.Class getRecordType() { + return org.jooq.test.oracle4.generatedclasses.tables.records.TAuthorRecord.class; + } + + /** + * The column TEST.T_AUTHOR.ID. + */ + public final org.jooq.TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * Create a TEST.T_AUTHOR table reference + */ + public TAuthor() { + this("T_AUTHOR", null); + } + + /** + * Create an aliased TEST.T_AUTHOR table reference + */ + public TAuthor(java.lang.String alias) { + this(alias, org.jooq.test.oracle4.generatedclasses.tables.TAuthor.T_AUTHOR); + } + + private TAuthor(java.lang.String alias, org.jooq.Table aliased) { + this(alias, aliased, null); + } + + private TAuthor(java.lang.String alias, org.jooq.Table aliased, org.jooq.Field[] parameters) { + super(alias, org.jooq.test.oracle4.generatedclasses.Test.TEST, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public org.jooq.test.oracle4.generatedclasses.tables.TAuthor as(java.lang.String alias) { + return new org.jooq.test.oracle4.generatedclasses.tables.TAuthor(alias, this); + } + + /** + * Rename this table + */ + public org.jooq.test.oracle4.generatedclasses.tables.TAuthor rename(java.lang.String name) { + return new org.jooq.test.oracle4.generatedclasses.tables.TAuthor(name, null); + } +} diff --git a/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/pojos/TAuthor.java b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/pojos/TAuthor.java new file mode 100644 index 0000000000..cb92384a1b --- /dev/null +++ b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/pojos/TAuthor.java @@ -0,0 +1,35 @@ +/** + * This class is generated by jOOQ + */ +package org.jooq.test.oracle4.generatedclasses.tables.pojos; + +/** + * This class is generated by jOOQ. + */ +@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) +@javax.persistence.Entity +@javax.persistence.Table(name = "T_AUTHOR", schema = "TEST") +public class TAuthor implements java.io.Serializable { + + private static final long serialVersionUID = -2112424480; + + private java.lang.Integer id; + + public TAuthor() {} + + public TAuthor( + java.lang.Integer id + ) { + this.id = id; + } + + @javax.persistence.Column(name = "ID", nullable = false, precision = 7) + @javax.validation.constraints.NotNull + public java.lang.Integer getId() { + return this.id; + } + + public void setId(java.lang.Integer id) { + this.id = id; + } +} diff --git a/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/records/TAuthorRecord.java b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/records/TAuthorRecord.java new file mode 100644 index 0000000000..027331e7ae --- /dev/null +++ b/jOOQ-test/src/test/java/org/jooq/test/oracle4/generatedclasses/tables/records/TAuthorRecord.java @@ -0,0 +1,104 @@ +/** + * This class is generated by jOOQ + */ +package org.jooq.test.oracle4.generatedclasses.tables.records; + +/** + * This class is generated by jOOQ. + */ +@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) +@javax.persistence.Entity +@javax.persistence.Table(name = "T_AUTHOR", schema = "TEST") +public class TAuthorRecord extends org.jooq.impl.TableRecordImpl implements org.jooq.Record1 { + + private static final long serialVersionUID = -115873836; + + /** + * Setter for TEST.T_AUTHOR.ID. + */ + public void setId(java.lang.Integer value) { + setValue(0, value); + } + + /** + * Getter for TEST.T_AUTHOR.ID. + */ + @javax.persistence.Column(name = "ID", nullable = false, precision = 7) + @javax.validation.constraints.NotNull + public java.lang.Integer getId() { + return (java.lang.Integer) getValue(0); + } + + // ------------------------------------------------------------------------- + // Record1 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public org.jooq.Row1 fieldsRow() { + return (org.jooq.Row1) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public org.jooq.Row1 valuesRow() { + return (org.jooq.Row1) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public org.jooq.Field field1() { + return org.jooq.test.oracle4.generatedclasses.tables.TAuthor.T_AUTHOR.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public java.lang.Integer value1() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public TAuthorRecord value1(java.lang.Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TAuthorRecord values(java.lang.Integer value1) { + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TAuthorRecord + */ + public TAuthorRecord() { + super(org.jooq.test.oracle4.generatedclasses.tables.TAuthor.T_AUTHOR); + } + + /** + * Create a detached, initialised TAuthorRecord + */ + public TAuthorRecord(java.lang.Integer id) { + super(org.jooq.test.oracle4.generatedclasses.tables.TAuthor.T_AUTHOR); + + setValue(0, id); + } +}