db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jboy...@apache.org
Subject svn commit: r165585 [21/42] - in /incubator/derby/code/trunk/java/client/org/apache/derby: client/ client/am/ client/net/ client/resources/ jdbc/
Date Mon, 02 May 2005 06:26:03 GMT
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Sqlca.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Sqlca.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Sqlca.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Sqlca.java Sun May 
1 23:25:59 2005
@@ -20,408 +20,404 @@
 
 package org.apache.derby.client.am;
 
-public abstract class Sqlca
-{
-  transient protected Connection connection_;
-  java.sql.SQLException exceptionThrownOnStoredProcInvocation_;
-  boolean messageTextRetrievedContainsTokensOnly_ = true;
-
-  // data corresponding to SQLCA fields
-  protected int      sqlCode_;        // SQLCODE
-  private String     sqlErrmc_;       // A string with all error tokens delimited by sqlErrmcDelimiter
-  protected String[] sqlErrmcTokens_; // A string array with each element
-  // contain an error token
-  protected String   sqlErrp_;        // function name issuing error
-  protected int[]    sqlErrd_;        // 6 diagnostic Information
-  protected char[]   sqlWarn_;        // 11 warning Flags
-  protected String   sqlState_;       // SQLSTATE
-
-  // raw sqlca data fields before unicode conversion
-  protected byte[] sqlErrmcBytes_;
-  protected byte[] sqlErrpBytes_;
-  protected byte[] sqlWarnBytes_;
-  protected byte[] sqlStateBytes_;
-
-  protected int ccsid_;
-  protected int sqlErrmcCcsid_;
-  protected boolean containsSqlcax_ = true;
-  protected long rowsetRowCount_;
-
-  //public static final String sqlErrmcDelimiter = "\u00FF";
-  private static final String sqlErrmcDelimiter__ = ";";
-
-  // JDK stack trace calls e.getMessage(), so we must set some state on the sqlca that says
return tokens only.
-  private boolean returnTokensOnlyInMessageText_ = false;
-
-  transient private final Agent agent_;
-
-  private String cachedMessage;
-
-  protected Sqlca (org.apache.derby.client.am.Connection connection)
-  {
-    connection_ = connection;
-    agent_ = connection_ != null ? connection_.agent_ : null;
-  }
-
-  void returnTokensOnlyInMessageText (boolean returnTokensOnlyInMessageText)
-  {
-    returnTokensOnlyInMessageText_ = returnTokensOnlyInMessageText;
-  }
-
-  synchronized public int getSqlCode ()
-  {
-    return sqlCode_;
-  }
-
-  synchronized public String getSqlErrmc()
-  {
-    if (sqlErrmc_ != null)
-      return sqlErrmc_;
-
-    // sqlErrmc string is dependent on sqlErrmcTokens array having been built
-    if (sqlErrmcTokens_ == null)
-      getSqlErrmcTokens();
-
-    // sqlErrmc will be build only if sqlErrmcTokens has been build.
-    // Otherwise, a null string will be returned.
-    if (sqlErrmcTokens_ == null)
-      return null;
-
-    // create 0-length String if no tokens
-    if (sqlErrmcTokens_.length == 0) {
-      sqlErrmc_ = "";
-      return sqlErrmc_;
-    }
-
-    // concatenate tokens with sqlErrmcDelimiter delimiters into one String
-    StringBuffer buffer = new StringBuffer();
-    int indx;
-    for (indx=0; indx < sqlErrmcTokens_.length-1; indx++) {
-      buffer.append (sqlErrmcTokens_[indx]);
-      buffer.append (sqlErrmcDelimiter__);
-    }
-    // add the last token
-    buffer.append (sqlErrmcTokens_[indx]);
-
-    // save as a string
-    sqlErrmc_ = buffer.toString();
-    return sqlErrmc_;
-  }
-
-  synchronized public String[] getSqlErrmcTokens ()
-  {
-    if (sqlErrmcTokens_ != null)
-      return sqlErrmcTokens_;
-
-    // processSqlErrmcTokens handles null sqlErrmcBytes_ case
-    sqlErrmcTokens_ = processSqlErrmcTokens (sqlErrmcBytes_);
-    return sqlErrmcTokens_;
-  }
-
-  synchronized public String getSqlErrp()
-  {
-    if (sqlErrp_ != null)
-      return sqlErrp_;
-
-    if (sqlErrpBytes_ == null)
-      return null;
-
-    try {
-      sqlErrp_ = bytes2String (sqlErrpBytes_,
-                               0,
-                               sqlErrpBytes_.length
-                               );
-      return sqlErrp_;
-    }
-    catch (java.io.UnsupportedEncodingException e) {
-      // leave sqlErrp as null.
-      return null;
-    }
-  }
-
-  public int[] getSqlErrd()
-  {
-    if (sqlErrd_ != null)
-      return sqlErrd_;
-
-    sqlErrd_ = new int[6]; // create an int array.
-    return sqlErrd_;
-  }
-
-  synchronized public char[] getSqlWarn()
-  {
-    if (sqlWarn_ != null)
-      return sqlWarn_;
-
-    try {
-      if (sqlWarnBytes_ == null)
-        sqlWarn_ = new char[] {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}; //
11 blank.
-      else
-        sqlWarn_ = bytes2String (sqlWarnBytes_, 0, sqlWarnBytes_.length ).toCharArray();
-      return sqlWarn_;
-    }
-    catch (java.io.UnsupportedEncodingException e) {
-      sqlWarn_ = new char[] {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}; // 11
blank.
-      return sqlWarn_;
-    }
-  }
-
-  synchronized public String getSqlState()
-  {
-    if (sqlState_ != null)
-      return sqlState_;
-
-    if (sqlStateBytes_ == null)
-      return null;
-
-    try {
-      sqlState_ = bytes2String (sqlStateBytes_,
-                                0,
-                                sqlStateBytes_.length
-                                );
-      return sqlState_;
-    }
-    catch (java.io.UnsupportedEncodingException e) {
-      // leave sqlState as null.
-      return null;
-    }
-  }
-
-  // Gets the formatted message, can throw an exception.
-  synchronized public String getMessage () throws SqlException
-  {
-    // should this be traced to see if we are calling a stored proc?
-    if (cachedMessage != null) return cachedMessage;
-
-      if (connection_ == null || connection_.isClosedX() || returnTokensOnlyInMessageText_)
-        return getUnformattedMessage();
-
-    CallableStatement cs = null;
-    synchronized (connection_) {
-      try {
-      cs = connection_.prepareMessageProc ("call SYSIBM.SQLCAMESSAGE(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
-
-      // SQLCode: SQL return code.
-        cs.setIntX (1, getSqlCode());
-      // SQLErrml: Length of SQL error message tokens.
-        cs.setShortX (2, (short) ((getSqlErrmc() != null)?getSqlErrmc().length():0));
-      // SQLErrmc: SQL error message tokens as a String (delimited by semicolon ";").
-        cs.setStringX (3, getSqlErrmc());
-      // SQLErrp: Product signature.
-        cs.setStringX (4, getSqlErrp());
-      // SQLErrd: SQL internal error code.
-        cs.setIntX (5,  getSqlErrd()[0]);
-        cs.setIntX (6,  getSqlErrd()[1]);
-        cs.setIntX (7,  getSqlErrd()[2]);
-        cs.setIntX (8,  getSqlErrd()[3]);
-        cs.setIntX (9,  getSqlErrd()[4]);
-        cs.setIntX (10, getSqlErrd()[5]);
-      // SQLWarn: SQL warning flags.
-        cs.setStringX (11, new String (getSqlWarn()));
-      // SQLState: standard SQL state.
-        cs.setStringX (12, getSqlState());
-      // MessageFileName: Not used by our driver, so set to null.
-        cs.setStringX (13, null);
-      // Locale: language preference requested for the return error message.
-        cs.setStringX (14, java.util.Locale.getDefault().toString());
-        // server could return a locale different from what we requested
-        cs.registerOutParameterX (14, java.sql.Types.VARCHAR);
-      // Message: error message returned from SQLCAMessage stored procedure.
-        cs.registerOutParameterX (15, java.sql.Types.LONGVARCHAR);
-      // RCode: return code from SQLCAMessage stored procedure.
-        cs.registerOutParameterX (16, java.sql.Types.INTEGER);
-        cs.executeX();
-
-        if (cs.getIntX(16) == 0) {
-          // Return the message text.
-          messageTextRetrievedContainsTokensOnly_ = false;
-          String message = cs.getStringX (15);
-          cachedMessage = message;
-          return message;
+public abstract class Sqlca {
+    transient protected Connection connection_;
+    java.sql.SQLException exceptionThrownOnStoredProcInvocation_;
+    boolean messageTextRetrievedContainsTokensOnly_ = true;
+
+    // data corresponding to SQLCA fields
+    protected int sqlCode_;        // SQLCODE
+    private String sqlErrmc_;       // A string with all error tokens delimited by sqlErrmcDelimiter
+    protected String[] sqlErrmcTokens_; // A string array with each element
+    // contain an error token
+    protected String sqlErrp_;        // function name issuing error
+    protected int[] sqlErrd_;        // 6 diagnostic Information
+    protected char[] sqlWarn_;        // 11 warning Flags
+    protected String sqlState_;       // SQLSTATE
+
+    // raw sqlca data fields before unicode conversion
+    protected byte[] sqlErrmcBytes_;
+    protected byte[] sqlErrpBytes_;
+    protected byte[] sqlWarnBytes_;
+    protected byte[] sqlStateBytes_;
+
+    protected int ccsid_;
+    protected int sqlErrmcCcsid_;
+    protected boolean containsSqlcax_ = true;
+    protected long rowsetRowCount_;
+
+    //public static final String sqlErrmcDelimiter = "\u00FF";
+    private static final String sqlErrmcDelimiter__ = ";";
+
+    // JDK stack trace calls e.getMessage(), so we must set some state on the sqlca that
says return tokens only.
+    private boolean returnTokensOnlyInMessageText_ = false;
+
+    transient private final Agent agent_;
+
+    private String cachedMessage;
+
+    protected Sqlca(org.apache.derby.client.am.Connection connection) {
+        connection_ = connection;
+        agent_ = connection_ != null ? connection_.agent_ : null;
+    }
+
+    void returnTokensOnlyInMessageText(boolean returnTokensOnlyInMessageText) {
+        returnTokensOnlyInMessageText_ = returnTokensOnlyInMessageText;
+    }
+
+    synchronized public int getSqlCode() {
+        return sqlCode_;
+    }
+
+    synchronized public String getSqlErrmc() {
+        if (sqlErrmc_ != null) {
+            return sqlErrmc_;
+        }
+
+        // sqlErrmc string is dependent on sqlErrmcTokens array having been built
+        if (sqlErrmcTokens_ == null) {
+            getSqlErrmcTokens();
+        }
+
+        // sqlErrmc will be build only if sqlErrmcTokens has been build.
+        // Otherwise, a null string will be returned.
+        if (sqlErrmcTokens_ == null) {
+            return null;
+        }
+
+        // create 0-length String if no tokens
+        if (sqlErrmcTokens_.length == 0) {
+            sqlErrmc_ = "";
+            return sqlErrmc_;
+        }
+
+        // concatenate tokens with sqlErrmcDelimiter delimiters into one String
+        StringBuffer buffer = new StringBuffer();
+        int indx;
+        for (indx = 0; indx < sqlErrmcTokens_.length - 1; indx++) {
+            buffer.append(sqlErrmcTokens_[indx]);
+            buffer.append(sqlErrmcDelimiter__);
+        }
+        // add the last token
+        buffer.append(sqlErrmcTokens_[indx]);
+
+        // save as a string
+        sqlErrmc_ = buffer.toString();
+        return sqlErrmc_;
+    }
+
+    synchronized public String[] getSqlErrmcTokens() {
+        if (sqlErrmcTokens_ != null) {
+            return sqlErrmcTokens_;
+        }
+
+        // processSqlErrmcTokens handles null sqlErrmcBytes_ case
+        sqlErrmcTokens_ = processSqlErrmcTokens(sqlErrmcBytes_);
+        return sqlErrmcTokens_;
+    }
+
+    synchronized public String getSqlErrp() {
+        if (sqlErrp_ != null) {
+            return sqlErrp_;
+        }
+
+        if (sqlErrpBytes_ == null) {
+            return null;
+        }
+
+        try {
+            sqlErrp_ = bytes2String(sqlErrpBytes_,
+                    0,
+                    sqlErrpBytes_.length);
+            return sqlErrp_;
+        } catch (java.io.UnsupportedEncodingException e) {
+            // leave sqlErrp as null.
+            return null;
+        }
+    }
+
+    public int[] getSqlErrd() {
+        if (sqlErrd_ != null) {
+            return sqlErrd_;
+        }
+
+        sqlErrd_ = new int[6]; // create an int array.
+        return sqlErrd_;
+    }
+
+    synchronized public char[] getSqlWarn() {
+        if (sqlWarn_ != null) {
+            return sqlWarn_;
+        }
+
+        try {
+            if (sqlWarnBytes_ == null) {
+                sqlWarn_ = new char[]{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '
'}; // 11 blank.
+            } else {
+                sqlWarn_ = bytes2String(sqlWarnBytes_, 0, sqlWarnBytes_.length).toCharArray();
+            }
+            return sqlWarn_;
+        } catch (java.io.UnsupportedEncodingException e) {
+            sqlWarn_ = new char[]{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
// 11 blank.
+            return sqlWarn_;
+        }
+    }
+
+    synchronized public String getSqlState() {
+        if (sqlState_ != null) {
+            return sqlState_;
+        }
+
+        if (sqlStateBytes_ == null) {
+            return null;
+        }
+
+        try {
+            sqlState_ = bytes2String(sqlStateBytes_,
+                    0,
+                    sqlStateBytes_.length);
+            return sqlState_;
+        } catch (java.io.UnsupportedEncodingException e) {
+            // leave sqlState as null.
+            return null;
+        }
+    }
+
+    // Gets the formatted message, can throw an exception.
+    synchronized public String getMessage() throws SqlException {
+        // should this be traced to see if we are calling a stored proc?
+        if (cachedMessage != null) {
+            return cachedMessage;
+        }
+
+        if (connection_ == null || connection_.isClosedX() || returnTokensOnlyInMessageText_)
{
+            return getUnformattedMessage();
+        }
+
+        CallableStatement cs = null;
+        synchronized (connection_) {
+            try {
+                cs = connection_.prepareMessageProc("call SYSIBM.SQLCAMESSAGE(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+
+                // SQLCode: SQL return code.
+                cs.setIntX(1, getSqlCode());
+                // SQLErrml: Length of SQL error message tokens.
+                cs.setShortX(2, (short) ((getSqlErrmc() != null) ? getSqlErrmc().length()
: 0));
+                // SQLErrmc: SQL error message tokens as a String (delimited by semicolon
";").
+                cs.setStringX(3, getSqlErrmc());
+                // SQLErrp: Product signature.
+                cs.setStringX(4, getSqlErrp());
+                // SQLErrd: SQL internal error code.
+                cs.setIntX(5, getSqlErrd()[0]);
+                cs.setIntX(6, getSqlErrd()[1]);
+                cs.setIntX(7, getSqlErrd()[2]);
+                cs.setIntX(8, getSqlErrd()[3]);
+                cs.setIntX(9, getSqlErrd()[4]);
+                cs.setIntX(10, getSqlErrd()[5]);
+                // SQLWarn: SQL warning flags.
+                cs.setStringX(11, new String(getSqlWarn()));
+                // SQLState: standard SQL state.
+                cs.setStringX(12, getSqlState());
+                // MessageFileName: Not used by our driver, so set to null.
+                cs.setStringX(13, null);
+                // Locale: language preference requested for the return error message.
+                cs.setStringX(14, java.util.Locale.getDefault().toString());
+                // server could return a locale different from what we requested
+                cs.registerOutParameterX(14, java.sql.Types.VARCHAR);
+                // Message: error message returned from SQLCAMessage stored procedure.
+                cs.registerOutParameterX(15, java.sql.Types.LONGVARCHAR);
+                // RCode: return code from SQLCAMessage stored procedure.
+                cs.registerOutParameterX(16, java.sql.Types.INTEGER);
+                cs.executeX();
+
+                if (cs.getIntX(16) == 0) {
+                    // Return the message text.
+                    messageTextRetrievedContainsTokensOnly_ = false;
+                    String message = cs.getStringX(15);
+                    cachedMessage = message;
+                    return message;
+                } else {
+                    // Stored procedure can't return a valid message text, so we return
+                    // unformated exception
+                    return getUnformattedMessage();
+                }
+            } finally {
+                if (cs != null) {
+                    try {
+                        cs.closeX();
+                    } catch (java.sql.SQLException doNothing) {
+                    }
+                }
+            }
+        }
+    }
+
+    // May or may not get the formatted message depending upon datasource directives.  cannot
throw exeption.
+    public synchronized String getJDBCMessage() {
+        // The transient connection_ member will only be null if the Sqlca has been deserialized
+        if (connection_ != null && connection_.retrieveMessageText_) {
+            try {
+                return getMessage();
+            } catch (SqlException e) {
+                // Invocation of stored procedure fails, so we return error message tokens
directly.
+                exceptionThrownOnStoredProcInvocation_ = e;
+                chainDeferredExceptionsToAgentOrAsConnectionWarnings((SqlException) e);
+                return getUnformattedMessage();
+            }
         } else {
-          // Stored procedure can't return a valid message text, so we return
-		  // unformated exception
-          return getUnformattedMessage();
-        }
-    }
-    finally {
-        if (cs != null) try { cs.closeX(); } catch (java.sql.SQLException doNothing) {}
-      }
-    }
-  }
-
-  // May or may not get the formatted message depending upon datasource directives.  cannot
throw exeption.
-  public synchronized String getJDBCMessage ()
-  {
-    // The transient connection_ member will only be null if the Sqlca has been deserialized
-    if (connection_ != null && connection_.retrieveMessageText_) {
-      try {
-        return getMessage();
-      }
-      catch (SqlException e) { 
-        // Invocation of stored procedure fails, so we return error message tokens directly.
-        exceptionThrownOnStoredProcInvocation_ = e;
-        chainDeferredExceptionsToAgentOrAsConnectionWarnings ((SqlException) e);
-        return getUnformattedMessage ();
-      }
-    }
-    else
-      return getUnformattedMessage ();
-  }
-
-  private String getUnformattedMessage ()
-  { return "DERBY SQL error: SQLCODE: " + getSqlCode() + ", SQLSTATE: " + getSqlState() +
", SQLERRMC: " + getSqlErrmc(); }
-
-  private void chainDeferredExceptionsToAgentOrAsConnectionWarnings (SqlException e)
-  {
-    SqlException current = e;
-    while (current != null) {
-      SqlException next = (SqlException) current.getNextException();
-      current = current.copyAsUnchainedSQLException (agent_.logWriter_);
-      if (current.getErrorCode() == -440) {
-        SqlWarning warningForStoredProcFailure = new SqlWarning (agent_.logWriter_,
-          " Unable to obtain message text from server." +
-          " See chained exception." +
-          " The stored procedure SYSIBM.SQLCAMESSAGE is not installed on server." +
-          " Contact your DBA.");
-        warningForStoredProcFailure.setNextException (current);
-        connection_.accumulate440WarningForMessageProcFailure (warningForStoredProcFailure);
-      }
-      else if (current.getErrorCode() == -444) {
-        SqlWarning warningForStoredProcFailure = new SqlWarning (agent_.logWriter_,
-          " Unable to obtain message text from server." +
-          " See chained exception." +
-          " The stored procedure SYSIBM.SQLCAMESSAGE cannot be accessed on the server." +
-          " Contact your DBA.");
-        warningForStoredProcFailure.setNextException (current);
-        connection_.accumulate444WarningForMessageProcFailure (warningForStoredProcFailure);
-      }
-      else {
-        agent_.accumulateDeferredException (current);
-      }
-      current = next;
-    }
-  }
-
-  public boolean includesSqlCode (int[] codes)
-  {
-    for (int i=0; i<codes.length; i++) {
-      if (codes[i] == getSqlCode()) return true;
-    }
-    return false;
-  }
-  // ------------------- helper methods ----------------------------------------
-
-  private String[] processSqlErrmcTokens (byte[] tokenBytes)
-  {
-    if (tokenBytes == null)
-      return null;
-
-    // create 0-length String tokens array if tokenBytes is 0-length
-    int length = tokenBytes.length;
-    if (length == 0)
-      return new String[0];
-
-    try {
-      // tokenize and convert tokenBytes
-      java.io.ByteArrayOutputStream buffer = new java.io.ByteArrayOutputStream();
-      java.util.LinkedList tokens = new java.util.LinkedList();
-
-      // parse the error message tokens
-      for (int index=0; index<length-1; index++) {
-
-       // non-delimiter - continue to write into buffer
-       if (tokenBytes[index] != -1)  // -1 is the delimiter '\xFF'
-         buffer.write (tokenBytes[index]);
-
-       // delimiter - convert current token and add to list
-       else {
-         tokens.add (bytes2String (buffer.toByteArray(), 0, buffer.size()));
-         buffer.reset();
-       }
-      }
-
-      int lastIndex = length-1;
-      // check for last byte not being a delimiter, i.e. part of last token
-      if (tokenBytes[lastIndex] != -1) {
-       // write the last byte
-       buffer.write (tokenBytes[lastIndex]);
-       // convert the last token and add to list
-       tokens.add (bytes2String (buffer.toByteArray(), 0, buffer.size()));
-      }
-
-      // last byte is delimiter implying an empty String for last token
-      else {
-       // convert current token, if one exists, and add to list
-       if (lastIndex != 0)
-         tokens.add (bytes2String (buffer.toByteArray(), 0, buffer.size()));
-       // last token is an empty String
-       tokens.add ("");
-      }
-
-      // create the String array and fill it with tokens.
-      String[] tokenStrings = new String[tokens.size()];
-
-      java.util.Iterator iterator = tokens.iterator();
-      for (int i = 0; iterator.hasNext(); i++)
-       tokenStrings[i] = (String) iterator.next();
-
-      return tokenStrings;
-    }
-    catch (java.io.UnsupportedEncodingException e) {
-      return null;
-    }
-  }
-
-  private String bytes2String (byte[] bytes, int offset, int length )
-    throws java.io.UnsupportedEncodingException
-  {
-      return new String (bytes, offset, length);
-  }
-
-  public int getUpdateCount ()
-  {
-    if (sqlErrd_ == null)
-      return 0;
-    return sqlErrd_[2];
-  }
-
-  public long getRowCount () throws org.apache.derby.client.am.DisconnectException
-  {
-    return ((long)sqlErrd_[0]<<32) + sqlErrd_[1];
-  }
-
-  public void setContainsSqlcax (boolean containsSqlcax)
-  {
-    containsSqlcax_ = containsSqlcax;
-  }
-
-  public boolean containsSqlcax ()
-  {
-    return containsSqlcax_;
-  }
-
-  public void resetRowsetSqlca (org.apache.derby.client.am.Connection connection,
-                                int sqlCode,
-                                byte[] sqlStateBytes,
-                                byte[] sqlErrpBytes,
-                                int ccsid)
-  {
-    connection_ = connection;
-    sqlCode_ = sqlCode;
-    sqlStateBytes_ = sqlStateBytes;
-    sqlErrpBytes_ = sqlErrpBytes;
-    ccsid_ = ccsid;
-  }
-
-  public void setRowsetRowCount (long rowCount)
-  {
-    rowsetRowCount_ = rowCount;
-  }
-
-  public long getRowsetRowCount ()
-  {
-    return rowsetRowCount_;
-  }
+            return getUnformattedMessage();
+        }
+    }
+
+    private String getUnformattedMessage() {
+        return "DERBY SQL error: SQLCODE: " + getSqlCode() + ", SQLSTATE: " + getSqlState()
+ ", SQLERRMC: " + getSqlErrmc();
+    }
+
+    private void chainDeferredExceptionsToAgentOrAsConnectionWarnings(SqlException e) {
+        SqlException current = e;
+        while (current != null) {
+            SqlException next = (SqlException) current.getNextException();
+            current = current.copyAsUnchainedSQLException(agent_.logWriter_);
+            if (current.getErrorCode() == -440) {
+                SqlWarning warningForStoredProcFailure = new SqlWarning(agent_.logWriter_,
+                        " Unable to obtain message text from server." +
+                        " See chained exception." +
+                        " The stored procedure SYSIBM.SQLCAMESSAGE is not installed on server."
+
+                        " Contact your DBA.");
+                warningForStoredProcFailure.setNextException(current);
+                connection_.accumulate440WarningForMessageProcFailure(warningForStoredProcFailure);
+            } else if (current.getErrorCode() == -444) {
+                SqlWarning warningForStoredProcFailure = new SqlWarning(agent_.logWriter_,
+                        " Unable to obtain message text from server." +
+                        " See chained exception." +
+                        " The stored procedure SYSIBM.SQLCAMESSAGE cannot be accessed on
the server." +
+                        " Contact your DBA.");
+                warningForStoredProcFailure.setNextException(current);
+                connection_.accumulate444WarningForMessageProcFailure(warningForStoredProcFailure);
+            } else {
+                agent_.accumulateDeferredException(current);
+            }
+            current = next;
+        }
+    }
+
+    public boolean includesSqlCode(int[] codes) {
+        for (int i = 0; i < codes.length; i++) {
+            if (codes[i] == getSqlCode()) {
+                return true;
+            }
+        }
+        return false;
+    }
+    // ------------------- helper methods ----------------------------------------
+
+    private String[] processSqlErrmcTokens(byte[] tokenBytes) {
+        if (tokenBytes == null) {
+            return null;
+        }
+
+        // create 0-length String tokens array if tokenBytes is 0-length
+        int length = tokenBytes.length;
+        if (length == 0) {
+            return new String[0];
+        }
+
+        try {
+            // tokenize and convert tokenBytes
+            java.io.ByteArrayOutputStream buffer = new java.io.ByteArrayOutputStream();
+            java.util.LinkedList tokens = new java.util.LinkedList();
+
+            // parse the error message tokens
+            for (int index = 0; index < length - 1; index++) {
+
+                // non-delimiter - continue to write into buffer
+                if (tokenBytes[index] != -1)  // -1 is the delimiter '\xFF'
+                {
+                    buffer.write(tokenBytes[index]);
+                }
+
+                // delimiter - convert current token and add to list
+                else {
+                    tokens.add(bytes2String(buffer.toByteArray(), 0, buffer.size()));
+                    buffer.reset();
+                }
+            }
+
+            int lastIndex = length - 1;
+            // check for last byte not being a delimiter, i.e. part of last token
+            if (tokenBytes[lastIndex] != -1) {
+                // write the last byte
+                buffer.write(tokenBytes[lastIndex]);
+                // convert the last token and add to list
+                tokens.add(bytes2String(buffer.toByteArray(), 0, buffer.size()));
+            }
+
+            // last byte is delimiter implying an empty String for last token
+            else {
+                // convert current token, if one exists, and add to list
+                if (lastIndex != 0) {
+                    tokens.add(bytes2String(buffer.toByteArray(), 0, buffer.size()));
+                }
+                // last token is an empty String
+                tokens.add("");
+            }
+
+            // create the String array and fill it with tokens.
+            String[] tokenStrings = new String[tokens.size()];
+
+            java.util.Iterator iterator = tokens.iterator();
+            for (int i = 0; iterator.hasNext(); i++) {
+                tokenStrings[i] = (String) iterator.next();
+            }
+
+            return tokenStrings;
+        } catch (java.io.UnsupportedEncodingException e) {
+            return null;
+        }
+    }
+
+    private String bytes2String(byte[] bytes, int offset, int length)
+            throws java.io.UnsupportedEncodingException {
+        return new String(bytes, offset, length);
+    }
+
+    public int getUpdateCount() {
+        if (sqlErrd_ == null) {
+            return 0;
+        }
+        return sqlErrd_[2];
+    }
+
+    public long getRowCount() throws org.apache.derby.client.am.DisconnectException {
+        return ((long) sqlErrd_[0] << 32) + sqlErrd_[1];
+    }
+
+    public void setContainsSqlcax(boolean containsSqlcax) {
+        containsSqlcax_ = containsSqlcax;
+    }
+
+    public boolean containsSqlcax() {
+        return containsSqlcax_;
+    }
+
+    public void resetRowsetSqlca(org.apache.derby.client.am.Connection connection,
+                                 int sqlCode,
+                                 byte[] sqlStateBytes,
+                                 byte[] sqlErrpBytes,
+                                 int ccsid) {
+        connection_ = connection;
+        sqlCode_ = sqlCode;
+        sqlStateBytes_ = sqlStateBytes;
+        sqlErrpBytes_ = sqlErrpBytes;
+        ccsid_ = ccsid;
+    }
+
+    public void setRowsetRowCount(long rowCount) {
+        rowsetRowCount_ = rowCount;
+    }
+
+    public long getRowsetRowCount() {
+        return rowsetRowCount_;
+    }
 }
 



Mime
View raw message