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 [19/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/net/NetPackageReply.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageReply.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageReply.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageReply.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,215 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetPackageReply
+
+   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.net;
+
+import org.apache.derby.client.am.DisconnectException;
+
+public class NetPackageReply extends NetConnectionReply
+{
+  NetPackageReply (NetAgent netAgent, int bufferSize)
+  {
+    super (netAgent, bufferSize);
+  }
+
+
+  NetSqlca parseSqlErrorCondition () throws DisconnectException
+  {
+    parseSQLERRRM();
+    parseTypdefsOrMgrlvlovrs ();
+    NetSqlca netSqlca = parseSQLCARD (null);
+    return netSqlca;
+  }
+
+
+  // Also called by NetStatementReply
+  void parseDTAMCHRM () throws DisconnectException
+  {
+    boolean svrcodReceived = false;
+    int svrcod = CodePoint.SVRCOD_INFO;
+    boolean rdbnamReceived = false;
+    String rdbnam = null;
+
+    parseLengthAndMatchCodePoint (CodePoint.DTAMCHRM);
+    pushLengthOnCollectionStack();
+    int peekCP = peekCodePoint();
+
+    while (peekCP != Reply.END_OF_COLLECTION) {
+
+      boolean foundInPass = false;
+
+      if (peekCP == CodePoint.SVRCOD) {
+        foundInPass = true;
+        svrcodReceived = checkAndGetReceivedFlag (svrcodReceived);
+        svrcod = parseSVRCOD (CodePoint.SVRCOD_ERROR, CodePoint.SVRCOD_ERROR);
+        peekCP = peekCodePoint();
+      }
+
+      if (peekCP == CodePoint.RDBNAM) {
+        foundInPass = true;
+        rdbnamReceived = checkAndGetReceivedFlag (rdbnamReceived);
+        rdbnam = parseRDBNAM (true);
+        peekCP = peekCodePoint();
+      }
+
+      if (!foundInPass)
+        doPrmnsprmSemantics (peekCP);
+
+    }
+    popCollectionStack();
+    checkRequiredObjects (svrcodReceived, rdbnamReceived);
+
+    netAgent_.setSvrcod (svrcod);
+    doDtamchrmSemantics();
+  }
+
+  // RDB Update Reply Message indicates that a DDM command resulted
+  // in an update at the target relational database.  If a command
+  // generated multiple reply messages including an RDBUPDRM, then
+  // the RDBUPDRM must be the first reply message for the command.
+  // For each target server, the RDBUPDRM  must be returned the first
+  // time an update is made to the target RDB within a unit of work.
+  // The target server may optionally return the RDBUPDRM after subsequent
+  // updates within the UOW.  If multiple target RDBs are involved with
+  // the current UOW and updates are made with any of them, then the RDBUPDRM
+  // must be returned in response to the first update at each of them.
+  protected void parseRDBUPDRM () throws DisconnectException
+  {
+    boolean svrcodReceived = false;
+    int svrcod = CodePoint.SVRCOD_INFO;
+    boolean rdbnamReceived = false;
+    String rdbnam = null;
+
+    parseLengthAndMatchCodePoint (CodePoint.RDBUPDRM);
+    pushLengthOnCollectionStack();
+
+    // in XA Global transaction we need to know if we have a read-only
+    //  transaction, if we get a RDBUPDRM this is NOT a read-only transaction
+    //  currently only XAConnections care about read-only transactions, if
+    //  non-XA wants this information they will need to initialize the flag
+    //  at start of UOW
+    netAgent_.netConnection_.setReadOnlyTransactionFlag( false );
+
+    int peekCP = peekCodePoint();
+
+    while (peekCP != Reply.END_OF_COLLECTION) {
+
+      boolean foundInPass = false;
+
+      if (peekCP == CodePoint.SVRCOD) {
+        foundInPass = true;
+        svrcodReceived = checkAndGetReceivedFlag (svrcodReceived);
+        svrcod = parseSVRCOD (CodePoint.SVRCOD_INFO, CodePoint.SVRCOD_INFO);
+        peekCP = peekCodePoint();
+      }
+
+      if (peekCP == CodePoint.RDBNAM) {
+        foundInPass = true;
+        rdbnamReceived = checkAndGetReceivedFlag (rdbnamReceived);
+        rdbnam = parseRDBNAM (true);
+        peekCP = peekCodePoint();
+      }
+
+      if (!foundInPass)
+        doPrmnsprmSemantics (peekCP);
+
+    }
+    popCollectionStack();
+    checkRequiredObjects (svrcodReceived, rdbnamReceived);
+
+    // call an event to indicate the server has been updated 
+    netAgent_.setSvrcod (svrcod);
+
+  }
+
+  // SQL Error Condition Reply Message indicates that an SQL error
+  // has occurred.  It may be sent even though no reply message
+  // precedes the SQLCARD object that is the normal
+  // response to a command when an exception occurs.
+  // The SQLERRM is also used when a BNDSQLSTT command is terminated
+  // by an INTRRDBRQS command.
+  // This reply message must precede an SQLCARD object.
+  // The SQLSTATE is returned in the SQLCARD.
+  //
+  // Returned from Server:
+  // SVRCOD - required  (8 - ERROR)
+  // RDBNAM - optional
+  //
+  // Also called by NetResultSetReply and NetStatementReply
+  void parseSQLERRRM () throws DisconnectException
+  {
+    boolean svrcodReceived = false;
+    int svrcod = CodePoint.SVRCOD_INFO;
+    boolean rdbnamReceived = false;
+    String rdbnam = null;
+
+    parseLengthAndMatchCodePoint (CodePoint.SQLERRRM);
+    pushLengthOnCollectionStack();
+    int peekCP = peekCodePoint();
+
+    while (peekCP != Reply.END_OF_COLLECTION) {
+
+      boolean foundInPass = false;
+
+      if (peekCP == CodePoint.SVRCOD) {
+        foundInPass = true;
+        svrcodReceived = checkAndGetReceivedFlag (svrcodReceived);
+        svrcod = parseSVRCOD (CodePoint.SVRCOD_ERROR, CodePoint.SVRCOD_ERROR);
+        peekCP = peekCodePoint();
+      }
+
+      if (peekCP == CodePoint.RDBNAM) {
+        foundInPass = true;
+        rdbnamReceived = checkAndGetReceivedFlag (rdbnamReceived);
+        rdbnam = parseRDBNAM (true);
+        peekCP = peekCodePoint();
+      }
+
+      if (!foundInPass)
+        doPrmnsprmSemantics (peekCP);
+
+    }
+    popCollectionStack();
+    checkRequiredObjects (svrcodReceived);
+
+    // move into a method
+    netAgent_.setSvrcod (svrcod);
+  }
+
+  //--------------------- parse DDM Reply Data--------------------------------------
+
+  //------------------------parse DDM Scalars-----------------------------
+
+  // RDB Package Name and Consistency token Scalar Object specifies the
+  // fully qualified name of a relational database package and its
+  // consistency token.
+  protected Object parsePKGNAMCT (boolean skip) throws DisconnectException
+  {
+    parseLengthAndMatchCodePoint (CodePoint.PKGNAMCT);
+    if (skip) {
+      skipBytes();
+      return null;
+    }
+    agent_.accumulateChainBreakingReadExceptionAndThrow (new DisconnectException (
+      agent_,
+      "parsePKGNAMCT not yet implemented"));
+    return null; // to make compiler happy
+  }
+}

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,310 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetPackageRequest
+
+   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.net;
+
+import org.apache.derby.client.am.Configuration;
+import org.apache.derby.client.am.Section;
+import org.apache.derby.client.am.SqlException;
+
+
+public class NetPackageRequest extends NetConnectionRequest
+{
+  static final String COLLECTIONNAME = "NULLID";
+
+  NetPackageRequest (NetAgent netAgent, CcsidManager ccsidManager, int bufferSize)
+  {
+    super (netAgent, ccsidManager, bufferSize);
+  }
+
+  // RDB Package Name, Consistency Token
+  // Scalar Object specifies the fully qualified name of a relational
+  // database package and its consistency token.
+  //
+  // To accomodate larger lengths, the Scalar Data Length
+  // (SCLDTALEN) Field is used to specify the length of the instance
+  // variable which follows.
+  static final String collectionName = "NULLID";
+  void buildCommonPKGNAMinfo (Section section) throws SqlException
+  {
+    String collectionToFlow = COLLECTIONNAME;
+    // the scalar data length field may or may not be required.  it depends
+    // on the level of support and length of the data.
+    // check the lengths of the RDBNAM, RDBCOLID, and PKGID.
+    // Determine if the lengths require an SCLDTALEN object.
+    // Note: if an SQLDTALEN is required for ONE of them,
+    // it is needed for ALL of them.  This is why this check is
+    // up front.
+    // the SQLAM level dictates the maximum size for
+    // RDB Collection Identifier (RDBCOLID)
+    // Relational Database Name (RDBNAM)
+    // RDB Package Identifier (PKGID)
+	int maxIdentifierLength = NetConfiguration.PKG_IDENTIFIER_MAX_LEN;
+
+    boolean scldtalenRequired = false;
+    scldtalenRequired = checkPKGNAMlengths (netAgent_.netConnection_.databaseName_,
+                                            maxIdentifierLength,
+                                            NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+
+    if (!scldtalenRequired)
+      scldtalenRequired = checkPKGNAMlengths (collectionToFlow,
+                                              maxIdentifierLength,
+                                              NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+
+    if (!scldtalenRequired)
+      scldtalenRequired = checkPKGNAMlengths (section.getPackageName(),
+                                              maxIdentifierLength,
+                                              NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+
+    // the format is different depending on if an SCLDTALEN is required.
+    if (!scldtalenRequired) {
+      writeScalarPaddedString (netAgent_.netConnection_.databaseName_,
+                               NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+      writeScalarPaddedString (collectionToFlow,
+                               NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+      writeScalarPaddedString (section.getPackageName(),
+                               NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+    }
+    else {
+      buildSCLDTA (netAgent_.netConnection_.databaseName_, NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+      buildSCLDTA (collectionToFlow, NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+      buildSCLDTA (section.getPackageName(), NetConfiguration.PKG_IDENTIFIER_FIXED_LEN);
+    }
+  }
+
+  private void buildSCLDTA (String identifier, int minimumLength) throws SqlException
+  {
+    if (identifier.length() <= minimumLength) {
+      write2Bytes (minimumLength);
+      writeScalarPaddedString (identifier, minimumLength);
+    }
+    else {
+      write2Bytes (identifier.length());
+      writeScalarPaddedString (identifier, identifier.length());
+    }
+  }
+
+
+  // this specifies the fully qualified package name,
+  // consistency token, and section number within the package being used
+  // to execute the SQL.  If the connection supports reusing the previous
+  // package information and this information is the same except for the section
+  // number then only the section number needs to be sent to the server.
+  void buildPKGNAMCSN (Section section) throws SqlException
+  {
+    if (!canCommandUseDefaultPKGNAMCSN ()) {
+      markLengthBytes (CodePoint.PKGNAMCSN);
+      // If PKGNAMCBytes is already available, copy the bytes to the request buffer directly.
+      if (section.getPKGNAMCBytes() != null)
+        writeStoredPKGNAMCBytes (section);
+      else {
+        // Mark the beginning of PKGNAMCSN bytes.
+        markForCachingPKGNAMCSN ();
+        buildCommonPKGNAMinfo (section);
+        writeScalarPaddedBytes (Configuration.dncPackageConsistencyToken,
+                              NetConfiguration.PKGCNSTKN_FIXED_LEN,
+                              NetConfiguration.NON_CHAR_DDM_DATA_PAD_BYTE);
+        // store the PKGNAMCbytes 
+        storePKGNAMCBytes (section);
+      }
+      write2Bytes (section.getSectionNumber());
+      updateLengthBytes();
+    }
+    else
+      writeScalar2Bytes (CodePoint.PKGSN, section.getSectionNumber());
+  }
+
+  private void storePKGNAMCBytes (Section section)
+  {
+    // Get the locaton where we started writing PKGNAMCSN
+    int startPos = popMarkForCachingPKGNAMCSN ();
+    int copyLength = offset_ - startPos;
+    byte[] b = new byte[copyLength];
+    System.arraycopy (bytes_,
+                      startPos,
+                      b,
+                      0,
+                      copyLength);
+    section.setPKGNAMCBytes(b);
+  }
+
+  private void writeStoredPKGNAMCBytes (Section section)
+  {
+    byte[] b = section.getPKGNAMCBytes();
+
+    // Mare sure request buffer has enough space to write this byte array.
+    ensureLength (offset_ + b.length);
+
+    System.arraycopy (b,
+                      0,
+                      bytes_,
+                      offset_,
+                      b.length);
+
+    offset_ += b.length;
+  }
+
+  private boolean canCommandUseDefaultPKGNAMCSN ()
+  {
+    return false;
+  }
+
+
+  // throws an exception if lengths exceed the maximum.
+  // returns a boolean indicating if SLCDTALEN is required.
+  private boolean checkPKGNAMlengths (String identifier,
+                                      int maxIdentifierLength,
+                                      int lengthRequiringScldta) throws SqlException
+  {
+    int length = identifier.length();
+    if (length > maxIdentifierLength)
+      throw new SqlException (netAgent_.logWriter_, "" + identifier + " exceeds maximum identifier length of ' " +
+                              maxIdentifierLength + "'");
+
+    return (length > lengthRequiringScldta);
+  }
+
+  private byte[] getBytes (String string, String encoding) throws SqlException
+  {
+    try {
+      return string.getBytes (encoding);
+    }
+    catch (java.lang.Exception e) {
+      throw new SqlException (netAgent_.logWriter_, e, "error on getBytes");
+    }
+  }
+
+  private void buildNOCMorNOCS (String string) throws SqlException
+  {
+    if (string == null) {
+      write2Bytes (0xffff);
+    }
+    else {
+      byte[] sqlBytes = null;
+
+      if (netAgent_.typdef_.isCcsidMbcSet()) {
+        sqlBytes = getBytes (string, netAgent_.typdef_.getCcsidMbcEncoding());
+        write1Byte (0x00);
+        write4Bytes (sqlBytes.length);
+        writeBytes (sqlBytes, sqlBytes.length);
+        write1Byte (0xff);
+      }
+      else {
+        sqlBytes = getBytes (string, netAgent_.typdef_.getCcsidSbcEncoding());
+        write1Byte (0xff);
+        write1Byte (0x00);
+        write4Bytes (sqlBytes.length);
+        writeBytes (sqlBytes, sqlBytes.length);
+      }
+    }
+  }
+
+  // SQLSTTGRP : FDOCA EARLY GROUP
+  // SQL Statement Group Description
+  //
+  // FORMAT FOR SQLAM <= 6
+  //   SQLSTATEMENT_m; PROTOCOL TYPE LVCM; ENVLID 0x40; Length Override 32767
+  //   SQLSTATEMENT_s; PROTOCOL TYPE LVCS; ENVLID 0x34; Length Override 32767
+  //
+  // FORMAT FOR SQLAM >= 7
+  //   SQLSTATEMENT_m; PROTOCOL TYPE NOCM; ENVLID 0xCF; Length Override 4
+  //   SQLSTATEMENT_s; PROTOCOL TYPE NOCS; ENVLID 0xCB; Length Override 4
+  private void buildSQLSTTGRP (String string) throws SqlException
+  {
+      buildNOCMorNOCS (string);
+      return;
+  }
+
+  // SQLSTT : FDOCA EARLY ROW
+  // SQL Statement Row Description
+  //
+  // FORMAT FOR ALL SQLAM LEVELS
+  //   SQLSTTGRP; GROUP LID 0x5C; ELEMENT TAKEN 0(all); REP FACTOR 1
+  private void buildSQLSTT (String string) throws SqlException
+  {
+    buildSQLSTTGRP (string);
+  }
+
+  protected void buildSQLSTTcommandData (String sql) throws SqlException
+  {
+    createEncryptedCommandData ();
+    int loc = offset_;
+    markLengthBytes (CodePoint.SQLSTT);
+    buildSQLSTT (sql);
+    updateLengthBytes();
+    if (netAgent_.netConnection_.getSecurityMechanism() ==
+          NetConfiguration.SECMEC_EUSRIDDTA ||
+          netAgent_.netConnection_.getSecurityMechanism() ==
+          NetConfiguration.SECMEC_EUSRPWDDTA)
+      encryptDataStream(loc);
+
+  }
+
+
+
+  protected void buildSQLATTRcommandData (String sql) throws SqlException
+  {
+    createEncryptedCommandData ();
+    int loc = offset_;
+    markLengthBytes (CodePoint.SQLATTR);
+    buildSQLSTT (sql);
+    updateLengthBytes();
+    if (netAgent_.netConnection_.getSecurityMechanism() ==
+            NetConfiguration.SECMEC_EUSRIDDTA ||
+            netAgent_.netConnection_.getSecurityMechanism() ==
+            NetConfiguration.SECMEC_EUSRPWDDTA)
+       encryptDataStream (loc);
+
+  }
+
+
+  public void encryptDataStream(int lengthLocation) throws SqlException
+  {
+    byte[] clearedBytes = new byte[offset_ - lengthLocation];
+    byte[] encryptedBytes;
+      for (int i = lengthLocation; i < offset_; i++)
+        clearedBytes[i - lengthLocation] = bytes_[i];
+
+      encryptedBytes = netAgent_.netConnection_.getEncryptionManager().
+          encryptData(
+          clearedBytes,
+          NetConfiguration.SECMEC_EUSRIDPWD,
+          netAgent_.netConnection_.getTargetPublicKey(),
+          netAgent_.netConnection_.getTargetPublicKey());
+
+      int length = encryptedBytes.length;
+
+      if(bytes_.length >= lengthLocation + length)
+        System.arraycopy(encryptedBytes, 0, bytes_, lengthLocation, length);
+      else {
+        byte[] largeByte = new byte[lengthLocation + length];
+        System.arraycopy(bytes_,0,largeByte,0,lengthLocation);
+        System.arraycopy(encryptedBytes, 0, largeByte, lengthLocation, length);
+        bytes_ = largeByte;
+      }
+
+      offset_ += length - clearedBytes.length;
+
+      //we need to update the length in DSS header here.
+
+      bytes_[lengthLocation - 6] = (byte) ( (length >>> 8) & 0xff);
+      bytes_[lengthLocation - 5] = (byte) (length & 0xff);
+  }
+
+}

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPreparedStatement.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPreparedStatement.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPreparedStatement.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPreparedStatement.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,165 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetPreparedStatement
+
+   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.net;
+
+import org.apache.derby.client.am.Section;
+import org.apache.derby.client.am.ColumnMetaData;
+import org.apache.derby.client.am.PreparedStatement;
+import org.apache.derby.client.am.SqlException;
+
+
+public class NetPreparedStatement extends NetStatement
+  implements org.apache.derby.client.am.MaterialPreparedStatement
+{
+
+  // Alias for (NetPreparedStatement) super.statement.
+  /*final*/ org.apache.derby.client.am.PreparedStatement preparedStatement_;
+
+
+  // Relay constructor for NetCallableStatement.
+  NetPreparedStatement (org.apache.derby.client.am.PreparedStatement statement,
+                       NetAgent netAgent,
+                       NetConnection netConnection)
+  {
+    super (statement, netAgent, netConnection);
+    initNetPreparedStatement (statement);
+  }
+
+  void resetNetPreparedStatement (org.apache.derby.client.am.PreparedStatement statement,
+                                 NetAgent netAgent,
+                                 NetConnection netConnection)
+  {
+    super.resetNetStatement(statement, netAgent, netConnection);
+    initNetPreparedStatement(statement);
+  }
+
+  private void initNetPreparedStatement (org.apache.derby.client.am.PreparedStatement statement)
+  {
+    preparedStatement_ = statement;
+    preparedStatement_.materialPreparedStatement_ = this;
+  }
+
+  // Called by abstract Connection.prepareStatment().newPreparedStatement() for jdbc 2 prepared statements
+  // with scroll attributes.
+  NetPreparedStatement (NetAgent netAgent, NetConnection netConnection, String sql, int type, int concurrency, int holdability, int autoGeneratedKeys, String[] columnNames) throws SqlException
+  {
+    this (new PreparedStatement (netAgent, netConnection, sql, type, concurrency, holdability, autoGeneratedKeys, columnNames),
+          netAgent,
+          netConnection);
+  }
+
+  void resetNetPreparedStatement (NetAgent netAgent, NetConnection netConnection, String sql, int type, int concurrency, int holdability, int autoGeneratedKeys, String[] columnNames) throws SqlException
+  {
+    preparedStatement_.resetPreparedStatement(netAgent, netConnection, sql, type, concurrency, holdability, autoGeneratedKeys, columnNames);
+    resetNetPreparedStatement(preparedStatement_, netAgent, netConnection);
+  }
+
+  // For JDBC 3.0 positioned updates.
+  NetPreparedStatement (NetAgent netAgent,
+                       NetConnection netConnection,
+                       String sql,
+                       Section section) throws SqlException
+  {
+    this (new PreparedStatement (netAgent, netConnection, sql, section),
+          netAgent,
+          netConnection);
+  }
+
+  void resetNetPreparedStatement (NetAgent netAgent,
+                                 NetConnection netConnection,
+                                 String sql,
+                                 Section section) throws SqlException
+  {
+    preparedStatement_.resetPreparedStatement (netAgent, netConnection, sql, section);
+    resetNetPreparedStatement (preparedStatement_, netAgent, netConnection);
+  }
+
+  void resetNetPreparedStatement (NetAgent netAgent,
+                                 NetConnection netConnection,
+                                 String sql,
+                                 Section section,
+                                 ColumnMetaData parameterMetaData,
+                                 ColumnMetaData resultSetMetaData) throws SqlException
+  {
+    preparedStatement_.resetPreparedStatement(netAgent,netConnection,sql,section,parameterMetaData,resultSetMetaData);
+    this.resetNetPreparedStatement(preparedStatement_, netAgent, netConnection);
+  }
+
+  protected void finalize () throws java.lang.Throwable
+  {
+    super.finalize();
+  }
+
+  public 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.
+                            // If we could always chain a no-op DDM after every execute that writes blobs
+                            // then we could just always set the chaining flag to on for blob send data 
+                            boolean chainedWritesFollowingSetLob
+                            ) throws SqlException
+  {
+    netAgent_.statementRequest_.writeExecute (
+      this,
+      section,
+      parameterMetaData,
+      inputs,
+      numInputColumns,
+      outputExpected,
+      chainedWritesFollowingSetLob);
+  }
+
+
+  public void readExecute_ () throws SqlException
+  { netAgent_.statementReply_.readExecute (preparedStatement_); }
+
+  public void writeOpenQuery_ (Section section,
+                              int fetchSize,
+                              int resultSetType,
+                              int numInputColumns,
+                              ColumnMetaData parameterMetaData,
+                              Object[] inputs) throws SqlException
+  {
+    netAgent_.statementRequest_.writeOpenQuery (
+      this,
+      section,
+      fetchSize,
+      resultSetType,
+      numInputColumns,
+      parameterMetaData,
+      inputs);
+  }
+  // super.readOpenQuery()
+
+  public void writeDescribeInput_ (Section section) throws SqlException
+  { netAgent_.statementRequest_.writeDescribeInput (this, section); }
+  public void readDescribeInput_ () throws SqlException
+  { netAgent_.statementReply_.readDescribeInput (preparedStatement_); }
+
+  public void writeDescribeOutput_ (Section section) throws SqlException
+  { netAgent_.statementRequest_.writeDescribeOutput (this, section); }
+  public void readDescribeOutput_ () throws SqlException
+  { netAgent_.statementReply_.readDescribeOutput (preparedStatement_); }
+}

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSet.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSet.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSet.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSet.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,221 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetResultSet
+
+   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.net;
+
+import org.apache.derby.client.am.SqlException;
+import org.apache.derby.client.am.DisconnectException;
+import org.apache.derby.client.am.Cursor;
+import org.apache.derby.client.am.Section;
+
+
+public class NetResultSet extends org.apache.derby.client.am.ResultSet
+{
+  // Alias for (NetConnection) super.statement.connection
+  private final NetConnection netConnection_;
+
+  // Alias for (NetStatement) super.statement
+  private final NetStatement netStatement_;
+
+  // Alias for (NetCursor) super.cursor
+  final NetCursor netCursor_;
+
+  // Alias for (NetAgent) super.agent
+  final private NetAgent netAgent_;
+
+  //-----------------------------state------------------------------------------
+
+  // This is used to avoid sending multiple outovr over subsequent next()'s
+  public boolean firstOutovrBuilt_ = false;
+
+  //---------------------constructors/finalizer---------------------------------
+
+  // parseOpnqrym() is called right after this constructor is called.
+
+  NetResultSet (NetAgent netAgent,
+               NetStatement netStatement,
+               Cursor cursor,
+               //int qryprctyp,  //protocolType, CodePoint.FIXROWPRC | CodePoint.LMTBLKPRC
+               int sqlcsrhld,  // holdOption, 0xF0 for false (default) | 0xF1 for true.
+               int qryattscr,  // scrollOption, 0xF0 for false (default) | 0xF1 for true.
+               int qryattsns,  // sensitivity, CodePoint.QRYUNK | CodePoint.QRYINS
+               int qryattset,  // rowsetCursor, 0xF0 for false (default) | 0xF1 for true.
+               long qryinsid,  // instanceIdentifier, 0 (if not returned, check default) or number
+               int actualResultSetType,
+               int actualResultSetConcurrency,
+               int actualResultSetHoldability
+               ) //throws DisconnectException
+  {
+    super (netAgent,
+           netStatement.statement_,
+           //new NetCursor (netAgent, qryprctyp),
+           cursor,
+           // call the constructor with the real resultSetType and resultSetConcurrency
+           // returned from the server
+           actualResultSetType,
+           actualResultSetConcurrency,
+           actualResultSetHoldability);
+
+    netAgent_ = netAgent;
+
+    // Set up cheat-links
+    netCursor_ = (NetCursor) cursor_;
+    netStatement_ = netStatement;
+    netConnection_ = netStatement.netConnection_;
+
+    netCursor_.netResultSet_ = this;
+
+    cursorHold_ = (sqlcsrhld != 0xf0);
+    if (qryattscr == 0xF1) scrollable_ = true;
+
+    switch (qryattsns) {
+    case CodePoint.QRYUNK:
+      sensitivity_ = sensitivity_unknown__;
+      break;
+    case CodePoint.QRYINS:
+      sensitivity_ = sensitivity_insensitive__;
+      break;
+    default:   // shouldn't happen
+      break;
+    }
+
+    if (qryattset == 0xF1) isRowsetCursor_ = true;
+
+    queryInstanceIdentifier_ = qryinsid;
+    nestingLevel_ = (int)((queryInstanceIdentifier_ >>> 48) & 0xFFFF);
+  }
+
+
+  //-------------------------------flow methods---------------------------------
+
+  // Go through the QRYDTA's received, and calculate the column offsets for each row.
+  protected void parseRowset_ () throws SqlException
+  {
+    int row = 0;
+    // Parse all the rows received in the rowset
+    // The index we are passing will keep track of which row in the rowset we are parsing
+    // so we can reuse the columnDataPosition/Length/IsNull arrays.
+    while (netCursor_.calculateColumnOffsetsForRow_(row)) {
+      rowsReceivedInCurrentRowset_++;
+      row++;
+    }
+
+    // if rowset is not complete and an endqryrm was received, will skip the while loop
+    // and go to the checkAndThrow method.  otherwise flow an cntqry to try to complete
+    // the rowset.
+    // -- there is no need to complete the rowset for rowset cursors.  fetching stops when
+    //    the end of data is returned or when an error occurs.  all successfully fetched rows
+    //    are returned to the user.  the specific error is not returned until the next fetch.
+    while (rowsReceivedInCurrentRowset_ != fetchSize_ &&
+           !netCursor_.allRowsReceivedFromServer_ && !isRowsetCursor_ &&
+           sensitivity_ != sensitivity_sensitive_dynamic__) {
+      flowFetchToCompleteRowset ();
+      while (netCursor_.calculateColumnOffsetsForRow_(row)) {
+        rowsReceivedInCurrentRowset_++;
+        row++;
+      }
+    }
+    checkAndThrowReceivedQueryTerminatingException();
+  }
+
+  public void setFetchSize_ (int rows) { fetchSize_ = (rows == 0) ? 64 : rows; }
+
+  //-----------------------------helper methods---------------------------------
+
+  void flowFetchToCompleteRowset () throws DisconnectException
+  {
+    try {
+      agent_.beginWriteChain (statement_);
+
+      writeScrollableFetch_ ((generatedSection_ == null) ? statement_.section_ : generatedSection_,
+                            fetchSize_ - rowsReceivedInCurrentRowset_,
+                            scrollOrientation_relative__,
+                            1,
+                            false);  // false means do not disard pending
+                                     // partial row and pending query blocks
+
+      agent_.flow (statement_);
+      readScrollableFetch_ ();
+      agent_.endReadChain ();
+    }
+    catch (SqlException e) {
+      throw new DisconnectException (agent_, e);
+    }
+  }
+
+  void queryDataWasReturnedOnOpen() throws DisconnectException
+  {
+  }
+
+  // ------------------------------- abstract box car methods --------------------------------------
+  public void writeFetch_ (Section section) throws SqlException
+  {
+    if (resultSetType_ == java.sql.ResultSet.TYPE_FORWARD_ONLY && fetchSize_ != 0 &&
+        rowsYetToBeReceivedForRowset_ > 0)
+      netAgent_.resultSetRequest_.writeFetch (this,
+                                             section,
+                                             rowsYetToBeReceivedForRowset_);
+    else
+      netAgent_.resultSetRequest_.writeFetch (this,
+                                             section,
+                                             fetchSize_);
+  }
+
+  public void readFetch_ () throws SqlException
+  { netAgent_.resultSetReply_.readFetch (this); }
+
+  public void writeScrollableFetch_ (Section section,
+                                    int fetchSize,
+                                    int orientation,
+                                    long rowToFetch,
+                                    boolean resetQueryBlocks) throws SqlException
+  {
+    netAgent_.resultSetRequest_.writeScrollableFetch (
+      this,
+      section,
+      fetchSize,
+      orientation,
+      rowToFetch,
+      resetQueryBlocks);
+  }
+
+  // think about splitting out the position cursor stuff from the fetch stuff
+  // use commented out abstract position cursor methods above
+  public void readScrollableFetch_ () throws SqlException
+  { netAgent_.resultSetReply_.readScrollableFetch (this); }
+
+  public void writePositioningFetch_ (Section section,
+                                     int orientation,
+                                     long rowToFetch) throws SqlException
+  {
+    netAgent_.resultSetRequest_.writePositioningFetch (
+      this,
+      section,
+      orientation,
+      rowToFetch);
+  }
+
+  public void readPositioningFetch_ () throws SqlException
+  { netAgent_.resultSetReply_.readPositioningFetch (this); }
+
+  public void writeCursorClose_ (Section section) throws SqlException
+  { netAgent_.resultSetRequest_.writeCursorClose (this, section); }
+  public void readCursorClose_ () throws SqlException
+  { netAgent_.resultSetReply_.readCursorClose (this); }
+}

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetReply.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetReply.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetReply.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetReply.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,345 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetResultSetReply
+
+   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.net;
+
+import org.apache.derby.client.am.SqlState;
+
+import org.apache.derby.client.am.SqlException;
+import org.apache.derby.client.am.DisconnectException;
+
+import org.apache.derby.client.am.ResultSet;
+import org.apache.derby.client.am.ResultSetCallbackInterface;
+
+public class NetResultSetReply extends NetStatementReply implements ResultSetReplyInterface
+{
+  public NetResultSetReply (NetAgent netAgent, int bufferSize)
+  {
+    super (netAgent, bufferSize);
+  }
+
+  //----------------------------- entry points ---------------------------------
+
+  public void readFetch (ResultSetCallbackInterface resultSet) throws DisconnectException
+  {
+    startSameIdChainParse();
+    parseCNTQRYreply (resultSet, true); // true means we expect row data
+    endOfSameIdChainData();
+  }
+
+  public void readPositioningFetch (ResultSetCallbackInterface resultSet) throws DisconnectException
+  {
+    startSameIdChainParse();
+    parseCNTQRYreply (resultSet, false);  // false means return data is not expected
+    endOfSameIdChainData();
+  }
+
+  public void readScrollableFetch (ResultSetCallbackInterface resultSet) throws DisconnectException
+  {
+    startSameIdChainParse();
+    parseCNTQRYreply (resultSet, true);   // true means return data is expected
+    endOfSameIdChainData();
+  }
+
+  public void readCursorClose (ResultSetCallbackInterface resultSet) throws DisconnectException
+  {
+    startSameIdChainParse();
+    parseCLSQRYreply (resultSet);
+    endOfSameIdChainData();
+  }
+
+  //----------------------helper methods----------------------------------------
+
+  //------------------parse reply for specific command--------------------------
+
+  // These methods are "private protected", which is not a recognized java privilege,
+  // but means that these methods are private to this class and to subclasses,
+  // and should not be used as package-wide friendly methods.
+
+  // Parse the reply for the Close Query Command.
+  // This method handles the parsing of all command replies and reply data
+  // for the clsqry command.
+  private void parseCLSQRYreply (ResultSetCallbackInterface resultSet) throws DisconnectException
+  {
+    int peekCP = parseTypdefsOrMgrlvlovrs ();
+
+    if (peekCP == CodePoint.SQLCARD) {
+      NetSqlca netSqlca = parseSQLCARD (null);  //@f48553sxg - null means rowsetSqlca_ is null
+      // Set the cursor state if null SQLCA or sqlcode is equal to 0.
+      resultSet.completeSqlca (netSqlca);
+    }
+    else
+      parseCloseError (resultSet);
+  }
+
+  // Parse the reply for the Continue Query Command.
+  // This method handles the parsing of all command replies and reply data for the cntqry command.
+  // If doCopyQrydta==false, then there is no data, and we're only parsing out the sqlca to get the row count.
+  private void parseCNTQRYreply (ResultSetCallbackInterface resultSetI,
+                                 boolean doCopyQrydta) throws DisconnectException
+  {
+    boolean found = false;
+    int peekCP = peekCodePoint();
+    if (peekCP == CodePoint.RDBUPDRM) {
+      found = true;
+      parseRDBUPDRM();
+      peekCP = peekCodePoint();
+    }
+
+    if (peekCP == CodePoint.QRYDTA) {
+      found = true;
+      if (!doCopyQrydta) {
+        parseLengthAndMatchCodePoint (CodePoint.QRYDTA);
+        //we don't need to copy QRYDTA since there is no data
+        if (longValueForDecryption_ != null)
+          longValueForDecryption_ = null;
+        if (longBufferForDecryption_ != null)
+          longBufferForDecryption_ = null;
+
+        int ddmLength = getDdmLength();
+        ensureBLayerDataInBuffer (ddmLength);
+        ((ResultSet)resultSetI).expandRowsetSqlca ();
+        NetSqlca sqlca = parseSQLCARDrow (((ResultSet)resultSetI).rowsetSqlca_);  
+        int daNullIndicator = readFastByte();
+        adjustLengths (getDdmLength());
+        // define event interface and use the event method
+        // only get the rowCount_ if sqlca is not null and rowCount_ is unknown
+        if (sqlca != null && sqlca.containsSqlcax())
+          ((ResultSet) resultSetI).setRowCountEvent (sqlca.getRowCount(netAgent_.targetTypdef_));
+
+        peekCP = peekCodePoint();
+        if (peekCP == CodePoint.RDBUPDRM) {
+          parseRDBUPDRM();
+          peekCP = peekCodePoint();
+        }
+        return;
+      }
+      do {
+        parseQRYDTA ((NetResultSet) resultSetI);
+        peekCP = peekCodePoint();
+      } while (peekCP == CodePoint.QRYDTA);
+    }
+
+    if (peekCP == CodePoint.EXTDTA) {
+      found = true;
+      do {
+        copyEXTDTA ((NetCursor)((ResultSet) resultSetI).cursor_);
+        if (longBufferForDecryption_ != null ) {//encrypted EXTDTA
+          buffer_ = longBufferForDecryption_;
+          pos_ = longPosForDecryption_;
+          if (longBufferForDecryption_ != null && count_ > longBufferForDecryption_.length)
+            count_ = longBufferForDecryption_.length;
+        }
+
+        peekCP = peekCodePoint();
+      } while (peekCP == CodePoint.EXTDTA);
+    }
+
+    if (peekCP == CodePoint.SQLCARD) {
+      found = true;
+      ((ResultSet)resultSetI).expandRowsetSqlca ();
+      NetSqlca netSqlca = parseSQLCARD (((ResultSet)resultSetI).rowsetSqlca_);
+      // for an atomic operation, the SQLCA contains the sqlcode for the first (statement
+      // terminating)error, the last warning, or zero.  all multi-row fetch operatons are
+      // atomic.  (the only operation that is not atomic is multi-row insert).
+      if (((ResultSet)resultSetI).sensitivity_ != ResultSet.sensitivity_sensitive_dynamic__) {
+        if (netSqlca != null && netSqlca.containsSqlcax() && netSqlca.getRowsetRowCount() == 0)
+          ((ResultSet) resultSetI).setRowCountEvent (netSqlca.getRowCount(netAgent_.targetTypdef_));
+      }
+      resultSetI.completeSqlca (netSqlca);
+      peekCP = peekCodePoint();
+    }
+
+    if (peekCP == CodePoint.ENDQRYRM) {
+      found = true;
+      parseEndQuery (resultSetI);
+      peekCP = peekCodePoint();
+    }
+
+    if (peekCP == CodePoint.RDBUPDRM) {
+      found = true;
+      parseRDBUPDRM();
+    }
+
+    if (!found)
+      parseFetchError (resultSetI);
+
+    if (longBufferForDecryption_ != null) {
+      // Not a good idea to create a new buffer_
+      buffer_ = new byte[DEFAULT_BUFFER_SIZE];
+      longBufferForDecryption_ = null;
+  }
+  }
+
+  void parseCloseError (ResultSetCallbackInterface resultSetI) throws DisconnectException
+  {
+    int peekCP = peekCodePoint();
+    switch (peekCP) {
+    case CodePoint.ABNUOWRM: {
+      NetSqlca sqlca = parseAbnormalEndUow (resultSetI.getConnectionCallbackInterface());
+      resultSetI.completeSqlca (sqlca);
+      break;
+    }
+    case CodePoint.CMDCHKRM:
+      parseCMDCHKRM();
+      break;
+    case CodePoint.QRYNOPRM:
+      parseQRYNOPRM (resultSetI);
+      break;
+    case CodePoint.RDBNACRM:
+      parseRDBNACRM();
+      break;
+    default:
+      parseCommonError (peekCP);
+    }
+  }
+
+  void parseFetchError (ResultSetCallbackInterface resultSetI) throws DisconnectException
+  {
+    int peekCP = peekCodePoint();
+    switch (peekCP) {
+    case CodePoint.ABNUOWRM: {
+      NetSqlca sqlca = parseAbnormalEndUow (resultSetI.getConnectionCallbackInterface());
+      resultSetI.completeSqlca (sqlca);
+      break;
+    }
+    case CodePoint.CMDCHKRM:
+      parseCMDCHKRM();
+      break;
+    case CodePoint.CMDNSPRM:
+      parseCMDNSPRM();
+      break;
+    case CodePoint.QRYNOPRM:
+      parseQRYNOPRM (resultSetI);
+      break;
+    case CodePoint.RDBNACRM:
+      parseRDBNACRM();
+      break;
+    default:
+      parseCommonError (peekCP);
+    }
+  }
+
+  //-----------------------------parse DDM Reply Messages-----------------------
+
+  // Query Not Opened Reply Message is issued if a CNTQRY or CLSQRY
+  // command is issued for a query that is not open.  A previous
+  // ENDQRYRM, ENDUOWRM, or ABNUOWRM reply message might have
+  // terminated the command.
+  // PROTOCOL architects the SQLSTATE value depending on SVRCOD
+  // SVRCOD 4 -> SQLSTATE is 24501
+  // SVRCOD 8 -> SQLSTATE of 58008 or 58009
+  //
+  // if SVRCOD is 4 then SQLSTATE 24501, SQLCODE -501
+  // else SQLSTATE 58009, SQLCODE -30020
+  //
+  // Messages
+  // SQLSTATE : 24501
+  //     The identified cursor is not open.
+  //     SQLCODE : -501
+  //     The cursor specified in a FETCH or CLOSE statement is not open.
+  //     The statement cannot be processed.
+  // SQLSTATE : 58009
+  //     Execution failed due to a distribution protocol error that caused deallocation of the conversation.
+  //     SQLCODE : -30020
+  //     Execution failed because of a Distributed Protocol
+  //         Error that will affect the successful execution of subsequent
+  //         commands and SQL statements: Reason Code <reason-code>.
+  //     Some possible reason codes include:
+  //     121C Indicates that the user is not authorized to perform the requested command.
+  //     1232 The command could not be completed because of a permanent error.
+  //         In most cases, the server will be in the process of an abend.
+  //     220A The target server has received an invalid data description.
+  //         If a user SQLDA is specified, ensure that the fields are
+  //         initialized correctly. Also, ensure that the length does not exceed
+  //         the maximum allowed length for the data type being used.
+  //
+  //     The command or statement cannot be processed.  The current
+  //         transaction is rolled back and the application is disconnected
+  //         from the remote database.
+  //
+  // Returned from Server:
+  // SVRCOD - required  (4 - WARNING, 8 - ERROR)
+  // RDBNAM - required
+  // PKGNAMCSN - required
+  //
+  private void parseQRYNOPRM (ResultSetCallbackInterface resultSet) throws DisconnectException
+  {
+    boolean svrcodReceived = false;
+    int svrcod = CodePoint.SVRCOD_INFO;
+    boolean rdbnamReceived = false;
+    String rdbnam = null;
+    boolean pkgnamcsnReceived = false;
+    Object pkgnamcsn = null;
+
+    parseLengthAndMatchCodePoint (CodePoint.QRYNOPRM);
+    pushLengthOnCollectionStack();
+    int peekCP = peekCodePoint();
+
+    while (peekCP != Reply.END_OF_COLLECTION) {
+
+      boolean foundInPass = false;
+
+      if (peekCP == CodePoint.SVRCOD) {
+        foundInPass = true;
+        svrcodReceived = checkAndGetReceivedFlag (svrcodReceived);
+        svrcod = parseSVRCOD (CodePoint.SVRCOD_WARNING, CodePoint.SVRCOD_ERROR);
+        peekCP = peekCodePoint();
+      }
+
+      if (peekCP == CodePoint.RDBNAM) {
+        foundInPass = true;
+        rdbnamReceived = checkAndGetReceivedFlag (rdbnamReceived);
+        rdbnam = parseRDBNAM (true);
+        peekCP = peekCodePoint();
+      }
+
+      if (peekCP == CodePoint.PKGNAMCSN) {
+        foundInPass = true;
+        pkgnamcsnReceived = checkAndGetReceivedFlag (pkgnamcsnReceived);
+        pkgnamcsn = parsePKGNAMCSN (true);
+        peekCP = peekCodePoint();
+      }
+
+      if (!foundInPass)
+        doPrmnsprmSemantics (peekCP);
+
+    }
+    popCollectionStack();
+    checkRequiredObjects (svrcodReceived, rdbnamReceived, pkgnamcsnReceived);
+
+    // move into a method
+    netAgent_.setSvrcod (svrcod);
+    if (svrcod == CodePoint.SVRCOD_WARNING) {
+      netAgent_.accumulateReadException (new SqlException (netAgent_.logWriter_,
+        "The identified cursor is not open.",
+        SqlState._24501));
+    }
+    else {
+      agent_.accumulateChainBreakingReadExceptionAndThrow (new DisconnectException (
+        agent_,
+        "Execution failed due to a distribution protocol error that " +
+        "caused deallocation of the conversation.  " +
+        "The identified cursor is not open.",
+        SqlState._58009));
+    }
+  }
+}
+

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,328 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetResultSetRequest
+
+   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.net;
+
+import org.apache.derby.client.am.Section;
+import org.apache.derby.client.am.SqlException;
+import org.apache.derby.client.am.ResultSet;
+import org.apache.derby.client.am.ColumnMetaData;
+
+public class NetResultSetRequest extends NetStatementRequest
+                                implements ResultSetRequestInterface
+{
+  public NetResultSetRequest (NetAgent netAgent, CcsidManager ccsidManager, int bufferSize)
+  {
+    super (netAgent, ccsidManager, bufferSize);
+  }
+
+  //----------------------------- entry points ---------------------------------
+  public void writeFetch (NetResultSet resultSet,
+                          Section section,
+                          int fetchSize) throws SqlException
+  {
+    // - for forward-only cursors we do not send qryrowset on OPNQRY, fetchSize is ignored.
+    //   but qryrowset is sent on EXCSQLSTT for a stored procedure call.
+    boolean sendQryrowset =
+         ((NetStatement) resultSet.statement_.materialStatement_).qryrowsetSentOnOpnqry_;
+
+    boolean sendRtnextdta = false;
+    if (sendQryrowset && resultSet.resultSetType_ == java.sql.ResultSet.TYPE_FORWARD_ONLY &&
+        ((NetCursor) resultSet.cursor_).hasLobs_) {
+      fetchSize = 1;
+      resultSet.fetchSize_ = 1;
+      sendRtnextdta = true;
+      ((NetCursor) resultSet.cursor_).rtnextrow_ = false;
+    }
+    // if one of the result sets returned from a stored procedure is scrollable,
+    // then we set netStatement_.qryrowsetSentOnOpnqry_ to true even though we didn't really
+    // send a qryrowset on excsqlstt for sqlam >= 7.  this is ok for scrollable cursors,
+    // but will cause a problem for forward-only cursors.  Because if fetchSize was never
+    // set, we will send qryrowset(0), which will cause a syntaxrm.
+    else if (resultSet.fetchSize_ == 0) {
+      sendQryrowset = false;
+    }
+
+    buildCNTQRY (section,
+                 sendQryrowset,
+                 resultSet.queryInstanceIdentifier_,
+                 fetchSize,
+                 sendRtnextdta);
+
+    buildOUTOVR (resultSet,
+                 resultSet.resultSetMetaData_,
+                 resultSet.firstOutovrBuilt_,
+                 ((NetCursor) resultSet.cursor_).hasLobs_);
+  }
+
+  public void writeScrollableFetch (NetResultSet resultSet,
+                                    Section section,
+                                    int fetchSize,
+                                    int orientation,
+                                    long rowToFetch,
+                                    boolean resetQueryBlocks) throws SqlException
+  {
+    int protocolOrientation = computePROTOCOLOrientation (orientation);
+
+    // - for sensitive-static cursors:
+    //     * qryrowset must be sent on opnqry to indicate to the server that the cursor is
+    //       going to be used in a scrollable fashion.  (sqlam<7)
+    //     * if qryrowset is sent on opnqry, then it must be sent on all subsequent cntqry's
+    // - for sensitive-dynamic non-rowset cursors: (we should never be in this case)
+    //     * qryrowset is NOT ALLOWED on cntqry's
+    // - for rowset cursors:
+    //     * qryrowset is optional.  it is ignored on opnqry.  if not sent on cntqry,
+    //       then the fetch is going fetch next row as opposed to fetch next rowset.
+    boolean sendQryrowset =
+        (resultSet.isRowsetCursor_ ||
+         (((NetStatement) resultSet.statement_.materialStatement_).qryrowsetSentOnOpnqry_ &&
+          (resultSet.sensitivity_ == ResultSet.sensitivity_sensitive_static__ ||
+          ((NetCursor)resultSet.cursor_).blocking_)));
+
+    buildScrollCNTQRY (protocolOrientation,
+                       rowToFetch,
+                       section,
+                       sendQryrowset,
+                       resultSet.queryInstanceIdentifier_,
+                       fetchSize,
+                       resetQueryBlocks);
+
+    buildOUTOVR (resultSet,
+                 resultSet.resultSetMetaData_,
+                 resultSet.firstOutovrBuilt_,
+                 ((NetCursor) resultSet.cursor_).hasLobs_);
+  }
+
+  public void writePositioningFetch (NetResultSet resultSet,
+                                     Section section,
+                                     int orientation,
+                                     long rowToFetch) throws SqlException
+  {
+    int protocolOrientation = computePROTOCOLOrientation (orientation);
+
+    // do not send qryrowste if the cursor is a non-rowset, sensitive dynamic cursor
+    boolean sendQryrowset =
+        resultSet.isRowsetCursor_ ||
+        (((NetStatement) resultSet.statement_.materialStatement_).qryrowsetSentOnOpnqry_ &&
+         resultSet.sensitivity_ != resultSet.sensitivity_sensitive_dynamic__);
+
+    buildPositioningCNTQRY (protocolOrientation,
+                            rowToFetch,
+                            section,
+                            sendQryrowset,
+                            resultSet.queryInstanceIdentifier_,
+                            resultSet.fetchSize_);
+
+    buildOUTOVR (resultSet,
+                 resultSet.resultSetMetaData_,
+                 resultSet.firstOutovrBuilt_,
+                 ((NetCursor) resultSet.cursor_).hasLobs_);
+  }
+
+  public void writeCursorClose (NetResultSet resultSet,
+                                Section section) throws SqlException
+  {
+    buildCLSQRY (section,
+                 resultSet.queryInstanceIdentifier_);
+  }
+
+  //----------------------helper methods----------------------------------------
+  // These methods are "private protected", which is not a recognized java privilege,
+  // but means that these methods are private to this class and to subclasses,
+  // and should not be used as package-wide friendly methods.
+
+  private void buildCLSQRY (Section section,
+                            long queryInstanceIdentifier)
+			    throws SqlException
+  {
+    createCommand ();
+    markLengthBytes (CodePoint.CLSQRY);
+    buildPKGNAMCSN (section);
+    buildQRYINSID (queryInstanceIdentifier);
+    updateLengthBytes();
+  }
+
+  private void buildCNTQRY (Section section,
+                            boolean sendQryrowset,
+                            long queryInstanceIdentifier,
+                            int qryrowsetSize,
+                            boolean sendRtnextdta) throws SqlException
+  {
+    buildCoreCNTQRY (section,
+                     sendQryrowset,
+                     queryInstanceIdentifier,
+                     qryrowsetSize);
+
+    // We will always let RTNEXTDTA default to RTNEXTROW.  The only time we need to send
+    // RTNEXTDTA RTNEXTALL is for a stored procedure returned forward-only ResultSet
+    // that has LOB columns.  Since there are LOBs in the
+    // ResultSet, no QRYDTA is returned on execute.  On the CNTQRY's, we will
+    // send qryrowset(1) and rtnextall.
+    if (sendRtnextdta) buildRTNEXTDTA (CodePoint.RTNEXTALL);
+
+
+    updateLengthBytes();
+  }
+
+  // buildCoreCntqry builds the common parameters
+  private void buildCoreCNTQRY (Section section,
+                                boolean sendQryrowset,
+                                long queryInstanceIdentifier,
+                                int qryrowsetSize)
+				 throws SqlException
+  {
+    createCommand ();
+    markLengthBytes (CodePoint.CNTQRY);
+
+    buildPKGNAMCSN (section); // 1. packageNameAndConsistencyToken
+    buildQRYBLKSZ (); // 2. qryblksz
+
+    // maxblkext (-1) tells the server that the client is capable of receiving any number of query blocks
+    if (sendQryrowset)
+      buildMAXBLKEXT (-1); // 3. maxblkext
+
+    // 4. qryinsid
+	buildQRYINSID (queryInstanceIdentifier);
+
+    if (sendQryrowset) buildQRYROWSET (qryrowsetSize);  // 5. qryrowset
+  }
+
+  // Send CNTQRY to get a new rowset from the target server.
+  private void buildScrollCNTQRY (int scrollOrientation,
+                                  long rowNumber,
+                                  Section section,
+                                  boolean sendQryrowset,
+                                  long queryInstanceIdentifier,
+                                  int qryrowsetSize,
+				  boolean resetQueryBlocks)
+				    throws SqlException
+  {
+    buildCoreCNTQRY (section,
+                     sendQryrowset,
+                     queryInstanceIdentifier,
+                     qryrowsetSize);
+
+    buildQRYSCRORN (scrollOrientation); // qryscrorn
+
+    if (scrollOrientation == CodePoint.QRYSCRABS || scrollOrientation == CodePoint.QRYSCRREL)
+      buildQRYROWNBR (rowNumber);
+
+    if (resetQueryBlocks)
+      buildQRYBLKRST (0xF1);  // do reset the rowset
+    else
+      buildQRYBLKRST (0xF0);  // do not reset the rowset
+
+    buildQRYRTNDTA (0xF1);    // do return data
+
+    updateLengthBytes();
+  }
+
+  // Send CTNQRY to reposition the cursor on the target server.
+  private void buildPositioningCNTQRY (int scrollOrientation,
+                                       long rowNumber,
+                                       Section section,
+                                       boolean sendQryrowset,
+                                       long queryInstanceIdentifier,
+                                       int qryrowsetSize)
+                                        throws SqlException
+  {
+    createCommand ();
+    markLengthBytes (CodePoint.CNTQRY);
+
+    buildPKGNAMCSN (section); // 1. pkgnamcsn
+    buildQRYBLKSZ (); // 2. qryblksz
+
+    buildQRYINSID (queryInstanceIdentifier); // 3. qryinsid
+
+    if (sendQryrowset)
+      buildQRYROWSET (qryrowsetSize);   // 4. qryrowset
+
+    buildQRYSCRORN (scrollOrientation); // 5. qryscrorn
+
+    if (scrollOrientation == CodePoint.QRYSCRABS || scrollOrientation == CodePoint.QRYSCRREL)
+    buildQRYROWNBR (rowNumber); // 6. qryrownbr
+
+    buildQRYBLKRST (0xF1); // 7. do reset the rowset
+    buildQRYRTNDTA (0xF0); // 8. do not return data
+
+
+    updateLengthBytes(); // for cntqry
+  }
+
+  private void buildOUTOVR (ResultSet resultSet,
+                            ColumnMetaData resultSetMetaData,
+                            boolean firstOutovrBuilt,
+                            boolean hasLobs) throws SqlException
+  {
+    return;
+  }
+
+  private void buildRTNEXTDTA (int rtnextdta) throws SqlException
+  {
+    writeScalar1Byte (CodePoint.RTNEXTDTA, rtnextdta);
+  }
+
+  private void buildQRYSCRORN (int scrollOrientation) throws SqlException
+  {
+    writeScalar1Byte (CodePoint.QRYSCRORN, scrollOrientation);
+  }
+
+  private void buildQRYBLKRST (int qryblkrst) throws SqlException
+  {
+    writeScalar1Byte (CodePoint.QRYBLKRST, qryblkrst);
+  }
+
+  private void buildQRYROWNBR (long rowNumber) throws SqlException
+  {
+    writeScalar8Bytes (CodePoint.QRYROWNBR, rowNumber);
+  }
+
+  private void buildQRYRTNDTA (int qryrtndta) throws SqlException
+  {
+    writeScalar1Byte (CodePoint.QRYRTNDTA, qryrtndta);
+  }
+
+  //----------------------non-parsing computational helper methods--------------
+  // These methods are "private protected", which is not a recognized java privilege,
+  // but means that these methods are private to this class and to subclasses,
+  // and should not be used as package-wide friendly methods.
+
+  // Called by NetResultSetRequest.writeScrollableFetch()
+  private int computePROTOCOLOrientation (int orientation) throws SqlException
+  {
+    switch (orientation) {
+    case ResultSet.scrollOrientation_absolute__ :
+      return CodePoint.QRYSCRABS;
+
+    case ResultSet.scrollOrientation_after__ :
+      return CodePoint.QRYSCRAFT;
+
+    case ResultSet.scrollOrientation_before__ :
+      return CodePoint.QRYSCRBEF;
+
+    case ResultSet.scrollOrientation_relative__ :
+      return CodePoint.QRYSCRREL;
+
+    default:
+      throw new SqlException (netAgent_.logWriter_, "Bug check: invalid scroll orientation");
+    }
+  }
+
+}

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqlca.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqlca.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqlca.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqlca.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,66 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetSqlca
+
+   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.net;
+
+import org.apache.derby.client.am.Sqlca;
+
+public class NetSqlca extends Sqlca
+{
+  // these are the same variables that are in the Sqlca except ccsids
+  // are a little different
+
+  NetSqlca (org.apache.derby.client.am.Connection connection,
+         int sqlCode,
+         byte[] sqlStateBytes,
+         byte[] sqlErrpBytes,
+         int ccsid)
+  {
+    super(connection);
+    sqlCode_ = sqlCode;
+    sqlStateBytes_ = sqlStateBytes;
+    sqlErrpBytes_ = sqlErrpBytes;
+    ccsid_ = ccsid;
+  }
+
+  protected void setSqlerrd (int[] sqlErrd)
+  {
+    sqlErrd_ = sqlErrd;
+  }
+
+  protected void setSqlwarnBytes (byte[] sqlWarnBytes)
+  {
+    sqlWarnBytes_ = sqlWarnBytes;
+  }
+
+  protected void setSqlerrmcBytes (byte[] sqlErrmcBytes, int sqlErrmcCcsid)
+  {
+    sqlErrmcBytes_ = sqlErrmcBytes;
+    sqlErrmcCcsid_ = sqlErrmcCcsid;
+  }
+
+  public long getRowCount (Typdef typdef) throws org.apache.derby.client.am.DisconnectException
+  {
+    int byteOrder = typdef.getByteOrder();
+    long num = (byteOrder == org.apache.derby.client.am.SignedBinary.BIG_ENDIAN) ?
+      super.getRowCount() : ((long)sqlErrd_[1]<<32) + sqlErrd_[0];
+    return num;
+  }
+}

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqldta.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqldta.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqldta.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetSqldta.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,159 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetSqldta
+
+   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.net;
+
+
+
+public class NetSqldta extends NetCursor
+{
+  private NetConnection netConnection_;
+
+
+  public NetSqldta (NetAgent netAgent)
+  {
+    super (netAgent);
+    netConnection_ = netAgent.netConnection_;
+  }
+
+  public boolean next () throws org.apache.derby.client.am.SqlException
+  {
+    if (allRowsReceivedFromServer_)
+      return false;
+    else {
+      allRowsReceivedFromServer_ = true;
+      return true;
+    }
+  }
+
+  protected boolean calculateColumnOffsetsForRow ()
+  {
+    int colNullIndicator = CodePoint.NULLDATA;
+    int length ;
+
+    extdtaPositions_.clear();  // reset positions for this row
+
+    // read the da null indicator
+    if (readFdocaOneByte() == 0xff)
+      return false;
+
+    incrementRowsReadEvent();
+    // Use the arrays defined on the Cursor for forward-only cursors.
+    // can they ever be null
+    if (columnDataPosition_ == null || columnDataComputedLength_ == null || isNull_ == null)
+      allocateColumnOffsetAndLengthArrays ();
+
+    // Loop through the columns
+    for (int index = 0; index < columns_; index++) {
+      // If column is nullable, read the 1-byte null indicator.
+      if (nullable_[index])
+        // Need to pass the column index so all previously calculated offsets can be
+        // readjusted if the query block splits on a column null indicator.
+
+        // null indicators from FD:OCA data
+        // 0 to 127: a data value will flow.
+        // -1 to -128: no data value will flow.
+        colNullIndicator = readFdocaOneByte ();
+
+      // If non-null column data
+      if (!nullable_[index] || (colNullIndicator >= 0 && colNullIndicator <= 127)) {
+        isNull_[index] = false;
+
+        switch (typeToUseForComputingDataLength_[index]) {
+        // for variable character string and variable byte string,
+        // there are 2-byte of length in front of the data
+        case Typdef.TWOBYTELENGTH:
+          columnDataPosition_[index] = position_;
+          length = readFdocaTwoByteLength ();
+          // skip length + the 2-byte length field
+          if (isGraphic_[index])
+            columnDataComputedLength_[index] = skipFdocaBytes (length*2) + 2;
+          else
+            columnDataComputedLength_[index] = skipFdocaBytes (length) + 2;
+          break;
+
+          // for short variable character string and short variable byte string,
+          // there is a 1-byte length in front of the data
+        case Typdef.ONEBYTELENGTH:
+          columnDataPosition_[index] = position_;
+          length = readFdocaOneByte ();
+          // skip length + the 1-byte length field
+          if (isGraphic_[index])
+            columnDataComputedLength_[index] = skipFdocaBytes (length*2) + 1;
+          else
+            columnDataComputedLength_[index] = skipFdocaBytes (length) + 1;
+          break;
+
+        // For decimal columns, determine the precision, scale, and the representation
+        case Typdef.DECIMALLENGTH:
+          columnDataPosition_[index] = position_;
+          columnDataComputedLength_[index] = skipFdocaBytes (getDecimalLength(index));
+          break;
+
+        case Typdef.LOBLENGTH:
+          columnDataPosition_[index] = position_;
+          columnDataComputedLength_[index] = this.skipFdocaBytes (fdocaLength_[index] & 0x7fff);
+          break;
+
+        default:
+          columnDataPosition_[index] = position_;
+          if (isGraphic_[index])
+            columnDataComputedLength_[index] = skipFdocaBytes (fdocaLength_[index]*2);
+          else
+            columnDataComputedLength_[index] = skipFdocaBytes (fdocaLength_[index]);
+          break;
+        }
+      }
+      else if ((colNullIndicator & 0x80) == 0x80) {
+        // Null data. Set the isNull indicator to true.
+        isNull_[index] = true;
+      }
+    }
+
+    if (!allRowsReceivedFromServer_)
+      calculateLobColumnPositionsForRow();
+
+    return true; // hardwired for now, this means the current row position is a valid position
+  }
+
+
+
+  private int skipFdocaBytes (int length)
+  {
+    position_ += length;
+    return length;
+  }
+
+  private int readFdocaOneByte ()
+  {
+    return dataBuffer_[position_++] & 0xff;
+  }
+
+
+  private int readFdocaTwoByteLength ()
+  {
+    return
+      ((dataBuffer_[position_++] & 0xff) << 8) +
+      ((dataBuffer_[position_++] & 0xff) << 0);
+  }
+
+
+}
+

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

Added: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatement.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatement.java?rev=165178&view=auto
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatement.java (added)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatement.java Thu Apr 28 12:05:42 2005
@@ -0,0 +1,185 @@
+/*
+
+   Derby - Class org.apache.derby.client.net.NetStatement
+
+   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.net;
+
+import org.apache.derby.client.am.Section;
+import org.apache.derby.client.am.ColumnMetaData;
+import org.apache.derby.client.am.Statement;
+import org.apache.derby.client.am.SqlException;
+
+public class NetStatement implements org.apache.derby.client.am.MaterialStatement
+{
+
+  Statement statement_;
+
+
+  // Alias for (NetConnection) statement_.connection
+  NetConnection netConnection_;
+
+  // Alias for (NetAgent) statement_.agent
+   NetAgent netAgent_;
+
+
+  // If qryrowset is sent on opnqry then it also needs to be sent on every subsequent cntqry.
+  public boolean qryrowsetSentOnOpnqry_ = false;
+
+  //---------------------constructors/finalizer---------------------------------
+
+  private NetStatement()
+  {
+    initNetStatement();
+  }
+
+  private void resetNetStatement()
+  {
+    initNetStatement();
+  }
+
+  private void initNetStatement()
+  {
+    qryrowsetSentOnOpnqry_ = false;
+  }
+
+  // Relay constructor for NetPreparedStatement.
+  NetStatement (org.apache.derby.client.am.Statement statement, NetAgent netAgent, NetConnection netConnection)
+  {
+    this();
+    initNetStatement (statement, netAgent, netConnection);
+  }
+
+  void resetNetStatement (org.apache.derby.client.am.Statement statement, NetAgent netAgent, NetConnection netConnection)
+  {
+    resetNetStatement();
+    initNetStatement (statement, netAgent, netConnection);
+  }
+
+  private void initNetStatement (org.apache.derby.client.am.Statement statement, NetAgent netAgent, NetConnection netConnection)
+  {
+    netAgent_ = netAgent;
+    netConnection_ = netConnection;
+    statement_ = statement;
+    statement_.materialStatement_ = this;
+  }
+
+  // Called by abstract Connection.createStatement().newStatement() for jdbc 1 statements
+  NetStatement (NetAgent netAgent, NetConnection netConnection) throws SqlException
+  {
+    this (new Statement (netAgent, netConnection),
+          netAgent,
+          netConnection);
+  }
+
+  void netReset (NetAgent netAgent, NetConnection netConnection) throws SqlException
+  {
+    statement_.resetStatement(netAgent, netConnection);
+    resetNetStatement (statement_, netAgent, netConnection);
+  }
+
+  public void reset_ ()
+  {
+    qryrowsetSentOnOpnqry_ = false;
+  }
+
+  // Called by abstract Connection.createStatement().newStatement() for jdbc 2 statements with scroll attributes
+  NetStatement (NetAgent netAgent, NetConnection netConnection, int type, int concurrency, int holdability) throws SqlException
+  {
+    this (new Statement (netAgent, netConnection, type, concurrency, holdability, java.sql.Statement.NO_GENERATED_KEYS, null),
+          netAgent,
+          netConnection);
+  }
+
+  void resetNetStatement (NetAgent netAgent, NetConnection netConnection, int type, int concurrency, int holdability) throws SqlException
+  {
+    statement_.resetStatement(netAgent, netConnection, type, concurrency, holdability, java.sql.Statement.NO_GENERATED_KEYS,null);
+    resetNetStatement (statement_, netAgent, netConnection);
+  }
+
+  protected void finalize () throws java.lang.Throwable
+  {
+    super.finalize();
+  }
+
+  // ------------------------abstract box car methods-----------------------------------------------
+
+  public void writeSetSpecialRegister_ (java.util.ArrayList sqlsttList) throws SqlException
+  { netAgent_.statementRequest_.writeSetSpecialRegister (sqlsttList); }
+  public void readSetSpecialRegister_ () throws SqlException
+  { netAgent_.statementReply_.readSetSpecialRegister (statement_); }
+  public void writeExecuteImmediate_ (String sql,
+                                     Section section) throws SqlException
+  { netAgent_.statementRequest_.writeExecuteImmediate (this, sql, section); }
+  public void readExecuteImmediate_ () throws SqlException
+  { netAgent_.statementReply_.readExecuteImmediate (statement_); }
+
+  // NOTE: NET processing does not require parameters supplied on the "read-side" so parameter sql is ignored.
+  public void readExecuteImmediateForBatch_ (String sql) throws SqlException
+  { readExecuteImmediate_(); }
+
+  public void writePrepareDescribeOutput_ (String sql,
+                                          Section section) throws SqlException
+  { netAgent_.statementRequest_.writePrepareDescribeOutput (this, sql, section); }
+  public void readPrepareDescribeOutput_ () throws SqlException
+  { netAgent_.statementReply_.readPrepareDescribeOutput (statement_); }
+
+  public void writeOpenQuery_ (Section section,
+                              int fetchSize,
+                              int resultSetType)
+                               throws SqlException
+  {
+    netAgent_.statementRequest_.writeOpenQuery (
+      this,
+      section,
+      fetchSize,
+      resultSetType);
+  }
+  public void readOpenQuery_ () throws SqlException
+  { netAgent_.statementReply_.readOpenQuery (statement_); }
+
+  public void writeExecuteCall_ (boolean outputExpected,
+                                String procedureName,
+                                Section section,
+                                int fetchSize,
+                                boolean suppressResultSets,
+                                int resultSetType,
+                                ColumnMetaData parameterMetaData,
+                                Object[] inputs) throws SqlException
+  {
+    netAgent_.statementRequest_.writeExecuteCall (
+      this,
+      outputExpected,
+      procedureName,
+      section,
+      fetchSize,
+      suppressResultSets,
+      resultSetType,
+      parameterMetaData,
+      inputs);
+  }
+  public void readExecuteCall_ () throws SqlException
+  { netAgent_.statementReply_.readExecuteCall (statement_); }
+
+  public void writePrepare_ (String sql, Section section) throws SqlException
+  { netAgent_.statementRequest_.writePrepare (this, sql, section); }
+  public void readPrepare_ () throws SqlException
+  { netAgent_.statementReply_.readPrepare (statement_); }
+
+  public void markClosedOnServer_ () {}
+}

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



Mime
View raw message