Repository: cayenne Updated Branches: refs/heads/master 72aa17ac8 -> 7ac907182
CAY-2222 MySQLAdapter should not create indexes on FK columns * side effect - we no longer attempt to guess whether "FKs are supported". It wasn't a reliable switch to begin with, as it checked for InnoDB support at the DB level, while individual tables may have been MyISAM. So now it always assumes FKs are supported, leaving it up to the user to skip FK constraint generation Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/7ac90718 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/7ac90718 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/7ac90718 Branch: refs/heads/master Commit: 7ac90718218fe62df81b7c355adf1dc27b52173e Parents: 72aa17a Author: Andrus Adamchik <[email protected]> Authored: Thu Feb 9 12:35:46 2017 +1100 Committer: Andrus Adamchik <[email protected]> Committed: Thu Feb 9 13:02:37 2017 +1100 ---------------------------------------------------------------------- .../apache/cayenne/dba/mysql/MySQLAdapter.java | 57 +++++--------------- .../apache/cayenne/dba/mysql/MySQLSniffer.java | 13 ++--- docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 + 3 files changed, 19 insertions(+), 52 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/7ac90718/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java index f18d808..bc4191d 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java @@ -42,7 +42,6 @@ import org.apache.cayenne.dba.TypesMapping; import org.apache.cayenne.di.Inject; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.map.DbRelationship; import org.apache.cayenne.map.EntityResolver; import org.apache.cayenne.query.Query; import org.apache.cayenne.query.SQLAction; @@ -87,7 +86,6 @@ public class MySQLAdapter extends JdbcAdapter { static final String MYSQL_QUOTE_SQL_IDENTIFIERS_CHAR_END = "`"; protected String storageEngine; - protected boolean supportsFkConstraints; public MySQLAdapter(@Inject RuntimeProperties runtimeProperties, @Inject(Constants.SERVER_DEFAULT_TYPES_LIST) List<ExtendedType> defaultExtendedTypes, @@ -100,15 +98,10 @@ public class MySQLAdapter extends JdbcAdapter { this.storageEngine = DEFAULT_STORAGE_ENGINE; setSupportsBatchUpdates(true); - setSupportsFkConstraints(true); setSupportsUniqueConstraints(true); setSupportsGeneratedKeys(true); } - void setSupportsFkConstraints(boolean flag) { - this.supportsFkConstraints = flag; - } - @Override protected QuotingStrategy createQuotingStrategy() { return new DefaultQuotingStrategy("`", "`"); @@ -290,43 +283,19 @@ public class MySQLAdapter extends JdbcAdapter { Iterator<DbAttribute> pkit = pkList.iterator(); if (pkit.hasNext()) { - sqlBuffer.append(", PRIMARY KEY ("); - boolean firstPk = true; - while (pkit.hasNext()) { - if (firstPk) - firstPk = false; - else - sqlBuffer.append(", "); - - DbAttribute at = pkit.next(); - sqlBuffer.append(quotingStrategy.quotedName(at)); - } - sqlBuffer.append(')'); - } - - // if FK constraints are supported, we must add indices to all FKs - // Note that according to MySQL docs, FK indexes are created - // automatically when - // constraint is defined, starting at MySQL 4.1.2 - if (supportsFkConstraints) { - for (DbRelationship r : entity.getRelationships()) { - if (r.getJoins().size() > 0 && r.isToPK() && !r.isToDependentPK()) { - - sqlBuffer.append(", KEY ("); - - Iterator<DbAttribute> columns = r.getSourceAttributes().iterator(); - DbAttribute column = columns.next(); - sqlBuffer.append(quotingStrategy.quotedName(column)); - - while (columns.hasNext()) { - column = columns.next(); - sqlBuffer.append(", ").append(quotingStrategy.quotedName(column)); - } - - sqlBuffer.append(")"); - } - } - } + sqlBuffer.append(", PRIMARY KEY ("); + boolean firstPk = true; + while (pkit.hasNext()) { + if (firstPk) + firstPk = false; + else + sqlBuffer.append(", "); + + DbAttribute at = pkit.next(); + sqlBuffer.append(quotingStrategy.quotedName(at)); + } + sqlBuffer.append(')'); + } } /** http://git-wip-us.apache.org/repos/asf/cayenne/blob/7ac90718/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLSniffer.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLSniffer.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLSniffer.java index 2917fa2..be5334d 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLSniffer.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLSniffer.java @@ -19,16 +19,16 @@ package org.apache.cayenne.dba.mysql; -import java.sql.DatabaseMetaData; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; - import org.apache.cayenne.configuration.server.DbAdapterDetector; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.di.AdhocObjectFactory; import org.apache.cayenne.di.Inject; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + /** * Detects MySQL database from JDBC metadata. * @@ -51,7 +51,6 @@ public class MySQLSniffer implements DbAdapterDetector { // if InnoDB is used as a default engine, allow PK - boolean supportFK = false; String adapterStorageEngine = MySQLAdapter.DEFAULT_STORAGE_ENGINE; try (Statement statement = md.getConnection().createStatement();) { @@ -67,14 +66,12 @@ public class MySQLSniffer implements DbAdapterDetector { String storageEngine = rs.getString(2); if (storageEngine != null) { adapterStorageEngine = storageEngine; - supportFK = storageEngine.toUpperCase().equals("INNODB"); } } } } MySQLAdapter adapter = objectFactory.newInstance(MySQLAdapter.class, MySQLAdapter.class.getName()); - adapter.setSupportsFkConstraints(supportFK); adapter.setStorageEngine(adapterStorageEngine); return adapter; } http://git-wip-us.apache.org/repos/asf/cayenne/blob/7ac90718/docs/doc/src/main/resources/RELEASE-NOTES.txt ---------------------------------------------------------------------- diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt index 8bca047..4d59c51 100644 --- a/docs/doc/src/main/resources/RELEASE-NOTES.txt +++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt @@ -75,6 +75,7 @@ CAY-2133 ObjectNameGenerator refactoring - unifying relationship name generation CAY-2135 cdbimport: reset DbEntity catalogs / schemas to DataMap defaults CAY-2136 Allow Ordering.orderedList(â¦) methods to accept a Collection rather than only a List CAY-2160 Modeler: new welcome screen +CAY-2222 MySQLAdapter should not create indexes on FK columns Bug Fixes:
