From 2cc51949ea57c91e20a5329f972ae321e054f318 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 4 Jul 2016 15:16:33 +0200 Subject: [PATCH] [#5360] [#5373] Add regular expression to code generator configuration --- .../java/org/jooq/util/AbstractDatabase.java | 31 +++++++++---------- .../jooq/util/AbstractTableDefinition.java | 17 ---------- .../src/main/java/org/jooq/util/Database.java | 24 +++++++------- .../jooq/util/DefaultColumnDefinition.java | 10 +++++- .../util/cubrid/CUBRIDTableDefinition.java | 2 +- .../jooq/util/derby/DerbyTableDefinition.java | 2 +- .../org/jooq/util/h2/H2TableDefinition.java | 2 +- .../util/hsqldb/HSQLDBTableDefinition.java | 2 +- .../jooq/util/mysql/MySQLTableDefinition.java | 2 +- .../PostgresMaterializedViewDefinition.java | 2 +- .../postgres/PostgresTableDefinition.java | 2 +- .../postgres/PostgresTableValuedFunction.java | 4 +-- .../util/sqlite/SQLiteTableDefinition.java | 2 +- .../main/resources/xsd/jooq-codegen-3.9.0.xsd | 12 +++---- 14 files changed, 51 insertions(+), 63 deletions(-) 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 3edaac17e3..ba6de1c218 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java @@ -52,7 +52,6 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; -import static java.util.Collections.singletonList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -121,8 +120,8 @@ public abstract class AbstractDatabase implements Database { private String[] recordVersionFields; private String[] recordTimestampFields; private String[] syntheticPrimaryKeys; - private String[] syntheticIdentities; private String[] overridePrimaryKeys; + private String[] syntheticIdentities; private boolean supportsUnsignedTypes; private boolean ignoreProcedureReturnValues; private boolean dateAsTimestamp; @@ -690,21 +689,6 @@ public abstract class AbstractDatabase implements Database { return syntheticPrimaryKeys; } - @Override - public void setSyntheticIdentities(String[] syntheticIdentities) { - if (syntheticIdentities.length > 0 && !syntheticIdentities[0].isEmpty()) { - this.syntheticIdentities = syntheticIdentities; - } - } - - @Override - public final boolean isSyntheticIdentity(ColumnDefinition columnDefinition) { - if (syntheticIdentities == null) { - return false; - } - return !filterExcludeInclude(singletonList(columnDefinition), null, syntheticIdentities, filters).isEmpty(); - } - @Override public void setOverridePrimaryKeys(String[] overridePrimaryKeys) { this.overridePrimaryKeys = overridePrimaryKeys; @@ -719,6 +703,19 @@ public abstract class AbstractDatabase implements Database { return overridePrimaryKeys; } + @Override + public void setSyntheticIdentities(String[] syntheticIdentities) { + this.syntheticIdentities = syntheticIdentities; + } + + @Override + public final String[] getSyntheticIdentities() { + if (syntheticIdentities == null) { + syntheticIdentities = new String[0]; + } + return syntheticIdentities; + } + @Override public final void setConfiguredEnumTypes(List configuredEnumTypes) { this.configuredEnumTypes = configuredEnumTypes; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java index fc05ea5359..9d590d447f 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractTableDefinition.java @@ -50,7 +50,6 @@ import java.util.List; import org.jooq.Record; import org.jooq.Table; -import org.jooq.tools.JooqLogger; /** * A base implementation for table definitions. @@ -61,8 +60,6 @@ public abstract class AbstractTableDefinition extends AbstractElementContainerDefinition implements TableDefinition { - private static final JooqLogger log = JooqLogger.getLogger(AbstractTableDefinition.class); - private List parameters; private TableDefinition parentTable; private List childTables; @@ -178,18 +175,4 @@ implements TableDefinition { protected List getParameters0() { return Collections.emptyList(); } - - protected ColumnDefinition applySyntheticIdentities(ColumnDefinition columnDefinition) { - if (!columnDefinition.isIdentity() && getDatabase().isSyntheticIdentity(columnDefinition)) { - log.info("Synthetic Identity: " + columnDefinition.getQualifiedName()); - return new DefaultColumnDefinition( - columnDefinition.getContainer(), - columnDefinition.getName(), - columnDefinition.getPosition(), - columnDefinition.getType(), - true, - columnDefinition.getComment()); - } - return columnDefinition; - } } 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 a3b6da63bb..394ccf3486 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Database.java @@ -424,18 +424,6 @@ public interface Database { */ String[] getSyntheticPrimaryKeys(); - /** - * Columns matching these regular expressions will be considered as identity - * columns in generated code. - */ - void setSyntheticIdentities(String[] syntheticIdentityPattern); - - /** - * Returns true if the given column is considered a synthetic identity column - * as defined by the pattern(s) passed to setSyntheticIdentities [#5360] - */ - boolean isSyntheticIdentity(ColumnDefinition columnDefinition); - /** * Unique keys matching these regular expressions will be considered as * primary keys in generated code. @@ -448,6 +436,18 @@ public interface Database { */ String[] getOverridePrimaryKeys(); + /** + * Columns matching these regular expressions will be considered as identity + * columns in generated code. + */ + void setSyntheticIdentities(String[] syntheticIdentities); + + /** + * Columns matching these regular expressions will be considered as identity + * columns in generated code. + */ + String[] getSyntheticIdentities(); + /** * Database objects matching any of these field names will be generated as * custom types. diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java index 8f75d111d5..469e0eedc1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java @@ -41,6 +41,8 @@ package org.jooq.util; +import static java.util.Collections.singletonList; + import java.util.List; /** @@ -61,7 +63,13 @@ public class DefaultColumnDefinition super(table, name, position, type, comment); this.position = position; - this.isIdentity = isIdentity; + this.isIdentity = isIdentity || isSyntheticIdentity(this); + } + + private static boolean isSyntheticIdentity(DefaultColumnDefinition column) { + AbstractDatabase db = (AbstractDatabase) column.getDatabase(); + String[] syntheticIdentities = db.getSyntheticIdentities(); + return !db.filterExcludeInclude(singletonList(column), null, syntheticIdentities, db.getFilters()).isEmpty(); } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/util/cubrid/CUBRIDTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/cubrid/CUBRIDTableDefinition.java index ae95e5876d..7533c72955 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/cubrid/CUBRIDTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/cubrid/CUBRIDTableDefinition.java @@ -110,7 +110,7 @@ public class CUBRIDTableDefinition extends AbstractTableDefinition { null ); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/derby/DerbyTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/derby/DerbyTableDefinition.java index 29c377f7e7..c42d82960d 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/derby/DerbyTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/derby/DerbyTableDefinition.java @@ -110,7 +110,7 @@ public class DerbyTableDefinition extends AbstractTableDefinition { null ); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/h2/H2TableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/h2/H2TableDefinition.java index 668b633948..00f10a6846 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/h2/H2TableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/h2/H2TableDefinition.java @@ -112,7 +112,7 @@ public class H2TableDefinition extends AbstractTableDefinition { || defaultString(record.get(Columns.COLUMN_DEFAULT)).trim().toLowerCase().startsWith("nextval"), record.get(Columns.REMARKS)); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBTableDefinition.java index 2c170c33c7..c8f4a489a4 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBTableDefinition.java @@ -118,7 +118,7 @@ public class HSQLDBTableDefinition extends AbstractTableDefinition { null ); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLTableDefinition.java index 3a13e92227..de1bb355d2 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLTableDefinition.java @@ -122,7 +122,7 @@ public class MySQLTableDefinition extends AbstractTableDefinition { record.get(Columns.COLUMN_COMMENT) ); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresMaterializedViewDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresMaterializedViewDefinition.java index 0dc98996db..9ab20c9e73 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresMaterializedViewDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresMaterializedViewDefinition.java @@ -187,7 +187,7 @@ public class PostgresMaterializedViewDefinition extends AbstractTableDefinition record.get(PG_DESCRIPTION.DESCRIPTION) ); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableDefinition.java index 33d7b9f9c4..1738c5f970 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableDefinition.java @@ -126,7 +126,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition { record.get(PG_DESCRIPTION.DESCRIPTION) ); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableValuedFunction.java b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableValuedFunction.java index a3d90b5f66..e67692ea14 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableValuedFunction.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresTableValuedFunction.java @@ -198,8 +198,8 @@ public class PostgresTableValuedFunction extends AbstractTableDefinition { null ); - result.add(applySyntheticIdentities(column)); - } + result.add(column); + } return result; } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java index f320f78362..398ed0267e 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java @@ -108,7 +108,7 @@ public class SQLiteTableDefinition extends AbstractTableDefinition { null ); - result.add(applySyntheticIdentities(column)); + result.add(column); } return result; diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.9.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.9.0.xsd index 7ecdc7205a..39674005de 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.9.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.9.0.xsd @@ -438,12 +438,6 @@ --> - - - + + +