You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2013/03/14 19:06:16 UTC

svn commit: r1456579 - in /db/derby/code/trunk/java: engine/org/apache/derby/iapi/db/OptimizerTrace.java tools/org/apache/derby/impl/tools/optional/OptimizerTracer.java

Author: rhillegas
Date: Thu Mar 14 18:06:15 2013
New Revision: 1456579

URL: http://svn.apache.org/r1456579
Log:
DERBY-6022: Add filename argument to the optional tool which turns off optimizer tracing, so that the trace can be dumped to a file.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/db/OptimizerTrace.java
    db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/optional/OptimizerTracer.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/db/OptimizerTrace.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/db/OptimizerTrace.java?rev=1456579&r1=1456578&r2=1456579&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/db/OptimizerTrace.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/db/OptimizerTrace.java Thu Mar 14 18:06:15 2013
@@ -21,6 +21,8 @@
 
 package org.apache.derby.iapi.db;
 
+import java.sql.SQLException;
+
 import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
 import org.apache.derby.iapi.sql.conn.ConnectionUtil;
 
@@ -58,6 +60,14 @@ public class OptimizerTrace
 		return retCode;
 	}
 
+    /**
+     * Null out the optimizer trace.
+     */
+    public  static  void    nullifyTrace()  throws SQLException
+    {
+        ConnectionUtil.getCurrentLCC().setOptimizerTraceOutput( null );
+    }
+
 	/**
 	 * Control whether or not optimizer trace is generated in html.
 	 *

Modified: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/optional/OptimizerTracer.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/optional/OptimizerTracer.java?rev=1456579&r1=1456578&r2=1456579&view=diff
==============================================================================
--- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/optional/OptimizerTracer.java (original)
+++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/optional/OptimizerTracer.java Thu Mar 14 18:06:15 2013
@@ -21,6 +21,7 @@
 
 package org.apache.derby.impl.tools.optional;
 
+import java.io.FileWriter;
 import java.sql.SQLException;
 
 import org.apache.derby.iapi.db.OptimizerTrace;
@@ -74,16 +75,52 @@ public	class   OptimizerTracer  implemen
 
     /**
      * <p>
-     * Dump the optimizer trace and turn off tracing.
+     * Dump the optimizer trace and turn off tracing. Takes optional parameters:
      * </p>
+     *
+     * <ul>
+     * <li><b>fileName</b> - Where to write the optimizer trace. If omitted, the trace is written to System.out.</li>
+     * </ul>
      */
     public  void    unloadTool( String... configurationParameters )
         throws SQLException
     {
-        System.out.println( OptimizerTrace.getOptimizerTraceOutput() );
+        String  trace = OptimizerTrace.getOptimizerTraceOutput();
+        if ( trace == null ) { trace = ""; }
+
+        OptimizerTrace.nullifyTrace();
+        
+        if (
+            (configurationParameters != null) &&
+            (configurationParameters.length > 0)
+            )
+        {
+            try {
+                FileWriter    writer = new FileWriter( configurationParameters[ 0 ] );
+
+                writer.write( trace );
+                writer.flush();
+                writer.close();
+            } catch (Exception e) { throw wrap( e ); }
+        }
+        else
+        {
+            System.out.println( trace );
+        }
 
         OptimizerTrace.setOptimizerTrace( false );
     }
 
+    ////////////////////////////////////////////////////////////////////////
+    //
+    //	MINIONS
+    //
+    ////////////////////////////////////////////////////////////////////////
+
+    /** Wrap an exception in a SQLException */
+    private SQLException    wrap( Throwable t )
+    {
+        return new SQLException( t.getMessage(), t );
+    }
 }