You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2017/02/09 02:23:44 UTC

cayenne git commit: CAY-2222 MySQLAdapter should not create indexes on FK columns

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 <an...@objectstyle.com>
Authored: Thu Feb 9 12:35:46 2017 +1100
Committer: Andrus Adamchik <an...@objectstyle.com>
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(\u2026) 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: