Author: torehalset
Date: Thu Jun 5 14:10:00 2008
New Revision: 663737
URL: http://svn.apache.org/viewvc?rev=663737&view=rev
Log:
CAY-1063 Derby adapter is not able to remove NOT NULL relationship
Added test cases for add/drop not null. Tested/working on derby, postgres and
hsqldb
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetAllowNullToDbTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetNotNullToDbTest.java
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/derby/DerbyMergerFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLMergerFactory.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=663737&r1=663736&r2=663737&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Thu Jun 5
14:10:00 2008
@@ -24,6 +24,7 @@
Bug fixes since M4:
CAY-1062 Code Generation line ending consistency: ImportUtils
+CAY-1063 Derby adapter is not able to remove NOT NULL relationship
----------------------------------
Release: 3.0M4
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/derby/DerbyMergerFactory.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/derby/DerbyMergerFactory.java?rev=663737&r1=663736&r2=663737&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/derby/DerbyMergerFactory.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/derby/DerbyMergerFactory.java
Thu Jun 5 14:10:00 2008
@@ -18,11 +18,17 @@
****************************************************************/
package org.apache.cayenne.dba.derby;
+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.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 DerbyMergerFactory extends MergerFactory {
@@ -45,4 +51,45 @@
}
};
}
+
+ @Override
+ public MergerToken createSetNotNullToDb(DbEntity entity, DbAttribute
column) {
+ return new SetNotNullToDb(entity, column) {
+
+ @Override
+ public List<String> createSql(DbAdapter adapter) {
+ StringBuilder sqlBuffer = new StringBuilder();
+
+ sqlBuffer.append("ALTER TABLE ");
+ sqlBuffer.append(getEntity().getFullyQualifiedName());
+ sqlBuffer.append(" ALTER COLUMN ");
+ sqlBuffer.append(getColumn().getName());
+ 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();
+
+ sqlBuffer.append("ALTER TABLE ");
+ sqlBuffer.append(getEntity().getFullyQualifiedName());
+ sqlBuffer.append(" ALTER COLUMN ");
+ sqlBuffer.append(getColumn().getName());
+ sqlBuffer.append(" NULL");
+
+ return Collections.singletonList(sqlBuffer.toString());
+ }
+
+ };
+ }
+
}
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLMergerFactory.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLMergerFactory.java?rev=663737&r1=663736&r2=663737&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLMergerFactory.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLMergerFactory.java
Thu Jun 5 14:10:00 2008
@@ -18,10 +18,15 @@
****************************************************************/
package org.apache.cayenne.dba.hsqldb;
+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.merge.MergerFactory;
import org.apache.cayenne.merge.MergerToken;
+import org.apache.cayenne.merge.SetAllowNullToDb;
import org.apache.cayenne.merge.SetColumnTypeToDb;
public class HSQLMergerFactory extends MergerFactory {
@@ -45,4 +50,24 @@
};
}
+ @Override
+ public MergerToken createSetAllowNullToDb(DbEntity entity, DbAttribute
column) {
+ return new SetAllowNullToDb(entity, column) {
+
+ @Override
+ public List<String> createSql(DbAdapter adapter) {
+ StringBuilder sqlBuffer = new StringBuilder();
+
+ sqlBuffer.append("ALTER TABLE ");
+ sqlBuffer.append(getEntity().getFullyQualifiedName());
+ sqlBuffer.append(" ALTER COLUMN ");
+ sqlBuffer.append(getColumn().getName());
+ sqlBuffer.append(" NULL");
+
+ return Collections.singletonList(sqlBuffer.toString());
+ }
+
+ };
+ }
+
}
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetAllowNullToDbTest.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetAllowNullToDbTest.java?rev=663737&view=auto
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetAllowNullToDbTest.java
(added)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetAllowNullToDbTest.java
Thu Jun 5 14:10:00 2008
@@ -0,0 +1,58 @@
+/*****************************************************************
+ * 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.merge;
+
+import java.sql.Types;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+
+public class SetAllowNullToDbTest extends MergeCase {
+
+ public void test() throws Exception {
+ DbEntity dbEntity = map.getDbEntity("PAINTING");
+ assertNotNull(dbEntity);
+
+ // create and add new column to model and db
+ DbAttribute column = new DbAttribute("NEWCOL2", Types.VARCHAR,
dbEntity);
+
+ column.setMandatory(true);
+ column.setMaxLength(10);
+ dbEntity.addAttribute(column);
+ assertTokensAndExecute(node, map, 2, 0);
+
+ // check that is was merged
+ assertTokensAndExecute(node, map, 0, 0);
+
+ // set null
+ column.setMandatory(false);
+
+ // merge to db
+ assertTokensAndExecute(node, map, 1, 0);
+
+ // check that is was merged
+ assertTokensAndExecute(node, map, 0, 0);
+
+ // clean up
+ dbEntity.removeAttribute(column.getName());
+ assertTokensAndExecute(node, map, 1, 0);
+ assertTokensAndExecute(node, map, 0, 0);
+ }
+
+}
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetNotNullToDbTest.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetNotNullToDbTest.java?rev=663737&view=auto
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetNotNullToDbTest.java
(added)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/SetNotNullToDbTest.java
Thu Jun 5 14:10:00 2008
@@ -0,0 +1,58 @@
+/*****************************************************************
+ * 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.merge;
+
+import java.sql.Types;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+
+public class SetNotNullToDbTest extends MergeCase {
+
+ public void test() throws Exception {
+ DbEntity dbEntity = map.getDbEntity("PAINTING");
+ assertNotNull(dbEntity);
+
+ // create and add new column to model and db
+ DbAttribute column = new DbAttribute("NEWCOL2", Types.VARCHAR,
dbEntity);
+
+ column.setMandatory(false);
+ column.setMaxLength(10);
+ dbEntity.addAttribute(column);
+ assertTokensAndExecute(node, map, 1, 0);
+
+ // check that is was merged
+ assertTokensAndExecute(node, map, 0, 0);
+
+ // set not null
+ column.setMandatory(true);
+
+ // merge to db
+ assertTokensAndExecute(node, map, 1, 0);
+
+ // check that is was merged
+ assertTokensAndExecute(node, map, 0, 0);
+
+ // clean up
+ dbEntity.removeAttribute(column.getName());
+ assertTokensAndExecute(node, map, 1, 0);
+ assertTokensAndExecute(node, map, 0, 0);
+ }
+
+}