Author: aadamchik
Date: Sun Nov 11 13:21:40 2012
New Revision: 1407974
URL: http://svn.apache.org/viewvc?rev=1407974&view=rev
Log:
CAY-1769 cdbimport improvements: meaningfulPk flag must be turned into a pattern
fixing meaningful PK excludes
Modified:
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java
Modified:
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java?rev=1407974&r1=1407973&r2=1407974&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
(original)
+++
cayenne/main/trunk/framework/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DbImportAction.java
Sun Nov 11 13:21:40 2012
@@ -155,15 +155,17 @@ public class DbImportAction {
final NamePatternMatcher nameFilter = new NamePatternMatcher(logger,
parameters.getIncludeTables(),
parameters.getExcludeTables());
+
+ String meangfulPkExclude = parameters.getMeaningfulPkTables() != null
? null : "*";
final NamePatternMatcher meaningfulPkFilter = new
NamePatternMatcher(logger,
- parameters.getMeaningfulPkTables(), null);
+ parameters.getMeaningfulPkTables(), meangfulPkExclude);
DbLoader loader = new DbLoader(connection, adapter, loaderDelegate) {
@Override
public boolean includeTableName(String tableName) {
return nameFilter.isIncluded(tableName);
}
-
+
@Override
protected EntityMergeSupport createEntityMerger(DataMap map) {
return new EntityMergeSupport(map, namingStrategy, true) {
@@ -176,7 +178,6 @@ public class DbImportAction {
}
};
-
// TODO: load via DI AdhocObjectFactory
String namingStrategy = parameters.getNamingStrategy();
if (namingStrategy != null) {
Modified:
cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java?rev=1407974&r1=1407973&r2=1407974&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java
(original)
+++
cayenne/main/trunk/framework/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java
Sun Nov 11 13:21:40 2012
@@ -22,9 +22,12 @@ import static org.mockito.Mockito.mock;
import java.io.File;
import java.io.PrintWriter;
+import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
+import java.sql.Types;
+import java.util.List;
import junit.framework.TestCase;
@@ -34,7 +37,9 @@ import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.resource.URLResource;
import org.apache.cayenne.tools.configuration.ToolsModule;
import org.apache.cayenne.util.Util;
@@ -91,6 +96,93 @@ public class DbImportActionTest extends
assertTrue(loader2.includeTableName("cx"));
}
+ public void testCreateLoader_MeaningfulPk_Default() throws Exception {
+ Log log = mock(Log.class);
+ Injector i = DIBootstrap.createInjector(new ToolsModule(log), new
DbImportModule());
+
+ DbImportAction action = i.getInstance(DbImportAction.class);
+
+ DbImportParameters parameters = new DbImportParameters();
+ assertNull(parameters.getMeaningfulPkTables());
+
+ DbLoader loader1 = action.createLoader(parameters,
mock(DbAdapter.class), mock(Connection.class),
+ mock(DbLoaderDelegate.class));
+
+ DataMap map = new DataMap();
+
+ DbEntity e1 = new DbEntity("e1");
+ DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1);
+ pk.setPrimaryKey(true);
+ e1.addAttribute(pk);
+ DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
+ e1.addAttribute(nonPk);
+
+ map.addDbEntity(e1);
+
+ // DbLoader is so ugly and hard to test..
+ Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
+ dbEntityList.setAccessible(true);
+ List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
+ entities.add(e1);
+
+ loader1.loadObjEntities(map);
+
+ ObjEntity oe1 = map.getObjEntity("E1");
+ assertEquals(1, oe1.getAttributes().size());
+ assertNotNull(oe1.getAttribute("nonPk"));
+ }
+
+ public void testCreateLoader_MeaningfulPk_Specified() throws Exception {
+ Log log = mock(Log.class);
+ Injector i = DIBootstrap.createInjector(new ToolsModule(log), new
DbImportModule());
+
+ DbImportAction action = i.getInstance(DbImportAction.class);
+
+ DbImportParameters parameters = new DbImportParameters();
+ parameters.setMeaningfulPkTables("a*");
+
+ DbLoader loader1 = action.createLoader(parameters,
mock(DbAdapter.class), mock(Connection.class),
+ mock(DbLoaderDelegate.class));
+
+ // DbLoader is so ugly and hard to test..
+ Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList");
+ dbEntityList.setAccessible(true);
+ List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1);
+
+ DataMap map = new DataMap();
+
+ DbEntity e1 = new DbEntity("e1");
+ DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1);
+ pk.setPrimaryKey(true);
+ e1.addAttribute(pk);
+ DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1);
+ e1.addAttribute(nonPk);
+
+ map.addDbEntity(e1);
+ entities.add(e1);
+
+ DbEntity a1 = new DbEntity("a1");
+ DbAttribute apk = new DbAttribute("pk", Types.INTEGER, a1);
+ apk.setPrimaryKey(true);
+ a1.addAttribute(apk);
+ DbAttribute anonPk = new DbAttribute("nonPk", Types.INTEGER, a1);
+ a1.addAttribute(anonPk);
+
+ map.addDbEntity(a1);
+ entities.add(a1);
+
+ loader1.loadObjEntities(map);
+
+ ObjEntity oe1 = map.getObjEntity("E1");
+ assertEquals(1, oe1.getAttributes().size());
+ assertNotNull(oe1.getAttribute("nonPk"));
+
+ ObjEntity oe2 = map.getObjEntity("A1");
+ assertEquals(2, oe2.getAttributes().size());
+ assertNotNull(oe2.getAttribute("nonPk"));
+ assertNotNull(oe2.getAttribute("pk"));
+ }
+
public void testSaveLoaded() throws Exception {
Log log = mock(Log.class);
Injector i = DIBootstrap.createInjector(new ToolsModule(log), new
DbImportModule());
@@ -146,12 +238,12 @@ public class DbImportActionTest extends
DataMap tempMap = new DataMap();
tempMap.addDbEntity(new DbEntity("X"));
-
+
PrintWriter writer = new PrintWriter(out);
tempMap.encodeAsXML(new XMLEncoder(writer));
writer.close();
assertTrue(out.isFile());
-
+
Log log = mock(Log.class);
Injector i = DIBootstrap.createInjector(new ToolsModule(log), new
DbImportModule());