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 km...@apache.org on 2010/08/21 01:01:58 UTC
svn commit: r987667 - in /db/derby/code/trunk/java:
client/org/apache/derby/client/net/ drda/org/apache/derby/impl/drda/
Author: kmarsden
Date: Fri Aug 20 23:01:57 2010
New Revision: 987667
URL: http://svn.apache.org/viewvc?rev=987667&view=rev
Log:
DERBY-728 subtask DERBY-4757 (Client) Implement UTF8 support on DRDA
(partial) Consolidate references to CcsidManager to facilitate switch from EBCDIC to UTF8
Modified:
db/derby/code/trunk/java/client/org/apache/derby/client/net/CcsidManager.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/NetAgent.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionRequest.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatementRequest.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/NetXAConnectionRequest.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/Reply.java
db/derby/code/trunk/java/client/org/apache/derby/client/net/Request.java
db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java
db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAString.java
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/CcsidManager.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/CcsidManager.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/CcsidManager.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/CcsidManager.java Fri Aug 20 23:01:57 2010
@@ -37,6 +37,9 @@ public abstract class CcsidManager {
// This was specifically added to help build the CRRTKNs.
byte[] numToSnaRequiredCrrtknChar_;
+ /* DRDA CCSID levels for UTF8 and EBCDIC */
+ public static final int UTF8_CCSID = 1208;
+
CcsidManager(byte space,
byte dot,
byte[] numToCharRepresentation,
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/NetAgent.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetAgent.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/NetAgent.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/NetAgent.java Fri Aug 20 23:01:57 2010
@@ -192,7 +192,7 @@ public class NetAgent extends Agent {
statementReply_ = (StatementReply) resultSetReply_;
packageReply_ = (ConnectionReply) statementReply_;
connectionReply_ = (ConnectionReply) packageReply_;
- NetXAConnectionRequest netXAConnectionRequest_ = new NetXAConnectionRequest(this, currentCcsidManager_, netConnection_.commBufferSize_);
+ NetXAConnectionRequest netXAConnectionRequest_ = new NetXAConnectionRequest(this, netConnection_.commBufferSize_);
netResultSetRequest_ = (NetResultSetRequest) netXAConnectionRequest_;
netStatementRequest_ = (NetStatementRequest) netResultSetRequest_;
netPackageRequest_ = (NetPackageRequest) netStatementRequest_;
@@ -217,7 +217,7 @@ public class NetAgent extends Agent {
statementReply_ = (StatementReply) resultSetReply_;
packageReply_ = (ConnectionReply) statementReply_;
connectionReply_ = (ConnectionReply) packageReply_;
- netResultSetRequest_ = new NetResultSetRequest(this, currentCcsidManager_, netConnection_.commBufferSize_);
+ netResultSetRequest_ = new NetResultSetRequest(this, netConnection_.commBufferSize_);
netStatementRequest_ = (NetStatementRequest) netResultSetRequest_;
netPackageRequest_ = (NetPackageRequest) netStatementRequest_;
netConnectionRequest_ = (NetConnectionRequest) netPackageRequest_;
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionRequest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionRequest.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionRequest.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionRequest.java Fri Aug 20 23:01:57 2010
@@ -29,8 +29,8 @@ import org.apache.derby.client.am.Client
import org.apache.derby.shared.common.reference.SQLState;
public class NetConnectionRequest extends Request implements ConnectionRequestInterface {
- NetConnectionRequest(NetAgent netAgent, CcsidManager ccsidManager, int bufferSize) {
- super(netAgent, ccsidManager, bufferSize);
+ NetConnectionRequest(NetAgent netAgent, int bufferSize) {
+ super(netAgent, bufferSize);
}
//----------------------------- entry points ---------------------------------
@@ -485,7 +485,7 @@ public class NetConnectionRequest extend
// see if we can optimize
if (dontSendOnConversionError) {
try {
- ccsidManager_.convertFromJavaString(rdbnam, netAgent_);
+ netAgent_.getCurrentCcsidManager().convertFromJavaString(rdbnam, netAgent_);
} catch (SqlException se) {
netAgent_.exceptionConvertingRdbnam = se;
return;
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/NetPackageRequest.java Fri Aug 20 23:01:57 2010
@@ -30,8 +30,8 @@ import org.apache.derby.shared.common.re
public class NetPackageRequest extends NetConnectionRequest {
static final String COLLECTIONNAME = "NULLID";
- NetPackageRequest(NetAgent netAgent, CcsidManager ccsidManager, int bufferSize) {
- super(netAgent, ccsidManager, bufferSize);
+ NetPackageRequest(NetAgent netAgent, int bufferSize) {
+ super(netAgent, bufferSize);
}
// RDB Package Name, Consistency Token
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/NetResultSetRequest.java Fri Aug 20 23:01:57 2010
@@ -31,8 +31,8 @@ import org.apache.derby.shared.common.re
public class NetResultSetRequest extends NetStatementRequest
implements ResultSetRequestInterface {
- public NetResultSetRequest(NetAgent netAgent, CcsidManager ccsidManager, int bufferSize) {
- super(netAgent, ccsidManager, bufferSize);
+ public NetResultSetRequest(NetAgent netAgent, int bufferSize) {
+ super(netAgent, bufferSize);
}
//----------------------------- entry points ---------------------------------
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatementRequest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatementRequest.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatementRequest.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/NetStatementRequest.java Fri Aug 20 23:01:57 2010
@@ -52,8 +52,8 @@ public class NetStatementRequest extends
// is still needed for non-promototed LOBs
java.util.HashMap promototedParameters_ = new java.util.HashMap();
- NetStatementRequest(NetAgent netAgent, CcsidManager ccsidManager, int bufferSize) {
- super(netAgent, ccsidManager, bufferSize);
+ NetStatementRequest(NetAgent netAgent, int bufferSize) {
+ super(netAgent, bufferSize);
}
//----------------------------- entry points ---------------------------------
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/NetXAConnectionRequest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetXAConnectionRequest.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/NetXAConnectionRequest.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/NetXAConnectionRequest.java Fri Aug 20 23:01:57 2010
@@ -27,8 +27,8 @@ import javax.transaction.xa.Xid;
import org.apache.derby.client.am.SqlException;
public class NetXAConnectionRequest extends NetResultSetRequest {
- NetXAConnectionRequest(NetAgent netAgent, CcsidManager ccsidManager, int bufferSize) {
- super(netAgent, ccsidManager, bufferSize);
+ NetXAConnectionRequest(NetAgent netAgent, int bufferSize) {
+ super(netAgent, bufferSize);
}
//----------------------------- entry points ---------------------------------
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/Reply.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/Reply.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/Reply.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/Reply.java Fri Aug 20 23:01:57 2010
@@ -38,7 +38,6 @@ public class Reply {
protected org.apache.derby.client.am.Agent agent_;
protected NetAgent netAgent_; //cheat-link to (NetAgent) agent_
- private CcsidManager ccsidManager_;
protected final static int DEFAULT_BUFFER_SIZE = 32767;
protected byte[] buffer_;
protected int pos_;
@@ -73,7 +72,6 @@ public class Reply {
Reply(NetAgent netAgent, int bufferSize) {
buffer_ = new byte[bufferSize];
agent_ = netAgent_ = netAgent;
- ccsidManager_ = netAgent.getCurrentCcsidManager();
ddmCollectionLenStack_ = new int[Reply.MAX_MARKS_NESTING];
initialize();
}
@@ -668,7 +666,8 @@ public class Reply {
ensureBLayerDataInBuffer(length);
adjustLengths(length);
- String result = ccsidManager_.convertToJavaString(buffer_, pos_, length);
+ String result = netAgent_.getCurrentCcsidManager()
+ .convertToJavaString(buffer_, pos_, length);
pos_ += length;
return result;
}
@@ -695,7 +694,8 @@ public class Reply {
int len = ddmScalarLen_;
ensureBLayerDataInBuffer(len);
adjustLengths(len);
- String result = ccsidManager_.convertToJavaString(buffer_, pos_, len);
+ String result = netAgent_.getCurrentCcsidManager()
+ .convertToJavaString(buffer_, pos_, len);
pos_ += len;
return result;
}
@@ -1253,7 +1253,8 @@ public class Reply {
}
final String readFastString(int length) throws DisconnectException {
- String result = ccsidManager_.convertToJavaString(buffer_, pos_, length);
+ String result = netAgent_.getCurrentCcsidManager()
+ .convertToJavaString(buffer_, pos_, length);
pos_ += length;
return result;
}
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/Request.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/net/Request.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/Request.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/Request.java Fri Aug 20 23:01:57 2010
@@ -54,11 +54,6 @@ public class Request {
private int[] markStack_ = new int[MAX_MARKS_NESTING];
private int top_ = 0;
- // the ccsid manager for the connection is stored in this object. it will
- // be used when constructing character ddm data. it will NOT be used for
- // building any FDOCA data.
- protected CcsidManager ccsidManager_;
-
// This Object tracks the location of the current
// Dss header length bytes. This is done so
// the length bytes can be automatically
@@ -82,21 +77,12 @@ public class Request {
// construct a request object specifying the minimum buffer size
// to be used to buffer up the built requests. also specify the ccsid manager
// instance to be used when building ddm character data.
- Request(NetAgent netAgent, int minSize, CcsidManager ccsidManager) {
+ Request(NetAgent netAgent, int minSize) {
netAgent_ = netAgent;
bytes_ = new byte[minSize];
- ccsidManager_ = ccsidManager;
clearBuffer();
}
- // construct a request object specifying the ccsid manager instance
- // to be used when building ddm character data. This will also create
- // a buffer using the default size (see final static DEFAULT_BUFFER_SIZE value).
- Request(NetAgent netAgent, CcsidManager ccsidManager, int bufferSize) {
- //this (netAgent, Request.DEFAULT_BUFFER_SIZE, ccsidManager);
- this(netAgent, bufferSize, ccsidManager);
- }
-
protected final void clearBuffer() {
offset_ = 0;
top_ = 0;
@@ -115,13 +101,6 @@ public class Request {
correlationID_ = 0;
}
- // set the ccsid manager value. this method allows the ccsid manager to be
- // changed so a request object can be reused by different connections with
- // different ccsid managers.
- final void setCcsidMgr(CcsidManager ccsidManager) {
- ccsidManager_ = ccsidManager;
- }
-
// ensure length at the end of the buffer for a certain amount of data.
// if the buffer does not contain sufficient room for the data, the buffer
// will be expanded by the larger of (2 * current size) or (current size + length).
@@ -1161,8 +1140,13 @@ public class Request {
* @throws SqlException if string exceeds byteLengthLimit
*/
final void writeScalarString(int codePoint, String string, int byteMinLength,
- int byteLengthLimit, String sqlState) throws SqlException {
- int maxByteLength = ccsidManager_.maxBytesPerChar() * string.length();
+ int byteLengthLimit, String sqlState) throws SqlException {
+
+ /* Grab the current CCSID MGR from the NetAgent */
+ CcsidManager currentCcsidMgr = netAgent_.getCurrentCcsidManager();
+
+ int maxByteLength = currentCcsidMgr.getByteLength(string);
+
ensureLength(offset_ + maxByteLength + 4);
// Skip length for now until we know actual length
int lengthOffset = offset_;
@@ -1171,7 +1155,7 @@ public class Request {
bytes_[offset_++] = (byte) ((codePoint >>> 8) & 0xff);
bytes_[offset_++] = (byte) (codePoint & 0xff);
- offset_ = ccsidManager_.convertFromJavaString(string, bytes_, offset_, netAgent_);
+ offset_ = currentCcsidMgr.convertFromJavaString(string, bytes_, offset_, netAgent_);
int stringByteLength = offset_ - lengthOffset - 4;
// reset the buffer and throw an SQLException if the length is too long
@@ -1183,7 +1167,7 @@ public class Request {
// pad if we don't reach the byteMinLength limit
if (stringByteLength < byteMinLength) {
for (int i = stringByteLength ; i < byteMinLength; i++) {
- bytes_[offset_++] = ccsidManager_.space_;
+ bytes_[offset_++] = currentCcsidMgr.space_;
}
stringByteLength = byteMinLength;
}
@@ -1207,11 +1191,16 @@ public class Request {
// character data. This method also assumes that the string.length() will
// be the number of bytes following the conversion.
final void writeScalarPaddedString(String string, int paddedLength) throws SqlException {
- int stringLength = string.length();
ensureLength(offset_ + paddedLength);
- offset_ = ccsidManager_.convertFromJavaString(string, bytes_, offset_, netAgent_);
+
+ /* Grab the current CCSID MGR from the NetAgent */
+ CcsidManager currentCcsidMgr = netAgent_.getCurrentCcsidManager();
+
+ int stringLength = currentCcsidMgr.getByteLength(string);
+
+ offset_ = currentCcsidMgr.convertFromJavaString(string, bytes_, offset_, netAgent_);
for (int i = 0; i < paddedLength - stringLength; i++) {
- bytes_[offset_++] = ccsidManager_.space_;
+ bytes_[offset_++] = currentCcsidMgr.space_;
}
}
@@ -1327,7 +1316,8 @@ public class Request {
mask.append(maskChar);
}
// try to write mask over password.
- ccsidManager_.convertFromJavaString(mask.toString(), bytes_, passwordStart_, netAgent_);
+ netAgent_.getCurrentCcsidManager()
+ .convertFromJavaString(mask.toString(), bytes_, passwordStart_, netAgent_);
} catch (SqlException sqle) {
// failed to convert mask,
// them simply replace with 0xFF.
@@ -1564,8 +1554,11 @@ public class Request {
// ccsid manager or typdef rules. should this method write ddm character
// data or fodca data right now it is coded for ddm char data only
final void writeDDMString(String s) throws SqlException {
- ensureLength(offset_ + s.length());
- offset_ = ccsidManager_.convertFromJavaString(s, bytes_, offset_, netAgent_);
+ CcsidManager currentCcsidManager = netAgent_.getCurrentCcsidManager();
+
+ ensureLength(offset_ + currentCcsidManager.getByteLength(s));
+
+ offset_ = currentCcsidManager.convertFromJavaString(s, bytes_, offset_, netAgent_);
}
private void buildLengthAndCodePointForLob(int codePoint,
Modified: db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java (original)
+++ db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAConnThread.java Fri Aug 20 23:01:57 2010
@@ -608,10 +608,10 @@ class DRDAConnThread extends Thread {
/* At this stage we can initialize the strings as we have
* the CcsidManager for the DDMWriter. */
- rdbnam = new DRDAString(writer.getCurrentCcsidManager());
- rdbcolid = new DRDAString(writer.getCurrentCcsidManager());
- pkgid = new DRDAString(writer.getCurrentCcsidManager());
- pkgcnstkn = new DRDAString(writer.getCurrentCcsidManager());
+ rdbnam = new DRDAString(writer);
+ rdbcolid = new DRDAString(writer);
+ pkgid = new DRDAString(writer);
+ pkgcnstkn = new DRDAString(writer);
}
/**
Modified: db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAString.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAString.java?rev=987667&r1=987666&r2=987667&view=diff
==============================================================================
--- db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAString.java (original)
+++ db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/DRDAString.java Fri Aug 20 23:01:57 2010
@@ -31,8 +31,9 @@ package org.apache.derby.impl.drda;
final class DRDAString {
/** Buffer representing the string. */
private byte[] buffer;
- /** Object used to convert byte buffer to string. */
- private final CcsidManager ccsidManager;
+
+ /** Keep the DDMWriter as it contains the current CCSID manager being used */
+ private final DDMWriter writer;
/** True if the contents were modified in the previous call to
* <code>setBytes</code>. */
@@ -47,9 +48,9 @@ final class DRDAString {
* @param m a <code>CcsidManager</code> value specifying
* which encoding is used
*/
- DRDAString(CcsidManager m) {
+ DRDAString(DDMWriter w) {
this.buffer = new byte[0];
- this.ccsidManager = m;
+ this.writer = w;
this.cachedString = null;
}
@@ -112,7 +113,7 @@ final class DRDAString {
public String toString() {
if (cachedString == null) {
cachedString =
- ccsidManager.convertToJavaString(buffer);
+ writer.getCurrentCcsidManager().convertToJavaString(buffer);
}
return cachedString;
}