You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by jb...@apache.org on 2005/05/02 08:26:03 UTC
svn commit: r165585 [30/42] - in
/incubator/derby/code/trunk/java/client/org/apache/derby: client/
client/am/ client/net/ client/resources/ jdbc/
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetIndoubtTransaction.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetIndoubtTransaction.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetIndoubtTransaction.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetIndoubtTransaction.java Sun May 1 23:25:59 2005
@@ -19,16 +19,15 @@
*/
package org.apache.derby.client.net;
-import javax.transaction.xa.*;
+import javax.transaction.xa.Xid;
/**
- * <p>Title: dnc Project</p>
- * <p>Description: </p>
+ * <p>Title: dnc Project</p> <p>Description: </p>
+ *
* @version 1.0
*/
-public class NetIndoubtTransaction
-{
+public class NetIndoubtTransaction {
Xid xid_;
byte[] uowid_;
@@ -38,47 +37,40 @@
int port_;
protected NetIndoubtTransaction(Xid xid,
- byte[] uowid,
- byte[] cSyncLog,
- byte[] pSyncLog,
- String ipaddr,
- int port)
- {
- xid_ = xid;
- uowid_ = uowid;
- cSyncLog_ = cSyncLog;
- pSyncLog_ = pSyncLog;
- ipaddr_ = ipaddr;
- port_ = port;
+ byte[] uowid,
+ byte[] cSyncLog,
+ byte[] pSyncLog,
+ String ipaddr,
+ int port) {
+ xid_ = xid;
+ uowid_ = uowid;
+ cSyncLog_ = cSyncLog;
+ pSyncLog_ = pSyncLog;
+ ipaddr_ = ipaddr;
+ port_ = port;
}
- protected Xid getXid()
- {
- return xid_;
+ protected Xid getXid() {
+ return xid_;
}
- protected byte[] getUOWID()
- {
- return uowid_;
+ protected byte[] getUOWID() {
+ return uowid_;
}
- protected byte[] getCSyncLog()
- {
- return cSyncLog_;
+ protected byte[] getCSyncLog() {
+ return cSyncLog_;
}
- protected byte[] getPSyncLog()
- {
- return pSyncLog_;
+ protected byte[] getPSyncLog() {
+ return pSyncLog_;
}
- protected String getIpAddr()
- {
- return ipaddr_;
+ protected String getIpAddr() {
+ return ipaddr_;
}
- protected int getPort()
- {
- return port_;
+ protected int getPort() {
+ return port_;
}
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetLogWriter.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetLogWriter.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetLogWriter.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetLogWriter.java Sun May 1 23:25:59 2005
@@ -23,394 +23,385 @@
// network traffic tracer.
// This class traces communication buffers for both sends and receives.
// The value of the hex bytes are traced along with the ascii and ebcdic translations.
-public class NetLogWriter extends org.apache.derby.client.am.LogWriter
-{
- // The recevie constant is used to indicate that the bytes were read to a Stream.
- // It indicates to this class that a receive header should be used.
- public static final int TYPE_TRACE_RECEIVE = 2;
-
- // The send constant is used to indicate that the bytes were written to
- // a Stream. It indicates to this class that a send header should be used.
- public static final int TYPE_TRACE_SEND = 1;
-
- //------------------------------ internal constants --------------------------
-
- // This class was implemented using character arrays to translate bytes
- // into ascii and ebcdic. The goal was to be able to quickly index into the
- // arrays to find the characters. Char arrays instead of strings were used as
- // much as possible in an attempt to help speed up performance.
-
- // An array of characters used to translate bytes to ascii.
- // The position in the array corresponds to the hex value of the character.
- private static final char asciiChar__ [] = {
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //0
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //1
- ' ','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/', //2
- '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?', //3
- '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', //4
- 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_', //5
- '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', //6
- 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','.', //7
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //8
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //9
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //A
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //B
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //C
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //D
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //E
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.' //F
- };
-
- // This column position header is used to mark offsets into the trace.
- private static final String colPosHeader__ =
- " 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF";
-
- // An array of characters used to translate bytes to ebcdic.
- // The position in the array corresponds to the hex value of the
- // character.
- private static final char ebcdicChar__[] = {
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //0
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //1
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //2
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //3
- ' ','.','.','.','.','.','.','.','.','.','.','.','<','(','+','|', //4
- '&','.','.','.','.','.','.','.','.','.','!','$','*',')',';','.', //5
- '-','/','.','.','.','.','.','.','.','.','|',',','%','_','>','?', //6
- '.','.','.','.','.','.','.','.','.','`',':','#','@','\'','=','"', //7
- '.','a','b','c','d','e','f','g','h','i','.','.','.','.','.','.', //8
- '.','j','k','l','m','n','o','p','q','r','.','.','.','.','.','.', //9
- '.','~','s','t','u','v','w','x','y','z','.','.','.','.','.','.', //A
- '.','.','.','.','.','.','.','.','.','.','.','.','.','.','.','.', //B
- '{','A','B','C','D','E','F','G','H','I','.','.','.','.','.','.', //C
- '}','J','K','L','M','N','O','P','Q','R','.','.','.','.','.','.', //D
- '\\','.','S','T','U','V','W','X','Y','Z','.','.','.','.','.','.', //E
- '0','1','2','3','4','5','6','7','8','9','.','.','.','.','.','.' //F
- };
-
- // An array of characters representing hex numbers.
- private static final char hexDigit__ [] = {
- '0','1','2','3','4','5','6','7',
- '8','9','A','B','C','D','E','F'
- };
-
- // The receive header comes befor bytes which would be read from a stream.
- private static final String receiveHeader__ =
- " RECEIVE BUFFER: (ASCII) (EBCDIC)";
-
- // The send header comes before bytes which would be written to a stream.
- private static final String sendHeader__ =
- " SEND BUFFER: (ASCII) (EBCDIC)";
-
- private static final char spaceChar__ = ' ';
-
- private static final char zeroChar__ = '0';
-
- // This mapping table associates a codepoint to a String describing the codepoint.
- // This is needed because the trace prints the first codepoint in send and receive buffers.
- // This is created lazily because there is no need to create the mapping if tracing isn't used.
- // So this array will only be created when the com buffer trace is started.
- private static CodePointNameTable codePointNameTable__ = null;
-
- //-----------------------------internal state---------------------------------
-
- //-----------------------------constructors/finalizer-------------------------
-
- // One NetLogWriter object is created per data source, iff tracing is enabled.
- public NetLogWriter (java.io.PrintWriter printWriter, int traceLevel)
- {
- super (printWriter, traceLevel);
-
- // Initialize the codepoint name table if not previously initialized.
- // This is done lazily so that it is not created if the trace isn't used (save some init time).
- if (codePointNameTable__ == null) {
- codePointNameTable__ = new CodePointNameTable();
- }
- }
-
- //------------------------------entry points----------------------------------
-
- // Specialization of LogWriter.traceConnectsExit()
- public void traceConnectsExit (org.apache.derby.client.am.Connection connection)
- {
- if (traceSuspended()) return;
- NetConnection c = (NetConnection) connection;
- synchronized (printWriter_) {
- super.traceConnectsExit (c);
- dncnetprint (" PROTOCOL manager levels: { ");
- printWriter_.print ("SQLAM=" + c.getSQLAM() + ", ");
- printWriter_.print ("AGENT=" + c.getAGENT() + ", ");
- printWriter_.print ("CMNTCPIP=" + c.getCMNTCPIP() + ", ");
- printWriter_.print ("RDB=" + c.getRDB() + ", ");
- printWriter_.print ("SECMGR=" + c.getSECMGR() + ", ");
- printWriter_.print ("XAMGR=" + c.getXAMGR() + ", ");
- printWriter_.print ("SYNCPTMGR=" + c.getSYNCPTMGR() + ", ");
- printWriter_.print ("RSYNCMGR=" + c.getRSYNCMGR());
- printWriter_.println (" }");
- printWriter_.flush();
- }
- }
-
- public void traceConnectsResetExit (org.apache.derby.client.am.Connection connection)
- {
- if (traceSuspended()) return;
- NetConnection c = (NetConnection) connection;
- synchronized (printWriter_) {
- super.traceConnectsResetExit (c);
- dncnetprint (" PROTOCOL manager levels: { ");
- printWriter_.print ("SQLAM=" + c.getSQLAM() + ", ");
- printWriter_.print ("AGENT=" + c.getAGENT() + ", ");
- printWriter_.print ("CMNTCPIP=" + c.getCMNTCPIP() + ", ");
- printWriter_.print ("RDB=" + c.getRDB() + ", ");
- printWriter_.print ("SECMGR=" + c.getSECMGR() + ", ");
- printWriter_.print ("XAMGR=" + c.getXAMGR() + ", ");
- printWriter_.print ("SYNCPTMGR=" + c.getSYNCPTMGR() + ", ");
- printWriter_.print ("RSYNCMGR=" + c.getRSYNCMGR());
- printWriter_.println (" }");
- printWriter_.flush();
- }
- }
-
- // Pass the connection handle and print it in the header
- // What exactly is supposed to be passed, assume one complete DSS packet
- // Write the communication buffer data to the trace.
- // The data is passed in via a byte array. The start and length of the data is given.
- // The type is needed to indicate if the data is part of the send or receive buffer.
- // The class name, method name, and trcPt number are also written to the trace.
- // Not much checking is performed on the parameters. This is done to help performance.
- synchronized public void traceProtocolFlow (byte[] buff,
- int offset,
- int len,
- int type,
- String className,
- String methodName,
- int tracepoint)
- {
- if (traceSuspended()) return;
- if (!loggingEnabled (org.apache.derby.jdbc.ClientDataSource.TRACE_PROTOCOL_FLOWS)) return;
- synchronized (printWriter_) {
- super.tracepoint ("[net]", tracepoint, className, methodName);
-
- int fullLen = len;
- boolean printColPos = true;
- while( fullLen >= 2 )
- { // format each DssHdr seperately
- // get the length of this DssHdr
- len = ((buff[offset] & 0xff) << 8) + ((buff[offset+1] & 0xff) << 0);
-
- // check for valid dss header or not all of dss block
- if ((len < 10) || (len > fullLen))
- len = fullLen;
-
- // subtract that length from the full length
- fullLen -= len;
- // The data will only be written if there is a non-zero positive length.
- if (len != 0) {
- String codePointName = null;
- // If the length <= 10, lookup the first codepoint so it's name can be printed
- if (len >= 10) {
- // Get the int value of the two byte unsigned codepoint.
- int codePoint = getCodePoint (buff, offset+8);
- codePointName = codePointNameTable__.lookup (codePoint);
-
- // if this is not a valid codepoint then format the entire buffer
- // as one block.
- if (codePointName == null)
- {
- len += fullLen;
- fullLen = 0;
- }
- }
-
- if( !printColPos )
- { // not 1st Dss header of this buffer, write seperator
- dncnetprintln( "" );
- }
-
- if (codePointName == null) {
- // codePointName was still null so either < 10 bytes were given or
- // the codepoint wasn't found in the table. Just print the plain send header.
- dncnetprintln (getHeader (type));
- }
- else {
- // codePointName isn't null so the name of the codepoint will be printed.
- printHeaderWithCodePointName (codePointName, type);
- }
-
- // Print the col position header in the trace.
- if( printColPos )
- { // first Dss header of buffer, need column position header
- dncnetprintln (colPosHeader__);
- printColPos = false;
- }
-
- // A char array will be used to translate the bytes to their character
- // representations along with ascii and ebcdic representations.
- char trcDump[] = new char[77];
-
- // bCounter, aCounter, eCounter are offsets used to help position the characters
- short bCounter = 7;
- short aCounter = 43;
- short eCounter = 61;
-
- // The lines will be counted starting at zero.
- // This is hard coded since we are at the beginning.
- trcDump[0] = zeroChar__;
- trcDump[1] = zeroChar__;
- trcDump[2] = zeroChar__;
- trcDump[3] = zeroChar__;
-
- // The 0's are already in the trace so bump the line counter up a row.
- int lineCounter = 0x10;
-
- // Make sure the character array has all blanks in it.
- // Some of these blanks will be replaced later with values.
- // The 0's were not wrote over.
- for (int j = 4; j < 77; j++) {
- trcDump[j] = spaceChar__;
- }
-
- // i will maintain the position in the byte array to be traced.
- int i = 0;
-
- do {
- // Get the unsigned value of the byte.
- // int num = b[off++] & 0xff;
- int num = (buff[offset] < 0)? buff[offset] + 256 : buff[offset];
- offset++;
- i++;
- // Place the characters representing the bytes in the array.
- trcDump[bCounter++] = hexDigit__[((num >>> 4) & 0xf)];
- trcDump[bCounter++] = hexDigit__[(num & 0xf)];
-
- // Place the ascii and ebcdc representations in the array.
- trcDump[aCounter++] = asciiChar__[num];
- trcDump[eCounter++] = ebcdicChar__[num];
-
- if (((i%8) == 0)) {
- if (((i%16) == 0)) {
- // Print the array each time 16 bytes are processed.
- dncnetprintln (trcDump);
- if (i != len) {
- // Not yet at the end of the byte array.
- if ((len - i) < 16) {
- // This is the last line so blank it all out.
- // This keeps the last line looking pretty in case
- // < 16 bytes remain.
- for (int j = 0; j < trcDump.length; j++) {
- trcDump[j] = spaceChar__;
- }
- }
- // Reset the counters.
- bCounter = 0;
- aCounter = 43;
- eCounter = 61;
- // Reset the lineCounter if it starts to get too large.
- if (lineCounter == 0x100000) {
- lineCounter = 0;
- }
- // Place the characters representing the line counter in the array.
- trcDump[bCounter++] = hexDigit__[((lineCounter >>> 12) & 0xf)];
- trcDump[bCounter++] = hexDigit__[((lineCounter >>> 8) & 0xf)];
- trcDump[bCounter++] = hexDigit__[((lineCounter >>> 4) & 0xf)];
- trcDump[bCounter++] = hexDigit__[(lineCounter & 0xf)];
- bCounter += 3;
- // Bump up the line counter.
- lineCounter += 0x10;
- }
- }
- else {
- // 8 bytes were processed so move the counter to adjust for
- // spaces between the columns of bytes.
- bCounter += 2;
- }
- }
- // do this until we all the data has been traced.
- }
- while (i < len);
-
- // print the last line and add some blank lines to make it easier to read.
- if (len % 16 != 0) {
- dncnetprintln (trcDump);
- }
- }
- }
- dncnetprintln ("");
- }
- }
-
- // Gets the int value of the two byte unsigned codepoint.
- private static int getCodePoint (byte[] buff, int offset)
- {
- return ((buff[offset++] & 0xff) << 8) +
- ((buff[offset] & 0xff) << 0);
- }
-
- private static String getHeader (int type)
- {
- switch (type) {
- case TYPE_TRACE_SEND:
- return sendHeader__;
- case TYPE_TRACE_RECEIVE:
- return receiveHeader__;
- default:
- return null;
- }
- }
-
- private static int getStartPosition (int type)
- {
- switch (type) {
- case TYPE_TRACE_SEND:
- return 20; // This is right after 'SEND BUFFER: '.
- case TYPE_TRACE_RECEIVE:
- return 23; // This is right after 'RECEIVE BUFFER: '.
- default:
- return 0;
- }
- }
-
- private void printHeaderWithCodePointName (String codePointName, int type)
- {
- // Create a char array so some of the characters
- // can be replaced with the name of the codepoint.
- char headerArray[] = getHeader(type).toCharArray();
-
- // At most, 16 character name will be used. This is so
- // the headers on top of the ascii and ebcdic rows aren't shifted.
- int replaceLen = (codePointName.length() < 17) ? codePointName.length() : 16;
-
- int offset = getStartPosition (type);
- for (int i = 0; i < replaceLen; i++) {
- headerArray[offset++] = codePointName.charAt (i);
- }
- dncnetprintln (headerArray);
- }
-
- private void dncnetprint (String s)
- {
- synchronized (printWriter_) {
- printWriter_.print ("[derby] " + s);
- printWriter_.flush();
- }
- }
-
- private void dncnetprintln (String s)
- {
- synchronized (printWriter_) {
- printWriter_.println ("[derby] " + s);
- printWriter_.flush();
- }
- }
-
- private void dncnetprintln (char[] s)
- {
- synchronized (printWriter_) {
- printWriter_.print ("[derby] ");
- printWriter_.println (s);
- printWriter_.flush();
+public class NetLogWriter extends org.apache.derby.client.am.LogWriter {
+
+ // The recevie constant is used to indicate that the bytes were read to a Stream.
+ // It indicates to this class that a receive header should be used.
+ public static final int TYPE_TRACE_RECEIVE = 2;
+
+ // The send constant is used to indicate that the bytes were written to
+ // a Stream. It indicates to this class that a send header should be used.
+ public static final int TYPE_TRACE_SEND = 1;
+
+ //------------------------------ internal constants --------------------------
+
+ // This class was implemented using character arrays to translate bytes
+ // into ascii and ebcdic. The goal was to be able to quickly index into the
+ // arrays to find the characters. Char arrays instead of strings were used as
+ // much as possible in an attempt to help speed up performance.
+
+ // An array of characters used to translate bytes to ascii.
+ // The position in the array corresponds to the hex value of the character.
+ private static final char asciiChar__ [] = {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //0
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //1
+ ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', //2
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', //3
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', //4
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', //5
+ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', //6
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '.', //7
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //8
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //9
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //A
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //B
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //C
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //D
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //E
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' //F
+ };
+
+ // This column position header is used to mark offsets into the trace.
+ private static final String colPosHeader__ =
+ " 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF";
+
+ // An array of characters used to translate bytes to ebcdic.
+ // The position in the array corresponds to the hex value of the
+ // character.
+ private static final char ebcdicChar__[] = {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //0
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //1
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //2
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //3
+ ' ', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '<', '(', '+', '|', //4
+ '&', '.', '.', '.', '.', '.', '.', '.', '.', '.', '!', '$', '*', ')', ';', '.', //5
+ '-', '/', '.', '.', '.', '.', '.', '.', '.', '.', '|', ',', '%', '_', '>', '?', //6
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '`', ':', '#', '@', '\'', '=', '"', //7
+ '.', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', '.', '.', '.', '.', '.', '.', //8
+ '.', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', '.', '.', '.', '.', '.', '.', //9
+ '.', '~', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '.', '.', '.', '.', '.', '.', //A
+ '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', //B
+ '{', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', '.', '.', '.', '.', '.', '.', //C
+ '}', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', '.', '.', '.', '.', '.', '.', //D
+ '\\', '.', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '.', '.', '.', '.', '.', '.', //E
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', '.', '.', '.', '.', '.' //F
+ };
+
+ // An array of characters representing hex numbers.
+ private static final char hexDigit__ [] = {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+ };
+
+ // The receive header comes befor bytes which would be read from a stream.
+ private static final String receiveHeader__ =
+ " RECEIVE BUFFER: (ASCII) (EBCDIC)";
+
+ // The send header comes before bytes which would be written to a stream.
+ private static final String sendHeader__ =
+ " SEND BUFFER: (ASCII) (EBCDIC)";
+
+ private static final char spaceChar__ = ' ';
+
+ private static final char zeroChar__ = '0';
+
+ // This mapping table associates a codepoint to a String describing the codepoint.
+ // This is needed because the trace prints the first codepoint in send and receive buffers.
+ // This is created lazily because there is no need to create the mapping if tracing isn't used.
+ // So this array will only be created when the com buffer trace is started.
+ private static CodePointNameTable codePointNameTable__ = null;
+
+ //-----------------------------internal state---------------------------------
+
+ //-----------------------------constructors/finalizer-------------------------
+
+ // One NetLogWriter object is created per data source, iff tracing is enabled.
+ public NetLogWriter(java.io.PrintWriter printWriter, int traceLevel) {
+ super(printWriter, traceLevel);
+
+ // Initialize the codepoint name table if not previously initialized.
+ // This is done lazily so that it is not created if the trace isn't used (save some init time).
+ if (codePointNameTable__ == null) {
+ codePointNameTable__ = new CodePointNameTable();
+ }
+ }
+
+ //------------------------------entry points----------------------------------
+
+ // Specialization of LogWriter.traceConnectsExit()
+ public void traceConnectsExit(org.apache.derby.client.am.Connection connection) {
+ if (traceSuspended()) {
+ return;
+ }
+ NetConnection c = (NetConnection) connection;
+ synchronized (printWriter_) {
+ super.traceConnectsExit(c);
+ dncnetprint(" PROTOCOL manager levels: { ");
+ printWriter_.print("SQLAM=" + c.getSQLAM() + ", ");
+ printWriter_.print("AGENT=" + c.getAGENT() + ", ");
+ printWriter_.print("CMNTCPIP=" + c.getCMNTCPIP() + ", ");
+ printWriter_.print("RDB=" + c.getRDB() + ", ");
+ printWriter_.print("SECMGR=" + c.getSECMGR() + ", ");
+ printWriter_.print("XAMGR=" + c.getXAMGR() + ", ");
+ printWriter_.print("SYNCPTMGR=" + c.getSYNCPTMGR() + ", ");
+ printWriter_.print("RSYNCMGR=" + c.getRSYNCMGR());
+ printWriter_.println(" }");
+ printWriter_.flush();
+ }
+ }
+
+ public void traceConnectsResetExit(org.apache.derby.client.am.Connection connection) {
+ if (traceSuspended()) {
+ return;
+ }
+ NetConnection c = (NetConnection) connection;
+ synchronized (printWriter_) {
+ super.traceConnectsResetExit(c);
+ dncnetprint(" PROTOCOL manager levels: { ");
+ printWriter_.print("SQLAM=" + c.getSQLAM() + ", ");
+ printWriter_.print("AGENT=" + c.getAGENT() + ", ");
+ printWriter_.print("CMNTCPIP=" + c.getCMNTCPIP() + ", ");
+ printWriter_.print("RDB=" + c.getRDB() + ", ");
+ printWriter_.print("SECMGR=" + c.getSECMGR() + ", ");
+ printWriter_.print("XAMGR=" + c.getXAMGR() + ", ");
+ printWriter_.print("SYNCPTMGR=" + c.getSYNCPTMGR() + ", ");
+ printWriter_.print("RSYNCMGR=" + c.getRSYNCMGR());
+ printWriter_.println(" }");
+ printWriter_.flush();
+ }
+ }
+
+ // Pass the connection handle and print it in the header
+ // What exactly is supposed to be passed, assume one complete DSS packet
+ // Write the communication buffer data to the trace.
+ // The data is passed in via a byte array. The start and length of the data is given.
+ // The type is needed to indicate if the data is part of the send or receive buffer.
+ // The class name, method name, and trcPt number are also written to the trace.
+ // Not much checking is performed on the parameters. This is done to help performance.
+ synchronized public void traceProtocolFlow(byte[] buff,
+ int offset,
+ int len,
+ int type,
+ String className,
+ String methodName,
+ int tracepoint) {
+ if (traceSuspended()) {
+ return;
+ }
+ if (!loggingEnabled(org.apache.derby.jdbc.ClientDataSource.TRACE_PROTOCOL_FLOWS)) {
+ return;
+ }
+ synchronized (printWriter_) {
+ super.tracepoint("[net]", tracepoint, className, methodName);
+
+ int fullLen = len;
+ boolean printColPos = true;
+ while (fullLen >= 2) { // format each DssHdr seperately
+ // get the length of this DssHdr
+ len = ((buff[offset] & 0xff) << 8) + ((buff[offset + 1] & 0xff) << 0);
+
+ // check for valid dss header or not all of dss block
+ if ((len < 10) || (len > fullLen)) {
+ len = fullLen;
+ }
+
+ // subtract that length from the full length
+ fullLen -= len;
+ // The data will only be written if there is a non-zero positive length.
+ if (len != 0) {
+ String codePointName = null;
+ // If the length <= 10, lookup the first codepoint so it's name can be printed
+ if (len >= 10) {
+ // Get the int value of the two byte unsigned codepoint.
+ int codePoint = getCodePoint(buff, offset + 8);
+ codePointName = codePointNameTable__.lookup(codePoint);
+
+ // if this is not a valid codepoint then format the entire buffer
+ // as one block.
+ if (codePointName == null) {
+ len += fullLen;
+ fullLen = 0;
+ }
+ }
+
+ if (!printColPos) { // not 1st Dss header of this buffer, write seperator
+ dncnetprintln("");
+ }
+
+ if (codePointName == null) {
+ // codePointName was still null so either < 10 bytes were given or
+ // the codepoint wasn't found in the table. Just print the plain send header.
+ dncnetprintln(getHeader(type));
+ } else {
+ // codePointName isn't null so the name of the codepoint will be printed.
+ printHeaderWithCodePointName(codePointName, type);
+ }
+
+ // Print the col position header in the trace.
+ if (printColPos) { // first Dss header of buffer, need column position header
+ dncnetprintln(colPosHeader__);
+ printColPos = false;
+ }
+
+ // A char array will be used to translate the bytes to their character
+ // representations along with ascii and ebcdic representations.
+ char trcDump[] = new char[77];
+
+ // bCounter, aCounter, eCounter are offsets used to help position the characters
+ short bCounter = 7;
+ short aCounter = 43;
+ short eCounter = 61;
+
+ // The lines will be counted starting at zero.
+ // This is hard coded since we are at the beginning.
+ trcDump[0] = zeroChar__;
+ trcDump[1] = zeroChar__;
+ trcDump[2] = zeroChar__;
+ trcDump[3] = zeroChar__;
+
+ // The 0's are already in the trace so bump the line counter up a row.
+ int lineCounter = 0x10;
+
+ // Make sure the character array has all blanks in it.
+ // Some of these blanks will be replaced later with values.
+ // The 0's were not wrote over.
+ for (int j = 4; j < 77; j++) {
+ trcDump[j] = spaceChar__;
+ }
+
+ // i will maintain the position in the byte array to be traced.
+ int i = 0;
+
+ do {
+ // Get the unsigned value of the byte.
+ // int num = b[off++] & 0xff;
+ int num = (buff[offset] < 0) ? buff[offset] + 256 : buff[offset];
+ offset++;
+ i++;
+ // Place the characters representing the bytes in the array.
+ trcDump[bCounter++] = hexDigit__[((num >>> 4) & 0xf)];
+ trcDump[bCounter++] = hexDigit__[(num & 0xf)];
+
+ // Place the ascii and ebcdc representations in the array.
+ trcDump[aCounter++] = asciiChar__[num];
+ trcDump[eCounter++] = ebcdicChar__[num];
+
+ if (((i % 8) == 0)) {
+ if (((i % 16) == 0)) {
+ // Print the array each time 16 bytes are processed.
+ dncnetprintln(trcDump);
+ if (i != len) {
+ // Not yet at the end of the byte array.
+ if ((len - i) < 16) {
+ // This is the last line so blank it all out.
+ // This keeps the last line looking pretty in case
+ // < 16 bytes remain.
+ for (int j = 0; j < trcDump.length; j++) {
+ trcDump[j] = spaceChar__;
+ }
+ }
+ // Reset the counters.
+ bCounter = 0;
+ aCounter = 43;
+ eCounter = 61;
+ // Reset the lineCounter if it starts to get too large.
+ if (lineCounter == 0x100000) {
+ lineCounter = 0;
+ }
+ // Place the characters representing the line counter in the array.
+ trcDump[bCounter++] = hexDigit__[((lineCounter >>> 12) & 0xf)];
+ trcDump[bCounter++] = hexDigit__[((lineCounter >>> 8) & 0xf)];
+ trcDump[bCounter++] = hexDigit__[((lineCounter >>> 4) & 0xf)];
+ trcDump[bCounter++] = hexDigit__[(lineCounter & 0xf)];
+ bCounter += 3;
+ // Bump up the line counter.
+ lineCounter += 0x10;
+ }
+ } else {
+ // 8 bytes were processed so move the counter to adjust for
+ // spaces between the columns of bytes.
+ bCounter += 2;
+ }
+ }
+ // do this until we all the data has been traced.
+ } while (i < len);
+
+ // print the last line and add some blank lines to make it easier to read.
+ if (len % 16 != 0) {
+ dncnetprintln(trcDump);
+ }
+ }
+ }
+ dncnetprintln("");
+ }
+ }
+
+ // Gets the int value of the two byte unsigned codepoint.
+ private static int getCodePoint(byte[] buff, int offset) {
+ return ((buff[offset++] & 0xff) << 8) +
+ ((buff[offset] & 0xff) << 0);
+ }
+
+ private static String getHeader(int type) {
+ switch (type) {
+ case TYPE_TRACE_SEND:
+ return sendHeader__;
+ case TYPE_TRACE_RECEIVE:
+ return receiveHeader__;
+ default:
+ return null;
+ }
+ }
+
+ private static int getStartPosition(int type) {
+ switch (type) {
+ case TYPE_TRACE_SEND:
+ return 20; // This is right after 'SEND BUFFER: '.
+ case TYPE_TRACE_RECEIVE:
+ return 23; // This is right after 'RECEIVE BUFFER: '.
+ default:
+ return 0;
+ }
+ }
+
+ private void printHeaderWithCodePointName(String codePointName, int type) {
+ // Create a char array so some of the characters
+ // can be replaced with the name of the codepoint.
+ char headerArray[] = getHeader(type).toCharArray();
+
+ // At most, 16 character name will be used. This is so
+ // the headers on top of the ascii and ebcdic rows aren't shifted.
+ int replaceLen = (codePointName.length() < 17) ? codePointName.length() : 16;
+
+ int offset = getStartPosition(type);
+ for (int i = 0; i < replaceLen; i++) {
+ headerArray[offset++] = codePointName.charAt(i);
+ }
+ dncnetprintln(headerArray);
+ }
+
+ private void dncnetprint(String s) {
+ synchronized (printWriter_) {
+ printWriter_.print("[derby] " + s);
+ printWriter_.flush();
+ }
+ }
+
+ private void dncnetprintln(String s) {
+ synchronized (printWriter_) {
+ printWriter_.println("[derby] " + s);
+ printWriter_.flush();
+ }
+ }
+
+ private void dncnetprintln(char[] s) {
+ synchronized (printWriter_) {
+ printWriter_.print("[derby] ");
+ printWriter_.println(s);
+ printWriter_.flush();
+ }
}
- }
}
Modified: 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=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageReply.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageReply.java Sun May 1 23:25:59 2005
@@ -22,194 +22,189 @@
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
- }
+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
+ }
}
Modified: 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=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java Sun May 1 23:25:59 2005
@@ -24,287 +24,271 @@
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);
- }
+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);
+ }
}
Modified: 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=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPreparedStatement.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/net/NetPreparedStatement.java Sun May 1 23:25:59 2005
@@ -19,147 +19,140 @@
*/
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.Section;
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_;
+ 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();
+ }
- // 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,
+ public void writeExecute_(Section section,
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_); }
+ 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_);
+ }
}