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/04/16 23:23:21 UTC

svn commit: r648858 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne: access/DbLoader.java merge/DbMerger.java

Author: torehalset
Date: Wed Apr 16 14:23:17 2008
New Revision: 648858

URL: http://svn.apache.org/viewvc?rev=648858&view=rev
Log:
CAY-981: merge: faster junit tests

This fix improves speed on PostgreSQL and Derby by limiting the number of tables that are tested by the junit tests. I have not tested on Oracle and MySQL.

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbLoader.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DbMerger.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbLoader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbLoader.java?rev=648858&r1=648857&r2=648858&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbLoader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbLoader.java Wed Apr 16 14:23:17 2008
@@ -164,6 +164,14 @@
     public DbAdapter getAdapter() {
         return adapter;
     }
+    
+    /**
+     * A method that return true if the given table name should be included. The default
+     * implemntation include all tables.
+     */
+    public boolean includeTableName(String tableName) {
+        return true;
+    }
 
     /**
      * Retrieves catalogues for the database associated with this DbLoader.
@@ -284,6 +292,10 @@
                 if (name == null || name.startsWith("BIN$")) {
                     continue;
                 }
+                
+                if (!includeTableName(name)) {
+                    continue;
+                }
 
                 DbEntity table = new DbEntity(name);
                 table.setCatalog(catalog);
@@ -560,7 +572,11 @@
                     // start new entity
                     String fkEntityName = rs.getString("FKTABLE_NAME");
                     String fkName = rs.getString("FK_NAME");
-
+                    
+                    if (!includeTableName(fkEntityName)) {
+                        continue;
+                    }
+                    
                     fkEntity = map.getDbEntity(fkEntityName);
 
                     if (fkEntity == null) {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DbMerger.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DbMerger.java?rev=648858&r1=648857&r2=648858&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DbMerger.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DbMerger.java Wed Apr 16 14:23:17 2008
@@ -53,8 +53,12 @@
 public class DbMerger {
 
     private MergerFactory factory;
-    
-    public boolean includeTableName(String tableName){
+
+    /**
+     * A method that return true if the given table name should be included. The default
+     * implemntation include all tables.
+     */
+    public boolean includeTableName(String tableName) {
         return true;
     }
 
@@ -82,7 +86,15 @@
         try {
             conn = dataSource.getConnection();
 
-            DbLoader dbLoader = new DbLoader(conn, adapter, new LoaderDelegate());
+            final DbMerger merger = this;
+            DbLoader dbLoader = new DbLoader(conn, adapter, new LoaderDelegate()) {
+
+                @Override
+                public boolean includeTableName(String tableName) {
+                    return merger.includeTableName(tableName);
+                }
+            };
+            
             DataMap detectedDataMap = dbLoader.loadDataMapFromDB(
                     null,
                     null,
@@ -94,7 +106,7 @@
             for (DbEntity dbEntity : dataMap.getDbEntities()) {
                 String tableName = dbEntity.getName();
                 
-                if(!includeTableName(tableName)){
+                if (!includeTableName(tableName)) {
                     continue;
                 }
 
@@ -119,7 +131,7 @@
             // TODO: support drop table. currently, too many tables are marked for drop
             for (DbEntity e : dbEntityToDropByName.values()) {
                 
-                if(!includeTableName(e.getName())){
+                if (!includeTableName(e.getName())) {
                     continue;
                 }
                 
@@ -258,6 +270,11 @@
         
         // relationships to add
         for (DbRelationship rel : dbEntity.getRelationships()) {
+            
+            if (!includeTableName(rel.getTargetEntityName())) {
+                continue;
+            }
+            
             if (findDbRelationship(detectedEntity, rel) == null) {
                 // TODO: very ugly. perhaps MergerToken should have a .isNoOp()?
                 AbstractToDbToken t = (AbstractToDbToken) factory