Top Description Inners Fields Constructors Methods
org.apache.derby.impl.drda

pack-priv Class DRDAConnThread

extends Thread
Class Inheritance
Imports
java.io.ByteArrayInputStream, .ByteArrayOutputStream, .IOException, .InputStream, .InputStreamReader, .ObjectInputStream, .OutputStream, .UnsupportedEncodingException, java.math.BigDecimal, java.sql.CallableStatement, .Connection, .DataTruncation, .ParameterMetaData, .PreparedStatement, .ResultSet, .ResultSetMetaData, .SQLException, .SQLWarning, .Statement, .Time, .Timestamp, .Types, java.util.ArrayList, .Calendar, .Date, .List, .Properties, .TimeZone, org.apache.derby.catalog.SystemProcedures, org.apache.derby.shared.common.error.ExceptionSeverity, .StandardException, .MessageUtils, org.apache.derby.iapi.jdbc.AuthenticationService, .EngineLOB, .EngineStatement, .EnginePreparedStatement, .InternalDriver, org.apache.derby.shared.common.reference.Attribute, .DRDAConstants, .Property, .SQLState, org.apache.derby.shared.common.info.JVMInfo, org.apache.derby.iapi.services.monitor.ModuleFactory, .Monitor, org.apache.derby.shared.common.sanity.SanityManager, org.apache.derby.shared.common.stream.HeaderPrintWriter, org.apache.derby.iapi.tools.i18n.LocalizedResource, org.apache.derby.iapi.util.StringUtil, org.apache.derby.impl.jdbc.Util

This class translates DRDA protocol from an application requester to JDBC for Derby and then translates the results from Derby to DRDA for return to the application requester.

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class

Field Summary

Modifier and TypeField and Description
private static int[]
private AppRequester
private static final String
private static final String
private volatile boolean
close

End this thread.

private static final int
private int
private int
private Database
private SQLException
private static DecryptionManager
private boolean
deferredReset

Tells if the reset / connect request is a deferred request.

private byte
private static final DRDAProtocolExceptionInfo
private static final byte[]
private static final byte[]
private static final byte[]
private Calendar
gmtCalendar

A cached Calendar instance using the GMT time zone.

private List<Integer>
private static final String
private volatile boolean
logConnections

Whether or not to log connections.

private static HeaderPrintWriter
private static int
private static final int
private static final int
private static final int
private static final int
private static final int
private byte[]
private byte[]
private static final byte
private static final byte[]
private int
private DRDAString
pkgcnstkn

Current RDB Package Consistency Token.

private DRDAString
pkgid

Current RDB Package Identifier.

private int
pkgsn

Current RDB Package Section Number.

private static byte[]
private Pkgnamcsn
prevPkgnamcsn

The value returned by the previous call to parsePKGNAMCSN().

private DRDAString
rdbcolid

Current RDB Collection Identifier.

private DRDAString
rdbnam

Current RDB Package Name.

private DDMReader
private int[]
private static final String
private static final int
private boolean
private NetworkServerControlImpl
private Session
private InputStream
private OutputStream
private int
private static String
SQLERRMC_PREFORMATTED_MESSAGE_DELIMITER

SQLERRMC_PREFORMATTED_MESSAGE_DELIMITER, When full message text is sent for severe errors.

private static String
SQLERRMC_TOKEN_DELIMITER

SQLERRMC_TOKEN_DELIMITER separates message argument tokens

private static final String
private static final String
private volatile long
timeSlice

Time slice for this thread.

private List<Integer>
private static final byte[]
private DDMWriter
private DRDAXAProtocol
Inherited from java.lang.Thread:
MAX_PRIORITYMIN_PRIORITYNORM_PRIORITY

Constructor Summary

AccessConstructor and Description
pack-priv
DRDAConnThread(Session
Session requesting processing
session
,
NetworkServerControlImpl
Server starting thread
server
,
long
timeSlice for thread
timeSlice
,
boolean logConnections)

Create a new Thread for processing session requests

Method Summary

Modifier and TypeMethod and Description
protected void
agentError(String
Message describing error
msg
)

Agent error - something very bad happened

private void
badObjectLength(int
code point with bad object length
codePoint
)

Object length not allowed

private String

Returns:

the SQLERRMC string with all fields of the warning
buildDataTruncationSqlerrmc
(DataTruncation
the DataTruncation instance to serialize
dt
)

Build the SQLERRMC for a java.sql.DataTruncation warning.

private String

Returns:

preformated message text with messages separted by SQLERRMC_PREFORMATED_MESSAGE_DELIMITER
buildPreformattedSqlerrmc
(SQLException
SQLException for which to build SQLERRMC
se
)

Build preformatted SQLException text for severe exceptions or SQLExceptions that are not Derby exceptions.

protected String
buildRuntimeInfo(String indent, LocalizedResource localLangUtil)

private String

Returns:

String which is either the message arguments to be passed to SYSIBM.SQLCAMESSAGE or just message text for severe errors.
buildSqlerrmc
(SQLException
SQLException to build SQLERRMC
se
)

Create error message or message argements to return to client.

private String
buildTokenizedSqlerrmc(SQLException
SQLException to print
se
)

Build Tokenized SQLERRMC to just send the tokenized arguments to the client.

private boolean
private void
checkLength(int
codepoint we are checking
codepoint
,
int
required length
reqlen
)

Check that the length is equal to the required length for this codepoint

private void
checkRequired(int
code point for which list of code points is required
codePoint
)

Check whether we have seen all the required code points

private void
checkValidTypDefNam(String typdefnam)

check that the given typdefnam is acceptable

private void
checkWarning(Connection
connection to check
conn
,
Statement
statement to check
stmt
,
ResultSet
result set to check
rs
,
long
update count to include in SQLCARD
updateCount
,
boolean
whether always send SQLCARD regardless of the existance of warnings
alwaysSend
,
boolean
whether to send any warnings or not.
sendWarn
)

Check SQLWarning and write SQLCARD as needed.

private void
cleanUpAndCloseResultSet(DRDAStatement
the DRDA statement to clean up
stmt
,
SQLException
the exception that was thrown
sqle
,
int
start index for the first DSS to clear from the output buffer
writerMark
)

Cleans up and closes a result set if an exception is thrown when collecting QRYDTA in response to OPNQRY or CNTQRY.

protected void
close()

Close DRDA connection thread

private boolean

Returns:

true if close; false otherwise
closed
()

Test if DRDA connection thread is closed

private void
closeSession()

Close the current session

private static void
closeStream(InputStream
the stream to close (possibly null)
stream
)

Close a stream.

protected void
codePointNotSupported(int
code point value
codePoint
)

Don't support this code point

private static InputStream
private String

Returns:

hex string representation of byte array
convertToHexString
(byte[]
buffer to convert
buf
)

convert byte array to a Hex string

private void
copyToRequired(int[]
list of required codepoints
req
)

Copy a list of required code points to template for checking

private void
doneData(DRDAStatement
DRDA statement
stmt
,
ResultSet
Result set
rs
)

Done data Send SQLCARD for the end of the data

private void
errorInChain(SQLException
the SQLException raised
e
)

If there's a severe error in the DDM chain, and if the header indicates "terminate chain on error", we stop processing further commands in the chain nor do we send any reply for them.

private void
exchangeServerAttributes()

Exchange server attributes with application requester

private void
finalizeChain()

Finalize the current DSS chain and send it if needed.

private static Object
findService(final String factoryInterface, final String serviceName)

Must be private so that user code can't call this entry point.

private String

Returns:

a string on the format YYYY-MM-DD representing the date
formatDate
(Date
the date to format
date
)

Convert a java.sql.Date to a string with the format expected by the client.

private String

Returns:

a string on the format HH:MM:SS representing the time
formatTime
(Time
the time to format
time
)

Convert a java.sql.Time to a string with the format expected by the client.

private String

Returns:

a string on the format YYYY-MM-DD-HH.MM.SS.ffffff[fff]
formatTimestamp
(Timestamp
the timestamp to format
ts
)

Convert a java.sql.Timestamp to a string with the format expected by the client.

private int
pack-priv long
pack-priv long
private int

Returns:

security check code, 0 is O.K.
getConnFromDatabaseName
()

Get connection from a database name Username and password is verified by making a connection to the database

protected int

Returns:

correlation id
getCorrelationID
()

Get correlation id

protected byte[]

Returns:

crrtkn
getCrrtkn
()

Get correlation token

protected Database

Returns:

database
getDatabase
()

Get Database we are working on

protected String

Returns:

database name
getDbName
()

Get database name

private int
getExceptionSeverity(SQLException
SQLException
e
)

Translate from Derby exception severity to SVRCOD

private Calendar

Returns:

a calendar in the GMT time zone
getGMTCalendar
()

Get a Calendar instance with time zone set to GMT.

protected InputStream

Returns:

input stream
getInputStream
()

Get input stream

private boolean

Returns:

true if connections are being logged; false otherwise
getLogConnections
()

Get whether connections are logged

private static ModuleFactory
getMonitor()

Must be private so that user code can't call this entry point.

private Object

Returns:

an object with the value of the column
getObjectForWriteFdoca
(ResultSet
the result set to fetch the object from
rs
,
int
the column index
index
,
int
the DRDA type of the object to fetch
drdaType
)

Get a column value of the specified type from a ResultSet, in a form suitable for being writted by writeFdocaVal.

private Object

Returns:

an object with the value of the output parameter
getObjectForWriteFdoca
(CallableStatement
the callable statement to fetch the object from
cs
,
int
the parameter index
index
,
int
the DRDA type of the object to fetch
drdaType
)

Get the value of an output parameter of the specified type from a CallableStatement, in a form suitable for being writted by writeFdocaVal.

protected OutputStream

Returns:

output stream
getOutputStream
()

Get output stream

private static byte[]
getProductIDBytes()

Get product id as bytes

private int
protected DDMReader

Returns:

DDMReader for this thread
getReader
()

get DDMReader

protected NetworkServerControlImpl

Returns:

server
getServer
()

Get server

protected Session

Returns:

session
getSession
()

Get session we are working on

private int

Returns:

the value to send as SQLCODE
getSqlCode
(SQLException
the exception or warning to get the SQLCODE for
e
)

Get the SQLCODE to send for an exception or a warning.

private long

Returns:

time slice
getTimeSlice
()

Get time slice value for length of time to work on a session

protected DDMWriter

Returns:

DDMWriter for this thread
getWriter
()

get DDMWriter

private void
handleException(Exception e)

Handle Exceptions - write error protocol if appropriate and close session or thread as appropriate

pack-priv boolean
private void
initialize()

Initialize class

private void
initializeDatabase(String
database name to initialize. If dbnam is non null, add database to the current session
dbname
)

Create a new database and intialize the DRDAConnThread database.

private void
initializeForSession()

Initialize for a new session

private void
invalidClient(String
product id that does not match DNC
prdid
)

Invalid non-derby client tried to connect.

protected void
invalidCodePoint(int
code point value
codePoint
)

Invalid codepoint for this command

private void
invalidValue(int
code point value
codePoint
)

Invalid value for this code point

private boolean

Returns:

true if sqlException is (or has to be assumed to be) caused by an authentication failure, false otherwise.
isAuthenticationException
(SQLException
The exception that is checked to see if this is really caused by an authentication failure
sqlException
)

There are multiple reasons for not getting a connection, and all these should throw SQLExceptions with SQL state 08004 according to the SQL standard.

protected void
markCommunicationsFailure(String
- info about the communications failure
arg1
,
String
- info about the communications failure
arg2
,
String
- info about the communications failure
arg3
,
String
- info about the communications failure
arg4
)

Indicate a communications failure

protected void
markCommunicationsFailure(Exception
- Source exception that was thrown
e
,
String
- info about the communications failure
arg1
,
String
- info about the communications failure
arg2
,
String
- info about the communications failure
arg3
,
String
- info about the communications failure
arg4
)

Indicate a communications failure.

protected void
missingCodePoint(int
code point value
codePoint
)

Missing code point

private void
padInt(char[]
the char array
buf
,
int
where in the array to start inserting the value
offset
,
int
the desired length of the inserted string
length
,
int
the integer value to insert
value
)

Insert an integer into a char array and pad it with leading zeros if its string representation is shorter than length characters.

private int

Returns:

severity code
parseACCRDB
()

Parse access RDB Instance variables RDBACCCL - RDB Access Manager Class - required must be SQLAM CRRTKN - Correlation Token - required RDBNAM - Relational database name -required PRDID - Product specific identifier - required TYPDEFNAM - Data Type Definition Name -required TYPDEFOVR - Type definition overrides -required RDBALWUPD - RDB Allow Updates optional PRDDTA - Product Specific Data - optional - ignorable STTDECDEL - Statement Decimal Delimiter - optional STTSTRDEL - Statement String Delimiter - optional TRGDFTRT - Target Default Value Return - optional

private int

Returns:

security check code - 0 if everything O.K.
parseACCSEC
()

Parse Access Security If the target server supports the SECMEC requested by the application requester then a single value is returned and it is identical to the SECMEC value in the ACCSEC command.

private String

Returns:

string value
parseCcsidMBC
(int length)

Parse mixed character string

private String

Returns:

string value
parseCcsidSBC
(int length)

Parse single byte character string

private DRDAStatement

Returns:

DRDAstatement being closed
parseCLSQRY
()

Parse CLSQRY Instance Variables RDBNAM - relational database name - optional PKGNAMCSN - RDB Package Name, Consistency Token and Section Number - required QRYINSID - Query Instance Identifier - required - level 7 MONITOR - Monitor events - optional.

private DRDAStatement

Returns:

DRDAStatement we are continuing
parseCNTQRY
()

Parse CNTQRY - Continue Query Instance Variables RDBNAM - Relational Database Name - optional PKGNAMCSN - RDB Package Name, Consistency Token, and Section Number - required QRYBLKSZ - Query Block Size - required QRYRELSCR - Query Relative Scrolling Action - optional QRYSCRORN - Query Scroll Orientation - optional - level 7 QRYROWNBR - Query Row Number - optional QRYROWSNS - Query Row Sensitivity - optional - level 7 QRYBLKRST - Query Block Reset - optional - level 7 QRYRTNDTA - Query Returns Data - optional - level 7 QRYROWSET - Query Rowset Size - optional - level 7 QRYRFRTBL - Query Refresh Answer Set Table - optional NBRROW - Number of Fetch or Insert Rows - optional MAXBLKEXT - Maximum number of extra blocks - optional RTNEXTDTA - Return of EXTDTA Option - optional MONITOR - Monitor events - optional.

private void
parseCNTQRYobjects(DRDAStatement
DRDA statement we are working on
stmt
)

Parse CNTQRY objects Instance Variables OUTOVR - Output Override Descriptor - optional

private Date

Returns:

a Date object representing the date in the specified calendar
parseDate
(String
the date string to parse
dateString
,
Calendar
the calendar in which the date is parsed
cal
)

Parse a date string as it is received from the client.

private boolean
private boolean

Returns:

expect "output sqlda" or not
parseDSCSQLSTT
()

Parse DSCSQLSTT - Describe SQL Statement previously prepared Instance Variables TYPSQLDA - sqlda type expected (output or input) RDBNAM - relational database name - optional PKGNAMCSN - RDB Package Name, Consistency Token and Section Number - required MONITOR - Monitor events - optional.

private String

Returns:

string value
parseEncodedString
()

Parse an encoded data string from the Application Requester

private void
parseEXCSAT()

Parses EXCSAT (Exchange Server Attributes) Instance variables EXTNAM(External Name) - optional MGRLVLLS(Manager Levels) - optional SPVNAM(Supervisor Name) - optional SRVCLSNM(Server Class Name) - optional SRVNAM(Server Name) - optional, ignorable SRVRLSLV(Server Product Release Level) - optional, ignorable

private void
parseEXCSAT2()

Parses EXCSAT2 (Exchange Server Attributes) Instance variables EXTNAM(External Name) - optional MGRLVLLS(Manager Levels) - optional SPVNAM(Supervisor Name) - optional SRVCLSNM(Server Class Name) - optional SRVNAM(Server Name) - optional, ignorable SRVRLSLV(Server Product Release Level) - optional, ignorable

private long

Returns:

update count
parseEXCSQLIMM
()

Parse EXCSQLIMM - Execute Immediate Statement Instance Variables RDBNAM - relational database name - optional PKGNAMCSN - RDB Package Name, Consistency Token and Section Number - required RDBCMTOK - RDB Commit Allowed - optional MONITOR - Monitor Events - optional Command Objects TYPDEFNAM - Data Type Definition Name - optional TYPDEFOVR - TYPDEF Overrides -optional SQLSTT - SQL Statement -required

private boolean
parseEXCSQLSET()

Parse EXCSQLSET - Execute Set SQL Environment Instance Variables RDBNAM - relational database name - optional PKGNAMCT - RDB Package Name, Consistency Token - optional MONITOR - Monitor Events - optional Command Objects TYPDEFNAM - Data Type Definition Name - required TYPDEFOVR - TYPDEF Overrides - required SQLSTT - SQL Statement - required (at least one; may be more)

private void
parseEXCSQLSETobjects()

Parse EXCSQLSET objects Objects TYPDEFNAM - Data type definition name - optional TYPDEFOVR - Type defintion overrides - optional SQLSTT - SQL Statement - required (a list of at least one) Objects may follow in one DSS or in several DSS chained together.

private void
parseEXCSQLSTT()

Parse EXCSQLSTT - Execute non-cursor SQL Statement previously prepared Instance Variables RDBNAM - relational database name - optional PKGNAMCSN - RDB Package Name, Consistency Token and Section Number - required OUTEXP - Output expected NBRROW - Number of rows to be inserted if it's an insert PRCNAM - procedure name if specified by host variable, not needed for Derby QRYBLKSZ - query block size MAXRSLCNT - max resultset count MAXBLKEXT - Max number of extra blocks RSLSETFLG - resultset flag RDBCMTOK - RDB Commit Allowed - optional OUTOVROPT - output override option QRYROWSET - Query Rowset Size - Level 7 MONITOR - Monitor events - optional.

private boolean
parseEXCSQLSTTobjects(DRDAStatement
the DRDAStatement to execute
stmt
)

Parse EXCSQLSTT command objects Command Objects TYPDEFNAM - Data Type Definition Name - optional TYPDEFOVR - TYPDEF Overrides -optional SQLDTA - optional, variable data, specified if prpared statement has input parameters EXTDTA - optional, externalized FD:OCA data OUTOVR - output override descriptor, not allowed for stored procedure calls If TYPDEFNAM and TYPDEFOVR are supplied, they apply to the objects sent with the statement.

private String

Returns:

SQL Statement
parseEXECSQLIMMobjects
()

Parse EXCSQLIMM objects Objects TYPDEFNAM - Data type definition name - optional TYPDEFOVR - Type defintion overrides SQLSTT - SQL Statement required If TYPDEFNAM and TYPDEFOVR are supplied, they apply to the objects sent with the statement.

private void
parseMGRLVLLS(int
1 for first time this is seen, 2 for subsequent ones
time
)

Parse manager levels Instance variables MGRLVL - repeatable, required CODEPOINT CCSIDMGR - CCSID Manager CMNAPPC - LU 6.2 Conversational Communications Manager CMNSYNCPT - SNA LU 6.2 SyncPoint Conversational Communications Manager CMNTCPIP - TCP/IP Communication Manager DICTIONARY - Dictionary RDB - Relational Database RSYNCMGR - Resynchronization Manager SECMGR - Security Manager SQLAM - SQL Application Manager SUPERVISOR - Supervisor SYNCPTMGR - Sync Point Manager VALUE On the second appearance of this codepoint, it can only add managers

private void
parseMONITOR()

Parse MONITOR DRDA spec says this is optional.

private String

Returns:

string value
parseNOCMorNOCS
()

Parse nullable character mixed byte or nullable character single byte Format 1 byte - null indicator I4 - mixed character length N bytes - mixed character string 1 byte - null indicator I4 - single character length N bytes - single character length string

private Pkgnamcsn

Returns:

RDB Package Name, Consistency Token, and Section Number
parseOPNQRY
()

Parse OPNQRY Instance Variables RDBNAM - relational database name - optional PKGNAMCSN - RDB Package Name, Consistency Token and Section Number - required QRYBLKSZ - Query Block Size - required QRYBLKCTL - Query Block Protocol Control - optional MAXBLKEXT - Maximum Number of Extra Blocks - optional - default value 0 OUTOVROPT - Output Override Option QRYROWSET - Query Rowset Size - optional - level 7 MONITOR - Monitor events - optional.

private void
parseOPNQRYobjects(DRDAStatement stmt)

Parse OPNQRY objects Objects TYPDEFNAM - Data type definition name - optional TYPDEFOVR - Type defintion overrides - optional SQLDTA- SQL Program Variable Data - optional If TYPDEFNAM and TYPDEFOVR are supplied, they apply to the objects sent with the statement.

private void
parseOUTOVR(DRDAStatement
DRDA statement this applies to
stmt
)

Parse OUTOVR - Output Override Descriptor This specifies the output format for data to be returned as output to a SQL statement or as output from a query.

private int

Returns:

output override option
parseOUTOVROPT
()

Parse OUTOVROPT - this indicates whether output description can be overridden on just the first CNTQRY or on any CNTQRY

private Pkgnamcsn

Returns:

Pkgnamcsn value
parsePKGNAMCSN
()

Parse PKGNAMCSN - RDB Package Name, Consistency Token, and Section Number Instance Variables NAMESYMDR - database name - not validated RDBCOLID - RDB Collection Identifier PKGID - RDB Package Identifier PKGCNSTKN - RDB Package Consistency Token PKGSN - RDB Package Section Number

private String
private int

Returns:

return 0 - don't return sqlda, 1 - return input sqlda, 2 - return output sqlda
parsePRPSQLSTT
()

Parse PRPSQLSTT - Prepare SQL Statement Instance Variables RDBNAM - Relational Database Name - optional PKGNAMCSN - RDB Package Name, Consistency Token, and Section Number - required RTNSQLDA - Return SQL Descriptor Area - optional MONITOR - Monitor events - optional.

private String

Returns:

SQL statement
parsePRPSQLSTTobjects
(DRDAStatement stmt)

Parse PRPSQLSTT objects Objects TYPDEFNAM - Data type definition name - optional TYPDEFOVR - Type defintion overrides - optional SQLSTT - SQL Statement required SQLATTR - Cursor attributes on prepare - optional - level 7 If TYPDEFNAM and TYPDEFOVR are supplied, they apply to the objects sent with the statement.

private int

Returns:

query block size
parseQRYBLKSZ
()

Parse QRYBLSZ - this gives the maximum size of the query blocks that can be returned to the requester

private int

Returns:

true to close on end of data
parseQRYCLSIMP
()

Parse a QRYCLSIMP - Implicitly close non-scrollable cursor after end of data.

private int
private int

Returns:

query row set size
parseQRYROWSET
(int
- minimum value
minVal
)

Parse QRYROWSET - this is the number of rows to return

private void
parseRDBCMTOK()

Parse RDBCMTOK - tells the database whether to allow commits or rollbacks to be executed as part of the command Since we don't have a SQL commit or rollback command, we will just ignore this for now

private String

Returns:

database name
parseRDBNAM
()

Parse database name

private int

Returns:

security check code
parseSECCHK
()

Parse security check Instance Variables SECMGRNM - security manager name - optional, ignorable SECMEC - security mechanism - required SECTKN - security token - optional, (required if encryption used) PASSWORD - password - optional, (required if security mechanism uses it) NEWPASSWORD - new password - optional, (required if sec mech.

protected void
parseSQLATTR(DRDAStatement
DRDAStatement
stmt
)

Parse SQLATTR - Cursor attributes on prepare This is an encoded string.

private void
parseSQLDTA(DRDAStatement stmt)

Parse SQLDTA - SQL program variable data and handle exception.

private void
parseSQLDTA_work(DRDAStatement stmt)

Parse SQLDTA - SQL program variable data Instance Variables FDODSC - FD:OCA data descriptor - required FDODTA - FD:OCA data - optional

private String
parseSQLSTTDss()

Parse SQLSTT Dss

private Time

Returns:

a Date object representing the time in the specified calendar
parseTime
(String
the time string to parse
timeString
,
Calendar
the calendar in which the time is parsed
cal
)

Parse a time string as it is received from the client.

private Timestamp

Returns:

a Date object representing the timestamp in the specified calendar
parseTimestamp
(String
the time string to parse
timeString
,
Calendar
the calendar in which the timestamp is parsed
cal
)

Parse a timestamp string as it is received from the client.

private String

Returns:

typdefnam
parseTYPDEFNAM
()

Parse TYPDEFNAM

private void
parseTYPDEFOVR(DRDAStatement
Statement this TYPDEFOVR applies to
st
)

Parse Type Defintion Overrides TYPDEF Overrides specifies the Coded Character SET Identifiers (CCSIDs) that are in a named TYPDEF.

private boolean

Returns:

true if for output; false otherwise
parseTYPSQLDA
()

Parse TYPSQLDA - Type of the SQL Descriptor Area

private String

Returns:

string value
parseVCMorVCS
()

Parse variable character mixed byte or variable character single byte Format I2 - VCM Length N bytes - VCM value I2 - VCS Length N bytes - VCS value Only 1 of VCM length or VCS length can be non-zero

private boolean
positionCursor(DRDAStatement
DRDA statement
stmt
,
ResultSet
Result set
rs
)

Position cursor for insensitive scrollable cursors

protected static void
println2Log(String
database name
dbname
,
String
DRDA identifier
drdaID
,
String
message
msg
)

Print a line to the DB2j log

private void
processCommands()

Process DRDA commands we can receive once server attributes have been exchanged.

private boolean
processLeftoverQRYDTA(DRDAStatement stmt)

Process remainder data resulting from a split.

private void
rdbnamMismatch(int
codepoint where the mismatch occurred
codePoint
)

Database name given under code point doesn't match previous database names

private void
rdbNotFound(String
name of database
rdbnam
)

RDB not found

private void
readAndSetAllExtParams(final DRDAStatement stmt, final boolean streamLOB)

private void
readAndSetExtParam(int
zero-based index of the parameter
i
,
DRDAStatement
associated ps
stmt
,
int
drda type of the parameter
drdaType
,
int extLen, boolean streamLOB)

Read different types of input parameters and set them in PreparedStatement

private void
readAndSetParams(int
index of the parameter
i
,
DRDAStatement
drda statement
stmt
,
ParameterMetaData
parameter meta data
pmeta
)

Read different types of input parameters and set them in PreparedStatement

private boolean

Returns:

true or false depending on boolean value read
readBoolean
(int
codePoint to be used in error reporting
codepoint
)

Read and check a boolean value

private long
readLobLength(int extLenIndicator)

private Object
readUDT()

Read a UDT from the stream

private void
removeFromRequired(int
- code point to be removed
codePoint
)

Remove codepoint from required list

private void
requiredValueNotFound(int
code point with invalid value
codePoint
)

Required value not found.

public void
run()

Overrides java.lang.Thread.run.

Implements java.lang.Runnable.run.

Main routine for thread, loops until the thread is closed Gets a session, does work for the session
private void
sendProtocolException(DRDAProtocolException
DRDAProtocolException to be sent
de
)

Notice the client about a protocol error.

private void
sendUnexpectedException(Exception
Exception to be sent
e
)

Send unpexpected error to the client

private void
sessionInitialState()

In initial state for a session, determine whether this is a command session or a DRDA protocol session.

private static void
setAsBinaryStream(DRDAStatement
the DRDA statement to use
stmt
,
int
the one-based index of the parameter
index
,
EXTDTAReaderInputStream
the EXTDTA stream to read data from
stream
,
boolean
whether or not the stream content is streamed as the last value in the DRDA protocol flow
streamLOB
)

Sets the specified binary EXTDTA parameter of the embedded statement.

private static void
setAsCharacterStream(DRDAStatement
the DRDA statement to use
stmt
,
int
the one-based index of the parameter
i
,
EXTDTAReaderInputStream
the EXTDTA stream to read data from
extdtaStream
,
boolean
whether or not the stream content is streamed as the last value in the DRDA protocol flow
streamLOB
,
String
the encoding of the EXTDTA stream
encoding
)

Sets the specified character EXTDTA parameter of the embedded statement.

private void
setDatabase(int
codepoint we are processing
codePoint
)

Set the current database

protected void
setLogConnections(boolean
value to set for logging connections
value
)

Set logging of connections

private void
setStmtOrDbByteOrder(boolean
if true, set database' byte order, otherwise set statement's
setDatabase
,
DRDAStatement
DRDAStatement, used when setDatabase is false
stmt
,
String
TYPDEFNAM value
typDefNam
)

Set a statement or the database' byte order, depending on the arguments

protected void
setTimeSlice(long
new value for time slice
value
)

Set time slice value

public static void
showmem()

Show runtime memory

private void
skipRemainder(boolean
True if we _only_ want to skip DSS'es that are chained with the SAME id as the current DSS. False means skip ALL chained DSSes, whether they're chained with same or different ids.
onlySkipSameIds
)

Skip remainder of current DSS and all chained DSS'es

private void
splitQRYDTA(DRDAStatement
DRDA statment
stmt
,
int
size of query block
blksize
)

Split QRYDTA into blksize chunks This routine is called if the QRYDTA data will not fit.

private int

Returns:

SVRCOD value
svrcodFromSecchkcd
(int securityCheckCode)

Calculate SVRCOD value from SECCHKCD

private void
switchToEbcdic()

Switch the DDMWriter and DDMReader to EBCDIC

private void
switchToUtf8()

Switch the DDMWriter and DDMReader to UTF8 IF supported

protected void
throwSyntaxrm(int
Error code
errcd
,
int
code point value
cpArg
)

Syntax error

private void
tooBig(int
code point with too big object
codePoint
)

Object too big

private void
tooMany(int
code point which has been duplicated
codePoint
)

Seen too many of this code point

protected void
trace(String
- value to print on console
value
)

Send string to console

private void
traceEXTDTARead(int
the DRDA type of the EXTDTA value
drdaType
,
int
the one-based parameter index
index
,
EXTDTAReaderInputStream
the stream being read
stream
,
boolean
whether or not the value is being streamed as the last parameter value in the DRDA protocol flow
streamLOB
,
String
the encoding of the data, if any
encoding
)

Sends a trace string to the console when reading an EXTDTA value (if tracing is enabled).

private int

Returns:

security check code - 0 if everything O.K.
validateSecMecUSRSSBPWD
()

Validate SECMEC_USRSSBPWD (Strong Password Substitute) can be used as DRDA security mechanism.

private void
valueNotSupported(int
code point value
codePoint
)

Don't support this value

private void
verifyInOrderACCSEC_SECCHK(int
code point we have
codePoint
,
int
code point required at this time
reqCodePoint
)

Verify that the code point is in the right order

private void
verifyRequiredObject(int
code point we have
codePoint
,
int
code point required at this time
reqCodePoint
)

Verify that the code point is the required code point

private int

Returns:

security check code, 0 is O.K.
verifyUserIdPassword
()

Verify userId and password Username and password is verified by making a connection to the database

private void
writeABNUOWRM()

Write ABNUOWRM - query process has terminated in an error condition such as deadlock or lock timeout.

private void
writeACCRDBRM(int svrcod)

Write Access to RDB Completed Instance Variables SVRCOD - severity code - 0 info, 4 warning -required PRDID - product specific identifier -required TYPDEFNAM - type definition name -required TYPDEFOVR - type definition overrides - required RDBINTTKN - token which can be used to interrupt DDM commands - optional CRRTKN - correlation token - only returned if we didn't get one from requester SRVDGN - server diagnostic information - optional PKGDFTCST - package default character subtype - optional USRID - User ID at the target system - optional SRVLST - Server List

private void
writeACCSECRD(int securityCheckCode)

Write ACCSECRD If the security mechanism is known, we just send it back along with the security token if encryption is going to be used.

private void
writeCMDCHKRM(int
severity of error
severity
)

Write CMDCHKRM Instance Variables SVRCOD - Severity Code - required

private void
writeENDQRYRM(int
Severity code - WARNING or ERROR
svrCod
)

Write ENDQRYRM - query process has terminated in such a manner that the query or result set is now closed.

private void
writeENDUOWRM(int
- operation type 1 - commit, 2 -rollback
opType
)

Write ENDUOWRM Instance Variables SVCOD - severity code - WARNING - required UOWDSP - Unit of Work Disposition - required RDBNAM - Relational Database name - optional SRVDGN - Server Diagnostics information - optional

private void
writeEXCSATRD()

Write reply to EXCSAT command Instance Variables EXTNAM - External Name (optional) MGRLVLLS - Manager Level List (optional) SRVCLSNM - Server Class Name (optional) - used by JCC SRVNAM - Server Name (optional) SRVRLSLV - Server Product Release Level (optional)

pack-priv void
protected void
writeFdocaVal(int
Index of column being returned
index
,
Object
Value to write to client
val
,
int
FD:OCA DRDA Type from FdocaConstants
drdaType
,
int
Precision
precision
,
int scale, boolean valNull, DRDAStatement
Statement being processed
stmt
,
boolean
True when writing a value for a procedure parameter
isParam
)

Write Fdoca Value to client

private boolean
writeFDODTA(DRDAStatement stmt)

This routine places some data into the current QRYDTA block using FDODTA (Formatted Data Object DaTA rules).

private void
writeMGRLEVELS()

Write manager levels The target server must not provide information for any target managers unless the source explicitly requests it.

private void
writeNullability(int
FDOCA type
drdaType
,
boolean
true if this is a null value. False otherwise
valNull
)

write nullability if this is a nullable drdatype and FDOCA null value if appropriate

private void
writeNullSQLCARDobject()

Write a null SQLCARD as an object

private void
writeOPNQFLRM(SQLException
Exception describing failure
e
)

Write a OPNQFLRM - Open Query Failure Instance Variables SVRCOD - Severity Code - required - 8 ERROR RDBNAM - Relational Database Name - required

private void
writeOPNQRYRM(boolean
- return as a DSS object (part of a reply)
isDssObject
,
DRDAStatement
- DRDA statement we are processing
stmt
)

Write OPNQRYRM - Open Query Complete Instance Variables SVRCOD - Severity Code - required QRYPRCTYP - Query Protocol Type - required SQLCSRHLD - Hold Cursor Position - optional QRYATTSCR - Query Attribute for Scrollability - optional - level 7 QRYATTSNS - Query Attribute for Sensitivity - optional - level 7 QRYATTUPD - Query Attribute for Updatability -optional - level 7 QRYINSID - Query Instance Identifier - required - level 7 SRVDGN - Server Diagnostic Information - optional

private void
writePBSD()

Piggy-back any modified session attributes on the current message.

private void
writePKGNAMCSN(byte[] pkgcnstkn)

Write PKGNAMCSN Instance Variables NAMESYMDR - database name - not validated RDBCOLID - RDB Collection Identifier PKGID - RDB Package Identifier PKGCNSTKN - RDB Package Consistency Token PKGSN - RDB Package Section Number There are two possible formats, fixed and extended which includes length information for the strings

private void
private void
writeQRYDSC(DRDAStatement
DRDAStatement we are working on
stmt
,
boolean
simply the FDODSC, without the wrap Instance Variables SQLDTAGRP - required Only 84 columns can be sent in a single QRYDSC. If there are more columns they must be sent in subsequent QRYDSC. If the QRYDSC will not fit into the current block, as many columns as can fit are sent and then the remaining are sent in the following blocks.
FDODSConly
)

Write QRYDSC - Query Answer Set Description

private void
writeQRYDTA(DRDAStatement
DRDA statement we are processing
stmt
)

Write QRYDTA - Query Answer Set Data Contains some or all of the answer set data resulting from a query If the client is not using rowset processing, this routine attempts to pack as much data into the QRYDTA as it can.

private void
writeQRYNOPRM(int
Severity Code
svrCod
)

Write a QRYNOPRM - Query Not Opened Instance Variables SVRCOD - Severity Code - required - 4 Warning 8 ERROR RDBNAM - Relational Database Name - required PKGNAMCSN - RDB Package Name, Consistency Token, and Section Number - required

private void
writeQRYPOPRM()

Write a QRYPOPRM - Query Previously opened Instance Variables SVRCOD - Severity Code - required - 8 ERROR RDBNAM - Relational Database Name - required PKGNAMCSN - RDB Package Name, Consistency Token, and Section Number - required

private void
writeRDBfailure(int
codepoint of failure
codePoint
)

Write RDB Failure Instance Variables SVRCOD - Severity Code - required RDBNAM - Relational Database name - required SRVDGN - Server Diagnostics - optional (not sent for now)

protected void
writeRDBNAM(String
database name
rdbnam
)

Write RDBNAM

private void
writeRDBUPDRM()

Write RDBUPDRM Instance variables SVRCOD - Severity code - Information only - required RDBNAM - Relational database name -required SRVDGN - Server Diagnostic Information -optional

private void
writeRSLSETRM(DRDAStatement stmt)

Write RSLSETRM Instance variables SVRCOD - Severity code - Information only - required PKGSNLST - list of PKGNAMCSN -required SRVDGN - Server Diagnostic Information -optional

private void
writeSECCHKRM(int securityCheckCode)

Write security check reply Instance variables SVRCOD - serverity code - required SECCHKCD - security check code - required SECTKN - security token - optional, ignorable SVCERRNO - security service error number SRVDGN - Server Diagnostic Information

private void
writeSQLCAERRWARN(long updateCount, long rowCount)

Write the ERR and WARN part of the SQLCA

private void
writeSQLCAGRP(SQLException
SQLException encountered
e
,
long updateCount, long rowCount)

Write SQLCAGRP SQLCAGRP : FDOCA EARLY GROUP SQL Communcations Area Group Description FORMAT FOR SQLAM <= 6 SQLCODE; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLSTATE; DRDA TYPE FCS; ENVLID 0x30; Length Override 5 SQLERRPROC; DRDA TYPE FCS; ENVLID 0x30; Length Override 8 SQLCAXGRP; DRDA TYPE N-GDA; ENVLID 0x52; Length Override 0 FORMAT FOR SQLAM >= 7 SQLCODE; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLSTATE; DRDA TYPE FCS; ENVLID 0x30; Length Override 5 SQLERRPROC; DRDA TYPE FCS; ENVLID 0x30; Length Override 8 SQLCAXGRP; DRDA TYPE N-GDA; ENVLID 0x52; Length Override 0 SQLDIAGGRP; DRDA TYPE N-GDA; ENVLID 0x56; Length Override 0

private void
writeSQLCAGRP(byte[]
SQLState (already converted to UTF8)
sqlState
,
int
sqlcode
sqlcode
,
long updateCount, long rowCount)

Same as writeSQLCAGRP, but optimized for the case when there is no real exception, i.e. the exception is null, or "End of data" SQLCAGRP : FDOCA EARLY GROUP SQL Communcations Area Group Description FORMAT FOR SQLAM <= 6 SQLCODE; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLSTATE; DRDA TYPE FCS; ENVLID 0x30; Length Override 5 SQLERRPROC; DRDA TYPE FCS; ENVLID 0x30; Length Override 8 SQLCAXGRP; DRDA TYPE N-GDA; ENVLID 0x52; Length Override 0 FORMAT FOR SQLAM >= 7 SQLCODE; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLSTATE; DRDA TYPE FCS; ENVLID 0x30; Length Override 5 SQLERRPROC; DRDA TYPE FCS; ENVLID 0x30; Length Override 8 SQLCAXGRP; DRDA TYPE N-GDA; ENVLID 0x52; Length Override 0 SQLDIAGGRP; DRDA TYPE N-GDA; ENVLID 0x56; Length Override 0

private void
writeSQLCARD(SQLException e, long updateCount, long rowCount)

private void
writeSQLCARDs(SQLException e, long updateCount)

private void
writeSQLCARDs(SQLException e, long updateCount, boolean sendSQLERRRM)

private void
writeSQLCAXGRP(long updateCount, long rowCount, String
sqlcode
sqlerrmc
,
SQLException
SQLException encountered
nextException
)

Write SQLCAXGRP SQLCAXGRP : EARLY FDOCA GROUP SQL Communications Area Exceptions Group Description FORMAT FOR SQLAM <= 6 SQLRDBNME; DRDA TYPE FCS; ENVLID 0x30; Length Override 18 SQLERRD1; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD2; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD3; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD4; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD5; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD6; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLWARN0; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN1; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN2; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN3; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN4; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN5; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN6; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN7; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN8; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN9; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARNA; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLERRMSG_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 70 SQLERRMSG_s; DRDA TYPE VCS; ENVLID 0x32; Length Override 70 FORMAT FOR SQLAM >= 7 SQLERRD1; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD2; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD3; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD4; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD5; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLERRD6; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLWARN0; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN1; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN2; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN3; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN4; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN5; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN6; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN7; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN8; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARN9; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLWARNA; DRDA TYPE FCS; ENVLID 0x30; Length Override 1 SQLRDBNAME; DRDA TYPE VCS; ENVLID 0x32; Length Override 1024 SQLERRMSG_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 70 SQLERRMSG_s; DRDA TYPE VCS; ENVLID 0x32; Length Override 70

private void
writeSQLCINRD(DRDAStatement stmt)

Write SQLCINRD - result set column information

private void
writeSQLDAGRP(ResultSetMetaData
resultset meta data
rsmeta
,
ParameterMetaData
parameter meta data
pmeta
,
int
column number we are returning (in case of result set), or, parameter number (in case of parameter)
elemNum
,
boolean
whether this is for a result set
rtnOutput
)

Write SQLDAGRP SQLDAGRP : EARLY FDOCA GROUP SQL Data Area Group Description FORMAT FOR SQLAM <= 6 SQLPRECISION; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLSCALE; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLLENGTH; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLTYPE; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLCCSID; DRDA TYPE FB; ENVLID 0x26; Length Override 2 SQLNAME_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 30 SQLNAME_s; DRDA TYPE VCS; ENVLID 0x32; Length Override 30 SQLLABEL_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 30 SQLLABEL_s; DRDA TYPE VCS; ENVLID 0x32; Length Override 30 SQLCOMMENTS_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 254 SQLCOMMENTS_m; DRDA TYPE VCS; ENVLID 0x32; Length Override 254 FORMAT FOR SQLAM == 6 SQLPRECISION; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLSCALE; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLLENGTH; DRDA TYPE I8; ENVLID 0x16; Length Override 8 SQLTYPE; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLCCSID; DRDA TYPE FB; ENVLID 0x26; Length Override 2 SQLNAME_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 30 SQLNAME_s; DRDA TYPE VCS; ENVLID 0x32; Length Override 30 SQLLABEL_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 30 SQLLABEL_s; DRDA TYPE VCS; ENVLID 0x32; Length Override 30 SQLCOMMENTS_m; DRDA TYPE VCM; ENVLID 0x3E; Length Override 254 SQLCOMMENTS_m; DRDA TYPE VCS; ENVLID 0x32; Length Override 254 SQLUDTGRP; DRDA TYPE N-GDA; ENVLID 0x51; Length Override 0 FORMAT FOR SQLAM >= 7 SQLPRECISION; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLSCALE; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLLENGTH; DRDA TYPE I8; ENVLID 0x16; Length Override 8 SQLTYPE; DRDA TYPE I2; ENVLID 0x04; Length Override 2 SQLCCSID; DRDA TYPE FB; ENVLID 0x26; Length Override 2 SQLDOPTGRP; DRDA TYPE N-GDA; ENVLID 0xD2; Length Override 0

private void
writeSQLDARD(DRDAStatement
prepared statement
stmt
,
boolean rtnOutput, SQLException e)

Write SQLDARD SQLDARD : FDOCA EARLY ARRAY SQL Descriptor Area Row Description with SQL Communications Area FORMAT FOR SQLAM <= 6 SQLCARD; ROW LID 0x64; ELEMENT TAKEN 0(all); REP FACTOR 1 SQLNUMROW; ROW LID 0x68; ELEMENT TAKEN 0(all); REP FACTOR 1 SQLDAROW; ROW LID 0x60; ELEMENT TAKEN 0(all); REP FACTOR 0(all) FORMAT FOR SQLAM >= 7 SQLCARD; ROW LID 0x64; ELEMENT TAKEN 0(all); REP FACTOR 1 SQLDHROW; ROW LID 0xE0; ELEMENT TAKEN 0(all); REP FACTOR 1 SQLNUMROW; ROW LID 0x68; ELEMENT TAKEN 0(all); REP FACTOR 1

private void
writeSQLDCGRP(long rowNum, int sqlCode, String sqlState, String dbname, String sqlerrmc)

writeSQLDCGRP: SQL Diagnostics Condition Group Description SQLDCCODE; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCSTATE; DRDA TYPE FCS; ENVLID Ox30; Lengeh Override 5 SQLDCREASON; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCLINEN; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCROWN; DRDA TYPE FD; ENVLID 0x0E; Lengeh Override 31 SQLDCER01; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCER02; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCER03; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCER04; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCPART; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCPPOP; DRDA TYPE I4; ENVLID 0x02; Length Override 4 SQLDCMSGID; DRDA TYPE FCS; ENVLID 0x30; Length Override 10 SQLDCMDE; DRDA TYPE FCS; ENVLID 0x30; Length Override 8 SQLDCPMOD; DRDA TYPE FCS; ENVLID 0x30; Length Override 5 SQLDCRDB; DRDA TYPE VCS; ENVLID 0x32; Length Override 255 SQLDCTOKS; DRDA TYPE N-RLO; ENVLID 0xF7; Length Override 0 SQLDCMSG_m; DRDA TYPE NVMC; ENVLID 0x3F; Length Override 32672 SQLDCMSG_S; DRDA TYPE NVCS; ENVLID 0x33; Length Override 32672 SQLDCCOLN_m; DRDA TYPE NVCM ; ENVLID 0x3F; Length Override 255 SQLDCCOLN_s; DRDA TYPE NVCS; ENVLID 0x33; Length Override 255 SQLDCCURN_m; DRDA TYPE NVCM; ENVLID 0x3F; Length Override 255 SQLDCCURN_s; DRDA TYPE NVCS; ENVLID 0x33; Length Override 255 SQLDCPNAM_m; DRDA TYPE NVCM; ENVLID 0x3F; Length Override 255 SQLDCPNAM_s; DRDA TYPE NVCS; ENVLID 0x33; Length Override 255 SQLDCXGRP; DRDA TYPE N-GDA; ENVLID 0xD3; Length Override 1

private void
writeSQLDCROW(long rowNum, int sqlCode, String sqlState, String dbname, String sqlerrmc)

writeSQLDCROW: SQL Diagnostics Condition Row - Identity 0xE5 SQLDCGRP; GROUP LID 0xD5; ELEMENT TAKEN 0(all); REP FACTOR 1

private void
writeSQLDHROW(int
HOLD_CURSORS_OVER_COMMIT or CLOSE_CURSORS_AT_COMMIT
holdability
)

Holdability passed in as it can represent the holdability of the statement or a specific result set.

private void
writeSQLDIAGCI(SQLException nextException)

writeSQLDIAGCI: SQL Diagnostics Condition Information Array - Identity 0xF5 SQLNUMROW; ROW LID 0x68; ELEMENT TAKEN 0(all); REP FACTOR 1 SQLDCIROW; ROW LID 0xE5; ELEMENT TAKEN 0(all); REP FACTOR 0(all)

private void
private void
writeSQLDIAGGRP(SQLException nextException)

Write SQLDIAGGRP: SQL Diagnostics Group Description - Identity 0xD1 Nullable Group SQLDIAGSTT; DRDA TYPE N-GDA; ENVLID 0xD3; Length Override 0 SQLDIAGCN; DRFA TYPE N-RLO; ENVLID 0xF6; Length Override 0 SQLDIAGCI; DRDA TYPE N-RLO; ENVLID 0xF5; Length Override 0

private void
private void
writeSQLDOPTGRP(ResultSetMetaData rsmeta, ParameterMetaData pmeta, int jdbcElemNum, boolean rtnOutput)

private void
writeSQLDTAGRP(DRDAStatement
drda statement
stmt
,
ResultSetMetaData
resultset meta data
rsmeta
,
ParameterMetaData
parameter meta data for CallableStatement
pmeta
,
int
starting column for group to send
colStart
,
int
end column to send
colEnd
,
boolean
is this the first group
first
)

Write SQLDTAGRP SQLDAGRP : Late FDOCA GROUP SQL Data Value Group Descriptor LENGTH - length of the SQLDTAGRP TRIPLET_TYPE - NGDA for first, CPT for following ID - SQLDTAGRP_LID for first, NULL_LID for following For each column DRDA TYPE LENGTH OVERRIDE For numeric/decimal types PRECISON SCALE otherwise LENGTH or DISPLAY_WIDTH

private void
writeSQLDXGRP(ResultSetMetaData rsmeta, ParameterMetaData pmeta, int jdbcElemNum, boolean rtnOutput)

private void
writeSQLERRRM(int
severity of error
severity
)

Write SQLERRRM Instance Variables SVRCOD - Severity Code - required

private void
writeSQLNUMGRP(SQLException nextException)

writeSQLNUMGRP: Writes SQLNUMGRP : FDOCA EARLY GROUP SQL Number of Elements Group Description FORMAT FOR ALL SQLAM LEVELS SQLNUM; DRDA TYPE I2; ENVLID 0x04; Length Override 2

private void
writeSQLNUMROW(SQLException nextException)

writeSQLNUMROW: Writes SQLNUMROW : FDOCA EARLY ROW SQL Number of Elements Row Description FORMAT FOR SQLAM LEVELS SQLNUMGRP; GROUP LID 0x58; ELEMENT TAKEN 0(all); REP FACTOR 1

private void
writeSQLRSLRD(DRDAStatement stmt)

Write SQLRSLRD - result set reply data

private void
writeSQLUDTGRP(ResultSetMetaData
resultset meta data
rsmeta
,
ParameterMetaData
parameter meta data
pmeta
,
int
column number we are returning (in case of result set), or, parameter number (in case of parameter)
jdbcElemNum
,
boolean
whether this is for a result set
rtnOutput
)

Write SQLUDTGRP (SQL Descriptor User-Defined Type Group Descriptor) This is the format from the DRDA spec, Volume 1, section 5.6.4.10.

private void
private void
writeVCMorVCS(String
string to write
s
)

Write variable character mixed byte or single byte The preference is to write mixed byte if it is defined for the server, since that is our default and we don't allow it to be changed, we always write mixed byte.

Inherited from java.lang.Thread:
activeCountcheckAccessclonecountStackFramescurrentThreaddumpStackenumerategetAllStackTracesgetContextClassLoadergetDefaultUncaughtExceptionHandlergetIdgetNamegetPrioritygetStackTracegetStategetThreadGroupgetUncaughtExceptionHandlerholdsLockinterruptinterruptedisAliveisDaemonisInterruptedisVirtualjoinjoinjoinjoinofPlatformofVirtualonSpinWaitresumesetContextClassLoadersetDaemonsetDefaultUncaughtExceptionHandlersetNamesetPrioritysetUncaughtExceptionHandlersleepsleepsleepstartstartVirtualThreadstopsuspendthreadIdtoStringyield