Class TdsCore
- java.lang.Object
-
- net.sourceforge.jtds.jdbc.TdsCore
-
public class TdsCore extends java.lang.ObjectThis class implements the Sybase / Microsoft TDS protocol.Implementation notes:
- This class, together with TdsData, encapsulates all of the TDS specific logic required by the driver.
- This is a ground up reimplementation of the TDS protocol and is rather simpler, and hopefully easier to understand, than the original.
- The layout of the various Login packets is derived from the original code and freeTds work, and incorporates changes including the ability to login as a TDS 5.0 user.
- All network I/O errors are trapped here, reported to the log (if active) and the parent Connection object is notified that the connection should be considered closed.
- Rather than having a large number of classes one for each token, useful information about the current token is gathered together in the inner TdsToken class.
- As the rest of the driver interfaces to this code via higher-level method calls there should be know need for knowledge of the TDS protocol to leak out of this class. It is for this reason that all the TDS Token constants are private.
- Author:
- Mike Hutchinson, Matt Brinkley, Alin Sinpalean, Holger Rehn, FreeTDS project
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classTdsCore.TableMetaDataInner static class used to hold table meta data.private static classTdsCore.TdsTokenInner static class used to hold information about TDS tokens read.
-
Field Summary
Fields Modifier and Type Field Description private boolean_ErrorReceivedflag set totruewhenever a TDS_ERROR token is receivedprivate org.ietf.jgss.GSSContext_gssContextprivate static byteALTMETADATA_TOKENTDS 7.0 Computed Result set column meta data token.private static intASYNC_CANCELCancel has been generated byStatement.cancel().static byteCANCEL_PKTTDS Cancel packet.private int[]cancelMonitorSynchronization monitor forcancelPending.private booleancancelPendingIndicates pending cancel that needs to be cleared.private ColInfo[]columnsThe array of column meta data objects for this result set.private ColInfo[]computedColumnsThe array of column meta data objects for the computed columns of this result set.private java.lang.Object[]computedRowDataThe array of computed column data objects in the current row.private JtdsConnectionconnectionThe Connection object that created this object.private SemaphoreconnectionLockMutual exclusion lock on connection.private TdsCore.TdsTokencurrentTokenThe descriptor object for the current TDS token.static intDEFAULT_MIN_PKT_SIZE_TDS70Default minimum network packet size for TDS 7.0 and newer.(package private) static byteDONE_CANCELDone: Cancel acknowledgment.private static byteDONE_END_OF_RESPONSEDone: Response terminator (if more than one request packet is sent, each response is terminated by a DONE packet with this flag set).private static byteDONE_ERRORDone: command caused an error.private static byteDONE_MORE_RESULTSDone: more results are expected.private static byteDONE_ROW_COUNTDone: There is a valid row count.private static ParamInfo[]EMPTY_PARAMETER_INFOUsed to optimize thegetParameters()callprivate booleanendOfResponseTrue if the server response is fully read.private booleanendOfResultsTrue if the current result set is at end of file.static intEXECUTE_SQLPrepare SQL using sp_executesqlprivate booleanfatalErrorIndicates that a fatal error has occurred and the connection will close.private static java.lang.StringhostNameName of the client host (it can take quite a while to find it out if DNS is configured incorrectly).private ResponseStreaminThe input server response stream.private booleaninBatchIndicates processing a batch.private booleanisClosedIndicates that this object is closed.static byteLOGIN_PKTTDS 4.2 or 5.0 Login packet.static intMAX_PKT_SIZEMaximum network packet size.private SQLDiagnosticmessagesThe head of the diagnostic messages chain.static intMIN_PKT_SIZEMinimum network packet size.static byteMSDTC_PKTTDS MSDTC packet.static byteMSLOGIN_PKTTDS 7.0 Login packet.private intnextParamThe index of the next output parameter to populate.(package private) byte[]nonceThe nonce from an NTLM challenge packet.static byteNTLMAUTH_PKTTDS 7.0 NTLM Authentication packet.private booleanntlmAuthSSOFlag that indicates if logon() should try to use Windows Single Sign On using SSPI or Kerberos SSO via Java native GSSAPI.(package private) byte[]ntlmMessageNTLM authentication message.(package private) byte[]ntlmTargettarget info for NTLM messageprivate RequestStreamoutThe output server request stream.private ParamInfo[]parametersThe array of parameter meta data objects for the current procedure call.static intPKT_HDR_LENThe size of the packet header.static bytePRELOGIN_PKTSQL 2000 prelogin negotiation packet.static intPREPAREPrepare SQL using sp_prepare and sp_executestatic byteQUERY_PKTTDS 4.2 or 7.0 Query packet.static byteREPLY_PKTTDS Reply packet.private ParamInforeturnParamThe return parameter meta data object for the current procedure call.private java.lang.IntegerreturnStatusThe stored procedure return status.private java.lang.Object[]rowDataThe array of column data objects in the current row.static byteRPC_PKTTDS Remote Procedure Call.private intserverTypeThe make of SQL Server (Sybase/Microsoft).private SharedSocketsocketThe Shared network socket object.static intSSL_CLIENT_FORCE_ENCRYPTSSL Mode - Client requested force encryption.static intSSL_ENCRYPT_LOGINSSL Mode - Login packet must be encrypted.static intSSL_NO_ENCRYPTSSL Mode - No server certificate installed.static intSSL_SERVER_FORCE_ENCRYPTSSL Mode - Server requested force encryption.private intsslModeIndicates type of SSL connection.private static SSPIJNIClientsspiJNIClientA reference to ntlm.SSPIJNIClient.(package private) static intSYB_BIGINTSybase 15+ bigint.(package private) static intSYB_BITNULLSybase nullable bit type.(package private) static intSYB_DATETIMESybase date and time data types.(package private) static intSYB_EXTCOLINFOSybase extended column meta data.(package private) static intSYB_LONGDATASybase char and binary > 255.(package private) static intSYB_UNICODESybase univarchar etc.(package private) static intSYB_UNITEXTSybase 15+ unitext.static byteSYBQUERY_PKTTDS 5.0 Query packet.private TdsCore.TableMetaData[]tablesThe array of table names associated with this result.private static byteTDS_ALTROWTDS Computed result set data row token.private static byteTDS_AUTH_TOKENTDS 7.0 NTLM authentication challenge token.private static byteTDS_CAP_TOKENTDS 5.0 capabilities token.private static byteTDS_CLOSE_TOKENTDS 5.0 Close token.private static byteTDS_COLFMT_TOKENTDS 4.2 Column meta data token.private static byteTDS_COLINFO_TOKENTDS Cursor results column infomation token.private static byteTDS_COLNAME_TOKENTDS 4.2 Column names token.private static byteTDS_COMP_NAMES_TOKENTDS Computed result set names token.private static byteTDS_COMP_RESULT_TOKENTDS Computed result set token.private static byteTDS_CONTROL_TOKENTDS control token.private static byteTDS_DBRPC_TOKENTDS 5.0 RPC token.private static byteTDS_DONE_TOKENTDS done token.private static byteTDS_DONEINPROC_TOKENTDS done in procedure token.private static byteTDS_DONEPROC_TOKENTDS done procedure token.private static byteTDS_ENV_CHARSETEnvironment change: charset changed.private static byteTDS_ENV_DATABASEEnvironment change: database changed.private static byteTDS_ENV_LANGEnvironment change: language changed.private static byteTDS_ENV_LCIDEnvironment change: locale changed.private static byteTDS_ENV_PACKSIZEEnvironment change: network packet size changed.private static byteTDS_ENV_SQLCOLLATIONEnvironment change: TDS 8 collation changed.private static byteTDS_ENVCHANGE_TOKENTDS environment change token.private static byteTDS_ERROR_TOKENTDS error result token.private static byteTDS_INFO_TOKENTDS Information message token.private static byteTDS_LANG_TOKENTDS 5.0 Language token.private static byteTDS_LOGINACK_TOKENTDS Login acknowledgement token.private static byteTDS_MSG50_TOKENTDS 5.0 message token.private static byteTDS_OFFSETS_TOKENTDS DBLIB Offsets token.private static byteTDS_ORDER_TOKENTDS Order by columns token.private static byteTDS_PARAM_TOKENTDS Output parameter value token.private static byteTDS_PROCIDTDS Procedure ID token.private static byteTDS_RESULT_TOKENTDS 5.0 Result set column meta data token.private static byteTDS_RETURNSTATUS_TOKENTDS Procedure call return status token.private static byteTDS_ROW_TOKENTDS Result set data row token.private static byteTDS_TABNAME_TOKENTDS Table name token.private static byteTDS5_DYNAMIC_TOKENTDS 5.0 Dynamic SQL token.private static byteTDS5_PARAMFMT_TOKENTDS 5.0 parameter descriptor token.private static byteTDS5_PARAMFMT2_TOKENTDS 5.0 Parameter format token.private static byteTDS5_PARAMS_TOKENTDS 5.0 parameter value token.private static byteTDS5_WIDE_RESULTTSD 5.0 Wide result set token.private static byteTDS7_RESULT_TOKENTDS 7.0 Result set column meta data token.private static java.util.HashMaptds8SpNamesMap of system stored procedures that have shortcuts in TDS8.private inttdsVersionThe TDS version being supported by this connection.static intTEMPORARY_STORED_PROCEDURESPrepare SQL using temporary stored proceduresprivate static intTIMEOUT_CANCELCancel has been generated by a query timeout.static intUNPREPAREDDo not prepare SQL
-
Constructor Summary
Constructors Constructor Description TdsCore(JtdsConnection connection, SQLDiagnostic messages)Construct a TdsCore object.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) voidcancel(boolean timeout)Send (only) one cancel packet to the server.private voidcheckOpen()Check that the connection is still open.voidcleanUp()Releases parameter and result set data and metadata to free up memory.(package private) voidclearResponseQueue()Empty the server response queue.(package private) voidclose()Close theTdsCoreconnection object and associated streams.(package private) voidcloseConnection()Inform the server that this connection is closing.(package private) voidconsumeOneResponse()Consume packets from the server response queue up to (and including) the first response terminator.private byte[]createGssToken()Initializes the GSS context and creates the initial token.(package private) byte[]enlistConnection(int type, byte[] oleTranID)Enlist the current connection in a distributed transaction or request the location of the MSDTC instance controlling the server we are connected to.(package private) voidexecuteSQL(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, int timeOut, int maxRows, int maxFieldSize, boolean sendNow)Send an SQL statement with optional parameters to the server.private voidexecuteSQL42(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, boolean sendNow)Execute SQL using TDS 4.2 protocol.private voidexecuteSQL50(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters)Execute SQL using TDS 5.0 protocol.private voidexecuteSQL70(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, boolean sendNow)Execute SQL using TDS 7.0 protocol.(package private) java.sql.SQLExceptiongetBatchCounts(java.util.ArrayList counts, java.sql.SQLException sqlEx)Obtain the counts from a batch of SQL updates.(package private) ColInfo[]getColumns()Retrieve the current result set column descriptors.(package private) ColInfo[]getComputedColumns()Retrieve the current computed result set column descriptors, if any.(package private) java.lang.Object[]getComputedRowData()Retrieve and clear the current computed result set data items, if any.private static java.lang.StringgetHostName()Tries to figure out what client name we should identify ourselves as.private static intgetIntFromBuffer(byte[] buf, int offset)private static byte[]getMACAddress(java.lang.String macString)Converts a user supplied MAC address into a byte array.SQLDiagnosticgetMessages()Returns the diagnostic chain for this instance.(package private) booleangetMoreResults()Get the next result set or update count from the TDS stream.(package private) booleangetNextRow()Retrieve the next data row from the result set.(package private) ParamInfo[]getParameters()Retrieve the parameter meta data from a Sybase prepare.(package private) java.lang.IntegergetReturnStatus()Retrieve the return status for the current stored procedure.(package private) java.lang.Object[]getRowData()Retrieve the current result set data items.private static intgetShortFromBuffer(byte[] buf, int offset)(package private) intgetTdsVersion()Retrieve the TDS protocol version.(package private) intgetUpdateCount()Retrieve the update count from the current TDS token.(package private) booleanisDataInResultSet()Retrieve the status of result set.(package private) booleanisEndOfResponse()Retrieve the status of the response stream.static booleanisPreparedProcedureName(java.lang.String procName)Returnstrueif the specifiedprocNameis a sp_prepare or sp_prepexec handle; returnsfalseotherwise.(package private) booleanisResultSet()Retrieve the status of the next result item.(package private) booleanisRowData()Retrieve the status of the next result item.(package private) booleanisUpdateCount()Retrieve the status of the next result item.(package private) static booleanisWindowsOS()Checks whether theos.namesystem property contains "windows".(package private) voidlogin(java.lang.String serverName, java.lang.String database, java.lang.String user, java.lang.String password, java.lang.String domain, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, java.lang.String macAddress, int packetSize)Login to the SQL Server.(package private) java.lang.StringmicrosoftPrepare(java.lang.String sql, ParamInfo[] params, boolean needCursor, int resultSetType, int resultSetConcurrency)Prepares the SQL for use with Microsoft server.(package private) voidnegotiateSSL(java.lang.String instance, java.lang.String ssl)Negotiate SSL settings with SQL 2000+ server.private voidnextToken()Read the next TDS token from the response stream.private voidputLoginString(java.lang.String txt, int len)Write a TDS login packet string.private intreadPreLoginPacket()Process the pre login acknowledgment from the server.private voidsend42LoginPkt(java.lang.String serverName, java.lang.String user, java.lang.String password, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, int packetSize)TDS 4.2 Login Packet.private voidsend50LoginPkt(java.lang.String serverName, java.lang.String user, java.lang.String password, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, int packetSize)TDS 5.0 Login Packet.private voidsendGssToken()Send the next GSS authentication token.private voidsendMSLoginPkt(java.lang.String serverName, java.lang.String database, java.lang.String user, java.lang.String password, java.lang.String domain, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, java.lang.String macAddress, int netPacketSize)Send a TDS 7 login packet.private voidsendNtlmChallengeResponse(java.lang.String user, java.lang.String password, java.lang.String domain)Send the response to the NTLM authentication challenge.private voidsendPreLoginPacket(java.lang.String instance, boolean forceEncryption)Send the SQL Server 2000 pre login packet.(package private) voidsetColumns(ColInfo[] columns)Sets the column meta data.private voidsetRowCountAndTextSize(int rowCount, int textSize)Sets the server row count (to limit the number of rows in a result set) and text size (to limit the size of returned TEXT/NTEXT fields).(package private) voidstartBatch()Notifies theTdsCorethat a batch is starting.(package private) voidsubmitSQL(java.lang.String sql)Submit a simple SQL statement to the server and process all output.(package private) java.lang.StringsybasePrepare(java.lang.String sql, ParamInfo[] params)Creates a light weight stored procedure on a Sybase server.(package private) voidsybaseUnPrepare(java.lang.String procName)Drops a Sybase temporary stored procedure.private voidtds4ColFormatToken()Process a TDS 4.2 column format token.private voidtds4ColNamesToken()Process a TDS 4.2 column names token.private voidtds5DynamicToken()Process TDS5 dynamic SQL aknowledgements.private voidtds5ErrorToken()Process a TDS 5 error or informational message.private voidtds5ParamFmt2Token()Process TDS 5 Sybase 12+ Dynamic results parameter descriptor.private voidtds5ParamFmtToken()Process TDS 5 Dynamic results parameter descriptors.private voidtds5ParamsToken()Process TDS 5.0 Params Token.private voidtds5ResultToken()Process a TDS 5.0 result set packet.private voidtds5WideResultToken()Process Sybase 12+ wide result token which provides enhanced column meta data.private static java.lang.Stringtds7CryptPass(java.lang.String pw)A very poor man's "encryption".private voidtds7ResultToken()Process a TDS 7.0 result set token.private voidtdsCapabilityToken()Processes a TDS 5.0 capability token.private voidtdsColumnInfoToken()Process a column infomation token.private voidtdsComputedResultToken()Process meta data for the computed result set complementing the current result set.private voidtdsComputedRowToken()Process computed row data.private voidtdsControlToken()Process a control token (function unknown).private voidtdsDoneToken()Process a DONE, DONEINPROC or DONEPROC token.private voidtdsEnvChangeToken()Process an environment change packet.private voidtdsErrorToken()Process a TD4/TDS7 error or informational message.private voidtdsGssToken()Receive a GSS token.private voidtdsInvalidToken()Report unsupported TDS token in input stream.private voidtdsLoginAckToken()Process a login acknowledgement packet.private voidtdsNtlmAuthToken()Process a NTLM Authentication challenge.private voidtdsOffsetsToken()Process offsets token.private voidtdsOrderByToken()Process an order by token.private voidtdsOutputParamToken()Process output parameters.private voidtdsProcIdToken()Process procedure ID token.private voidtdsReturnStatusToken()Process stored procedure return status token.private voidtdsRowToken()Process a row data token.private voidtdsTableNameToken()Process a table name token.private voidwait(int timeOut)Waits for the first byte of the server response.
-
-
-
Field Detail
-
MIN_PKT_SIZE
public static final int MIN_PKT_SIZE
Minimum network packet size.- See Also:
- Constant Field Values
-
DEFAULT_MIN_PKT_SIZE_TDS70
public static final int DEFAULT_MIN_PKT_SIZE_TDS70
Default minimum network packet size for TDS 7.0 and newer.- See Also:
- Constant Field Values
-
MAX_PKT_SIZE
public static final int MAX_PKT_SIZE
Maximum network packet size.- See Also:
- Constant Field Values
-
PKT_HDR_LEN
public static final int PKT_HDR_LEN
The size of the packet header.- See Also:
- Constant Field Values
-
QUERY_PKT
public static final byte QUERY_PKT
TDS 4.2 or 7.0 Query packet.- See Also:
- Constant Field Values
-
LOGIN_PKT
public static final byte LOGIN_PKT
TDS 4.2 or 5.0 Login packet.- See Also:
- Constant Field Values
-
RPC_PKT
public static final byte RPC_PKT
TDS Remote Procedure Call.- See Also:
- Constant Field Values
-
REPLY_PKT
public static final byte REPLY_PKT
TDS Reply packet.- See Also:
- Constant Field Values
-
CANCEL_PKT
public static final byte CANCEL_PKT
TDS Cancel packet.- See Also:
- Constant Field Values
-
MSDTC_PKT
public static final byte MSDTC_PKT
TDS MSDTC packet.- See Also:
- Constant Field Values
-
SYBQUERY_PKT
public static final byte SYBQUERY_PKT
TDS 5.0 Query packet.- See Also:
- Constant Field Values
-
MSLOGIN_PKT
public static final byte MSLOGIN_PKT
TDS 7.0 Login packet.- See Also:
- Constant Field Values
-
NTLMAUTH_PKT
public static final byte NTLMAUTH_PKT
TDS 7.0 NTLM Authentication packet.- See Also:
- Constant Field Values
-
PRELOGIN_PKT
public static final byte PRELOGIN_PKT
SQL 2000 prelogin negotiation packet.- See Also:
- Constant Field Values
-
SSL_ENCRYPT_LOGIN
public static final int SSL_ENCRYPT_LOGIN
SSL Mode - Login packet must be encrypted.- See Also:
- Constant Field Values
-
SSL_CLIENT_FORCE_ENCRYPT
public static final int SSL_CLIENT_FORCE_ENCRYPT
SSL Mode - Client requested force encryption.- See Also:
- Constant Field Values
-
SSL_NO_ENCRYPT
public static final int SSL_NO_ENCRYPT
SSL Mode - No server certificate installed.- See Also:
- Constant Field Values
-
SSL_SERVER_FORCE_ENCRYPT
public static final int SSL_SERVER_FORCE_ENCRYPT
SSL Mode - Server requested force encryption.- See Also:
- Constant Field Values
-
TDS5_PARAMFMT2_TOKEN
private static final byte TDS5_PARAMFMT2_TOKEN
TDS 5.0 Parameter format token.- See Also:
- Constant Field Values
-
TDS_LANG_TOKEN
private static final byte TDS_LANG_TOKEN
TDS 5.0 Language token.- See Also:
- Constant Field Values
-
TDS5_WIDE_RESULT
private static final byte TDS5_WIDE_RESULT
TSD 5.0 Wide result set token.- See Also:
- Constant Field Values
-
TDS_CLOSE_TOKEN
private static final byte TDS_CLOSE_TOKEN
TDS 5.0 Close token.- See Also:
- Constant Field Values
-
TDS_OFFSETS_TOKEN
private static final byte TDS_OFFSETS_TOKEN
TDS DBLIB Offsets token.- See Also:
- Constant Field Values
-
TDS_RETURNSTATUS_TOKEN
private static final byte TDS_RETURNSTATUS_TOKEN
TDS Procedure call return status token.- See Also:
- Constant Field Values
-
TDS_PROCID
private static final byte TDS_PROCID
TDS Procedure ID token.- See Also:
- Constant Field Values
-
TDS7_RESULT_TOKEN
private static final byte TDS7_RESULT_TOKEN
TDS 7.0 Result set column meta data token.- See Also:
- Constant Field Values
-
ALTMETADATA_TOKEN
private static final byte ALTMETADATA_TOKEN
TDS 7.0 Computed Result set column meta data token.- See Also:
- Constant Field Values
-
TDS_COLNAME_TOKEN
private static final byte TDS_COLNAME_TOKEN
TDS 4.2 Column names token.- See Also:
- Constant Field Values
-
TDS_COLFMT_TOKEN
private static final byte TDS_COLFMT_TOKEN
TDS 4.2 Column meta data token.- See Also:
- Constant Field Values
-
TDS_TABNAME_TOKEN
private static final byte TDS_TABNAME_TOKEN
TDS Table name token.- See Also:
- Constant Field Values
-
TDS_COLINFO_TOKEN
private static final byte TDS_COLINFO_TOKEN
TDS Cursor results column infomation token.- See Also:
- Constant Field Values
-
TDS_COMP_NAMES_TOKEN
private static final byte TDS_COMP_NAMES_TOKEN
TDS Computed result set names token.- See Also:
- Constant Field Values
-
TDS_COMP_RESULT_TOKEN
private static final byte TDS_COMP_RESULT_TOKEN
TDS Computed result set token.- See Also:
- Constant Field Values
-
TDS_ORDER_TOKEN
private static final byte TDS_ORDER_TOKEN
TDS Order by columns token.- See Also:
- Constant Field Values
-
TDS_ERROR_TOKEN
private static final byte TDS_ERROR_TOKEN
TDS error result token.- See Also:
- Constant Field Values
-
TDS_INFO_TOKEN
private static final byte TDS_INFO_TOKEN
TDS Information message token.- See Also:
- Constant Field Values
-
TDS_PARAM_TOKEN
private static final byte TDS_PARAM_TOKEN
TDS Output parameter value token.- See Also:
- Constant Field Values
-
TDS_LOGINACK_TOKEN
private static final byte TDS_LOGINACK_TOKEN
TDS Login acknowledgement token.- See Also:
- Constant Field Values
-
TDS_CONTROL_TOKEN
private static final byte TDS_CONTROL_TOKEN
TDS control token.- See Also:
- Constant Field Values
-
TDS_ROW_TOKEN
private static final byte TDS_ROW_TOKEN
TDS Result set data row token.- See Also:
- Constant Field Values
-
TDS_ALTROW
private static final byte TDS_ALTROW
TDS Computed result set data row token.- See Also:
- Constant Field Values
-
TDS5_PARAMS_TOKEN
private static final byte TDS5_PARAMS_TOKEN
TDS 5.0 parameter value token.- See Also:
- Constant Field Values
-
TDS_CAP_TOKEN
private static final byte TDS_CAP_TOKEN
TDS 5.0 capabilities token.- See Also:
- Constant Field Values
-
TDS_ENVCHANGE_TOKEN
private static final byte TDS_ENVCHANGE_TOKEN
TDS environment change token.- See Also:
- Constant Field Values
-
TDS_MSG50_TOKEN
private static final byte TDS_MSG50_TOKEN
TDS 5.0 message token.- See Also:
- Constant Field Values
-
TDS_DBRPC_TOKEN
private static final byte TDS_DBRPC_TOKEN
TDS 5.0 RPC token.- See Also:
- Constant Field Values
-
TDS5_DYNAMIC_TOKEN
private static final byte TDS5_DYNAMIC_TOKEN
TDS 5.0 Dynamic SQL token.- See Also:
- Constant Field Values
-
TDS5_PARAMFMT_TOKEN
private static final byte TDS5_PARAMFMT_TOKEN
TDS 5.0 parameter descriptor token.- See Also:
- Constant Field Values
-
TDS_AUTH_TOKEN
private static final byte TDS_AUTH_TOKEN
TDS 7.0 NTLM authentication challenge token.- See Also:
- Constant Field Values
-
TDS_RESULT_TOKEN
private static final byte TDS_RESULT_TOKEN
TDS 5.0 Result set column meta data token.- See Also:
- Constant Field Values
-
TDS_DONE_TOKEN
private static final byte TDS_DONE_TOKEN
TDS done token.- See Also:
- Constant Field Values
-
TDS_DONEPROC_TOKEN
private static final byte TDS_DONEPROC_TOKEN
TDS done procedure token.- See Also:
- Constant Field Values
-
TDS_DONEINPROC_TOKEN
private static final byte TDS_DONEINPROC_TOKEN
TDS done in procedure token.- See Also:
- Constant Field Values
-
TDS_ENV_DATABASE
private static final byte TDS_ENV_DATABASE
Environment change: database changed.- See Also:
- Constant Field Values
-
TDS_ENV_LANG
private static final byte TDS_ENV_LANG
Environment change: language changed.- See Also:
- Constant Field Values
-
TDS_ENV_CHARSET
private static final byte TDS_ENV_CHARSET
Environment change: charset changed.- See Also:
- Constant Field Values
-
TDS_ENV_PACKSIZE
private static final byte TDS_ENV_PACKSIZE
Environment change: network packet size changed.- See Also:
- Constant Field Values
-
TDS_ENV_LCID
private static final byte TDS_ENV_LCID
Environment change: locale changed.- See Also:
- Constant Field Values
-
TDS_ENV_SQLCOLLATION
private static final byte TDS_ENV_SQLCOLLATION
Environment change: TDS 8 collation changed.- See Also:
- Constant Field Values
-
EMPTY_PARAMETER_INFO
private static final ParamInfo[] EMPTY_PARAMETER_INFO
Used to optimize thegetParameters()call
-
DONE_MORE_RESULTS
private static final byte DONE_MORE_RESULTS
Done: more results are expected.- See Also:
- Constant Field Values
-
DONE_ERROR
private static final byte DONE_ERROR
Done: command caused an error.- See Also:
- Constant Field Values
-
DONE_ROW_COUNT
private static final byte DONE_ROW_COUNT
Done: There is a valid row count.- See Also:
- Constant Field Values
-
DONE_CANCEL
static final byte DONE_CANCEL
Done: Cancel acknowledgment.- See Also:
- Constant Field Values
-
DONE_END_OF_RESPONSE
private static final byte DONE_END_OF_RESPONSE
Done: Response terminator (if more than one request packet is sent, each response is terminated by a DONE packet with this flag set).- See Also:
- Constant Field Values
-
UNPREPARED
public static final int UNPREPARED
Do not prepare SQL- See Also:
- Constant Field Values
-
TEMPORARY_STORED_PROCEDURES
public static final int TEMPORARY_STORED_PROCEDURES
Prepare SQL using temporary stored procedures- See Also:
- Constant Field Values
-
EXECUTE_SQL
public static final int EXECUTE_SQL
Prepare SQL using sp_executesql- See Also:
- Constant Field Values
-
PREPARE
public static final int PREPARE
Prepare SQL using sp_prepare and sp_execute- See Also:
- Constant Field Values
-
SYB_LONGDATA
static final int SYB_LONGDATA
Sybase char and binary > 255.- See Also:
- Constant Field Values
-
SYB_DATETIME
static final int SYB_DATETIME
Sybase date and time data types.- See Also:
- Constant Field Values
-
SYB_BITNULL
static final int SYB_BITNULL
Sybase nullable bit type.- See Also:
- Constant Field Values
-
SYB_EXTCOLINFO
static final int SYB_EXTCOLINFO
Sybase extended column meta data.- See Also:
- Constant Field Values
-
SYB_UNICODE
static final int SYB_UNICODE
Sybase univarchar etc.- See Also:
- Constant Field Values
-
SYB_UNITEXT
static final int SYB_UNITEXT
Sybase 15+ unitext.- See Also:
- Constant Field Values
-
SYB_BIGINT
static final int SYB_BIGINT
Sybase 15+ bigint.- See Also:
- Constant Field Values
-
ASYNC_CANCEL
private static final int ASYNC_CANCEL
Cancel has been generated byStatement.cancel().- See Also:
- Constant Field Values
-
TIMEOUT_CANCEL
private static final int TIMEOUT_CANCEL
Cancel has been generated by a query timeout.- See Also:
- Constant Field Values
-
tds8SpNames
private static java.util.HashMap tds8SpNames
Map of system stored procedures that have shortcuts in TDS8.
-
hostName
private static java.lang.String hostName
Name of the client host (it can take quite a while to find it out if DNS is configured incorrectly).
-
sspiJNIClient
private static SSPIJNIClient sspiJNIClient
A reference to ntlm.SSPIJNIClient.
-
connection
private final JtdsConnection connection
The Connection object that created this object.
-
tdsVersion
private int tdsVersion
The TDS version being supported by this connection.
-
serverType
private final int serverType
The make of SQL Server (Sybase/Microsoft).
-
socket
private final SharedSocket socket
The Shared network socket object.
-
out
private final RequestStream out
The output server request stream.
-
in
private final ResponseStream in
The input server response stream.
-
endOfResponse
private boolean endOfResponse
True if the server response is fully read.
-
endOfResults
private boolean endOfResults
True if the current result set is at end of file.
-
columns
private ColInfo[] columns
The array of column meta data objects for this result set.
-
computedColumns
private ColInfo[] computedColumns
The array of column meta data objects for the computed columns of this result set.
-
rowData
private java.lang.Object[] rowData
The array of column data objects in the current row.
-
computedRowData
private java.lang.Object[] computedRowData
The array of computed column data objects in the current row.
-
tables
private TdsCore.TableMetaData[] tables
The array of table names associated with this result.
-
currentToken
private final TdsCore.TdsToken currentToken
The descriptor object for the current TDS token.
-
returnStatus
private java.lang.Integer returnStatus
The stored procedure return status.
-
returnParam
private ParamInfo returnParam
The return parameter meta data object for the current procedure call.
-
parameters
private ParamInfo[] parameters
The array of parameter meta data objects for the current procedure call.
-
nextParam
private int nextParam
The index of the next output parameter to populate.
-
messages
private final SQLDiagnostic messages
The head of the diagnostic messages chain.
-
isClosed
private boolean isClosed
Indicates that this object is closed.
-
ntlmAuthSSO
private boolean ntlmAuthSSO
Flag that indicates if logon() should try to use Windows Single Sign On using SSPI or Kerberos SSO via Java native GSSAPI.
-
fatalError
private boolean fatalError
Indicates that a fatal error has occurred and the connection will close.
-
connectionLock
private Semaphore connectionLock
Mutual exclusion lock on connection.
-
inBatch
private boolean inBatch
Indicates processing a batch.
-
sslMode
private int sslMode
Indicates type of SSL connection.
-
cancelPending
private boolean cancelPending
Indicates pending cancel that needs to be cleared.
-
cancelMonitor
private final int[] cancelMonitor
Synchronization monitor forcancelPending.
-
_ErrorReceived
private boolean _ErrorReceived
flag set totruewhenever a TDS_ERROR token is received
-
nonce
byte[] nonce
The nonce from an NTLM challenge packet.
-
ntlmMessage
byte[] ntlmMessage
NTLM authentication message.
-
ntlmTarget
byte[] ntlmTarget
target info for NTLM message
-
_gssContext
private org.ietf.jgss.GSSContext _gssContext
-
-
Constructor Detail
-
TdsCore
TdsCore(JtdsConnection connection, SQLDiagnostic messages)
Construct a TdsCore object.- Parameters:
connection- The connection which owns this object.messages- The SQLDiagnostic messages chain.
-
-
Method Detail
-
checkOpen
private void checkOpen() throws java.sql.SQLExceptionCheck that the connection is still open.- Throws:
java.sql.SQLException- if the connection is closed
-
getTdsVersion
int getTdsVersion()
Retrieve the TDS protocol version.- Returns:
- The protocol version as an
int.
-
getColumns
ColInfo[] getColumns()
Retrieve the current result set column descriptors.- Returns:
- The column descriptors as a
ColInfo[].
-
setColumns
void setColumns(ColInfo[] columns)
Sets the column meta data.- Parameters:
columns- the column descriptor array
-
getParameters
ParamInfo[] getParameters()
Retrieve the parameter meta data from a Sybase prepare.- Returns:
- The parameter descriptors as a
ParamInfo[].
-
getRowData
java.lang.Object[] getRowData()
Retrieve the current result set data items.- Returns:
- the row data as an
Objectarray
-
negotiateSSL
void negotiateSSL(java.lang.String instance, java.lang.String ssl) throws java.io.IOException, java.sql.SQLExceptionNegotiate SSL settings with SQL 2000+ server. Server returns the following values for SSL mode:- 1 = Certificate installed client requests force encryption.
- 2 = No certificate no encryption possible.
- 3 = Server requests force encryption.
0 = Certificate installed encrypt login packet only. - Parameters:
instance- The server instance name.ssl- The SSL URL property value.- Throws:
java.io.IOExceptionjava.sql.SQLException
-
login
void login(java.lang.String serverName, java.lang.String database, java.lang.String user, java.lang.String password, java.lang.String domain, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, java.lang.String macAddress, int packetSize) throws java.sql.SQLExceptionLogin to the SQL Server.- Parameters:
serverName- server host namedatabase- required databaseuser- user namepassword- user passworddomain- Windows NT domain (or null)charset- required server character setappName- application nameprogName- library namewsid- workstation IDlanguage- language to use for server messagesmacAddress- client network MAC addresspacketSize- required network packet size- Throws:
java.sql.SQLException- if an error occurs
-
getMoreResults
boolean getMoreResults() throws java.sql.SQLExceptionGet the next result set or update count from the TDS stream.- Returns:
trueif the next item is a result set.- Throws:
java.sql.SQLException- if an I/O or protocol error occurs; server errors are queued up and not thrown
-
isResultSet
boolean isResultSet()
Retrieve the status of the next result item.- Returns:
booleantrue if the next item is a result set.
-
isRowData
boolean isRowData()
Retrieve the status of the next result item.- Returns:
booleantrue if the next item is row data.
-
isUpdateCount
boolean isUpdateCount()
Retrieve the status of the next result item.- Returns:
booleantrue if the next item is an update count.
-
getUpdateCount
int getUpdateCount()
Retrieve the update count from the current TDS token.- Returns:
- The update count as an
int.
-
isEndOfResponse
boolean isEndOfResponse()
Retrieve the status of the response stream.- Returns:
booleantrue if the response has been entirely consumed
-
clearResponseQueue
void clearResponseQueue() throws java.sql.SQLExceptionEmpty the server response queue.- Throws:
java.sql.SQLException- if an error occurs
-
consumeOneResponse
void consumeOneResponse() throws java.sql.SQLExceptionConsume packets from the server response queue up to (and including) the first response terminator.- Throws:
java.sql.SQLException- if an I/O or protocol error occurs; server errors are queued up and not thrown
-
getNextRow
boolean getNextRow() throws java.sql.SQLExceptionRetrieve the next data row from the result set.- Returns:
falseif at the end of results,trueotherwise- Throws:
java.sql.SQLException- if an I/O or protocol error occurs; server errors are queued up and not thrown
-
isDataInResultSet
boolean isDataInResultSet() throws java.sql.SQLExceptionRetrieve the status of result set.
This does a quick read ahead and is needed to support method
JtdsResultSet.isLast().- Returns:
trueif there is more data in the result set- Throws:
java.sql.SQLException
-
getReturnStatus
java.lang.Integer getReturnStatus()
Retrieve the return status for the current stored procedure.- Returns:
- The return status as an
Integer.
-
closeConnection
void closeConnection()
Inform the server that this connection is closing.Used by Sybase a no-op for Microsoft.
-
close
void close() throws java.sql.SQLExceptionClose theTdsCoreconnection object and associated streams.- Throws:
java.sql.SQLException
-
cancel
void cancel(boolean timeout)
Send (only) one cancel packet to the server.- Parameters:
timeout- true if this is a query timeout cancel
-
submitSQL
void submitSQL(java.lang.String sql) throws java.sql.SQLExceptionSubmit a simple SQL statement to the server and process all output.- Parameters:
sql- the statement to execute- Throws:
java.sql.SQLException- if an error is returned by the server
-
startBatch
void startBatch()
Notifies theTdsCorethat a batch is starting. This is so that it knows to usesp_executesqlfor parameterized queries (because there's no way to prepare a statement in the middle of a batch).Sets the
inBatchflag.
-
executeSQL
void executeSQL(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, int timeOut, int maxRows, int maxFieldSize, boolean sendNow) throws java.sql.SQLExceptionSend an SQL statement with optional parameters to the server.- Parameters:
sql- SQL statement to executeprocName- stored procedure to execute ornullparameters- parameters for call or nullnoMetaData- suppress meta data for cursor callstimeOut- optional query timeout or 0maxRows- the maximum number of data rows to return (-1 to leave unaltered)maxFieldSize- the maximum number of bytes in a column to return (-1 to leave unaltered)sendNow- whether to send the request now or not- Throws:
java.sql.SQLException- if an error occurs
-
microsoftPrepare
java.lang.String microsoftPrepare(java.lang.String sql, ParamInfo[] params, boolean needCursor, int resultSetType, int resultSetConcurrency) throws java.sql.SQLExceptionPrepares the SQL for use with Microsoft server.- Parameters:
sql- the SQL statement to prepare.params- the actual parameter listneedCursor- true if a cursorprepare is requiredresultSetType- value of the resultSetType parameter when the Statement was createdresultSetConcurrency- value of the resultSetConcurrency parameter whenthe Statement was created- Returns:
- name of the procedure or prepared statement handle.
- Throws:
java.sql.SQLException
-
sybasePrepare
java.lang.String sybasePrepare(java.lang.String sql, ParamInfo[] params) throws java.sql.SQLExceptionCreates a light weight stored procedure on a Sybase server.- Parameters:
sql- SQL statement to prepareparams- the actual parameter list- Returns:
- name of the procedure
- Throws:
java.sql.SQLException- if an error occurs
-
sybaseUnPrepare
void sybaseUnPrepare(java.lang.String procName) throws java.sql.SQLExceptionDrops a Sybase temporary stored procedure.- Parameters:
procName- the temporary procedure name- Throws:
java.sql.SQLException- if an error occurs
-
enlistConnection
byte[] enlistConnection(int type, byte[] oleTranID) throws java.sql.SQLExceptionEnlist the current connection in a distributed transaction or request the location of the MSDTC instance controlling the server we are connected to.- Parameters:
type- set to 0 to request TM address or 1 to enlist connectionoleTranID- the 40 OLE transaction ID- Returns:
- a
byte[]array containing the TM address data - Throws:
java.sql.SQLException
-
getBatchCounts
java.sql.SQLException getBatchCounts(java.util.ArrayList counts, java.sql.SQLException sqlEx) throws java.sql.SQLExceptionObtain the counts from a batch of SQL updates. If an error occurs Sybase will continue processing a batch consisting of TDS_LANGUAGE records whilst SQL Server will usually stop after the first error except when the error is caused by a duplicate key. Sybase will also stop after the first error when executing RPC calls. Care is taken to ensure thatSQLExceptions are chained because there could be several errors reported in a batch.- Parameters:
counts- theArrayListcontaining the update countssqlEx- any previousSQLException(s) encountered- Returns:
- updated
SQLExceptionornullif no error has yet occurred - Throws:
java.sql.SQLException- if the connection is closed
-
getComputedColumns
ColInfo[] getComputedColumns()
Retrieve the current computed result set column descriptors, if any.
- Returns:
- column descriptors for the computed columns as
ColInfoarray; ornullif there are no computed columns
-
getComputedRowData
java.lang.Object[] getComputedRowData()
Retrieve and clear the current computed result set data items, if any.
- Returns:
- the row data for the computed columns as an
Objectarray; ornullif there are no computed columns, computed data has not yet been received, or the data has already been cleared by a previous call to this method
-
putLoginString
private void putLoginString(java.lang.String txt, int len) throws java.io.IOExceptionWrite a TDS login packet string. Text followed by padding followed by a byte sized length.- Throws:
java.io.IOException
-
sendPreLoginPacket
private void sendPreLoginPacket(java.lang.String instance, boolean forceEncryption) throws java.io.IOExceptionSend the SQL Server 2000 pre login packet.Packet contains; netlib version, ssl mode, instance and process ID.
- Parameters:
instance-forceEncryption-- Throws:
java.io.IOException
-
readPreLoginPacket
private int readPreLoginPacket() throws java.io.IOExceptionProcess the pre login acknowledgment from the server.Packet contains; server version no, SSL mode, instance name and process id.
Server returns the following values for SSL mode:
- 1 = Certificate installed client requests force encryption.
- 2 = No certificate no encryption possible.
- 3 = Server requests force encryption.
0 = Certificate installed encrypt login packet only. - Returns:
- The server side SSL mode.
- Throws:
java.io.IOException
-
send42LoginPkt
private void send42LoginPkt(java.lang.String serverName, java.lang.String user, java.lang.String password, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, int packetSize) throws java.io.IOExceptionTDS 4.2 Login Packet.- Parameters:
serverName- server host nameuser- user namepassword- user passwordcharset- required server character setappName- application nameprogName- program namewsid- workstation IDlanguage- server language for messagespacketSize- required network packet size- Throws:
java.io.IOException- if an I/O error occurs
-
send50LoginPkt
private void send50LoginPkt(java.lang.String serverName, java.lang.String user, java.lang.String password, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, int packetSize) throws java.io.IOExceptionTDS 5.0 Login Packet.- Parameters:
serverName- server host nameuser- user namepassword- user passwordcharset- required server character setappName- application nameprogName- library namewsid- workstation IDlanguage- server language for messagespacketSize- required network packet size- Throws:
java.io.IOException- if an I/O error occurs
-
sendMSLoginPkt
private void sendMSLoginPkt(java.lang.String serverName, java.lang.String database, java.lang.String user, java.lang.String password, java.lang.String domain, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, java.lang.String macAddress, int netPacketSize) throws java.io.IOException, java.sql.SQLExceptionSend a TDS 7 login packet.This method incorporates the Windows single sign on code contributed by Magendran Sathaiah. To invoke single sign on just leave the user name blank or null. NB. This can only work if the driver is being executed on a Windows PC and
ntlmauth.dllis on the path.- Parameters:
serverName- server host namedatabase- required databaseuser- user namepassword- user passworddomain- Windows NT domain (ornull)appName- application nameprogName- program namewsid- workstation IDlanguage- server language for messagesmacAddress- client network MAC addressnetPacketSize- TDS packet size to use- Throws:
java.io.IOException- if an I/O error occursjava.sql.SQLException
-
tdsGssToken
private void tdsGssToken() throws java.io.IOExceptionReceive a GSS token.- Throws:
java.io.IOException
-
sendGssToken
private void sendGssToken() throws java.io.IOExceptionSend the next GSS authentication token.- Throws:
java.io.IOException
-
sendNtlmChallengeResponse
private void sendNtlmChallengeResponse(java.lang.String user, java.lang.String password, java.lang.String domain) throws java.io.IOExceptionSend the response to the NTLM authentication challenge.- Parameters:
nonce- The secret to hash with password.user- The user name.password- The user password.domain- The Windows NT Dommain.- Throws:
java.io.IOException
-
nextToken
private void nextToken() throws java.sql.SQLExceptionRead the next TDS token from the response stream.- Throws:
java.sql.SQLException- if an I/O or protocol error occurs
-
tdsInvalidToken
private void tdsInvalidToken() throws java.io.IOException, ProtocolExceptionReport unsupported TDS token in input stream.- Throws:
java.io.IOExceptionProtocolException
-
tds5ParamFmt2Token
private void tds5ParamFmt2Token() throws java.io.IOException, ProtocolExceptionProcess TDS 5 Sybase 12+ Dynamic results parameter descriptor.When returning output parameters this token will be followed by a TDS5_PARAMS_TOKEN with the actual data.
- Throws:
java.io.IOExceptionProtocolException
-
tds5WideResultToken
private void tds5WideResultToken() throws java.io.IOException, ProtocolExceptionProcess Sybase 12+ wide result token which provides enhanced column meta data.- Throws:
java.io.IOExceptionProtocolException
-
tdsReturnStatusToken
private void tdsReturnStatusToken() throws java.io.IOException, java.sql.SQLExceptionProcess stored procedure return status token.- Throws:
java.io.IOExceptionjava.sql.SQLException
-
tdsProcIdToken
private void tdsProcIdToken() throws java.io.IOExceptionProcess procedure ID token.Used by DBLIB to obtain the object id of a stored procedure.
- Throws:
java.io.IOException
-
tdsOffsetsToken
private void tdsOffsetsToken() throws java.io.IOExceptionProcess offsets token.Used by DBLIB to return the offset of various keywords in a statement. This saves the client from having to parse a SQL statement. Enabled with
"set offsets from on".- Throws:
java.io.IOException
-
tds7ResultToken
private void tds7ResultToken() throws java.io.IOException, ProtocolException, java.sql.SQLExceptionProcess a TDS 7.0 result set token.- Throws:
java.io.IOExceptionProtocolExceptionjava.sql.SQLException
-
tds4ColNamesToken
private void tds4ColNamesToken() throws java.io.IOExceptionProcess a TDS 4.2 column names token.Note: Will be followed by a COL_FMT token.
- Throws:
java.io.IOException
-
tds4ColFormatToken
private void tds4ColFormatToken() throws java.io.IOException, ProtocolExceptionProcess a TDS 4.2 column format token.- Throws:
java.io.IOExceptionProtocolException
-
tdsTableNameToken
private void tdsTableNameToken() throws java.io.IOException, ProtocolExceptionProcess a table name token.Sent by select for browse or cursor functions.
- Throws:
java.io.IOExceptionProtocolException
-
tdsColumnInfoToken
private void tdsColumnInfoToken() throws java.io.IOException, ProtocolExceptionProcess a column infomation token.Sent by select for browse or cursor functions.
- Throws:
java.io.IOExceptionProtocolException
-
tdsOrderByToken
private void tdsOrderByToken() throws java.io.IOExceptionProcess an order by token.Sent to describe columns in an order by clause.
- Throws:
java.io.IOException
-
tdsErrorToken
private void tdsErrorToken() throws java.io.IOExceptionProcess a TD4/TDS7 error or informational message.- Throws:
java.io.IOException
-
tdsOutputParamToken
private void tdsOutputParamToken() throws java.io.IOException, ProtocolException, java.sql.SQLExceptionProcess output parameters. Normally the output parameters are preceded by a TDS type 79 (procedure return value) record; however there are at least two situations with TDS version 8 where this is not the case:- For the return value of a SQL 2000+ user defined function.
- For a remote procedure call (server.database.user.procname) where the 79 record is only sent if a result set is also returned by the remote procedure. In this case the 79 record just acts as marker for the start of the output parameters. The actual return value is in an output param token.
- Throws:
java.io.IOExceptionProtocolExceptionjava.sql.SQLException
-
tdsLoginAckToken
private void tdsLoginAckToken() throws java.io.IOExceptionProcess a login acknowledgement packet.- Throws:
java.io.IOException
-
tdsControlToken
private void tdsControlToken() throws java.io.IOExceptionProcess a control token (function unknown).- Throws:
java.io.IOException
-
tdsRowToken
private void tdsRowToken() throws java.io.IOException, ProtocolExceptionProcess a row data token.- Throws:
java.io.IOExceptionProtocolException
-
tds5ParamsToken
private void tds5ParamsToken() throws java.io.IOException, ProtocolException, java.sql.SQLExceptionProcess TDS 5.0 Params Token. Stored procedure output parameters or data returned in parameter format after a TDS Dynamic packet or as extended error information.The type of the preceding token is inspected to determine if this packet contains output parameter result data. A TDS5_PARAMFMT2_TOKEN is sent before this one in Sybase 12 to introduce output parameter results. A TDS5_PARAMFMT_TOKEN is sent before this one to introduce extended error information.
- Throws:
java.io.IOExceptionProtocolExceptionjava.sql.SQLException
-
tdsCapabilityToken
private void tdsCapabilityToken() throws java.io.IOException, ProtocolExceptionProcesses a TDS 5.0 capability token.Sent after login to describe the server's capabilities.
- Throws:
java.io.IOException- if an I/O error occursProtocolException
-
tdsEnvChangeToken
private void tdsEnvChangeToken() throws java.io.IOException, java.sql.SQLExceptionProcess an environment change packet.- Throws:
java.io.IOExceptionjava.sql.SQLException
-
tds5ErrorToken
private void tds5ErrorToken() throws java.io.IOExceptionProcess a TDS 5 error or informational message.- Throws:
java.io.IOException
-
tds5DynamicToken
private void tds5DynamicToken() throws java.io.IOExceptionProcess TDS5 dynamic SQL aknowledgements.- Throws:
java.io.IOException
-
tds5ParamFmtToken
private void tds5ParamFmtToken() throws java.io.IOException, ProtocolExceptionProcess TDS 5 Dynamic results parameter descriptors.With Sybase 12+ this has been superseded by the TDS5_PARAMFMT2_TOKEN except when used to return extended error information.
- Throws:
java.io.IOExceptionProtocolException
-
tdsNtlmAuthToken
private void tdsNtlmAuthToken() throws java.io.IOException, ProtocolExceptionProcess a NTLM Authentication challenge.- Throws:
java.io.IOExceptionProtocolException
-
getIntFromBuffer
private static int getIntFromBuffer(byte[] buf, int offset)
-
getShortFromBuffer
private static int getShortFromBuffer(byte[] buf, int offset)
-
tds5ResultToken
private void tds5ResultToken() throws java.io.IOException, ProtocolExceptionProcess a TDS 5.0 result set packet.- Throws:
java.io.IOExceptionProtocolException
-
tdsDoneToken
private void tdsDoneToken() throws java.io.IOExceptionProcess a DONE, DONEINPROC or DONEPROC token.- Throws:
java.io.IOException
-
executeSQL42
private void executeSQL42(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, boolean sendNow) throws java.io.IOException, java.sql.SQLExceptionExecute SQL using TDS 4.2 protocol.- Parameters:
sql- The SQL statement to execute.procName- Stored procedure to execute or null.parameters- Parameters for call or null.noMetaData- Suppress meta data for cursor calls.- Throws:
java.sql.SQLExceptionjava.io.IOException
-
executeSQL50
private void executeSQL50(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters) throws java.io.IOException, java.sql.SQLExceptionExecute SQL using TDS 5.0 protocol.- Parameters:
sql- The SQL statement to execute.procName- Stored procedure to execute or null.parameters- Parameters for call or null.- Throws:
java.sql.SQLExceptionjava.io.IOException
-
isPreparedProcedureName
public static boolean isPreparedProcedureName(java.lang.String procName)
Returnstrueif the specifiedprocNameis a sp_prepare or sp_prepexec handle; returnsfalseotherwise.- Parameters:
procName- Stored procedure to execute ornull.- Returns:
trueif the specifiedprocNameis a sp_prepare or sp_prepexec handle;falseotherwise.
-
executeSQL70
private void executeSQL70(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, boolean sendNow) throws java.io.IOException, java.sql.SQLExceptionExecute SQL using TDS 7.0 protocol.- Parameters:
sql- The SQL statement to execute.procName- Stored procedure to execute ornull.parameters- Parameters for call ornull.noMetaData- Suppress meta data for cursor calls.- Throws:
java.sql.SQLExceptionjava.io.IOException
-
setRowCountAndTextSize
private void setRowCountAndTextSize(int rowCount, int textSize) throws java.sql.SQLExceptionSets the server row count (to limit the number of rows in a result set) and text size (to limit the size of returned TEXT/NTEXT fields).- Parameters:
rowCount- the number of rows to return or 0 for no limit or -1 to leave as istextSize- the maximum number of bytes in a TEXT column to return or -1 to leave as is- Throws:
java.sql.SQLException- if an error is returned by the server
-
wait
private void wait(int timeOut) throws java.io.IOException, java.sql.SQLExceptionWaits for the first byte of the server response.- Parameters:
timeOut- the timeout period in seconds or 0- Throws:
java.io.IOExceptionjava.sql.SQLException
-
cleanUp
public void cleanUp()
Releases parameter and result set data and metadata to free up memory. This is useful before theTdsCoreis cached for reuse.
-
getMessages
public SQLDiagnostic getMessages()
Returns the diagnostic chain for this instance.
-
getMACAddress
private static byte[] getMACAddress(java.lang.String macString)
Converts a user supplied MAC address into a byte array.- Parameters:
macString- the MAC address as a hex string- Returns:
- the MAC address as a
byte[]
-
getHostName
private static java.lang.String getHostName()
Tries to figure out what client name we should identify ourselves as. Gets the hostname of this machine,- Returns:
- name to use as the client
-
tds7CryptPass
private static java.lang.String tds7CryptPass(java.lang.String pw)
A very poor man's "encryption".- Parameters:
pw- password to encrypt- Returns:
- encrypted password
-
tdsComputedResultToken
private void tdsComputedResultToken() throws java.io.IOException, ProtocolExceptionProcess meta data for the computed result set complementing the current result set.
- Throws:
java.io.IOExceptionProtocolException
-
tdsComputedRowToken
private void tdsComputedRowToken() throws java.io.IOException, ProtocolException, java.sql.SQLExceptionProcess computed row data.
- Throws:
java.io.IOExceptionProtocolExceptionjava.sql.SQLException
-
isWindowsOS
static boolean isWindowsOS()
Checks whether the
os.namesystem property contains "windows".
-
createGssToken
private byte[] createGssToken() throws org.ietf.jgss.GSSException, java.net.UnknownHostExceptionInitializes the GSS context and creates the initial token.- Throws:
org.ietf.jgss.GSSExceptionjava.net.UnknownHostException
-
-