You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by to...@apache.org on 2008/01/16 09:14:01 UTC

svn commit: r612383 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql: MySQLAdapter.java MySQLMergerFactory.java

Author: torehalset
Date: Wed Jan 16 00:13:59 2008
New Revision: 612383

URL: http://svn.apache.org/viewvc?rev=612383&view=rev
Log:
CAY-885: merge changes between model and db
added support for mysql

Added:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLMergerFactory.java
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java?rev=612383&r1=612382&r2=612383&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java Wed Jan 16 00:13:59 2008
@@ -39,6 +39,7 @@
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.Relationship;
+import org.apache.cayenne.merge.MergerFactory;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.SQLAction;
 
@@ -57,7 +58,7 @@
  * <h3>Sample Connection Settings</h3>
  * <ul>
  * <li>Adapter name: org.apache.cayenne.dba.mysql.MySQLAdapter</li>
- * <li>DB URL: jdbc: mysql://serverhostname/dbname</li>
+ * <li>DB URL: jdbc:mysql://serverhostname/dbname</li>
  * <li>Driver Class: com.mysql.jdbc.Driver</li>
  * </ul>
  * 
@@ -285,6 +286,11 @@
         if (column.isGenerated()) {
             sqlBuffer.append(" AUTO_INCREMENT");
         }
+    }
+    
+    @Override
+    public MergerFactory mergerFactory() {
+        return new MySQLMergerFactory();
     }
 
     final class PKComparator implements Comparator<DbAttribute> {

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLMergerFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLMergerFactory.java?rev=612383&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLMergerFactory.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLMergerFactory.java Wed Jan 16 00:13:59 2008
@@ -0,0 +1,80 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.
+ ****************************************************************/
+package org.apache.cayenne.dba.mysql;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.merge.DropRelationshipToDb;
+import org.apache.cayenne.merge.MergerFactory;
+import org.apache.cayenne.merge.MergerToken;
+import org.apache.cayenne.merge.SetColumnTypeToDb;
+
+public class MySQLMergerFactory extends MergerFactory {
+
+    @Override
+    public MergerToken createSetColumnTypeToDb(
+            final DbEntity entity,
+            DbAttribute columnOriginal,
+            final DbAttribute columnNew) {
+
+        return new SetColumnTypeToDb(entity, columnOriginal, columnNew) {
+
+            @Override
+            protected void appendPrefix(StringBuffer sqlBuffer) {
+                // http://dev.mysql.com/tech-resources/articles/mysql-cluster-50.html
+                sqlBuffer.append("ALTER TABLE ");
+                sqlBuffer.append(entity.getFullyQualifiedName());
+                sqlBuffer.append(" MODIFY ");
+                sqlBuffer.append(columnNew.getName());
+                sqlBuffer.append(" ");
+            }
+
+        };
+    }
+
+    @Override
+    public MergerToken createDropRelationshipToDb(final DbEntity entity, DbRelationship rel) {
+        
+        return new DropRelationshipToDb(entity, rel) {
+
+            @Override
+            public List<String> createSql(DbAdapter adapter) {
+                String fkName = getFkName();
+
+                if (fkName == null) {
+                    return Collections.emptyList();
+                }
+
+                StringBuilder buf = new StringBuilder();
+                // http://dev.mysql.com/tech-resources/articles/mysql-cluster-50.html
+                buf.append("ALTER TABLE ");
+                buf.append(entity.getFullyQualifiedName());
+                buf.append(" DROP FOREIGN KEY ");
+                buf.append(fkName);
+
+                return Collections.singletonList(buf.toString());
+            }
+        };
+    }
+}