You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by tf...@apache.org on 2010/04/05 10:23:23 UTC

svn commit: r930828 - in /db/torque/torque4/trunk/torque-templates/src: main/java/org/apache/torque/templates/ main/java/org/apache/torque/templates/transformer/om/ main/resources/org/apache/torque/templates/om/templates/dbObject/base/ main/resources/o...

Author: tfischer
Date: Mon Apr  5 08:23:23 2010
New Revision: 930828

URL: http://svn.apache.org/viewvc?rev=930828&view=rev
Log:
Added external schema handling

Added:
    db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/LoadExternalSchemaTransformer.java
    db/torque/torque4/trunk/torque-templates/src/test/schema/ext-schema.xml
    db/torque/torque4/trunk/torque-templates/src/test/schema/extext-schema.xml
Modified:
    db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java
    db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaElementName.java
    db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java
    db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java
    db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableAttributeName.java
    db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/bean/objectBeanMethods.vm
    db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/copyMethods.vm
    db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/saveMethods.vm
    db/torque/torque4/trunk/torque-templates/src/test/java/org/apache/torque/templates/TestProcessing.java
    db/torque/torque4/trunk/torque-templates/src/test/schema/schema.xml

Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java Mon Apr  5 08:23:23 2010
@@ -77,7 +77,9 @@ public enum TorqueSchemaAttributeName im
     /** attribute size. */
     SIZE("size"),
     /** attribute scale. */
-    SCALE("scale");
+    SCALE("scale"),
+    /** attribute filename. */
+    FILENAME("filename");
 
     /** The name of the attribute, not null. */
     private String name;

Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaElementName.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaElementName.java?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaElementName.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaElementName.java Mon Apr  5 08:23:23 2010
@@ -30,6 +30,8 @@ public enum TorqueSchemaElementName impl
 {
     /** element database. */
     DATABASE("database"),
+    /** element external-schema */
+    EXTERNAL_SCHEMA("external-schema"),
     /** element table. */
     TABLE("table"),
     /** element column. */

Added: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/LoadExternalSchemaTransformer.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/LoadExternalSchemaTransformer.java?rev=930828&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/LoadExternalSchemaTransformer.java (added)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/LoadExternalSchemaTransformer.java Mon Apr  5 08:23:23 2010
@@ -0,0 +1,94 @@
+package org.apache.torque.templates.transformer.om;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.torque.gf.configuration.ConfigurationException;
+import org.apache.torque.gf.control.ControllerState;
+import org.apache.torque.gf.source.FileSource;
+import org.apache.torque.gf.source.SourceElement;
+import org.apache.torque.gf.source.SourceException;
+import org.apache.torque.gf.source.TransformerDefinition;
+import org.apache.torque.gf.source.transform.SourceTransformer;
+import org.apache.torque.gf.source.transform.SourceTransformerException;
+import org.apache.torque.gf.source.xml.XmlSourceType;
+import org.apache.torque.templates.TorqueSchemaAttributeName;
+import org.apache.torque.templates.TorqueSchemaElementName;
+
+public class LoadExternalSchemaTransformer implements SourceTransformer
+{
+    private static Log log 
+            = LogFactory.getLog(LoadExternalSchemaTransformer.class);
+
+    /**
+     * Loads the external schemata tables as children of the external-schema
+     * element into the current graph.
+     *
+     * @param root the database root element of the source tree, not null.
+     * @param controllerState the controller state, not null.
+     *
+     * @throws SourceTransformerException if the transformation fails.
+     */
+    public SourceElement transform(
+            SourceElement root,
+            ControllerState controllerState)
+        throws SourceTransformerException
+    {
+        List<SourceElement> externalSchemaElementList 
+                = root.getChildren(TorqueSchemaElementName.EXTERNAL_SCHEMA);
+        for (SourceElement externalSchemaElement : externalSchemaElementList)
+        {
+            
+            File currentSourceFile = controllerState.getSourceFile();
+            File baseDir = currentSourceFile.getParentFile();
+            String relativePath = externalSchemaElement.getAttribute(
+                    TorqueSchemaAttributeName.FILENAME)
+                .toString();
+            File externalSchemaPath = new File(baseDir, relativePath);
+            try
+            {
+                FileSource fileSource = new FileSource(
+                        new XmlSourceType(),
+                        externalSchemaPath,
+                        null,
+                        null,
+                        new ArrayList<TransformerDefinition>());
+                SourceElement externalSchemaRootElement 
+                        = fileSource.getRootElement();
+                this.transform(externalSchemaRootElement, controllerState);
+                Iterator<SourceElement> childIt 
+                        = externalSchemaRootElement.getChildren().iterator();
+                while (childIt.hasNext())
+                {
+                    SourceElement child = childIt.next();
+                    root.getChildren().add(child);
+                    child.setAttribute(
+                            TableAttributeName.FROM_EXTERNAL_SCHEMA,
+                            relativePath);
+                    // disattach from previous parent so that the 
+                    // new parent is the primary parent. 
+                    childIt.remove();
+                }
+            } 
+            catch (ConfigurationException e)
+            {
+                log.error("Could not load external schema file "
+                        + externalSchemaPath,
+                    e);
+                throw new SourceTransformerException(e);
+            }
+            catch (SourceException e)
+            {
+                log.error("Could not construct source from schema file "
+                        + externalSchemaPath,
+                    e);
+                throw new SourceTransformerException(e);
+            }
+        }
+        return root;
+    }
+}

Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java Mon Apr  5 08:23:23 2010
@@ -137,6 +137,10 @@ public class OMForeignKeyTransformer
             }
         }
 
+        // create reference only if this table was not loaded from
+        // an external schema
+        if (localTable.getAttribute(TableAttributeName.FROM_EXTERNAL_SCHEMA) 
+                == null)
         {
             // create attributes for a field in the local table referencing
             // the foreign table. This field will store one instance of the
@@ -290,6 +294,10 @@ public class OMForeignKeyTransformer
             }
         }
 
+        // create backreference only if the foreign table was not loaded from
+        // an external schema
+        if (foreignTable.getAttribute(TableAttributeName.FROM_EXTERNAL_SCHEMA) 
+                == null)
         {
             // create attributes for a field in the foreign table referencing
             // the local table. As more than one foreign object can point

Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java Mon Apr  5 08:23:23 2010
@@ -69,6 +69,14 @@ public class OMTransformer implements So
      */
     private static final OMTableTransformer tableTransformer;
 
+    /**
+     * The transformer which loads the external schemata.
+     *
+     * @see LoadExternalSchemaTransformer
+     */
+    private static final SourceTransformer loadExternalSchemaTransformer
+            = new LoadExternalSchemaTransformer();
+
     static
     {
         try
@@ -96,6 +104,8 @@ public class OMTransformer implements So
     {
         TemplateOptionName.checkRequiredOptions(controllerState);
 
+        loadExternalSchemaTransformer.transform(root, controllerState);
+        
         for (SourceElement tableElement : root.getChildren(
                 TorqueSchemaElementName.TABLE.getName()))
         {

Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableAttributeName.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableAttributeName.java?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableAttributeName.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableAttributeName.java Mon Apr  5 08:23:23 2010
@@ -60,7 +60,12 @@ public enum TableAttributeName implement
     /**
      * The package name of the bean class.
      */
-    BEAN_PACKAGE("beanPackage");
+    BEAN_PACKAGE("beanPackage"),
+
+    /**
+     * The file name of the external schema from which this Element stems.
+     */
+    FROM_EXTERNAL_SCHEMA("fromExternalSchema");
 
     /** The name of the source element attribute, not null. */
     private String name;

Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/bean/objectBeanMethods.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/bean/objectBeanMethods.vm?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/bean/objectBeanMethods.vm (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/bean/objectBeanMethods.vm Mon Apr  5 08:23:23 2010
@@ -69,16 +69,19 @@
       #set ( $foreignTableElement = $foreignKeyElement.getParent() )
       #set ( $foreignTableName = $foreignTableElement.getAttribute("name") )
       #if ($foreignTableName != $name)
-        #set ( $foreignClassName = $foreignTableElement.getAttribute("javaName") )
-        #set ( $foreignBeanClassName = $foreignTableElement.getAttribute("beanClassName") )
         #set ( $fieldElement = $foreignKeyElement.getChild("foreign-field") )
-        #set ( $field = $fieldElement.getAttribute("field") )
-        #set ( $fieldContainedType = $fieldElement.getAttribute("fieldContainedType") )
-        #set ( $beanFieldElement = $foreignKeyElement.getChild("foreign-field-in-bean") )
-        #set ( $beanFieldType = $beanFieldElement.getAttribute("fieldType") )
-        #set ( $beanFieldContainedType = $beanFieldElement.getAttribute("fieldContainedType") )
-        #set ( $beanFieldInitializerType = $beanFieldElement.getAttribute("initializerType") )
-        #set ( $beanFieldSetter = $beanFieldElement.getAttribute("setter") )
+        ## if the referencing table is in an external schema, 
+        ## fieldElement is null. In this case,skip the following code.
+        #if ($fieldElement)
+          #set ( $foreignClassName = $foreignTableElement.getAttribute("javaName") )
+          #set ( $foreignBeanClassName = $foreignTableElement.getAttribute("beanClassName") )
+          #set ( $field = $fieldElement.getAttribute("field") )
+          #set ( $fieldContainedType = $fieldElement.getAttribute("fieldContainedType") )
+          #set ( $beanFieldElement = $foreignKeyElement.getChild("foreign-field-in-bean") )
+          #set ( $beanFieldType = $beanFieldElement.getAttribute("fieldType") )
+          #set ( $beanFieldContainedType = $beanFieldElement.getAttribute("fieldContainedType") )
+          #set ( $beanFieldInitializerType = $beanFieldElement.getAttribute("initializerType") )
+          #set ( $beanFieldSetter = $beanFieldElement.getAttribute("setter") )
         if ($field != null)
         {
             ${beanFieldType} relatedBeans = new ${beanFieldInitializerType}(${field}.size());
@@ -90,6 +93,7 @@
             }
             result.${beanFieldSetter}(relatedBeans);
         }
+        #end
       #end
     #end
   #end
@@ -168,15 +172,18 @@
       #set ( $foreignTableElement = $foreignKeyElement.getParent() )
       #set ( $foreignTableName = $foreignTableElement.getAttribute("name") )
       #if ($foreignTableName != $name)
-        #set ( $foreignClassName = $foreignTableElement.getAttribute("javaName") )
-        #set ( $foreignBeanClassName = $foreignTableElement.getAttribute("beanClassName") )
         #set ( $fieldElement = $foreignKeyElement.getChild("foreign-field") )
-        #set ( $field = $fieldElement.getAttribute("field") )
-        #set ( $fieldType = $fieldElement.getAttribute("fieldType") )
-        #set ( $fieldContainedType = $fieldElement.getAttribute("fieldContainedType") )
-        #set ( $initializerType = $fieldElement.getAttribute("initializerType") )
-        #set ( $beanGetter = $fieldElement.getAttribute("beanGetter") )
-        #set ( $adder = $fieldElement.getAttribute("adder") )
+        ## if the referencing table is in an external schema, 
+        ## fieldElement is null. In this case,skip the following code.
+        #if ($fieldElement)
+          #set ( $foreignClassName = $foreignTableElement.getAttribute("javaName") )
+          #set ( $foreignBeanClassName = $foreignTableElement.getAttribute("beanClassName") )
+          #set ( $field = $fieldElement.getAttribute("field") )
+          #set ( $fieldType = $fieldElement.getAttribute("fieldType") )
+          #set ( $fieldContainedType = $fieldElement.getAttribute("fieldContainedType") )
+          #set ( $initializerType = $fieldElement.getAttribute("initializerType") )
+          #set ( $beanGetter = $fieldElement.getAttribute("beanGetter") )
+          #set ( $adder = $fieldElement.getAttribute("adder") )
         {
             List#if($java5 == "true")<$foreignBeanClassName>#end relatedBeans = bean.${beanGetter}();
             if (relatedBeans != null)
@@ -189,6 +196,7 @@
                 }
             }
         }
+        #end
       #end
     #end
   #end
@@ -220,15 +228,18 @@
   ## foreign references to this Object
   #if ($objectIsCaching)
     #foreach ($foreignKeyElement in $referencingForeignKeyElements)
-      #set ( $foreignTableElement = $foreignKeyElement.getParent() )
-      #set ( $foreignTableName = $foreignTableElement.getAttribute("name") )
-      #if ($foreignTableName != $name)
-        #set ( $foreignClassName = $foreignTableElement.getAttribute("javaName") )
-        #set ( $fieldElement = $foreignKeyElement.getChild("foreign-field") )
-        #set ( $field = $fieldElement.getAttribute("field") )
-        #set ( $initializerType = $fieldElement.getAttribute("initializerType") )
-        #set ( $adder = $fieldElement.getAttribute("adder") )
-        #set ( $initializer = $fieldElement.getAttribute("initializer") )
+      #set ( $fieldElement = $foreignKeyElement.getChild("foreign-field") )
+      ## if the referencing table is in an external schema, 
+      ## fieldElement is null. In this case,skip the following code.
+      #if ($fieldElement)
+        #set ( $foreignTableElement = $foreignKeyElement.getParent() )
+        #set ( $foreignTableName = $foreignTableElement.getAttribute("name") )
+        #if ($foreignTableName != $name)
+          #set ( $foreignClassName = $foreignTableElement.getAttribute("javaName") )
+          #set ( $field = $fieldElement.getAttribute("field") )
+          #set ( $initializerType = $fieldElement.getAttribute("initializerType") )
+          #set ( $adder = $fieldElement.getAttribute("adder") )
+          #set ( $initializer = $fieldElement.getAttribute("initializer") )
  
     /**
      * Method called to associate a $foreignClassName object to this object.
@@ -242,6 +253,7 @@
         ${initializer}();
         ${field}.add(toAdd);
     }
+        #end
       #end
     #end
   #end

Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/copyMethods.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/copyMethods.vm?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/copyMethods.vm (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/copyMethods.vm Mon Apr  5 08:23:23 2010
@@ -149,16 +149,19 @@
         if (deepcopy)
         {
   #foreach ($foreignKeyElement in $foreignKeyElements)
-    #set ( $foreignTableElement = $foreignKeyElement.getParent())
-    #set ( $foreignTableName = $foreignTableElement.getAttribute("name"))
     #set ( $foreignFieldElement = $foreignKeyElement.getChild("foreign-field"))
-    #set ( $field = $foreignFieldElement.getAttribute("field"))
-    #set ( $fieldType = $foreignFieldElement.getAttribute("fieldType"))
-    #set ( $fieldContainedType = $foreignFieldElement.getAttribute("fieldContainedType"))
-    #set ( $getter = $foreignFieldElement.getAttribute("getter"))
-    #set ( $adder = $foreignFieldElement.getAttribute("adder"))
-    #if ($foreignTableName != $name)
-      #if ($objectIsCaching)
+    ## if the referencing table is in an external schema, 
+    ## foreignFieldElement is null. In this case,skip the foolowing code.
+    #if ($foreignFieldElement)
+      #set ( $foreignTableElement = $foreignKeyElement.getParent())
+      #set ( $foreignTableName = $foreignTableElement.getAttribute("name"))
+      #set ( $field = $foreignFieldElement.getAttribute("field"))
+      #set ( $fieldType = $foreignFieldElement.getAttribute("fieldType"))
+      #set ( $fieldContainedType = $foreignFieldElement.getAttribute("fieldContainedType"))
+      #set ( $getter = $foreignFieldElement.getAttribute("getter"))
+      #set ( $adder = $foreignFieldElement.getAttribute("adder"))
+      #if ($foreignTableName != $name)
+        #if ($objectIsCaching)
           ## field can be null if the generator property
           ## torque.silentDbFetch is set to false
             if ($field != null)
@@ -173,6 +176,7 @@
             {
                 copyObj.${field} = null;
             }
+        #end
       #end
     #end
   #end
@@ -215,22 +219,26 @@
         if (deepcopy)
         {
   #foreach ($foreignKeyElement in $foreignKeyElements)
-    #set ( $foreignTableElement = $foreignKeyElement.getParent())
-    #set ( $foreignTableName = $foreignTableElement.getAttribute("name"))
     #set ( $foreignFieldElement = $foreignKeyElement.getChild("foreign-field"))
-    #set ( $field = $foreignFieldElement.getAttribute("field"))
-    #set ( $fieldType = $foreignFieldElement.getAttribute("fieldType"))
-    #set ( $fieldContainedType = $foreignFieldElement.getAttribute("fieldContainedType"))
-    #set ( $getter = $foreignFieldElement.getAttribute("getter"))
-    #set ( $adder = $foreignFieldElement.getAttribute("adder"))
-    #if ($foreignTableName != $name)
-      #if ($objectIsCaching)
+    ## if the referencing table is in an external schema, 
+    ## foreignFieldElement is null. In this case,skip the foolowing code.
+    #if ($foreignFieldElement)
+      #set ( $foreignTableElement = $foreignKeyElement.getParent())
+      #set ( $foreignTableName = $foreignTableElement.getAttribute("name"))
+      #set ( $field = $foreignFieldElement.getAttribute("field"))
+      #set ( $fieldType = $foreignFieldElement.getAttribute("fieldType"))
+      #set ( $fieldContainedType = $foreignFieldElement.getAttribute("fieldContainedType"))
+      #set ( $getter = $foreignFieldElement.getAttribute("getter"))
+      #set ( $adder = $foreignFieldElement.getAttribute("adder"))
+      #if ($foreignTableName != $name)
+        #if ($objectIsCaching)
             $getter(con);
             for (int i = 0; i < ${field}.size(); i++)
             {
                 ${fieldContainedType} obj = #if($java5 != "true")($fieldContainedType) #end${field}.get(i);
                 copyObj.${adder}(obj.copy());
             }
+        #end
       #end
     #end
   #end

Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/saveMethods.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/saveMethods.vm?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/saveMethods.vm (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/saveMethods.vm Mon Apr  5 08:23:23 2010
@@ -159,6 +159,9 @@
       #set ( $otherClassName = $otherTable.getAttribute("baseDbObjectClassName") )
       #set ( $relCol = "" )
       #set ( $field = $referencingForeignKeyElement.getChild("foreign-field").getAttribute("field"))
+      ## if the referencing table is in an external schema, field is null.
+      ## In this case,skip the foolowing code
+      #if ($field)
             if ($field != null)
             {
                 for (int i = 0; i < ${field}.size(); i++)
@@ -166,6 +169,7 @@
                     ((${otherClassName}) ${field}.get(i)).save(con);
                 }
             }
+      #end
     #end
   #end
             alreadyInSave = false;

Modified: db/torque/torque4/trunk/torque-templates/src/test/java/org/apache/torque/templates/TestProcessing.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/test/java/org/apache/torque/templates/TestProcessing.java?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/test/java/org/apache/torque/templates/TestProcessing.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/test/java/org/apache/torque/templates/TestProcessing.java Mon Apr  5 08:23:23 2010
@@ -22,8 +22,10 @@ package org.apache.torque.templates;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.torque.gf.configuration.UnitDescriptor;
 import org.apache.torque.gf.configuration.option.MapOptionsConfiguration;
@@ -31,6 +33,7 @@ import org.apache.torque.gf.configuratio
 import org.apache.torque.gf.configuration.paths.DefaultTorqueGfPaths;
 import org.apache.torque.gf.configuration.paths.Maven2DirectoryProjectPaths;
 import org.apache.torque.gf.control.Controller;
+import org.apache.torque.gf.file.Fileset;
 import org.junit.Test;
 
 public class TestProcessing
@@ -54,12 +57,16 @@ public class TestProcessing
                 new File("src/test/schema"));
         projectPaths.setModifiedFileTargetDir(
                 new File("target/generated-sources-2"));
+        Fileset sourceFileset = new Fileset();
+        Set<String> sourceIncludes = new HashSet<String>();
+        sourceIncludes.add("schema.xml");
+        sourceFileset.setIncludes(sourceIncludes);
         unitDescriptors.add(new UnitDescriptor(
                 UnitDescriptor.Packaging.DIRECTORY,
                 projectPaths,
                 new DefaultTorqueGfPaths(),
                 null,
-                null,
+                sourceFileset,
                 new MapOptionsConfiguration(overrideOptions),
                 null));
 

Added: db/torque/torque4/trunk/torque-templates/src/test/schema/ext-schema.xml
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/test/schema/ext-schema.xml?rev=930828&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/test/schema/ext-schema.xml (added)
+++ db/torque/torque4/trunk/torque-templates/src/test/schema/ext-schema.xml Mon Apr  5 08:23:23 2010
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
+<!--
+ 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.
+-->
+<!--DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_2.dtd"-->
+
+<database
+  name="@DATABASE_DEFAULT@"
+  defaultIdMethod="@DATABASE_ID_METHOD@"
+  package="org.apache.torque.test.ext">
+
+  <external-schema filename="extext-schema.xml" />
+
+  <table name="ext">
+    <column
+      name="ext_id"
+      required="true"
+      primaryKey="true"
+      type="INTEGER"
+    />
+    <column
+      name="test"
+      required="true"
+      type="VARCHAR"
+      size="15"
+    />
+  </table>
+</database>

Added: db/torque/torque4/trunk/torque-templates/src/test/schema/extext-schema.xml
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/test/schema/extext-schema.xml?rev=930828&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/test/schema/extext-schema.xml (added)
+++ db/torque/torque4/trunk/torque-templates/src/test/schema/extext-schema.xml Mon Apr  5 08:23:23 2010
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
+<!--
+ 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.
+-->
+<!--DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_2.dtd"-->
+
+<database
+  name="@DATABASE_DEFAULT@"
+  defaultIdMethod="@DATABASE_ID_METHOD@">
+
+  <table name="extext">
+    <column
+      name="extext_id"
+      required="true"
+      primaryKey="true"
+      type="INTEGER"
+    />
+    <column
+      name="test"
+      required="true"
+      type="VARCHAR"
+      size="15"
+    />
+  </table>
+</database>

Modified: db/torque/torque4/trunk/torque-templates/src/test/schema/schema.xml
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/test/schema/schema.xml?rev=930828&r1=930827&r2=930828&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/test/schema/schema.xml (original)
+++ db/torque/torque4/trunk/torque-templates/src/test/schema/schema.xml Mon Apr  5 08:23:23 2010
@@ -23,98 +23,13 @@
   name="bookstore"
   defaultIdMethod="native">
 
-  <!-- =================================================== -->
-  <!-- B O O K  T A B L E                                  -->
-  <!-- =================================================== -->
-
-  <table name="book" description="Book table">
-    <column
-      name="book_id"
-      required="true"
-      primaryKey="true"
-      type="INTEGER"
-      description="Book Id"
-    />
-    <column
-      name="isbn"
-      required="true"
-      type="VARCHAR"
-      size="15"
-      description="ISBN"
-    />
-    <column
-      name="author_id"
-      required="true"
-      type="INTEGER"
-      description="Foreign Key Author"
-    />
-    <column
-      name="title"
-      required="true"
-      type="VARCHAR"
-      size="255"
-      description="Book Title"
-    />
-
-    <foreign-key name="AUTHOR_FK" foreignTable="author" onUpdate="cascade" onDelete="setNull">
-      <reference local="author_id" foreign="author_id"/>
-    </foreign-key>
-
-    <unique>
-      <unique-column name="isbn" />
-    </unique>
-
-    <index name="TITLE_INDEX">
-      <index-column name="title" />
-    </index>
-  </table>
-
-
-  <!-- =================================================== -->
-  <!-- A U T H O R  T A B L E                              -->
-  <!-- =================================================== -->
-
-  <table name="author" description="Author table">
-    <column
-      name="author_id"
-      required="true"
-      primaryKey="true"
-      type="INTEGER"
-    />
-    <column
-      name="name"
-      required="true"
-      type="VARCHAR"
-      size="50"
-    />
-
-  </table>
-
-
-  <!-- =================================================== -->
-  <!-- T E S T   T A B L E                                 -->
-  <!-- =================================================== -->
-
-  <!-- TRQS51 Datadump does not recognize null columns properly -->
-  <table name="NULL_VALUE_TABLE"
-         description="table containing null values to test datadump">
-    <column name="NULL_VALUE_TABLE_ID" primaryKey="true" required="true" type="INTEGER"/>
-    <column name="number1" type="INTEGER"/>
-    <column name="number2" type="INTEGER" default="2"/>
-    <column name="number3" type="INTEGER"/>
-    <column name="text1" type="VARCHAR" size="20"/>
-    <column name="text2" type="VARCHAR" size="20" default="defaultValue"/>
-    <column name="number_obj1" type="INTEGER" javaType="object"/>
-    <column name="number_obj2" type="INTEGER" javaType="object" default="2"/>
-
-  </table>
-
+  <external-schema filename="ext-schema.xml" />
 
   <!-- =================================================== -->
   <!-- A  T A B L E                                        -->
   <!-- =================================================== -->
 
-  <table name="a" description="A table">
+  <!-- table name="a" description="A table">
     <column
       name="a_id"
       required="true"
@@ -128,13 +43,13 @@
       size="50"
     />
 
-  </table>
+  </table-->
 
   <!-- =================================================== -->
   <!-- B  T A B L E                                        -->
   <!-- =================================================== -->
 
-  <table name="b" description="B table">
+  <!-- table name="b" description="B table">
     <column
       name="b_id"
       required="true"
@@ -148,14 +63,14 @@
       size="50"
     />
 
-  </table>
+  </table-->
 
 
   <!-- =================================================== -->
   <!-- AB  T A B L E                                       -->
   <!-- =================================================== -->
 
-  <table name="r_ab" description="r_ab table" idMethod="none">
+  <!-- table name="r_ab" description="r_ab table" idMethod="none">
     <column
       name="a_id"
       required="true"
@@ -183,13 +98,13 @@
       <reference local="b_id" foreign="b_id"/>
     </foreign-key>
 
-  </table>
+  </table-->
 
   <!-- =================================================== -->
   <!-- C  T A B L E                                       -->
   <!-- =================================================== -->
 
-  <table name="c" description="c table contains fk to ar_ab, a and b">
+  <!-- table name="c" description="c table contains fk to ar_ab, a and b">
     <column
       name="c_id"
       required="true"
@@ -242,14 +157,14 @@
         <reference local="a_id" foreign="a_id"/>
         <reference local="b_id" foreign="b_id"/>
     </foreign-key>
-  </table>
+  </table-->
 
 
   <!-- =================================================== -->
   <!-- N O P K  T A B L E                                  -->
   <!-- =================================================== -->
 
-  <table name="nopk" idMethod="none" description="this table has no pk">
+  <!-- table name="nopk" idMethod="none" description="this table has no pk">
     <column
       name="intcol"
       type="INTEGER"
@@ -272,13 +187,13 @@
       <reference foreign="COL1" local="PARENT_COL1"/>
       <reference foreign="COL2" local="PARENT_COL2"/>
     </foreign-key>
-  </table>
+  </table-->
 
   <!-- =================================================== -->
   <!-- T A B L E  W I T H  I N T E R F A C E               -->
   <!-- =================================================== -->
 
-  <table name="ifc_table" idMethod="none"
+  <!-- table name="ifc_table" idMethod="none"
   	interface="org.apache.torque.TestInterface"
   	description="this table implements an interface">
     <column
@@ -306,9 +221,13 @@
       type="VARCHAR"
       size="50"
     />
-  </table>
+  </table-->
   
-  <table name="INHERITANCE_TEST" description="Table to test inheritance">
+  <!-- =================================================== -->
+  <!-- T A B L E  W I T H  I N H E R I T A N C E           -->
+  <!-- =================================================== -->
+
+  <!-- table name="INHERITANCE_TEST" description="Table to test inheritance">
     <column
       name="INHERITANCE_TEST"
       required="true"
@@ -358,6 +277,34 @@
       type="VARCHAR"
       size="100"
     />
+  </table-->
+  
+  <!-- =================================================== -->
+  <!-- E X T E R N A L   S C H E M A                       -->
+  <!-- =================================================== -->
+
+  <table name="ext_schema">
+    <column name="ext_schema_id" required="true" primaryKey="true" type="INTEGER"/>
+    <column name="ext_id" type="INTEGER"/>
+    <column name="test" required="true" type="INTEGER"/>
+
+    <index name="index_ext_id">
+      <index-column name="ext_id"/>
+    </index>
+    <foreign-key foreignTable="ext">
+      <reference local="ext_id" foreign="ext_id"/>
+    </foreign-key>
   </table>
 
+  <table name="extext_schema">
+    <column name="extext_schema_id" required="true" primaryKey="true" type="INTEGER"/>
+    <column name="extext_id" type="INTEGER"/>
+    <column name="test" required="true" type="INTEGER"/>
+
+    <foreign-key foreignTable="extext">
+      <reference local="extext_id" foreign="extext_id"/>
+    </foreign-key>
+  </table>
+  
+
 </database>



---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org