db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From banda...@apache.org
Subject svn commit: r165178 [9/26] - in /incubator/derby/code/trunk: ./ java/client/ java/client/org/ java/client/org/apache/ java/client/org/apache/derby/ java/client/org/apache/derby/client/ java/client/org/apache/derby/client/am/ java/client/org/apache/derby/client/net/ java/client/org/apache/derby/client/resources/ java/client/org/apache/derby/jdbc/ tools/ant/properties/
Date Thu, 28 Apr 2005 19:05:45 GMT
Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/FloatingPoint.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/FloatingPoint.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/FloatingPoint.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/FloatingPoint.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,130 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.FloatingPoint
+
+   Copyright (c) 2001, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+package org.apache.derby.client.am;
+
+/**
+ * Converters from floating point bytes to Java <code>float</code>, <code>double</code>,
+ * or <code>java.math.BigDecimal</code>.
+ */
+public class FloatingPoint
+{
+  // Hide the default constructor, this is a static class.
+  private FloatingPoint () {}
+
+  /**
+   * Supported Unix Big Endian IEEE 754 floating point representation.
+   */
+  public final static int IEEE_754_FLOATING_POINT = 0x48;
+
+  //--------------------------private helper methods----------------------------
+
+  /**
+   * Convert the byte array to an int.
+   */
+  private static final int convertFromByteToInt(byte[] buffer, int offset)
+  {
+    return (  buffer[offset]           << 24 ) |
+           ( (buffer[offset+1] & 0xFF) << 16 ) |
+           ( (buffer[offset+2] & 0xFF) << 8  ) |
+           (  buffer[offset+3] & 0xFF );
+  }
+
+  /**
+   * Convert the byte array to a long.
+   */
+  private static final long convertFromByteToLong(byte[] buffer, int offset)
+  {
+    return ( (buffer[offset]   & 0xFFL) << 56 ) |
+           ( (buffer[offset+1] & 0xFFL) << 48 ) |
+           ( (buffer[offset+2] & 0xFFL) << 40 ) |
+           ( (buffer[offset+3] & 0xFFL) << 32 ) |
+           ( (buffer[offset+4] & 0xFFL) << 24 ) |
+           ( (buffer[offset+5] & 0xFFL) << 16 ) |
+           ( (buffer[offset+6] & 0xFFL) << 8  ) |
+           (  buffer[offset+7] & 0xFFL );
+  }
+
+
+  //--------------entry points for runtime representation-----------------------
+
+  /**
+   * Build a Java float from a 4-byte floating point representation.
+   * <p>
+   * This includes DERBY types:
+   * <ul>
+   * <li> REAL
+   * <li> FLOAT(1<=n<=24)
+   * </ul>
+   *
+   * @exception IllegalArgumentException if the specified representation is not recognized.
+   */
+  public static final float getFloat (byte[] buffer, int offset)
+  {
+    return Float.intBitsToFloat (convertFromByteToInt (buffer, offset));
+  }
+
+  /**
+   * Build a Java double from an 8-byte floating point representation.
+   * <p>
+   * <p>
+   * This includes DERBY types:
+   * <ul>
+   * <li> FLOAT
+   * <li> DOUBLE [PRECISION]
+   * </ul>
+   *
+   * @exception IllegalArgumentException if the specified representation is not recognized.
+   */
+  public static final double getDouble (byte[] buffer, int offset)
+  {
+    return Double.longBitsToDouble (convertFromByteToLong (buffer, offset));
+  }
+
+  //--------------entry points for runtime representation-----------------------
+
+  /**
+   * Write a Java <code>float</code> to a 4-byte floating point representation.
+   */
+  public static final void floatToIeee754Bytes (byte[] buffer, int offset, float f)
+  {
+    int intBits = Float.floatToIntBits (f);
+    buffer[offset]   = (byte) ((intBits >>> 24) & 0xFF);
+    buffer[offset+1] = (byte) ((intBits >>> 16) & 0xFF);
+    buffer[offset+2] = (byte) ((intBits >>>  8) & 0xFF);
+    buffer[offset+3] = (byte) ( intBits        & 0xFF);
+  }
+
+  /**
+   * Write a Java <code>double</code> to an 8-byte double precision
+   * floating point representation.
+  */
+  public static final void doubleToIeee754Bytes (byte[] buffer, int offset, double d)
+  {
+    long longBits = Double.doubleToLongBits (d);
+    buffer[offset]   = (byte) ((longBits >>> 56) & 0xFF);
+    buffer[offset+1] = (byte) ((longBits >>> 48) & 0xFF);
+    buffer[offset+2] = (byte) ((longBits >>> 40) & 0xFF);
+    buffer[offset+3] = (byte) ((longBits >>> 32) & 0xFF);
+    buffer[offset+4] = (byte) ((longBits >>> 24) & 0xFF);
+    buffer[offset+5] = (byte) ((longBits >>> 16) & 0xFF);
+    buffer[offset+6] = (byte) ((longBits >>>  8) & 0xFF);
+    buffer[offset+7] = (byte) ( longBits        & 0xFF);
+  }
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/FloatingPoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetFileInputStreamAction.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetFileInputStreamAction.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetFileInputStreamAction.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetFileInputStreamAction.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,55 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.GetFileInputStreamAction
+
+   Copyright (c) 2002, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+/**
+ * Java 2 PrivilegedExceptionAction encapsulation of creating a new FileInputStream
+ * throws FileNotFoundException
+ */
+public class GetFileInputStreamAction implements java.security.PrivilegedExceptionAction
+{
+  // the pathname used by the input file in the file system
+  private String filePathName_ = null;
+  
+  private String canonicalPath_ = null; 
+
+  //-------------------- Constructors --------------------
+
+  public GetFileInputStreamAction (String filePathName)
+  {
+    filePathName_ = filePathName;
+  }
+
+  //-------------------- methods --------------------
+
+  public Object run() throws java.io.IOException
+  {
+    java.io.File file = new java.io.File (filePathName_);
+    java.io.FileInputStream fileInputStream = new java.io.FileInputStream (file);
+    canonicalPath_ = file.getCanonicalPath();
+    return fileInputStream;
+  }
+  
+  public String getCanonicalPath()
+  {
+    return canonicalPath_;
+  }
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetFileInputStreamAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceBundleAction.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceBundleAction.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceBundleAction.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceBundleAction.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,43 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.GetResourceBundleAction
+
+   Copyright (c) 2002, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+// Java 2 PrivilegedExceptionAction encapsulation of java.util.ResourceBundle.getBundle() action
+public class GetResourceBundleAction implements java.security.PrivilegedExceptionAction
+{
+  private String resourceBundleName_ = null; // class name for resources
+
+  // the base name of the resource bundle, a fully qualified class name
+  public GetResourceBundleAction (String resourceBundleName)
+  {
+    resourceBundleName_ = resourceBundleName;
+  }
+
+  public Object run () throws NullPointerException, java.util.MissingResourceException
+  {
+    return java.util.ResourceBundle.getBundle (resourceBundleName_);
+  }
+
+  public void setResourceBundleName (String resourceBundleName)
+  {
+    resourceBundleName_ = resourceBundleName;
+  }
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceBundleAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceInputStreamAction.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceInputStreamAction.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceInputStreamAction.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceInputStreamAction.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,100 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.GetResourceInputStreamAction
+
+   Copyright (c) 2003, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+/**
+ * Java 2 PrivilegedAction encapsulation of attempting to acquire driver-general
+ * properties as a System resource.
+ */
+public class GetResourceInputStreamAction implements java.security.PrivilegedAction
+{
+  // Name for loading the resource.
+  private String resourceName_ = null;
+  // Path of the resource being loaded.
+  private String resourcePath_ = null;
+  // Class loader being used to load the resource.
+  private String resourceLoaderId_ = null;
+
+  //-------------------- Constructors --------------------
+  
+  public GetResourceInputStreamAction (String resourceName)
+  {
+    resourceName_ = resourceName;
+  }
+
+  //-------------------- methods --------------------
+
+  public Object run()
+  {
+    try {
+      ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
+      if (contextLoader != null) {
+        java.net.URL resourceUrl = contextLoader.getResource (resourceName_);
+        if (resourceUrl != null) {
+          resourcePath_ = resourceUrl.getPath();
+          resourceLoaderId_ = "Context ClassLoader: " + contextLoader;
+          return contextLoader.getResourceAsStream (resourceName_);
+        }
+      }
+      ClassLoader thisLoader = getClass().getClassLoader();
+      if (thisLoader != contextLoader) {
+        java.net.URL resourceUrl = thisLoader.getResource (resourceName_);
+        if (resourceUrl != null) {
+          resourcePath_ = resourceUrl.getPath();
+          resourceLoaderId_ = "Driver ClassLoader: " + thisLoader;
+          return thisLoader.getResourceAsStream (resourceName_);
+        }
+      }
+      ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
+      if (systemLoader != contextLoader &&
+          systemLoader != thisLoader) {
+        java.net.URL resourceUrl = systemLoader.getResource (resourceName_);
+        if (resourceUrl != null) {
+          resourcePath_ = resourceUrl.getPath();
+          resourceLoaderId_ = "System ClassLoader: " + systemLoader;
+          return systemLoader.getResourceAsStream (resourceName_);
+        }
+      }
+      return null;
+    }
+    catch (java.security.AccessControlException ace) {
+      // This happens in an Applet environment,
+      // so return with null.
+      return null;
+    }
+  }
+  
+  public void setResourceName (String resourceName)
+  {
+    resourceName_ = resourceName;
+  }
+  
+  public String getResourcePath()
+  {
+    return resourcePath_;
+  }
+  
+  public String getResourceLoaderId()
+  {
+    return resourceLoaderId_;
+  }
+
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetResourceInputStreamAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetSystemPropertiesAction.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetSystemPropertiesAction.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetSystemPropertiesAction.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetSystemPropertiesAction.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,57 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.GetSystemPropertiesAction
+
+   Copyright (c) 2002, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+
+/**
+ * Java 2 PrivilegedAction encapsulation of System getProperties processing
+ */
+public class GetSystemPropertiesAction implements java.security.PrivilegedAction
+{
+  // System properties values, i.e. output from System.getProperties()
+  private java.util.Properties systemProperties_ = null;
+
+  //============================== Constructor ==============================
+
+  //-------------------- GetSystemPropertiesAction --------------------
+  /**
+   * Constructor.
+   */
+  public GetSystemPropertiesAction ()
+  {}
+
+  /**
+   * Performs the privileged action of System.getProperties()
+   */
+  public Object run()
+  {
+    this.systemProperties_ = System.getProperties();
+    return this.systemProperties_;
+  }
+
+  /**
+   * Accessor for system properties (used after run() method invocation)
+   */
+  public java.util.Properties getSystemProperties()
+  {
+    return this.systemProperties_;
+  }
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/GetSystemPropertiesAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Lob.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Lob.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Lob.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Lob.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,102 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.Lob
+
+   Copyright (c) 2001, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+public abstract class Lob implements UnitOfWorkListener
+{
+  // The following flags specify the data type(s) a LOB instance currently contains
+  public static final int STRING = 2;
+  public static final int ASCII_STREAM = 4;
+  public static final int UNICODE_STREAM = 8;
+  public static final int CHARACTER_STREAM = 16;
+  public static final int BINARY_STREAM = 32;
+  public static final int BINARY_STRING = 64;
+
+  //---------------------navigational members-----------------------------------
+  protected Agent agent_;
+
+  //-----------------------------state------------------------------------------
+  protected int dataType_ = 0;      // data type(s) the LOB instance currently contains
+
+  protected long sqlLength_;      // length of the LOB value, as defined by the server
+  protected boolean lengthObtained_;
+
+  //---------------------constructors/finalizer---------------------------------
+  protected Lob (Agent agent)
+  {
+    agent_ = agent;
+    lengthObtained_ = false;
+  }
+
+  protected void finalize () throws java.lang.Throwable
+  {
+    super.finalize();
+  }
+
+  // ---------------------------jdbc 2------------------------------------------
+
+  // should only be called by a synchronized method.
+
+
+  // should only be called by a synchronized method.
+  public long sqlLength () throws SqlException
+  {
+    checkForClosedConnection ();
+
+    return sqlLength_;
+  }
+
+
+  //-----------------------event callback methods-------------------------------
+
+  public void listenToUnitOfWork()
+  {
+    agent_.connection_.CommitAndRollbackListeners_.add (this);
+  }
+
+  public void completeLocalCommit (java.util.Iterator listenerIterator)
+  {
+    listenerIterator.remove();
+  }
+
+  public void completeLocalRollback (java.util.Iterator listenerIterator)
+  {
+    listenerIterator.remove();
+  }
+
+  //----------------------------helper methods----------------------------------
+
+  public Agent getAgent () { return agent_; }
+
+  void checkForClosedConnection () throws SqlException
+  {
+    if (agent_.connection_.isClosedX()) {
+      agent_.checkForDeferredExceptions();
+      throw new SqlException (agent_.logWriter_, "Lob method called after connection was closed");
+    }
+    else {
+      agent_.checkForDeferredExceptions();
+    }
+  }
+
+  void completeLocalRollback() { ; }
+  void completeLocalCommit() { ; }
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Lob.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogWriter.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogWriter.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogWriter.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogWriter.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,1095 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.LogWriter
+
+   Copyright (c) 2001, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+import org.apache.derby.jdbc.ClientDataSource;
+
+public class LogWriter
+{
+  protected java.io.PrintWriter printWriter_;
+  protected int traceLevel_;
+  private boolean driverConfigurationHasBeenWrittenToJdbc1Stream_ = false;
+  private boolean driverConfigurationHasBeenWrittenToJdbc2Stream_ = false;
+
+  // It is assumed that this constructor is never called when logWriter is null.
+  public LogWriter (java.io.PrintWriter printWriter, int traceLevel)
+  {
+    printWriter_ = printWriter;
+    traceLevel_ = traceLevel;
+  }
+
+  final protected boolean loggingEnabled (int traceLevel)
+  {
+    // It is an invariant that the printWriter is never null, so remove the
+    return printWriter_ != null && (traceLevel & traceLevel_) != 0;
+  }
+
+  final protected boolean traceSuspended () { return org.apache.derby.client.am.Configuration.traceSuspended__; }
+
+  // When garbage collector doesn't kick in in time
+  // to close file descriptors, "Too many open files"
+  // exception may occur (currently found on Linux).
+  // To minimize the chance of this problem happening,
+  // the print writer needs to be closed (after this
+  // DNC log writer is closed) when each connection has
+  // its own trace file (i.e. traceDirectory is specified).
+  public boolean printWriterNeedsToBeClosed_;
+
+  void close()
+  {
+    if (printWriterNeedsToBeClosed_) {
+      printWriter_.close();
+      printWriterNeedsToBeClosed_ = false;
+    }
+    // printWriter_ = null; // help GC.
+  }
+
+  // ---------------------------------------------------------------------------
+
+  public void dncprintln (String s)
+  {
+    synchronized (printWriter_) {
+      printWriter_.println ("[derby] " + s);
+      printWriter_.flush();
+    }
+  }
+
+  private void dncprint (String s)
+  {
+    synchronized (printWriter_) {
+      printWriter_.print ("[derby] " + s);
+      printWriter_.flush();
+    }
+  }
+
+  private void dncprintln (String header, String s)
+  {
+    synchronized (printWriter_) {
+      printWriter_.println ("[derby]" + header + " " + s);
+      printWriter_.flush();
+    }
+  }
+
+  private void dncprint (String header, String s)
+  {
+    synchronized (printWriter_) {
+      printWriter_.print ("[derby]" + header + " " + s);
+      printWriter_.flush();
+    }
+  }
+
+  // ------------------------ tracepoint api -----------------------------------
+
+  public void tracepoint (String component, int tracepoint, String message)
+  {
+    if (traceSuspended()) return;
+    dncprintln (component,
+      "[time:" + System.currentTimeMillis() + "]" +
+      "[thread:" + Thread.currentThread().getName() + "]" +
+      "[tracepoint:" + tracepoint + "]" +
+      message);
+  }
+
+  public void tracepoint (String component, int tracepoint,
+                          String classContext, String methodContext)
+  {
+    if (traceSuspended()) return;
+    String staticContextTracepointRecord =
+      component +
+      "[time:" + System.currentTimeMillis() + "]" +
+      "[thread:" + Thread.currentThread().getName() + "]" +
+      "[tracepoint:" + tracepoint + "]" +
+      "[" + classContext + "." + methodContext + "]";
+    dncprintln (staticContextTracepointRecord);
+  }
+
+  public void tracepoint (String component, int tracepoint,
+                          Object instance, String classContext, String methodContext)
+  {
+    if (traceSuspended()) return;
+    String instanceContextTracepointRecord =
+      component +
+      "[time:" + System.currentTimeMillis() + "]" +
+      "[thread:" + Thread.currentThread().getName() + "]" +
+      "[tracepoint:" + tracepoint + "]" +
+      "[" + classContext + "@" + Integer.toHexString (instance.hashCode()) + "." + methodContext + "]";
+    dncprintln (instanceContextTracepointRecord);
+  }
+
+  public void tracepoint (String component, int tracepoint,
+                          String classContext, String methodContext,
+                          java.util.Map memory)
+  {
+    if (traceSuspended()) return;
+    String staticContextTracepointRecord =
+      component +
+      "[time:" + System.currentTimeMillis() + "]" +
+      "[thread:" + Thread.currentThread().getName() + "]" +
+      "[tracepoint:" + tracepoint + "]" +
+      "[" + classContext + "." + methodContext + "]";
+    dncprintln (staticContextTracepointRecord + getMemoryMapDisplay (memory));
+  }
+
+  public void tracepoint (String component, int tracepoint,
+                          Object instance, String classContext, String methodContext,
+                          java.util.Map memory)
+  {
+    if (traceSuspended()) return;
+    String instanceContextTracepointRecord =
+      component +
+      "[time:" + System.currentTimeMillis() + "]" +
+      "[thread:" + Thread.currentThread().getName() + "]" +
+      "[tracepoint:" + tracepoint + "]" +
+      "[" + classContext + "@" + Integer.toHexString (instance.hashCode()) + "." + methodContext + "]";
+    dncprintln (instanceContextTracepointRecord + getMemoryMapDisplay (memory));
+  }
+
+  private String getMemoryMapDisplay (java.util.Map memory)
+  {
+    return memory.toString(); // need to loop thru all keys in the map and print values
+  }
+
+  // ------------- API entry and exit trace methods ----------------------------
+  // Entry and exit are be traced separately because input arguments need
+  // to be traced before any potential exception can occur.
+  // Exit tracing is only performed on methods that return values.
+  // Entry tracing is only performed on methods that update state,
+  // so entry tracing is not performed on simple getter methods.
+  // We could decide in the future to restrict entry tracing only to methods with input arguments.
+
+  private void traceExternalMethod (Object instance, String className, String methodName)
+  {
+    if (traceSuspended()) return;
+    dncprint (buildExternalMethodHeader (instance, className), methodName);
+  }
+
+  private void traceExternalDeprecatedMethod (Object instance, String className, String methodName)
+  {
+    if (traceSuspended()) return;
+    dncprint (buildExternalMethodHeader (instance, className), "Deprecated " + methodName);
+  }
+
+  private String buildExternalMethodHeader (Object instance, String className)
+  {
+    return
+      "[Time:" + System.currentTimeMillis() + "]" +
+      "[Thread:" + Thread.currentThread().getName() + "]" +
+      "[" + className + "@" + Integer.toHexString (instance.hashCode()) + "]";
+  }
+
+  private String getClassNameOfInstanceIfTraced (Object instance)
+  {
+    if (instance == null) // this prevents NPE from instance.getClass() used below
+      return null;
+    else if (instance instanceof Connection && loggingEnabled (ClientDataSource.TRACE_CONNECTION_CALLS))
+      return "Connection";
+    else if (instance instanceof ResultSet && loggingEnabled (ClientDataSource.TRACE_RESULT_SET_CALLS))
+      return "ResultSet";
+    else if (instance instanceof CallableStatement && loggingEnabled (ClientDataSource.TRACE_STATEMENT_CALLS))
+      return "CallableStatement";
+    else if (instance instanceof PreparedStatement && loggingEnabled (ClientDataSource.TRACE_STATEMENT_CALLS))
+      return "PreparedStatement";
+    else if (instance instanceof Statement && loggingEnabled (ClientDataSource.TRACE_STATEMENT_CALLS))
+      return "Statement";
+    // Not yet externalizing Blob tracing, except for trace_all
+    else if (instance instanceof Blob && loggingEnabled (ClientDataSource.TRACE_ALL)) // add a trace level for lobs !!
+      return "Blob";
+    // Not yet externalizing Clob tracing, except for trace_all
+    else if (instance instanceof Clob && loggingEnabled (ClientDataSource.TRACE_ALL)) // add a trace level for bobs !!
+      return "Clob";
+    // Not yet externalizing dbmd catalog call tracing, except for trace_all
+    else if (instance instanceof DatabaseMetaData && loggingEnabled (ClientDataSource.TRACE_ALL)) // add a trace level for dbmd ??
+      return "DatabaseMetaData";
+    // we don't use instanceof javax.transaction.XAResource to avoid dependency on j2ee.jar
+    else if (loggingEnabled (ClientDataSource.TRACE_XA_CALLS) &&
+             instance.getClass().getName().startsWith ("org.apache.derby.client.net.NetXAResource"))
+      return "NetXAResource";
+    else if (loggingEnabled (ClientDataSource.TRACE_ALL) &&
+      instance.getClass().getName().equals("org.apache.derby.client.ClientPooledConnection"))
+      return "ClientPooledConnection";
+    else if (loggingEnabled (ClientDataSource.TRACE_ALL) &&
+      instance.getClass().getName().equals("org.apache.derby.jdbc.ClientConnectionPoolDataSource"))
+      return "ClientConnectionPoolDataSource";
+    else if (loggingEnabled (ClientDataSource.TRACE_ALL) &&
+      instance.getClass().getName().equals("org.apache.derby.client.ClientXAConnection"))
+      return "ClientXAConnection";
+    else if (loggingEnabled (ClientDataSource.TRACE_ALL) &&
+      instance.getClass().getName().equals("org.apache.derby.jdbc.ClientDataSource"))
+      return "ClientDataSource";
+    else if (loggingEnabled (ClientDataSource.TRACE_ALL) &&
+      instance.getClass().getName().equals("org.apache.derby.jdbc.ClientXADataSource"))
+      return "ClientXADataSource";
+    else
+      return instance.getClass().getName();
+  }
+
+  // --------------------------- method exit tracing --------------------------
+
+  public void traceExit (Object instance, String methodName, Object returnValue)
+  {
+    if (traceSuspended()) return;
+    String className = getClassNameOfInstanceIfTraced (instance);
+    if (className == null) return;
+    synchronized (printWriter_) {
+      traceExternalMethod (instance, className, methodName);
+      printWriter_.println (" () returned " + returnValue);
+      printWriter_.flush();
+    }
+  }
+
+  public void traceDeprecatedExit (Object instance, String methodName, Object returnValue)
+  {
+    if (traceSuspended()) return;
+    String className = getClassNameOfInstanceIfTraced (instance);
+    if (className == null) return;
+    synchronized (printWriter_) {
+      traceExternalDeprecatedMethod (instance, className, methodName);
+      printWriter_.println (" () returned " + returnValue);
+      printWriter_.flush();
+    }
+  }
+
+  public void traceExit (Object instance, String methodName, ResultSet resultSet)
+  {
+    if (traceSuspended()) return;
+    String returnValue = (resultSet == null) ? "ResultSet@null" : "ResultSet@" + Integer.toHexString (resultSet.hashCode());
+    traceExit (instance, methodName, returnValue);
+  }
+
+  public void traceExit (Object instance, String methodName, CallableStatement returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, "CallableStatement@" + Integer.toHexString (returnValue.hashCode()));
+  }
+
+  public void traceExit (Object instance, String methodName, PreparedStatement returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, "PreparedStatement@" + Integer.toHexString (returnValue.hashCode()));
+  }
+
+  public void traceExit (Object instance, String methodName, Statement returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, "Statement@" + Integer.toHexString (returnValue.hashCode()));
+  }
+
+  public void traceExit (Object instance, String methodName, Blob blob)
+  {
+    if (traceSuspended()) return;
+    String returnValue = (blob == null) ? "Blob@null" : "Blob@" + Integer.toHexString (blob.hashCode());
+    traceExit (instance, methodName, returnValue);
+  }
+
+  public void traceExit (Object instance, String methodName, Clob clob)
+  {
+    if (traceSuspended()) return;
+    String returnValue = (clob == null) ? "Clob@null" : "Clob@" + Integer.toHexString (clob.hashCode());
+    traceExit (instance, methodName, returnValue);
+  }
+
+  public void traceExit (Object instance, String methodName, DatabaseMetaData returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, "DatabaseMetaData@" + Integer.toHexString (returnValue.hashCode()));
+  }
+
+  public void traceExit (Object instance, String methodName, Connection returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, "Connection@" + Integer.toHexString (returnValue.hashCode()));
+  }
+
+  public void traceExit (Object instance, String methodName, ColumnMetaData returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, "MetaData@" + (returnValue != null ? Integer.toHexString (returnValue.hashCode()) : null));
+  }
+
+  public void traceExit (Object instance, String methodName, byte[] returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, Utils.getStringFromBytes (returnValue));
+  }
+
+  public void traceExit (Object instance, String methodName, int[] returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, Utils.getStringFromInts (returnValue));
+  }
+
+  public void traceDeprecatedExit (Object instance, String methodName, byte[] returnValue)
+  {
+    if (traceSuspended()) return;
+    traceDeprecatedExit (instance, methodName, Utils.getStringFromBytes (returnValue));
+  }
+
+  public void traceExit (Object instance, String methodName, byte returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, "0x" + Integer.toHexString (returnValue&0xff));
+  }
+
+  public void traceExit (Object instance, String methodName, int returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, String.valueOf (returnValue));
+  }
+
+  public void traceExit (Object instance, String methodName, boolean returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, String.valueOf (returnValue));
+  }
+
+  public void traceExit (Object instance, String methodName, long returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, String.valueOf (returnValue));
+  }
+
+  public void traceExit (Object instance, String methodName, float returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, String.valueOf (returnValue));
+  }
+
+  public void traceExit (Object instance, String methodName, double returnValue)
+  {
+    if (traceSuspended()) return;
+    traceExit (instance, methodName, String.valueOf (returnValue));
+  }
+
+  // --------------------------- method entry tracing --------------------------
+
+  private void traceEntryAllArgs (Object instance, String methodName, String argList)
+  {
+    if (traceSuspended()) return;
+    String className = getClassNameOfInstanceIfTraced (instance);
+    if (className == null) return;
+    synchronized (printWriter_) {
+      traceExternalMethod (instance, className, methodName);
+      printWriter_.println (" " + argList + " called");
+      printWriter_.flush();
+    }
+  }
+
+  private void traceDeprecatedEntryAllArgs (Object instance, String methodName, String argList)
+  {
+    if (traceSuspended()) return;
+    String className = getClassNameOfInstanceIfTraced (instance);
+    if (className == null) return;
+    synchronized (printWriter_) {
+      traceExternalDeprecatedMethod (instance, className, methodName);
+      printWriter_.println (" " + argList + " called");
+      printWriter_.flush();
+    }
+  }
+
+  // ---------------------- trace entry of methods w/ no args ------------------
+
+  public void traceEntry (Object instance, String methodName)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName, "()");
+  }
+
+  // ---------------------- trace entry of methods w/ 1 arg --------------------
+
+  public void traceEntry (Object instance, String methodName, Object argument)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + argument + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, boolean argument)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + argument + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int argument)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + argument + ")");
+  }
+
+  public void traceDeprecatedEntry (Object instance, String methodName, int argument)
+  {
+    if (traceSuspended()) return;
+    traceDeprecatedEntryAllArgs (instance, methodName,
+      "(" + argument + ")");
+  }
+
+  public void traceDeprecatedEntry (Object instance, String methodName, Object argument)
+  {
+    if (traceSuspended()) return;
+    traceDeprecatedEntryAllArgs (instance, methodName,
+      "(" + argument + ")");
+  }
+
+  // ---------------------- trace entry of methods w/ 2 args -------------------
+
+  public void traceEntry (Object instance, String methodName, Object arg1, Object arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, Object arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, byte[] arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + Utils.getStringFromBytes (arg2) + ")");
+  }
+
+  public void traceDeprecatedEntry (Object instance, String methodName, int arg1, int arg2)
+  {
+    if (traceSuspended()) return;
+    traceDeprecatedEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceDeprecatedEntry (Object instance, String methodName, Object arg1, int arg2)
+  {
+    if (traceSuspended()) return;
+    traceDeprecatedEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, boolean arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, byte arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", 0x" + Integer.toHexString (arg2&0xff) + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, short arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, int arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, long arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, float arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, int arg1, double arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, Object arg1, boolean arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, Object arg1, byte arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", 0x" + Integer.toHexString (arg2&0xff) + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, Object arg1, short arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, Object arg1, int arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, Object arg1, long arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, Object arg1, float arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName, Object arg1, double arg2)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ")");
+  }
+
+  // ---------------------- trace entry of methods w/ 3 args -------------------
+
+  public void traceEntry (Object instance, String methodName,
+                          Object arg1, Object arg2, Object arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                          int arg1, Object arg2, Object arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, Object arg2, int arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     int arg1, Object arg2, int arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceDeprecatedEntry (Object instance, String methodName,
+                     int arg1, Object arg2, int arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     int arg1, int arg2, Object arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     int arg1, int arg2, int arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, int arg2, int arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, int arg2, Object arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, boolean arg2, boolean arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, boolean arg2, int arg3)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ")");
+  }
+
+  // ---------------------- trace entry of methods w/ 4 args -------------------
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, Object arg2, Object arg3, Object arg4)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     int arg1, Object arg2, Object arg3, Object arg4)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     int arg1, Object arg2, int arg3, int arg4)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, int arg2, int arg3, int arg4)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, Object arg2, int arg3, int arg4)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ")");
+  }
+
+  // ---------------------- trace entry of methods w/ 5 args -------------------
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, Object arg2, Object arg3, int arg4, boolean arg5)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ", " + arg5 + ")");
+  }
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, Object arg2, Object arg3, boolean arg4, boolean arg5)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ", " + arg5 + ")");
+  }
+
+  // ---------------------- trace entry of methods w/ 6 args -------------------
+
+  public void traceEntry (Object instance, String methodName,
+                     Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6)
+  {
+    if (traceSuspended()) return;
+    traceEntryAllArgs (instance, methodName,
+      "(" + arg1 + ", " + arg2 + ", " + arg3 + ", " + arg4 + ", " + arg5 + ", " + arg6 + ")");
+  }
+
+  // ---------------------------tracing exceptions and warnings-----------------
+
+  public void traceDiagnosable (java.sql.SQLException e)
+  {
+    if (traceSuspended()) return;
+    if (!loggingEnabled (ClientDataSource.TRACE_DIAGNOSTICS)) return;
+    synchronized (printWriter_) {
+      dncprintln ("BEGIN TRACE_DIAGNOSTICS");
+      ExceptionFormatter.printTrace (e, printWriter_, "[derby]", true); // true means return tokens only
+      dncprintln ("END TRACE_DIAGNOSTICS");
+    }
+  }
+
+  public void traceDiagnosable (javax.transaction.xa.XAException e)
+  {
+    if (traceSuspended()) return;
+    if (!loggingEnabled (ClientDataSource.TRACE_DIAGNOSTICS)) return;
+    synchronized (printWriter_) {
+      dncprintln ("BEGIN TRACE_DIAGNOSTICS");
+      ExceptionFormatter.printTrace (e, printWriter_, "[derby]");
+      dncprintln ("END TRACE_DIAGNOSTICS");
+    }
+  }
+  // ------------------------ meta data tracing --------------------------------
+
+  public void traceParameterMetaData (Statement statement, ColumnMetaData columnMetaData)
+  {
+    if (traceSuspended()) return;
+    if (!loggingEnabled (ClientDataSource.TRACE_PARAMETER_META_DATA) || columnMetaData == null) return;
+    synchronized (printWriter_) {
+      String header = "[ParameterMetaData@" + Integer.toHexString (columnMetaData.hashCode()) + "]";
+      try {
+        dncprintln (header, "BEGIN TRACE_PARAMETER_META_DATA");
+        dncprintln (header, "Parameter meta data for statement Statement@" + Integer.toHexString (statement.hashCode()));
+        dncprintln (header, "Number of parameter columns: " + columnMetaData.getColumnCount());
+        traceColumnMetaData (header, columnMetaData);
+        dncprintln (header, "END TRACE_PARAMETER_META_DATA");
+      }
+      catch (SqlException e) {
+        dncprintln (header, "Encountered an SQL exception while trying to trace parameter meta data");
+        dncprintln (header, "END TRACE_PARAMETER_META_DATA");
+      }
+    }
+  }
+
+  public void traceResultSetMetaData (Statement statement, ColumnMetaData columnMetaData)
+  {
+    if (traceSuspended()) return;
+    if (!loggingEnabled (ClientDataSource.TRACE_RESULT_SET_META_DATA) || columnMetaData == null) return;
+    synchronized (printWriter_) {
+    String header = "[ResultSetMetaData@" + Integer.toHexString (columnMetaData.hashCode()) + "]";
+      try {
+        dncprintln (header, "BEGIN TRACE_RESULT_SET_META_DATA");
+        dncprintln (header, "Result set meta data for statement Statement@" + Integer.toHexString (statement.hashCode()));
+        dncprintln (header, "Number of result set columns: " + columnMetaData.getColumnCount());
+        traceColumnMetaData (header, columnMetaData);
+        dncprintln (header, "END TRACE_RESULT_SET_META_DATA");
+      }
+      catch (SqlException e) {
+        dncprintln (header, "Encountered an SQL exception while trying to trace result set meta data");
+        dncprintln (header, "END TRACE_RESULT_SET_META_DATA");
+      }
+    }
+  }
+
+  //-----------------------------transient state--------------------------------
+
+  private void traceColumnMetaData (String header, ColumnMetaData columnMetaData)
+  {
+    if (traceSuspended()) return;
+    try {
+      synchronized (printWriter_) {
+
+        for (int column = 1; column <= columnMetaData.getColumnCount(); column++) {
+          dncprint (header, "Column " + column + ": { ");
+          printWriter_.print ("label=" + columnMetaData.getColumnLabel (column) + ", ");
+          printWriter_.print ("name=" + columnMetaData.getColumnName (column) + ", ");
+          printWriter_.print ("type name=" + columnMetaData.getColumnTypeName (column) + ", ");
+          printWriter_.print ("type=" + columnMetaData.getColumnType (column) + ", ");
+          printWriter_.print ("nullable=" + columnMetaData.isNullable (column) + ", ");
+          printWriter_.print ("precision=" + columnMetaData.getPrecision (column) + ", ");
+          printWriter_.print ("scale=" + columnMetaData.getScale (column) + ", ");
+          printWriter_.print ("schema name=" + columnMetaData.getSchemaName (column) + ", ");
+          printWriter_.print ("table name=" + columnMetaData.getTableName (column) + ", ");
+          printWriter_.print ("writable=" + columnMetaData.isWritable (column) + ", ");
+          printWriter_.print ("sqlPrecision=" + (columnMetaData.sqlPrecision_ == null ? "<null>" : ""+columnMetaData.sqlPrecision_[column-1]) + ", ");
+          printWriter_.print ("sqlScale=" + (columnMetaData.sqlScale_ == null ? "<null>" : ""+columnMetaData.sqlScale_[column-1]) + ", ");
+          printWriter_.print ("sqlLength=" + (columnMetaData.sqlLength_ == null ? "<null>" : ""+columnMetaData.sqlLength_[column-1]) + ", ");
+          printWriter_.print ("sqlType=" + (columnMetaData.sqlType_ == null ? "<null>" : ""+columnMetaData.sqlType_[column-1]) + ", ");
+          printWriter_.print ("sqlCcsid=" + (columnMetaData.sqlCcsid_ == null ? "<null>" : ""+columnMetaData.sqlCcsid_[column-1]) + ", ");
+          printWriter_.print ("sqlName=" + (columnMetaData.sqlName_ == null ? "<null>" : columnMetaData.sqlName_[column-1]) + ", ");
+          printWriter_.print ("sqlLabel=" + (columnMetaData.sqlLabel_ == null ? "<null>" : columnMetaData.sqlLabel_[column-1]) + ", ");
+          printWriter_.print ("sqlUnnamed=" + (columnMetaData.sqlUnnamed_ == null ? "<null>" : ""+columnMetaData.sqlUnnamed_[column-1]) + ", ");
+          printWriter_.print ("sqlComment=" + (columnMetaData.sqlComment_ == null ? "<null>" : columnMetaData.sqlComment_[column-1]) + ", ");
+          printWriter_.print ("sqlxKeymem=" + (columnMetaData.sqlxKeymem_ == null ? "<null>" : ""+columnMetaData.sqlxKeymem_[column-1]) + ", ");
+          printWriter_.print ("sqlxGenerated=" + (columnMetaData.sqlxGenerated_ == null ? "<null>" : ""+columnMetaData.sqlxGenerated_[column-1]) + ", ");
+          printWriter_.print ("sqlxParmmode=" + (columnMetaData.sqlxParmmode_ == null ? "<null>" : ""+columnMetaData.sqlxParmmode_[column-1]) + ", ");
+          printWriter_.print ("sqlxCorname=" + (columnMetaData.sqlxCorname_ == null ? "<null>" : columnMetaData.sqlxCorname_[column-1]) + ", ");
+          printWriter_.print ("sqlxName=" + (columnMetaData.sqlxName_ == null ? "<null>" : columnMetaData.sqlxName_[column-1]) + ", ");
+          printWriter_.print ("sqlxBasename=" + (columnMetaData.sqlxBasename_ == null ? "<null>" : columnMetaData.sqlxBasename_[column-1]) + ", ");
+          printWriter_.print ("sqlxUpdatable=" + (columnMetaData.sqlxUpdatable_ == null ? "<null>" : ""+columnMetaData.sqlxUpdatable_[column-1]) + ", ");
+          printWriter_.print ("sqlxSchema=" + (columnMetaData.sqlxSchema_ == null ? "<null>" : columnMetaData.sqlxSchema_[column-1]) + ", ");
+          printWriter_.print ("sqlxRdbnam=" + (columnMetaData.sqlxRdbnam_ == null ? "<null>" : columnMetaData.sqlxRdbnam_[column-1]) + ", ");
+          printWriter_.print ("internal type=" + columnMetaData.types_[column-1] + ", ");
+          printWriter_.println (" }");
+        }
+        dncprint (header, "{ ");
+        printWriter_.print ("sqldHold=" + columnMetaData.sqldHold_ + ", ");
+        printWriter_.print ("sqldReturn=" + columnMetaData.sqldReturn_ + ", ");
+        printWriter_.print ("sqldScroll=" + columnMetaData.sqldScroll_ + ", ");
+        printWriter_.print ("sqldSensitive=" + columnMetaData.sqldSensitive_ + ", ");
+        printWriter_.print ("sqldFcode=" + columnMetaData.sqldFcode_ + ", ");
+        printWriter_.print ("sqldKeytype=" + columnMetaData.sqldKeytype_ + ", ");
+        printWriter_.print ("sqldRdbnam=" + columnMetaData.sqldRdbnam_ + ", ");
+        printWriter_.print ("sqldSchema=" + columnMetaData.sqldSchema_);
+        printWriter_.println (" }");
+        printWriter_.flush();
+      }
+    }
+    catch (SqlException e) {
+      dncprintln (header, "Encountered an SQL exception while trying to trace column meta data");
+    }
+  }
+
+  // ---------------------- 3-way tracing connects -----------------------------
+  // Including protocol manager levels, and driver configuration
+
+  // Jdbc 2
+  public void traceConnectEntry (ClientDataSource dataSource)
+  {
+    if (traceSuspended()) return;
+    if (loggingEnabled (ClientDataSource.TRACE_DRIVER_CONFIGURATION))
+      traceDriverConfigurationJdbc2 ();
+    if (loggingEnabled (ClientDataSource.TRACE_CONNECTS))
+      traceConnectsEntry (dataSource);
+  }
+
+  // Jdbc 1
+  public void traceConnectEntry ( String server,
+                                   int port,
+                                   String database,
+                                   java.util.Properties properties)
+  {
+    if (traceSuspended()) return;
+    if (loggingEnabled (ClientDataSource.TRACE_DRIVER_CONFIGURATION))
+      traceDriverConfigurationJdbc1 ();
+    if (loggingEnabled (ClientDataSource.TRACE_CONNECTS))
+      traceConnectsEntry (server, port, database, properties);
+  }
+
+  public void traceConnectResetEntry (Object instance, LogWriter logWriter, String user, ClientDataSource ds)
+  {
+    if (traceSuspended()) return;
+    traceEntry (instance, "reset", logWriter, user, "<escaped>", ds);
+    if (loggingEnabled(ClientDataSource.TRACE_CONNECTS))
+      traceConnectsResetEntry(ds);
+  }
+
+  public void traceConnectExit (Connection connection)
+  {
+    if (traceSuspended()) return;
+    if (loggingEnabled (ClientDataSource.TRACE_CONNECTS))
+      traceConnectsExit (connection);
+  }
+
+  public void traceConnectResetExit (Connection connection)
+  {
+    if (traceSuspended()) return;
+    if (loggingEnabled (ClientDataSource.TRACE_CONNECTS))
+      traceConnectsResetExit (connection);
+  }
+
+
+  // ---------------------- tracing connects -----------------------------------
+
+  private void traceConnectsResetEntry (ClientDataSource dataSource)
+  {
+    if (traceSuspended()) return;
+    try {
+      traceConnectsResetEntry (dataSource.getServerName(),
+                               dataSource.getPortNumber(),
+                               dataSource.getDatabaseName(),
+                               dataSource.getProperties());
+    }
+    catch (java.sql.SQLException e) {
+      dncprintln ("Encountered an SQL exception while trying to trace connection reset entry");
+    }
+  }
+
+  private void traceConnectsEntry (ClientDataSource dataSource)
+  {
+    if (traceSuspended()) return;
+    try {
+      traceConnectsEntry (dataSource.getServerName(),
+                          dataSource.getPortNumber(),
+                          dataSource.getDatabaseName(),
+                          dataSource.getProperties());
+    }
+    catch (java.sql.SQLException e) {
+      dncprintln ("Encountered an SQL exception while trying to trace connection entry");
+    }
+  }
+
+  private void traceConnectsResetEntry (String server,
+                                        int port,
+                                        String database,
+                                        java.util.Properties properties)
+  {
+    if (traceSuspended()) return;
+    dncprintln ("BEGIN TRACE_CONNECT_RESET");
+    dncprintln ("Connection reset requested for " + server + ":" + port + "/" + database);
+    dncprint ("Using properties: ");
+    writeProperties (properties);
+    dncprintln ("END TRACE_CONNECT_RESET");
+  }
+
+  private void traceConnectsEntry (String server,
+                                   int port,
+                                   String database,
+                                   java.util.Properties properties)
+  {
+    if (traceSuspended()) return;
+    synchronized (printWriter_) {
+      dncprintln ("BEGIN TRACE_CONNECTS");
+      dncprintln ("Attempting connection to " + server + ":" + port + "/" + database);
+      dncprint ("Using properties: ");
+      writeProperties (properties);
+      dncprintln ("END TRACE_CONNECTS");
+    }
+  }
+
+  // Specialized by NetLogWriter.traceConnectsExit()
+  public void traceConnectsExit (Connection c)
+  {
+    if (traceSuspended()) return;
+    synchronized (printWriter_) {
+      String header = "[Connection@" + Integer.toHexString (c.hashCode()) + "]";
+      try {
+        dncprintln (header, "BEGIN TRACE_CONNECTS");
+        dncprintln (header, "Successfully connected to server " + c.databaseMetaData_.getURL());
+        dncprintln (header, "User: " + c.databaseMetaData_.getUserName());
+        dncprintln (header, "Database product name: " + c.databaseMetaData_.getDatabaseProductName());
+        dncprintln (header, "Database product version: " + c.databaseMetaData_.getDatabaseProductVersion());
+        dncprintln (header, "Driver name: " + c.databaseMetaData_.getDriverName());
+        dncprintln (header, "Driver version: " + c.databaseMetaData_.getDriverVersion());
+        dncprintln (header, "END TRACE_CONNECTS");
+      }
+      catch (java.sql.SQLException e) {
+        dncprintln (header, "Encountered an SQL exception while trying to trace connection exit");
+        dncprintln (header, "END TRACE_CONNECTS");
+      }
+    }
+  }
+
+  public void traceConnectsResetExit (org.apache.derby.client.am.Connection c)
+  {
+    if (traceSuspended()) return;
+    synchronized (printWriter_) {
+      String header = "[Connection@" + Integer.toHexString (c.hashCode()) + "]";
+      try {
+        dncprintln (header, "BEGIN TRACE_CONNECT_RESET");
+        dncprintln (header, "Successfully reset connection to server " + c.databaseMetaData_.getURL());
+        dncprintln (header, "User: " + c.databaseMetaData_.getUserName());
+        dncprintln (header, "Database product name: " + c.databaseMetaData_.getDatabaseProductName());
+        dncprintln (header, "Database product version: " + c.databaseMetaData_.getDatabaseProductVersion());
+        dncprintln (header, "Driver name: " + c.databaseMetaData_.getDriverName());
+        dncprintln (header, "Driver version: " + c.databaseMetaData_.getDriverVersion());
+        dncprintln (header, "END TRACE_CONNECT_RESET");
+      }
+      catch (java.sql.SQLException e) {
+        dncprintln (header, "Encountered an SQL exception while trying to trace connection reset exit");
+        dncprintln (header, "END TRACE_CONNECT_RESET");
+      }
+    }
+  }
+
+
+  // properties.toString() will print out passwords,
+  // so this method was written to escape the password property value.
+  // printWriter_ synchronized by caller.
+  private void writeProperties (java.util.Properties properties)
+  {
+    printWriter_.print ("{ ");
+    for (java.util.Iterator i = properties.entrySet().iterator(); i.hasNext(); ) {
+      java.util.Map.Entry e = (java.util.Map.Entry) (i.next());
+      if ("password".equals(e.getKey())){
+        printWriter_.print ("password=" + escapePassword((String)e.getValue()));
+      }
+      else
+        printWriter_.print (e.getKey() + "=" + e.getValue());
+      if (i.hasNext())
+        printWriter_.print (", ");
+    }
+    printWriter_.println (" }");
+    printWriter_.flush();
+  }
+
+  private String escapePassword(String pw) {
+    StringBuffer sb = new StringBuffer (pw);
+    for (int j = 0; j< pw.length(); j++) {
+      sb.setCharAt(j,'*');
+    }
+    return sb.toString();
+  }
+  //-------------------------tracing driver configuration-----------------------
+
+  private void traceDriverConfigurationJdbc2 ()
+  {
+    if (traceSuspended()) return;
+    synchronized (printWriter_) {
+      if (!driverConfigurationHasBeenWrittenToJdbc2Stream_) {
+        writeDriverConfiguration();
+        driverConfigurationHasBeenWrittenToJdbc2Stream_ = true;
+      }
+    }
+  }
+
+  private void traceDriverConfigurationJdbc1 ()
+  {
+    if (traceSuspended()) return;
+    synchronized (printWriter_) {
+      if (!driverConfigurationHasBeenWrittenToJdbc1Stream_) {
+        writeDriverConfiguration();
+        driverConfigurationHasBeenWrittenToJdbc1Stream_ = true;
+      }
+    }
+  }
+
+  public void writeDriverConfiguration()
+  {
+    org.apache.derby.client.am.Version.writeDriverConfiguration (printWriter_);
+  }
+  public static java.io.PrintWriter getPrintWriter (String fileName, boolean fileAppend) throws SqlException
+  {
+    try {
+      java.io.PrintWriter printWriter = null;
+      String fileCanonicalPath = new java.io.File (fileName).getCanonicalPath();
+      printWriter =
+        new java.io.PrintWriter (
+          new java.io.BufferedOutputStream (
+            new java.io.FileOutputStream (fileCanonicalPath, fileAppend), 4096), true);
+      return printWriter;
+    }
+    catch (java.io.IOException e) {
+      throw new SqlException (null, "Unable to open file " + fileName);
+    }
+  }
+
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogWriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogicalConnection.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogicalConnection.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogicalConnection.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogicalConnection.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,348 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.LogicalConnection
+
+   Copyright (c) 2001, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+
+// A simple delegation wrapper handle for a physical connection.
+// All methods are forwarded to the underlying physical connection except for close() and isClosed().
+// When a physical connection is wrapped, it is non-null, when the logical connection
+// is closed, the wrapped physical connection is always set to null.
+// Both the finalizer and close() methods will always set the physical connection to null.
+// After the physical conneciton is set to null,
+// only the Pooled Connection instance will maintain a handle to the physical connection.
+public class LogicalConnection implements java.sql.Connection
+{
+  private Connection physicalConnection_ = null; // reset to null when the logical connection is closed.
+  private org.apache.derby.client.ClientPooledConnection pooledConnection_ = null;
+
+  public LogicalConnection (Connection physicalConnection,
+                            org.apache.derby.client.ClientPooledConnection pooledConnection) throws SqlException
+  {
+    physicalConnection_ = physicalConnection;
+    pooledConnection_ = pooledConnection;
+    checkForNullPhysicalConnection();
+  }
+
+  protected void finalize () throws java.lang.Throwable
+  {
+    close();
+  }
+
+  // Used by ClientPooledConnection close when it disassociates itself from the LogicalConnection
+  synchronized public void nullPhysicalConnection ()
+  {
+    physicalConnection_ = null;
+  }
+
+  // ------------------------ logical connection close -------------------------
+  // All methods are simply forwarded to the physical connection, except for close() and isClosed().
+
+  synchronized public void close () throws SqlException
+  {
+    // we also need to loop thru all the logicalStatements and close them
+    if (physicalConnection_ == null) return;
+    if (physicalConnection_.agent_.loggingEnabled())
+      physicalConnection_.agent_.logWriter_.traceEntry (this, "close");
+
+      if (physicalConnection_.isClosed()) // connection is closed or has become stale
+        pooledConnection_.trashConnection (new SqlException (null, "Connection is stale."));
+
+      else {
+      physicalConnection_.closeForReuse();
+      if ( ! physicalConnection_.isGlobalPending_() )
+        pooledConnection_.recycleConnection();
+      }
+      physicalConnection_ = null;
+    pooledConnection_.nullLogicalConnection();
+  }
+
+  synchronized public void closeWithoutRecyclingToPool () throws SqlException
+  {
+    if (physicalConnection_ == null) return;
+    physicalConnection_.checkForTransactionInProgress();
+    try {
+      if (physicalConnection_.isClosed()) // connection is closed or has become stale
+        throw new SqlException (null, "Connection is stale."); // no call to trashConnection()
+      else {
+        ; // no call to recycleConnection()
+      }
+    }
+    finally {
+      physicalConnection_.closeForReuse();  //poolfix
+      physicalConnection_ = null;
+    }
+  }
+
+  public boolean isClosed () throws SqlException
+  {
+    if (physicalConnection_ == null) return true;
+    return physicalConnection_.isClosed();
+  }
+
+  // --------------------------- helper methods --------------------------------
+
+  // this method doesn't wrap in the standard way, because it went out without a throws clause.
+  // Unlike all other LogicalConnection methods, if the physical connection is null, it won't throw an exception, but will return false.
+
+  private void checkForNullPhysicalConnection () throws SqlException
+  {
+    if (physicalConnection_ == null)
+      throw new SqlException (null, " Attempt to use a closed connection. ");
+  }
+
+  // ---------------------- wrapped public entry points ------------------------
+  // All methods are forwarded to the physical connection in a standard way
+
+  synchronized public java.sql.Statement createStatement () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.createStatement();
+  }
+
+  synchronized public java.sql.PreparedStatement prepareStatement (String sql) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareStatement(sql);
+  }
+
+  synchronized public PreparedStatement preparePositionedUpdateStatement (String sql, Section querySection) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.preparePositionedUpdateStatement (sql, querySection);
+  }
+
+  synchronized public java.sql.CallableStatement prepareCall (String sql) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareCall(sql);
+  }
+
+  public String nativeSQL (String sql) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.nativeSQL(sql);
+  }
+
+  synchronized public void setAutoCommit (boolean autoCommit) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.setAutoCommit(autoCommit);
+  }
+
+  public boolean getAutoCommit () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.getAutoCommit();
+  }
+
+  synchronized public void commit () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.commit();
+  }
+
+  synchronized public void rollback () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.rollback();
+  }
+
+  synchronized public void setTransactionIsolation (int level) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.setTransactionIsolation(level);
+  }
+
+  public int getTransactionIsolation () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.getTransactionIsolation();
+  }
+
+  public java.sql.SQLWarning getWarnings () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.getWarnings();
+  }
+
+  synchronized public void clearWarnings () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.clearWarnings();
+  }
+
+  public java.sql.DatabaseMetaData getMetaData () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.getMetaData();
+  }
+
+  synchronized public void setReadOnly (boolean readOnly) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.setReadOnly (readOnly);
+  }
+
+  public boolean isReadOnly () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.isReadOnly();
+  }
+
+  synchronized public void setCatalog (String catalog) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.setCatalog(catalog);
+  }
+
+  public String getCatalog () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.getCatalog();
+  }
+
+  synchronized public java.sql.Statement createStatement (int resultSetType,
+                                                          int resultSetConcurrency) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.createStatement(resultSetType, resultSetConcurrency);
+  }
+
+  synchronized public java.sql.PreparedStatement prepareStatement (String sql,
+                                                                   int resultSetType,
+                                                                   int resultSetConcurrency) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareStatement(sql, resultSetType, resultSetConcurrency);
+  }
+
+  synchronized public java.sql.CallableStatement prepareCall (String sql,
+                                                              int resultSetType,
+                                                              int resultSetConcurrency) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareCall(sql,  resultSetType, resultSetConcurrency);
+  }
+
+  public java.util.Map getTypeMap () throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.getTypeMap();
+  }
+
+  synchronized public void setTypeMap (java.util.Map map) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.setTypeMap(map);
+  }
+
+  public java.sql.Statement createStatement(int resultSetType, int resultSetConcurrency,
+			      int resultSetHoldability) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);
+  }
+
+  public java.sql.CallableStatement prepareCall(String sql, int resultSetType,
+				  int resultSetConcurrency,
+				  int resultSetHoldability) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability);
+  }
+
+  public java.sql.PreparedStatement prepareStatement(String sql, int resultSetType,
+				       int resultSetConcurrency, int resultSetHoldability)
+	throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareStatement(sql, resultSetType, resultSetConcurrency,
+      resultSetHoldability);
+  }
+
+  public java.sql.PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
+	throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareStatement(sql, autoGeneratedKeys);
+  }
+
+  public java.sql.PreparedStatement prepareStatement(String sql, int columnIndexes[])
+	throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareStatement(sql, columnIndexes);
+  }
+
+  public java.sql.PreparedStatement prepareStatement(String sql, String columnNames[])
+	throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.prepareStatement(sql, columnNames);
+  }
+
+  public void setHoldability(int holdability) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.setHoldability(holdability);
+  }
+
+  public int getHoldability() throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.getHoldability();
+  }
+
+  public java.sql.Savepoint setSavepoint() throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.setSavepoint ();
+  }
+
+  public java.sql.Savepoint setSavepoint(String name) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    return physicalConnection_.setSavepoint (name);
+  }
+
+  public void rollback(java.sql.Savepoint savepoint) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.rollback (savepoint);
+  }
+
+  public void releaseSavepoint(java.sql.Savepoint savepoint) throws SqlException
+  {
+    checkForNullPhysicalConnection();
+    physicalConnection_.releaseSavepoint (savepoint);
+  }
+
+  //----------------------------------------------------------------------------
+
+  public int getServerVersion()
+  {
+    if (physicalConnection_ == null)
+      return -1;
+    else
+      return physicalConnection_.getServerVersion();
+  }
+
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/LogicalConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialPreparedStatement.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialPreparedStatement.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialPreparedStatement.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialPreparedStatement.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,60 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.MaterialPreparedStatement
+
+   Copyright (c) 2001, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+import org.apache.derby.client.am.Section;
+
+public interface MaterialPreparedStatement extends MaterialStatement
+{
+
+
+  // ------------------------ abstract box car and callback methods --------------------------------
+
+  public abstract void writeExecute_ (Section section,
+                            ColumnMetaData parameterMetaData,
+                            Object[] inputs,
+                            int numInputColumns,
+                            boolean outputExpected,
+                            // This is a hint to the material layer that more write commands will follow.
+                            // It is ignored by the driver in all cases except when blob data is written,
+                            // in which case this boolean is used to optimize the implementation.
+                            // Otherwise we wouldn't be able to chain after blob data is sent.
+                            // Current servers have a restriction that blobs can only be chained with blobs
+                            // Can the blob code
+                            boolean chainedWritesFollowingSetLob
+                            ) throws SqlException;
+
+
+  public abstract void readExecute_ () throws SqlException;
+
+  public abstract void writeOpenQuery_ (Section section,
+                              int fetchSize,
+                              int resultSetType,
+                              int numInputColumns,
+                              ColumnMetaData parameterMetaData,
+                              Object[] inputs
+                              ) throws SqlException;
+  public abstract void writeDescribeInput_ (Section section) throws SqlException;
+  public abstract void readDescribeInput_ () throws SqlException;
+
+  public abstract void writeDescribeOutput_ (Section section) throws SqlException;
+  public abstract void readDescribeOutput_ () throws SqlException;
+}

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialPreparedStatement.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialStatement.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialStatement.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialStatement.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialStatement.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,64 @@
+/*
+
+   Derby - Class org.apache.derby.client.am.MaterialStatement
+
+   Copyright (c) 2001, 2005 The Apache Software Foundation or its licensors, where applicable.
+
+   Licensed 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.
+
+*/
+
+package org.apache.derby.client.am;
+
+import org.apache.derby.client.am.Section;
+
+public interface MaterialStatement
+{
+  public abstract void writeExecuteImmediate_ (String sql, Section section) throws SqlException;
+  public abstract void readExecuteImmediate_ () throws SqlException;
+  // The sql parameter is supplied in the read method for drivers that
+  // process all commands on the "read-side" and do little/nothing on the "write-side".
+  // Drivers that follow the write/read paradigm (e.g. NET) will likely ignore the sql parameter.
+  public abstract void readExecuteImmediateForBatch_ (String sql) throws SqlException;
+
+  public abstract void writePrepareDescribeOutput_ (String sql, Section section) throws SqlException;
+  public abstract void readPrepareDescribeOutput_ () throws SqlException;
+
+  public abstract void writeOpenQuery_ (Section section,
+                              int fetchSize,
+                              int resultSetType) throws SqlException;
+  public abstract void readOpenQuery_ () throws SqlException;
+
+  public abstract void writeExecuteCall_ (boolean outputExpected,
+                                String procedureName,
+                                Section section,
+                                int fetchSize,
+                                boolean suppressResultSets,  // for batch updates set to true, otherwise to false
+                                int resultSetType,
+                                ColumnMetaData parameterMetaData,
+                                Object[] inputs) throws SqlException;
+  public abstract void readExecuteCall_ () throws SqlException;
+
+  // Used for re-prepares across commit and other places as well
+  public abstract void writePrepare_ (String sql, Section section) throws SqlException;
+  public abstract void readPrepare_ () throws SqlException;
+
+  public abstract void markClosedOnServer_();
+
+  public abstract void writeSetSpecialRegister_ (java.util.ArrayList sqlsttList) throws SqlException;
+  public abstract void readSetSpecialRegister_ () throws SqlException;
+
+ public abstract void reset_ ();
+
+}
+

Propchange: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/MaterialStatement.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message