Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## net.sourceforge.jtds.jdbc
Class TdsData

    java.lang.Object
      |
      +--net.sourceforge.jtds.jdbc.TdsData

public class TdsData
extends java.lang.Object

Implement TDS data types and related I/O logic.

Implementation notes:

- This class encapsulates all the knowledge about reading and writing TDS data descriptors and related application data.
- There are four key methods supplied here:
  1. readType() - Reads the column and parameter meta data.
  2. readData() - Reads actual data values.
  3. writeParam() - Write parameter descriptors and data.
  4. getNativeType() - knows how to map JDBC data types to the equivalent TDS type.

  Version:
    $Id: TdsData.java,v 1.54 2005/10/27 13:22:33 alin_sinpalean Exp $
  Author:
    Mike Hutchinson, Alin Sinpalean, freeTDS project

  Inner Class Summary
  `private static class` | `TdsData.TypeInfo` This class implements a descriptor for TDS data types;

  Field Summary
  `(package private) static int` | `DEFAULT_PRECISION_28` Default precision for SQL Server 6.5 and 7.
  `(package private) static int` | `DEFAULT_PRECISION_38` Default precision for Sybase and SQL Server 2000 and newer.
  `(package private) static int` | `DEFAULT_SCALE` Default Decimal Scale.
  `private static int` | `MS_LONGVAR_MAX`
  `private static int` | `SYB_CHUNK_SIZE`
  `private static int` | `SYB_LONGVAR_MAX`
  `private static int` | `SYBBINARY`
  `private static int` | `SYBBIT`
  `private static int` | `SYBBITN`
  `private static int` | `SYBCHAR`
  `private static int` | `SYBDATE`
  `private static int` | `SYBDATEN`
  `private static int` | `SYBDATETIME`
  `private static int` | `SYBDATETIME4`
  `private static int` | `SYBDATETIMN`
  `private static int` | `SYBDECIMAL`
  `private static int` | `SYBFLT8`
  `private static int` | `SYBFLTN`
  `private static int` | `SYBIMAGE`
  `private static int` | `SYBINT1`
  `private static int` | `SYBINT2`
  `private static int` | `SYBINT4`
  `private static int` | `SYBINT8`
  `private static int` | `SYBINTN`
  `private static int` | `SYBLONGBINARY`
  `(package private) static int` | `SYBLONGDATA`
  `private static int` | `SYBMONEY`
  `private static int` | `SYBMONEY4`
  `private static int` | `SYBMONEYN`
  `private static int` | `SYBNTEXT`
  `private static int` | `SYBNUMERIC`
  `private static int` | `SYBNVARCHAR`
  `private static int` | `SYBREAL`
  `private static int` | `SYBSINT1`
  `private static int` | `SYBSINT8`
  `private static int` | `SYBTEXT`
  `private static int` | `SYBTIME`
  `private static int` | `SYBTIMEN`
  `private static int` | `SYBUINT2`
  `private static int` | `SYBUINT4`
  `private static int` | `SYBUINT8`
  `private static int` | `SYBUINTN`
  `private static int` | `SYBUNIQUE`
  `private static int` | `SYBUNITEXT`
  `private static int` | `SYBVARBINARY`
  `private static int` | `SYBVARCHAR`
  `private static int` | `SYBVARIANT`
  `private static int` | `SYBVOID`
  `private static TdsData.TypeInfo[]` | `types` Array of TDS data type descriptors.
  `private static int` | `UDT_BINARY`
  `private static int` | `UDT_CHAR`
  `private static int` | `UDT_NCHAR`
  `private static int` | `UDT_NEWSYSNAME`
  `private static int` | `UDT_NVARCHAR`
  `private static int` | `UDT_SYSNAME`
  `private static int` | `UDT_TIMESTAMP`
  `private static int` | `UDT_UNICHAR`
  `private static int` | `UDT_UNITEXT`
  `private static int` | `UDT_UNIVARCHAR`
  `private static int` | `UDT_VARBINARY`
  `private static int` | `UDT_VARCHAR`
  `private static int` | `VAR_MAX`
  `private static int` | `XSYBBINARY`
  `private static int` | `XSYBCHAR`
  `private static int` | `XSYBNCHAR`
  `private static int` | `XSYBNVARCHAR`
  `private static int` | `XSYBVARBINARY`
  `private static int` | `XSYBVARCHAR`

  Constructor Summary
  `private` | `TdsData()` Private constructor to prevent users creating an actual instance of this class.

  Method Summary
  `(package private) static void` | `()` Static block to initialise TDS data type descriptors.
  `private static boolean` | `canEncode(java.lang.String value, java.lang.String charset)` Establish if a String can be converted to a byte based character set.
  `(package private) static void` | `fillInType(ColInfo ci)` Fill in the TDS native type code and all other fields for a `ColInfo` instance with the JDBC type set.
  `(package private) static int` | `getCollation(ResponseStream in, ColInfo ci)` TDS 8 supplies collation information for character data types.
  `private static java.lang.Object` | `getDatetimeValue(ResponseStream in, int type)` Get a DATETIME value from the server response stream.
  `private static java.lang.Object` | `getMoneyValue(ResponseStream in, int type)` Read a MONEY value from the server response stream.
  `static java.lang.String` | `getMSTypeName(java.lang.String typeName, int tdsType)` For SQL 2005 This routine will modify the meta data to allow the caller to distinguish between varchar(max) and text or varbinary(max) and image or nvarchar(max) and ntext.
  `(package private) static void` | `getNativeType(ConnectionJDBC2 connection, ParamInfo pi)` Retrieve the TDS native type code for the parameter.
  `(package private) static int` | `getTds5ParamSize(java.lang.String charset, boolean isWideChar, ParamInfo pi, boolean useParamNames)` Calculate the size of the parameter descriptor array for TDS 5 packets.
  `static int` | `getTdsVersion(int rawTdsVersion)` Extract the TDS protocol version from the value returned by the server in the LOGINACK packet.
  `private static java.lang.Object` | `getVariant(ConnectionJDBC2 connection, ResponseStream in)` Read a MSQL 2000 sql_variant data value from the input stream.
  `(package private) static boolean` | `isCollation(ColInfo ci)` Retrieve the collation status of the column.
  `(package private) static boolean` | `isCurrency(ColInfo ci)` Retrieve the currency status of the column.
  `(package private) static boolean` | `isSearchable(ColInfo ci)` Retrieve the searchable status of the column.
  `(package private) static boolean` | `isSigned(ColInfo ci)` Retrieve the signed status of the column.
  `(package private) static boolean` | `isUnicode(ColInfo ci)` Determines whether the column is Unicode encoded.
  `(package private) static void` | `putCollation(RequestStream out, ParamInfo pi)` TDS 8 requires collation information for char data descriptors.
  `private static void` | `putDateTimeValue(RequestStream out, DateTime value)` Output a java.sql.Date/Time/Timestamp value to the server as a Sybase datetime value.
  `(package private) static java.lang.Object` | `readData(ConnectionJDBC2 connection, ResponseStream in, ColInfo ci)` Read the TDS data item from the Response Stream.
  `(package private) static int` | `readType(ResponseStream in, ColInfo ci)` Read the TDS datastream and populate the ColInfo parameter with data type and related information.
  `(package private) static void` | `setColumnCharset(ColInfo ci, ConnectionJDBC2 connection)` Set the `charsetInfo` field of `ci` according to the value of its `collation` field.
  `(package private) static void` | `writeParam(RequestStream out, CharsetInfo charsetInfo, byte[] collation, ParamInfo pi)` Write a parameter to the server request stream.
  `(package private) static void` | `writeTds5Param(RequestStream out, CharsetInfo charsetInfo, ParamInfo pi)` Write the actual TDS 5 parameter data.
  `(package private) static void` | `writeTds5ParamFmt(RequestStream out, java.lang.String charset, boolean isWideChar, ParamInfo pi, boolean useParamNames)` Write a TDS 5 parameter format descriptor.

  Methods inherited from class java.lang.Object
  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait`

  Field Detail

  ### SYBCHAR

      private static final int SYBCHAR

  ### SYBVARCHAR

      private static final int SYBVARCHAR

  ### SYBINTN

      private static final int SYBINTN

  ### SYBINT1

      private static final int SYBINT1

  ### SYBDATE

      private static final int SYBDATE

  ### SYBTIME

      private static final int SYBTIME

  ### SYBINT2

      private static final int SYBINT2

  ### SYBINT4

      private static final int SYBINT4

  ### SYBINT8

      private static final int SYBINT8

  ### SYBFLT8

      private static final int SYBFLT8

  ### SYBDATETIME

      private static final int SYBDATETIME

  ### SYBBIT

      private static final int SYBBIT

  ### SYBTEXT

      private static final int SYBTEXT

  ### SYBNTEXT

      private static final int SYBNTEXT

  ### SYBIMAGE

      private static final int SYBIMAGE

  ### SYBMONEY4

      private static final int SYBMONEY4

  ### SYBMONEY

      private static final int SYBMONEY

  ### SYBDATETIME4

      private static final int SYBDATETIME4

  ### SYBREAL

      private static final int SYBREAL

  ### SYBBINARY

      private static final int SYBBINARY

  ### SYBVOID

      private static final int SYBVOID

  ### SYBVARBINARY

      private static final int SYBVARBINARY

  ### SYBNVARCHAR

      private static final int SYBNVARCHAR

  ### SYBBITN

      private static final int SYBBITN

  ### SYBNUMERIC

      private static final int SYBNUMERIC

  ### SYBDECIMAL

      private static final int SYBDECIMAL

  ### SYBFLTN

      private static final int SYBFLTN

  ### SYBMONEYN

      private static final int SYBMONEYN

  ### SYBDATETIMN

      private static final int SYBDATETIMN

  ### SYBDATEN

      private static final int SYBDATEN

  ### SYBTIMEN

      private static final int SYBTIMEN

  ### XSYBCHAR

      private static final int XSYBCHAR

  ### XSYBVARCHAR

      private static final int XSYBVARCHAR

  ### XSYBNVARCHAR

      private static final int XSYBNVARCHAR

  ### XSYBNCHAR

      private static final int XSYBNCHAR

  ### XSYBVARBINARY

      private static final int XSYBVARBINARY

  ### XSYBBINARY

      private static final int XSYBBINARY

  ### SYBUNITEXT

      private static final int SYBUNITEXT

  ### SYBLONGBINARY

      private static final int SYBLONGBINARY

  ### SYBSINT1

      private static final int SYBSINT1

  ### SYBUINT2

      private static final int SYBUINT2

  ### SYBUINT4

      private static final int SYBUINT4

  ### SYBUINT8

      private static final int SYBUINT8

  ### SYBUINTN

      private static final int SYBUINTN

  ### SYBUNIQUE

      private static final int SYBUNIQUE

  ### SYBVARIANT

      private static final int SYBVARIANT

  ### SYBSINT8

      private static final int SYBSINT8

  ### SYBLONGDATA

      static final int SYBLONGDATA

  ### UDT_CHAR

      private static final int UDT_CHAR

  ### UDT_VARCHAR

      private static final int UDT_VARCHAR

  ### UDT_BINARY

      private static final int UDT_BINARY

  ### UDT_VARBINARY

      private static final int UDT_VARBINARY

  ### UDT_NCHAR

      private static final int UDT_NCHAR

  ### UDT_NVARCHAR

      private static final int UDT_NVARCHAR

  ### UDT_UNICHAR

      private static final int UDT_UNICHAR

  ### UDT_UNIVARCHAR

      private static final int UDT_UNIVARCHAR

  ### UDT_UNITEXT

      private static final int UDT_UNITEXT

  ### UDT_TIMESTAMP

      private static final int UDT_TIMESTAMP

  ### UDT_SYSNAME

      private static final int UDT_SYSNAME

  ### UDT_NEWSYSNAME

      private static final int UDT_NEWSYSNAME

  ### VAR_MAX

      private static final int VAR_MAX

  ### SYB_LONGVAR_MAX

      private static final int SYB_LONGVAR_MAX

  ### MS_LONGVAR_MAX

      private static final int MS_LONGVAR_MAX

  ### SYB_CHUNK_SIZE

      private static final int SYB_CHUNK_SIZE

  ### types

      private static final TdsData.TypeInfo[] types

    Array of TDS data type descriptors.

  ### DEFAULT_SCALE

      static final int DEFAULT_SCALE

    Default Decimal Scale.

  ### DEFAULT_PRECISION_28

      static final int DEFAULT_PRECISION_28

    Default precision for SQL Server 6.5 and 7.

  ### DEFAULT_PRECISION_38

      static final int DEFAULT_PRECISION_38

    Default precision for Sybase and SQL Server 2000 and newer.

  Constructor Detail

  ### TdsData

      private TdsData()

    Private constructor to prevent users creating an actual instance of this class.

  Method Detail

  ###

      static void ()

    Static block to initialise TDS data type descriptors.

  ### getCollation

      static int getCollation(ResponseStream in,
                              ColInfo ci)
                       throws java.io.IOException

    TDS 8 supplies collation information for character data types.
    Parameters:
      `in` - the server response stream
      `ci` - the column descriptor
    Returns:
      the number of bytes read from the stream as an `int`

  ### setColumnCharset

      static void setColumnCharset(ColInfo ci,
                                   ConnectionJDBC2 connection)
                            throws java.sql.SQLException

    Set the `charsetInfo` field of `ci` according to the value of its `collation` field.

    The `Connection` is used to find out whether a specific charset was requested. In this case, the column charset will be ignored.

    Parameters:
      `ci` - the `ColInfo` instance to update
      `connection` - a `Connection` instance to check whether it has a fixed charset or not
    Throws:
      `java.sql.SQLException` - if a `CharsetInfo` is not found for this particular column collation

  ### readType

      static int readType(ResponseStream in,
                          ColInfo ci)
                   throws java.io.IOException,
                          ProtocolException

    Read the TDS datastream and populate the ColInfo parameter with data type and related information.

    The type infomation conforms to one of the following formats:

    1. [int1 type] - eg SYBINT4.
    2. [int1 type] [int1 buffersize] - eg VARCHAR < 256
    3. [int1 type] [int2 buffersize] - eg VARCHAR > 255.
    4. [int1 type] [int4 buffersize] [int1 tabnamelen] [int1*n tabname] - eg text.
    5. [int1 type] [int4 buffersize] - eg sql_variant.
    6. [int1 type] [int1 buffersize] [int1 precision] [int1 scale] - eg decimal.
    For TDS 8 large character types include a 5 byte collation field after the buffer size.
    Parameters:
      `in` - The server response stream.
      `ci` - The ColInfo column descriptor object.
    Returns:
      The number of bytes read from the input stream.
    Throws:
      `java.io.IOException` -
      `ProtocolException` -

  ### readData

      static java.lang.Object readData(ConnectionJDBC2 connection,
                                       ResponseStream in,
                                       ColInfo ci)
                                throws java.io.IOException,
                                       ProtocolException

    Read the TDS data item from the Response Stream.

    The data size is either implicit in the type for example fixed size integers, or a count field precedes the actual data. The size of the count field varies with the data type.

    Parameters:
      `connection` - an object reference to the caller of this method; must be a `Connection`, `Statement` or `ResultSet`
      `in` - The server ResponseStream.
      `ci` - The ColInfo column descriptor object.
    Returns:
      The data item Object or null.
    Throws:
      `java.io.IOException` -
      `ProtocolException` -

  ### isSigned

      static boolean isSigned(ColInfo ci)

    Retrieve the signed status of the column.
    Parameters:
      `ci` - the column meta data
    Returns:
      `true` if the column is a signed numeric.

  ### isCollation

      static boolean isCollation(ColInfo ci)

    Retrieve the collation status of the column.

    TDS 8.0 character columns include collation information.
    Parameters:
      `ci` - the column meta data
    Returns:
      `true` if the column requires collation data.

  ### isCurrency

      static boolean isCurrency(ColInfo ci)

    Retrieve the currency status of the column.
    Parameters:
      `ci` - The column meta data.
    Returns:
      `boolean` true if the column is a currency type.

  ### isSearchable

      static boolean isSearchable(ColInfo ci)

    Retrieve the searchable status of the column.
    Parameters:
      `ci` - the column meta data
    Returns:
      `true` if the column is not a text or image type.

  ### isUnicode

      static boolean isUnicode(ColInfo ci)

    Determines whether the column is Unicode encoded.
    Parameters:
      `ci` - the column meta data
    Returns:
      `true` if the column is Unicode encoded

  ### fillInType

      static void fillInType(ColInfo ci)
                      throws java.sql.SQLException

    Fill in the TDS native type code and all other fields for a `ColInfo` instance with the JDBC type set.
    Parameters:
      `ci` - the `ColInfo` instance

  ### getNativeType

      static void getNativeType(ConnectionJDBC2 connection,
                                ParamInfo pi)
                         throws java.sql.SQLException

    Retrieve the TDS native type code for the parameter.
    Parameters:
      `connection` - the connectionJDBC object
      `pi` - the parameter descriptor

  ### getTds5ParamSize

      static int getTds5ParamSize(java.lang.String charset,
                                  boolean isWideChar,
                                  ParamInfo pi,
                                  boolean useParamNames)

    Calculate the size of the parameter descriptor array for TDS 5 packets.
    Parameters:
      `charset` - The encoding character set.
      `isWideChar` - True if multi byte encoding.
      `pi` - The parameter to describe.
      `useParamNames` - True if named parameters should be used.
    Returns:
      The size of the parameter descriptor as an `int`.

  ### writeTds5ParamFmt

      static void writeTds5ParamFmt(RequestStream out,
                                    java.lang.String charset,
                                    boolean isWideChar,
                                    ParamInfo pi,
                                    boolean useParamNames)
                             throws java.io.IOException

    Write a TDS 5 parameter format descriptor.
    Parameters:
      `out` - The server RequestStream.
      `charset` - The encoding character set.
      `isWideChar` - True if multi byte encoding.
      `pi` - The parameter to describe.
      `useParamNames` - True if named parameters should be used.
    Throws:
      `java.io.IOException` -

  ### writeTds5Param

      static void writeTds5Param(RequestStream out,
                                 CharsetInfo charsetInfo,
                                 ParamInfo pi)
                          throws java.io.IOException,
                                 java.sql.SQLException

    Write the actual TDS 5 parameter data.
    Parameters:
      `out` - the server RequestStream
      `charsetInfo` - the encoding character set
      `pi` - the parameter to output
    Throws:
      `java.io.IOException` -
      `java.sql.SQLException` -

  ### putCollation

      static void putCollation(RequestStream out,
                               ParamInfo pi)
                        throws java.io.IOException

    TDS 8 requires collation information for char data descriptors.
    Parameters:
      `out` - The Server request stream.
      `pi` - The parameter descriptor.
    Throws:
      `java.io.IOException` -

  ### writeParam

      static void writeParam(RequestStream out,
                             CharsetInfo charsetInfo,
                             byte[] collation,
                             ParamInfo pi)
                      throws java.io.IOException

    Write a parameter to the server request stream.
    Parameters:
      `out` - the server request stream
      `charsetInfo` - the default character set
      `collation` - the default SQL Server 2000 collation
      `pi` - the parameter descriptor

  ### getDatetimeValue

      private static java.lang.Object getDatetimeValue(ResponseStream in,
                                                       int type)
                                                throws java.io.IOException,
                                                       ProtocolException

    Get a DATETIME value from the server response stream.
    Parameters:
      `in` - The server response stream.
      `type` - The TDS data type.
    Returns:
      The java.sql.Timestamp value or null.
    Throws:
      `java.io.IOException` -

  ### putDateTimeValue

      private static void putDateTimeValue(RequestStream out,
                                           DateTime value)
                                    throws java.io.IOException

    Output a java.sql.Date/Time/Timestamp value to the server as a Sybase datetime value.
    Parameters:
      `out` - the server request stream
      `value` - the date value to write

  ### getMoneyValue

      private static java.lang.Object getMoneyValue(ResponseStream in,
                                                    int type)
                                             throws java.io.IOException,
                                                    ProtocolException

    Read a MONEY value from the server response stream.
    Parameters:
      `in` - The server response stream.
      `type` - The TDS data type.
    Returns:
      The java.math.BigDecimal value or null.
    Throws:
      `java.io.IOException` -
      `ProtocolException` -

  ### getVariant

      private static java.lang.Object getVariant(ConnectionJDBC2 connection,
                                                 ResponseStream in)
                                          throws java.io.IOException,
                                                 ProtocolException

    Read a MSQL 2000 sql_variant data value from the input stream.

    SQL_VARIANT has the following structure:

    1. INT4 total size of data
    2. INT1 TDS data type (text/image/ntext/sql_variant not allowed)
    3. INT1 Length of extra type descriptor information
    4. Optional additional type info required by some types
    5. byte[0...n] the actual data
    Parameters:
      `connection` - used to obtain collation/charset information
      `in` - the server response stream
    Returns:
      the SQL_VARIANT data

  ### getMSTypeName

      public static java.lang.String getMSTypeName(java.lang.String typeName,
                                                   int tdsType)

    For SQL 2005 This routine will modify the meta data to allow the caller to distinguish between varchar(max) and text or varbinary(max) and image or nvarchar(max) and ntext.
    Parameters:
      `typeName` - the SQL type returned by sp_columns
      `tdsType` - the TDS type returned by sp_columns
    Returns:
      the (possibly) modified SQL type name as a `String`

  ### getTdsVersion

      public static int getTdsVersion(int rawTdsVersion)

    Extract the TDS protocol version from the value returned by the server in the LOGINACK packet.
    Parameters:
      `rawTdsVersion` - the TDS protocol version as returned by the server
    Returns:
      the jTDS internal value for the protocol version (i.e one of the `Driver.TDSXX` values)

  ### canEncode

      private static boolean canEncode(java.lang.String value,
                                       java.lang.String charset)

    Establish if a String can be converted to a byte based character set.
    Parameters:
      `value` - The String to test.
      `charset` - The server character set in force.
    Returns:
      `boolean` true if string can be converted.

  Overview | Package | Class | Use | Tree | Deprecated | Index | Help
  PREV CLASS NEXT CLASS | FRAMES NO FRAMES
  SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

  Generated on November 8 2005