You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ol...@apache.org on 2012/02/20 16:28:47 UTC

svn commit: r1291311 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres: IngresAdapter.java IngresMergerFactory.java

Author: oltka
Date: Mon Feb 20 15:28:46 2012
New Revision: 1291311

URL: http://svn.apache.org/viewvc?rev=1291311&view=rev
Log:
CAY-1666 added ingres syntax (for ingres) when change column to null and not null

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresMergerFactory.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java?rev=1291311&r1=1291310&r2=1291311&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java Mon Feb 20 15:28:46 2012
@@ -40,8 +40,6 @@ import org.apache.cayenne.dba.TypesMappi
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbJoin;
-import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.merge.MergerFactory;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.SQLAction;
@@ -68,7 +66,7 @@ public class IngresAdapter extends JdbcA
         super(runtimeProperties, defaultExtendedTypes, userExtendedTypes, extendedTypeFactories);
         setSupportsUniqueConstraints(true);
         setSupportsGeneratedKeys(true);
-    }
+    }  
   
     @Override
     public QualifierTranslator getQualifierTranslator(QueryAssembler queryAssembler) {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresMergerFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresMergerFactory.java?rev=1291311&r1=1291310&r2=1291311&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresMergerFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresMergerFactory.java Mon Feb 20 15:28:46 2012
@@ -23,6 +23,7 @@ import java.util.List;
 
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.dba.QuotingStrategy;
+import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbJoin;
@@ -32,7 +33,9 @@ import org.apache.cayenne.merge.DropColu
 import org.apache.cayenne.merge.DropRelationshipToDb;
 import org.apache.cayenne.merge.MergerFactory;
 import org.apache.cayenne.merge.MergerToken;
+import org.apache.cayenne.merge.SetAllowNullToDb;
 import org.apache.cayenne.merge.SetColumnTypeToDb;
+import org.apache.cayenne.merge.SetNotNullToDb;
 
 
 public class IngresMergerFactory extends MergerFactory {
@@ -83,10 +86,8 @@ public class IngresMergerFactory extends
         return new AddRelationshipToDb(entity, rel) {
             @Override
             public List<String> createSql(DbAdapter adapter) {
-              
               if (!rel.isToMany() && rel.isToPK() && !rel.isToDependentPK()) {
                   
-                  
                 DbEntity source = (DbEntity) rel.getSourceEntity();
                 boolean status = (source.getDataMap() != null && source.getDataMap().isQuotingSQLIdentifiers());
                 QuotingStrategy context = adapter.getQuotingStrategy(status);
@@ -124,6 +125,9 @@ public class IngresMergerFactory extends
                 buf.append(" (");
                 buf.append(refBuf.toString());
                 buf.append(')');
+                
+                // also make sure we delete dependent FKs
+                buf.append(" ON DELETE CASCADE");
         
                 String fksql = buf.toString();
                   
@@ -138,6 +142,74 @@ public class IngresMergerFactory extends
         };
     }
     
+    @Override
+    public MergerToken createSetNotNullToDb(DbEntity entity, DbAttribute column) {
+        return new SetNotNullToDb(entity, column) {
+
+            @Override
+            public List<String> createSql(DbAdapter adapter) {
+                
+                /* 
+                 * TODO: we generate this query as in ingres db documentation, but unfortunately ingres don't support it
+                 * 
+                 */
+                
+                StringBuilder sqlBuffer = new StringBuilder();
+                
+                boolean status = (getEntity().getDataMap() != null) && getEntity().getDataMap().isQuotingSQLIdentifiers();
+                QuotingStrategy context = adapter.getQuotingStrategy(status);
+
+                sqlBuffer.append("ALTER TABLE ");
+                sqlBuffer.append(getEntity().getFullyQualifiedName());
+                sqlBuffer.append(" ALTER COLUMN ");
+                sqlBuffer.append(context.quoteString(getColumn().getName()));
+                sqlBuffer.append(" ");
+                sqlBuffer.append(adapter.externalTypesForJdbcType(getColumn().getType())[0]);
+              
+                if (TypesMapping.supportsLength(getColumn().getType()) && getColumn().getMaxLength() > 0) {
+                    sqlBuffer.append("(");
+                    sqlBuffer.append(getColumn().getMaxLength());
+                    sqlBuffer.append(")");
+                }
+                
+                sqlBuffer.append(" NOT NULL");
+
+                return Collections.singletonList(sqlBuffer.toString());
+            }
+
+        };
+    }
+    
+    @Override
+    public MergerToken createSetAllowNullToDb(DbEntity entity, DbAttribute column) {
+        return new SetAllowNullToDb(entity, column) {
+
+            @Override
+            public List<String> createSql(DbAdapter adapter) {
+                StringBuilder sqlBuffer = new StringBuilder();
+                QuotingStrategy context = adapter.getQuotingStrategy(getEntity()
+                        .getDataMap()
+                        .isQuotingSQLIdentifiers());
+                sqlBuffer.append("ALTER TABLE ");
+                sqlBuffer.append(context.quoteFullyQualifiedName(getEntity()));
+                sqlBuffer.append(" ALTER COLUMN ");
+                sqlBuffer.append(context.quoteString(getColumn().getName()));
+                sqlBuffer.append(" ");
+                sqlBuffer.append(adapter.externalTypesForJdbcType(getColumn().getType())[0]);
+              
+                if (TypesMapping.supportsLength(getColumn().getType()) && getColumn().getMaxLength() > 0) {
+                    sqlBuffer.append("(");
+                    sqlBuffer.append(getColumn().getMaxLength());
+                    sqlBuffer.append(")");
+                }
+                
+                sqlBuffer.append(" WITH NULL");
+
+                return Collections.singletonList(sqlBuffer.toString());
+            }
+
+        };
+    }
     
     @Override
     public MergerToken createDropRelationshipToDb(