⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usertype.java

📁 derby database source code.good for you.
💻 JAVA
字号:
/*   Derby - Class org.apache.derby.iapi.types.UserType   Copyright 1999, 2004 The Apache Software Foundation or its licensors, as applicable.   Licensed under the Apache License, Version 2.0 (the "License");   you may not use this file except in compliance with the License.   You may obtain a copy of the License at      http://www.apache.org/licenses/LICENSE-2.0   Unless required by applicable law or agreed to in writing, software   distributed under the License is distributed on an "AS IS" BASIS,   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   See the License for the specific language governing permissions and   limitations under the License. */package org.apache.derby.iapi.types;import org.apache.derby.catalog.TypeDescriptor;import org.apache.derby.iapi.reference.SQLState;import org.apache.derby.iapi.services.io.ArrayInputStream;import org.apache.derby.iapi.services.loader.ClassInspector;import org.apache.derby.iapi.services.sanity.SanityManager;import org.apache.derby.iapi.services.io.StoredFormatIds;import org.apache.derby.iapi.error.StandardException;import org.apache.derby.iapi.types.DataValueDescriptor;import org.apache.derby.iapi.types.TypeId;import org.apache.derby.iapi.types.BooleanDataValue;import org.apache.derby.iapi.types.UserDataValue;import org.apache.derby.iapi.services.cache.ClassSize;import java.sql.Date;import java.sql.Time;import java.sql.Timestamp;import java.io.ObjectOutput;import java.io.ObjectInput;import java.io.IOException;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Calendar;/** * This contains an instance of a user-defined type, that is, a java object. * */public class UserType extends DataType						implements UserDataValue{	private Object	value;	/*	** DataValueDescriptor interface	** (mostly implemented in DataType)	*/    private static final int BASE_MEMORY_USAGE = ClassSize.estimateBaseFromCatalog( UserType.class);    public int estimateMemoryUsage()    {        int sz = BASE_MEMORY_USAGE;        if( null != value)        {            // Probably an underestimate. Examining each field value would be expensive            // and would produce an overestimate when fields reference shared objects            sz += ClassSize.estimateAndCatalogBase( value.getClass());        }                return sz;    } // end of estimateMemoryUsage	public String getString()	{		if (! isNull())		{			return value.toString();		}		else		{			return null;		}	}	/**	 * @exception StandardException thrown on failure to convert	 */	public boolean getBoolean() throws StandardException	{		if (! isNull())			if (value instanceof Boolean) return ((Boolean)value).booleanValue();		return super.getBoolean();	}	/**	 * @exception StandardException thrown on failure to convert	 */	public byte getByte() throws StandardException	{		if (! isNull())			// REMIND: check for overflow and truncation			if (value instanceof Number) return ((Number)value).byteValue();		return super.getByte();	}	/**	 * @exception StandardException thrown on failure to convert	 */	public short getShort() throws StandardException	{		if (! isNull())			// REMIND: check for overflow and truncation			if (value instanceof Number) return ((Number)value).shortValue();		return super.getShort();	}	/**	 * @exception StandardException thrown on failure to convert	 */	public int getInt() throws StandardException	{		if (! isNull())			// REMIND: check for overflow and truncation			if (value instanceof Number) return ((Number)value).intValue();		return super.getInt();	}	/**	 * @exception StandardException thrown on failure to convert	 */	public long getLong() throws StandardException	{		if (! isNull())			// REMIND: check for overflow and truncation			if (value instanceof Number) return ((Number)value).longValue();		return super.getLong();	}	/**	 * @exception StandardException thrown on failure to convert	 */	public float getFloat() throws StandardException	{		if (! isNull())			// REMIND: check for overflow			if (value instanceof Number) return ((Number)value).floatValue();		return super.getFloat();	}	/**	 * @exception StandardException thrown on failure to convert	 */	public double getDouble() throws StandardException	{		if (! isNull())			// REMIND: check for overflow			if (value instanceof Number) return ((Number)value).doubleValue();		return super.getDouble();	}	/**	 * @exception StandardException thrown on failure to convert	 */	public byte[] getBytes() throws StandardException	{		if (! isNull())			if (value instanceof byte[]) return ((byte[])value);		return super.getBytes();	}	/**		@exception StandardException thrown on failure	 */	public Date	getDate( Calendar cal) throws StandardException	{		if (! isNull())		{			if (value instanceof Date) 				return ((Date)value);			else if (value instanceof Timestamp)				return (new SQLTimestamp((Timestamp)value).getDate(cal));		}		return super.getDate(cal);	}	/**		@exception StandardException thrown on failure	 */	public Time	getTime( Calendar cal) throws StandardException	{		if (! isNull())		{			if (value instanceof Time) 				return ((Time)value);			else if (value instanceof Timestamp)				return (new SQLTimestamp((Timestamp)value).getTime(cal));		}		return super.getTime(cal);	}	/**		@exception StandardException thrown on failure	 */	public Timestamp	getTimestamp( Calendar cal) throws StandardException	{		if (! isNull())		{			if (value instanceof Timestamp) 				return ((Timestamp)value);			else if (value instanceof Date)				return (new SQLDate((Date)value).getTimestamp(cal));			else if (value instanceof Time)				return (new SQLTime((Time)value).getTimestamp(cal));		}		return super.getTimestamp(cal);	}	public Object getObject()	{		return value;	}	/**	* @see DataValueDescriptor#setObjectForCast	*	* @exception StandardException thrown on failure	*	* @return me	*/	public void setObjectForCast(Object theValue, boolean instanceOfResultType, String resultTypeClassName)		throws StandardException	{		/* This check is a performance problem.  We need to it though		 * to catch ClassCastExceptions.		 */		/* Is the object of the right type? (only do the check if value is non-null */		if (theValue != null)		{			if ( ! instanceOfResultType)			{				throw StandardException.newException(SQLState.LANG_DATA_TYPE_SET_MISMATCH, 								getTypeName(), resultTypeClassName);			}		}		setValue(theValue);	}			public int getLength()	{		return TypeDescriptor.MAXIMUM_WIDTH_UNKNOWN;	}	/* this is for DataType's error generator */	public String getTypeName()	{		return isNull() ? "JAVA_OBJECT" : ClassInspector.readableClassName(value.getClass());	}	/*	 * Storable interface, implies Externalizable, TypedFormat	 */	/**		Return my format identifier.		@see org.apache.derby.iapi.services.io.TypedFormat#getTypeFormatId	*/	public int getTypeFormatId() {		return StoredFormatIds.SQL_USERTYPE_ID_V3;	}	/** 		@exception IOException error writing data	*/	public void writeExternal(ObjectOutput out) throws IOException {		if (SanityManager.DEBUG)			SanityManager.ASSERT(!isNull(), "writeExternal() is not supposed to be called for null values.");			out.writeObject(value);	}	/**	 * @see java.io.Externalizable#readExternal	 *	 * @exception IOException	Thrown on error reading the object	 * @exception ClassNotFoundException	Thrown if the class of the object	 *										is not found	 */	public void readExternal(ObjectInput in)         throws IOException, ClassNotFoundException	{		/* RESOLVE: Sanity check for right class */		value = in.readObject();	}	public void readExternalFromArray(ArrayInputStream in)         throws IOException, ClassNotFoundException	{		/* RESOLVE: Sanity check for right class */		value = in.readObject();	}	/*	 * DataValueDescriptor interface	 */	/** @see DataValueDescriptor#getClone */	public DataValueDescriptor getClone()	{		// Call constructor with all of our info		return new UserType(value);	}	/**	 * @see DataValueDescriptor#getNewNull	 */	public DataValueDescriptor getNewNull()	{		return new UserType();	}	/**	 * @see org.apache.derby.iapi.services.io.Storable#restoreToNull	 *	 */	public void restoreToNull()	{		value = null;	}	/*	 * DataValueDescriptor interface	 */	/** 	 * @see DataValueDescriptor#setValueFromResultSet 	 *	 * @exception SQLException		Thrown on error	 */	public void setValueFromResultSet(ResultSet resultSet, int colNumber,									  boolean isNullable)		throws SQLException	{			value = resultSet.getObject(colNumber);	}	/**	 * Orderable interface	 *	 *	 * @see org.apache.derby.iapi.types.Orderable	 *	 * @exception StandardException thrown on failure	 */	public int compare(DataValueDescriptor other)		throws StandardException	{		/* Use compare method from dominant type, negating result		 * to reflect flipping of sides.		 */		if (typePrecedence() < other.typePrecedence())		{			return - (other.compare(this));		}		boolean thisNull, otherNull;		thisNull = this.isNull();		otherNull = other.isNull();		/*		 * thisNull otherNull	return		 *	T		T		 	0	(this == other)		 *	F		T		 	-1 	(this < other)		 *	T		F		 	1	(this > other)		 */		if (thisNull || otherNull)		{			if (!thisNull)		// otherNull must be true				return -1;			if (!otherNull)		// thisNull must be true				return 1;			return 0;		}		/*			Neither are null compare them 		 */		int comparison;		try		{			comparison = ((java.lang.Comparable) value).compareTo(other.getObject());		}		catch (ClassCastException cce)		{			throw StandardException.newException(SQLState.LANG_INVALID_COMPARE_TO, 						getTypeName(),						ClassInspector.readableClassName(other.getObject().getClass()));		}		/*		** compareTo() can return any negative number if less than, and		** any positive number if greater than.  Change to -1, 0, 1.		*/		if (comparison < 0)			comparison = -1;		else if (comparison > 0)			comparison = 1;		return comparison;	}	/**		@exception StandardException thrown on error	 */	public boolean compare(int op,						   DataValueDescriptor other,						   boolean orderedNulls,						   boolean unknownRV)		throws StandardException	{		if (!orderedNulls)		// nulls are unordered		{			if (this.isNull() || other.isNull())				return unknownRV;		}		/* For usertypes and equal do some special processing when		 * neither value is null.  (Superclass will handle comparison		 * if either value is null.)		 */		if ( (op == ORDER_OP_EQUALS) &&			(! this.isNull()) && (! other.isNull()) ) 		{			// if this object implements java.lang.Comparable (JDK1.2)			// then we let the compareTo method handle equality			// if it doesn't then we use the equals() method			Object o = getObject();			if (!(o instanceof java.lang.Comparable)) 			{				return o.equals(other.getObject());			}		}				/* Do the comparison */		return super.compare(op, other, orderedNulls, unknownRV);	}	/*	** Class interface	*/	/*	** Constructors	*/	/** no-arg constructor required by Formattable */	public UserType() { }	public UserType(Object value)	{		this.value = value;	}	/**	 * @see UserDataValue#setValue	 *	 */	public void setValue(Object value)	{		this.value = value;	}	protected void setFrom(DataValueDescriptor theValue) throws StandardException {		setValue(theValue.getObject());	}	/**	 * @see UserDataValue#setValue	 *	 */	public void setBigDecimal(Number theValue)	{		// needed to allow serializable BigDecimal		setValue((Object) theValue);	}	public void setValue(String theValue)	{		if (theValue == null)		{			value = null;		}		else		{			// Higher levels must have performed type checking for us.			value = theValue;		}	}	/*	** SQL Operators	*/	/**	 * The = operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the =	 * @param right			The value on the right side of the =	 *	 * @return	A SQL boolean value telling whether the two parameters are equal	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue equals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.compare(ORDER_OP_EQUALS, right, true, false));	}	/**	 * The <> operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the <>	 * @param right			The value on the right side of the <>	 *	 * @return	A SQL boolean value telling whether the two parameters	 *			are not equal	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue notEquals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 !left.compare(ORDER_OP_EQUALS, right, true, false));	}	/*	** String display of value	*/	public String toString()	{		if (isNull())		{			return "NULL";		}		else		{			return value.toString();		}	}	/*	 * Hash code	 */	public int hashCode()	{		if (isNull())			return 0;		return value.hashCode();	}	/** @see DataValueDescriptor#typePrecedence */	public int	typePrecedence()	{		return TypeId.USER_PRECEDENCE;	}	/**	 * Check if the value is null.  	 *	 * @return Whether or not value is logically null.	 */	public final boolean isNull()	{		return (value == null);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -