Hi,

I've been trying to use Torque to write database independent schema and data files and allow the loading of these to MySQL for development and (soon) Oracle for production.

To capture sample data entered from our application I will occassionally use the TorqueDataDumpTask to save data from MySQL as a Torque data file.

I've discovered (and fixed) a number of problems:

1.  The first row of each table was missed.
2.  The last row of each table with at least 1 row contained just
    null values.

I fixed these by changing the way calls TableTool wrapped a ResultSet as an Iterator.

3. The MySQL type LONGTEXT defaulted to a VARCHAR.

I added a mapping from Types.Other to SchemaType.CLOB. I hope this is right. Maybe someone else knows better, but it works for me.

4.  The DOCTYPE definition in the "torque-data.xml" misreferences the
    DTD.

Initially I changed the reference to "file:src/schema/torque-data.dtd", but I found that as this was relative to the current working directory when I invoked a subproject Maven goal from my top level Maven project it was looking relative to the top level project.

I resolved to remove the reference. Again, maybe someone else knows better, but this now works for me.

I've included a unified diff of my work, partly just in the hope that these changes will be incorporated into the next release of Torque and thus prevent me from needing custom modifications, but also in the hope that it might help someone else.

Oops. I've actually attached my unified diff this time.


Thanks.


Index: src/generator/src/java/org/apache/torque/task/TorqueDataDumpTask.java
===================================================================
RCS file: 
/home/cvspublic/db-torque/src/generator/src/java/org/apache/torque/task/TorqueDataDumpTask.java,v
retrieving revision 1.6
diff -U3 -r1.6 TorqueDataDumpTask.java
--- src/generator/src/java/org/apache/torque/task/TorqueDataDumpTask.java       5 Dec 
2003 15:39:17 -0000       1.6
+++ src/generator/src/java/org/apache/torque/task/TorqueDataDumpTask.java       29 Jan 
2004 22:29:47 -0000
@@ -276,6 +276,7 @@
     {
         /** querydataset */
         private ResultSet rs;
+        private Boolean hasNext;
 
         /**
          * Constructor for the TableTool object
@@ -318,12 +319,10 @@
         {
             try
             {
-                // TODO optimize this
-                // i tried to use rs.isLast() but this returns wrong results
-                // for empty tables :-(
-                boolean validRow = rs.next();
-                rs.previous();
-                return validRow;
+                if(hasNext == null) {
+                    hasNext = new Boolean(rs.next());
+                }
+                return hasNext.booleanValue();
             }
             catch (Exception se)
             {
@@ -343,16 +342,33 @@
         {
             try
             {
-                System.out.print(".");
-                rs.next();
+                // return this object if a row exists in the result set
+                if(hasNext == null)
+                {
+                    // handle next row
+                    if(rs.next())
+                    {
+                        return this;
+                    }
+                }
+                else
+                {
+                    // handle peeked row
+                    Boolean peekedHasNext = hasNext;
+                    hasNext = null;
+                    if(peekedHasNext.booleanValue()) {
+                        return this;
+                    }
+                }
             }
-            catch (Exception se)
+            catch(SQLException se)
             {
-                System.err.println("Exception while iterating:");
+                System.err.println("Exception :");
                 se.printStackTrace();
-                throw new NoSuchElementException(se.getMessage());
             }
-            return this;
+
+            // otherwise throw an exception to indicate the end
+            throw new NoSuchElementException("reached end of result set");
         }
 
         /**
Index: src/generator/src/java/org/apache/torque/engine/database/model/TypeMap.java
===================================================================
RCS file: 
/home/cvspublic/db-torque/src/generator/src/java/org/apache/torque/engine/database/model/TypeMap.java,v
retrieving revision 1.6
diff -U3 -r1.6 TypeMap.java
--- src/generator/src/java/org/apache/torque/engine/database/model/TypeMap.java 9 Dec 
2003 02:00:02 -0000       1.6
+++ src/generator/src/java/org/apache/torque/engine/database/model/TypeMap.java 29 Jan 
2004 22:29:47 -0000
@@ -415,6 +415,7 @@
             jdbcToTorqueTypeMap.put(new Integer(Types.CHAR), SchemaType.CHAR);
             jdbcToTorqueTypeMap.put(new Integer(Types.VARCHAR), SchemaType.VARCHAR);
             jdbcToTorqueTypeMap.put(new Integer(Types.LONGVARCHAR), 
SchemaType.LONGVARCHAR);
+            jdbcToTorqueTypeMap.put(new Integer(Types.OTHER), SchemaType.CLOB);
             jdbcToTorqueTypeMap.put(new Integer(Types.CLOB), SchemaType.CLOB);
             jdbcToTorqueTypeMap.put(new Integer(Types.NUMERIC), SchemaType.NUMERIC);
             jdbcToTorqueTypeMap.put(new Integer(Types.DECIMAL), SchemaType.DECIMAL);
Index: src/generator/src/templates/data/dump/top.vm
===================================================================
RCS file: /home/cvspublic/db-torque/src/generator/src/templates/data/dump/top.vm,v
retrieving revision 1.1
diff -U3 -r1.1 top.vm
--- src/generator/src/templates/data/dump/top.vm        10 Feb 2003 13:18:44 -0000     
 1.1
+++ src/generator/src/templates/data/dump/top.vm        29 Jan 2004 22:29:47 -0000
@@ -1,4 +1,3 @@
 <?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
-<!DOCTYPE dataset SYSTEM "file://${project}-data.dtd">
 <dataset name="$dataset">
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to