com.ibm.as400.access.DBExtendedDataFormat Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: DBExtendedDataFormat.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2001 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.access;
import java.io.CharConversionException;
/**
The DBExtendedDataFormat class is an implementation of
DBDataFormat which describes the data format used in
datastreams for V4R4 and later systems.
**/
class DBExtendedDataFormat
implements DBDataFormat
{
private static final String copyright = "Copyright (C) 1997-2001 International Business Machines Corporation and others.";
// Private data.
private static final int FIXED_LENGTH_ = 16;
private static final int REPEATED_LENGTH_ = 64;
private byte[] rawBytes_ = null;
private int offset_ = -1;
private int numberOfFields_ = -1;
private int length_ = -1;
private boolean csRsData_ = false; // @550A indicates whether the data associated with this format is from a stored procedure result set
/**
Constructs a DBExtendedDataFormat object. Use this when overlaying
on a reply datastream. The cached data will be set when overlay()
is called.
**/
public DBExtendedDataFormat ()
{
}
/**
Constructs a DBExtendedDataFormat object. Use this when overlaying
on a request datastream. This sets the cached data so that
the total length can be calculated before calling overlay().
* @param numberOfFields
**/
public DBExtendedDataFormat (int numberOfFields)
{
numberOfFields_ = numberOfFields;
length_ = FIXED_LENGTH_ + numberOfFields_ * REPEATED_LENGTH_;
}
/**
Positions the overlay structure. This reads the cached data only
when it was not previously set by the constructor.
**/
public void overlay (byte[] rawBytes, int offset)
{
rawBytes_ = rawBytes;
offset_ = offset;
if (numberOfFields_ == -1)
{
numberOfFields_ = BinaryConverter.byteArrayToInt (rawBytes_, offset + 4);
length_ = FIXED_LENGTH_ + numberOfFields_ * REPEATED_LENGTH_;
}
else
{
setNumberOfFields (numberOfFields_);
}
}
public int getLength ()
{
return length_;
}
public int getConsistencyToken ()
{
return BinaryConverter.byteArrayToInt (rawBytes_, offset_);
}
public int getNumberOfFields ()
{
return numberOfFields_;
}
public int getRecordSize ()
{
return BinaryConverter.byteArrayToInt (rawBytes_, offset_ + 12);
}
public int getFieldSQLType (int fieldIndex)
{
return BinaryConverter.byteArrayToShort (rawBytes_,
offset_ + 18 + (fieldIndex * REPEATED_LENGTH_));
}
public int getFieldLength (int fieldIndex)
{
return BinaryConverter.byteArrayToInt (rawBytes_,
offset_ + 20 + (fieldIndex * REPEATED_LENGTH_));
}
public int getArrayFieldLength(int fieldIndex) throws DBDataStreamException {
return BinaryConverter.byteArrayToInt (rawBytes_,
offset_ + 20 + (fieldIndex * REPEATED_LENGTH_));
}
public int getFieldScale (int fieldIndex)
{
return BinaryConverter.byteArrayToShort (rawBytes_,
offset_ + 24 + (fieldIndex * REPEATED_LENGTH_));
}
public int getFieldPrecision (int fieldIndex)
{
return BinaryConverter.byteArrayToShort (rawBytes_,
offset_ + 26 + (fieldIndex * REPEATED_LENGTH_));
}
public int getFieldCCSID (int fieldIndex)
{
return BinaryConverter.byteArrayToUnsignedShort (rawBytes_, //@B0C
offset_ + 28 + (fieldIndex * REPEATED_LENGTH_));
}
public int getFieldParameterType (int fieldIndex)
{
return rawBytes_[offset_ + 30 + (fieldIndex * REPEATED_LENGTH_)];
}
public int getFieldLOBLocator (int fieldIndex) // @A1A
{ // @A1A
return BinaryConverter.byteArrayToInt (rawBytes_, // @A1A
offset_ + 33 + (fieldIndex * REPEATED_LENGTH_)); // @A1A
} // @A1A
public int getFieldLOBMaxSize (int fieldIndex) // @A1A
{ // @A1A
return BinaryConverter.byteArrayToInt (rawBytes_, // @A1A
offset_ + 42 + (fieldIndex * REPEATED_LENGTH_)); // @A1A
} // @A1A
public int getFieldNameLength (int fieldIndex)
{
return BinaryConverter.byteArrayToShort (rawBytes_,
offset_ + 46 + (fieldIndex * REPEATED_LENGTH_));
}
public int getFieldNameCCSID (int fieldIndex)
{
return BinaryConverter.byteArrayToShort (rawBytes_,
offset_ + 48 + (fieldIndex * REPEATED_LENGTH_));
}
public String getFieldName (int fieldIndex, ConvTable converter) //@P0C
{
return converter.byteArrayToString (rawBytes_,
offset_ + 50 + (fieldIndex * REPEATED_LENGTH_),
getFieldNameLength (fieldIndex));
}
/**
* UDTName is not available with ExtendedDataFormat, return -1
*/
/*@L1A*/
public int getUDTNameCCSID(int fieldIndex) {
return -1;
}
/**
* UDTName is not available with ExtendedDataFormat, return 0
*/
/*@L1A*/
public String getUDTName(int fieldIndex, ConvTable converter) {
return null;
}
public void setConsistencyToken (int consistencyToken)
{
BinaryConverter.intToByteArray (consistencyToken, rawBytes_,
offset_);
}
public void setNumberOfFields (int numberOfFields)
{
BinaryConverter.intToByteArray (numberOfFields, rawBytes_,
offset_ + 4);
}
public void setRecordSize (int recordSize)
{
BinaryConverter.intToByteArray (recordSize, rawBytes_,
offset_ + 12);
}
public void setFieldDescriptionLength (int fieldIndex)
{
BinaryConverter.shortToByteArray ((short) REPEATED_LENGTH_,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 16);
}
public void setFieldSQLType (int fieldIndex, int sqlType)
{
BinaryConverter.shortToByteArray ((short) sqlType,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 18);
}
public void setFieldLength (int fieldIndex, int length)
{
BinaryConverter.intToByteArray (length,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 20);
}
public void setFieldScale (int fieldIndex, int scale)
{
BinaryConverter.shortToByteArray ((short) scale,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 24);
}
public void setFieldPrecision (int fieldIndex, int precision)
{
BinaryConverter.shortToByteArray ((short) precision,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 26);
}
public void setFieldCCSID (int fieldIndex, int ccsid)
{
BinaryConverter.shortToByteArray ((short) ccsid,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 28);
}
public void setFieldParameterType (int fieldIndex, int parameterType)
{
rawBytes_[offset_ + fieldIndex * REPEATED_LENGTH_ + 30] = (byte) parameterType;
}
public void setFieldNameLength (int fieldIndex, int nameLength)
{
BinaryConverter.shortToByteArray ((short) nameLength,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 46);
}
public void setFieldNameCCSID (int fieldIndex, int nameCCSID)
{
BinaryConverter.shortToByteArray ((short) nameCCSID,
rawBytes_, offset_ + fieldIndex * REPEATED_LENGTH_ + 48);
}
public void setFieldName (int fieldIndex, String name, ConvTable converter) //@P0C
throws DBDataStreamException
{
try
{
converter.stringToByteArray (name, rawBytes_,
offset_ + fieldIndex * REPEATED_LENGTH_ + 50);
}
catch (CharConversionException e)
{
throw new DBDataStreamException ();
}
// Pad the remaining field with zeros.
int length = name.length ();
int padOffset = offset_ + fieldIndex * REPEATED_LENGTH_ + 50;
for (int i = length; i < 30; i++)
rawBytes_[padOffset + i] = 0;
}
// @550A - This isn't included in the Extended Data Stream Format
public int getDateFormat() throws DBDataStreamException {
return -1;
}
// @550A - This isn't included in the Extended Data Stream Format
public int getTimeFormat() throws DBDataStreamException {
return -1;
}
// @550A - This isn't included in the Extended Data Stream Format
public int getDateSeparator() throws DBDataStreamException {
return -1;
}
// @550A - This isn't included in the Extended Data Stream Format
public int getTimeSeparator() throws DBDataStreamException {
return -1;
}
// @550A - returns whether or not this data is associated with a stored procedure result set
public boolean getCSRSData()
{
return csRsData_;
}
//@550A - sets whether or not this data is associated with a stored procedure result set
public void setCSRSData(boolean csRsData)
{
csRsData_ = csRsData;
}
//@xml3 This isn't included in the Extended Data Stream Format
public int getXMLCharType(int fieldIndex)
{
return -1;
}
//@array - This isn't included in the Extended Data Stream Format
public int getArrayType(int fieldIndex)
{
return -1;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy