// jTDS JDBC Driver for Microsoft SQL Server and Sybase
// Copyright (C) 2004 The jTDS Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package net.sourceforge.jtds.jdbc;
import java.util.Arrays;
/**
* <p> Instances of this class serve as descriptor for result set columns. </p>
*
* @author
* Mike Hutchinson, Holger Rehn
*/
public class ColInfo implements Cloneable
{
/////////////////////////////////////////////////////////////////////////////
// public instance fields
/////////////////////////////////////////////////////////////////////////////
/**
* Internal TDS data type
*/
int tdsType;
/**
* JDBC type constant from java.sql.Types
*/
int jdbcType;
/**
* Column actual table name
*/
String realName;
/**
* Column label / name
*/
String name;
/**
* Table name owning this column
*/
String tableName;
/**
* Database owning this column
*/
String catalog;
/**
* User owning this column
*/
String schema;
/**
* Column data type supports SQL NULL
*/
int nullable;
/**
* Column name is case sensitive
*/
boolean isCaseSensitive;
/**
* Column may be updated
*/
boolean isWriteable;
/**
* Column is an identity column
*/
boolean isIdentity;
/**
* Column may be used as a key
*/
boolean isKey;
/**
* Column should be hidden
*/
boolean isHidden;
/**
* Database ID for UDT
*/
int userType;
/**
* MS SQL2000 collation
*/
byte[] collation;
/**
* Character set descriptor (if different from default)
*/
CharsetInfo charsetInfo;
/**
* Column display size
*/
int displaySize;
/**
* Column buffer (max) size
*/
int bufferSize;
/**
* Column decimal precision
*/
int precision;
/**
* Column decimal scale
*/
int scale;
/**
* The SQL type name for this column.
*/
String sqlType;
/////////////////////////////////////////////////////////////////////////////
// overridden methods of class Object
/////////////////////////////////////////////////////////////////////////////
@Override
public String toString()
{
return name;
}
@Override
public int hashCode()
{
return System.identityHashCode( this );
}
@Override
public boolean equals( Object other )
{
if( ! ( other instanceof ColInfo ) )
return false;
if( other == this )
return true;
ColInfo o = (ColInfo) other;
return
// compare primitive fields
tdsType == o.tdsType
&& jdbcType == o.jdbcType
&& nullable == o.nullable
&& userType == o.userType
&& displaySize == o.displaySize
&& bufferSize == o.bufferSize
&& precision == o.precision
&& scale == o.scale
&& isCaseSensitive == o.isCaseSensitive
&& isWriteable == o.isWriteable
&& isIdentity == o.isIdentity
&& isKey == o.isKey
&& isHidden == o.isHidden
// compare non-primitive fields
&& compare( realName , o.realName )
&& compare( name , o.name )
&& compare( tableName , o.tableName )
&& compare( catalog , o.catalog )
&& compare( schema , o.schema )
&& compare( sqlType , o.sqlType )
&& compare( charsetInfo, o.charsetInfo )
// compare collation
&& Arrays.equals( collation, o.collation );
}
/////////////////////////////////////////////////////////////////////////////
// private methods
/////////////////////////////////////////////////////////////////////////////
/**
* <p> Compares two object. </p>
*
* @return
* {@code true} if either both values are {@code null} or comparing them
* using the equals method of <i>o1</i> returns {@code true}
*/
private final boolean compare( Object o1, Object o2 )
{
return o1 == o2 || o1 != null && o1.equals( o2 );
}
}