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

📄 sqllongint.java

📁 derby database source code.good for you.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}	/*	** 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.getLong() == right.getLong());	}	/**	 * 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.getLong() != right.getLong());	}	/**	 * 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 first operand is less	 *			than the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue lessThan(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getLong() < right.getLong());	}	/**	 * 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 first operand is greater	 *			than the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue greaterThan(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getLong() > right.getLong());	}	/**	 * 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 first operand is less	 *			than or equal to the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue lessOrEquals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getLong() <= right.getLong());	}	/**	 * 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 first operand is greater	 *			than or equal to the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue greaterOrEquals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getLong() >= right.getLong());	}	/**	 * This method implements the + operator for "bigint + bigint".	 *	 * @param addend1	One of the addends	 * @param addend2	The other addend	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLLongint containing the result of the addition	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue plus(NumberDataValue addend1,							NumberDataValue addend2,							NumberDataValue result)				throws StandardException	{		if (result == null)		{			result = new SQLLongint();		}		if (addend1.isNull() || addend2.isNull())		{			result.setToNull();			return result;		}		long	addend1Long = addend1.getLong();		long	addend2Long = addend2.getLong();		long resultValue = addend1Long + addend2Long;		/*		** Java does not check for overflow with integral types. We have to		** check the result ourselves.		**		** Overflow is possible only if the two addends have the same sign.		** Do they?  (This method of checking is approved by "The Java		** Programming Language" by Arnold and Gosling.)		*/		if ((addend1Long < 0) == (addend2Long < 0))		{			/*			** Addends have the same sign.  The result should have the same			** sign as the addends.  If not, an overflow has occurred.			*/			if ((addend1Long < 0) != (resultValue < 0))			{				throw StandardException.newException(SQLState.LANG_OUTSIDE_RANGE_FOR_DATATYPE, "BIGINT");			}		}		result.setValue(resultValue);		return result;	}	/**	 * This method implements the - operator for "bigint - bigint".	 *	 * @param left	The value to be subtracted from	 * @param right	The value to be subtracted	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLLongint containing the result of the subtraction	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue minus(NumberDataValue left,							NumberDataValue right,							NumberDataValue result)				throws StandardException	{		if (result == null)		{			result = new SQLLongint();		}		if (left.isNull() || right.isNull())		{			result.setToNull();			return result;		}		long diff = left.getLong() - right.getLong();		/*		** Java does not check for overflow with integral types. We have to		** check the result ourselves.		**		** Overflow is possible only if the left and the right side have opposite signs.		** Do they?  (This method of checking is approved by "The Java		** Programming Language" by Arnold and Gosling.)		*/		if ((left.getLong() < 0) != (right.getLong() < 0))		{			/*			** Left and right have opposite signs.  The result should have the same			** sign as the left (this).  If not, an overflow has occurred.			*/			if ((left.getLong() < 0) != (diff < 0))			{				throw StandardException.newException(SQLState.LANG_OUTSIDE_RANGE_FOR_DATATYPE, "BIGINT");			}		}		result.setValue(diff);		return result;	}	/**	 * This method implements the * operator for "bigint * bigint".	 *	 * @param left	The first value to be multiplied	 * @param right	The second value to be multiplied	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLLongint containing the result of the multiplication	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue times(NumberDataValue left,							NumberDataValue right,							NumberDataValue result)				throws StandardException	{		long		tempResult;		if (result == null)		{			result = new SQLLongint();		}		if (left.isNull() || right.isNull())		{			result.setToNull();			return result;		}		/*		** Java does not check for overflow with integral types. We have to		** check the result ourselves.		**		** We can't use sign checking tricks like we do for '+' and '-' since		** the product of 2 integers can wrap around multiple times.  So, we		** apply the principle that a * b = c => a = c / b.  If b != 0 and		** a != c / b, then overflow occurred.		*/		tempResult = left.getLong() * right.getLong();		if ((right.getLong() != 0) && (left.getLong() != tempResult / right.getLong()))		{			throw StandardException.newException(SQLState.LANG_OUTSIDE_RANGE_FOR_DATATYPE, "BIGINT");		}		result.setValue(tempResult);		return result;	}	/**	 * This method implements the / operator for "bigint / bigint".	 *	 * @param dividend	The numerator	 * @param divisor	The denominator	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLLongint containing the result of the division	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue divide(NumberDataValue dividend,							 NumberDataValue divisor,							 NumberDataValue result)				throws StandardException	{		long	longDivisor;		if (result == null)		{			result = new SQLLongint();		}		if (dividend.isNull() || divisor.isNull())		{			result.setToNull();			return result;		}		/* Catch divide by 0 */		longDivisor = divisor.getLong();		if (longDivisor == 0)		{			throw StandardException.newException(SQLState.LANG_DIVIDE_BY_ZERO);		}		result.setValue(dividend.getLong() / longDivisor);		return result;	}	/**		mod(bigint, bigint)	*/	public NumberDataValue mod(NumberDataValue dividend,							 NumberDataValue divisor,							 NumberDataValue result)				throws StandardException	{		if (result == null)		{			result = new SQLLongint();		}		if (dividend.isNull() || divisor.isNull())		{			result.setToNull();			return result;		}		/* Catch divide by 0 */		long longDivisor = divisor.getLong();		if (longDivisor == 0)		{			throw StandardException.newException(SQLState.LANG_DIVIDE_BY_ZERO);		}		result.setValue(dividend.getLong() % longDivisor);		return result;	}	/**	 * This method implements the unary minus operator for bigint.	 *	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLLongint containing the result of the negation	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue minus(NumberDataValue result)									throws StandardException	{		long		operandValue;		if (result == null)		{			result = new SQLLongint();		}		if (this.isNull())		{			result.setToNull();			return result;		}		operandValue = this.getLong();		/*		** In two's complement arithmetic, the minimum value for a number		** can't be negated, since there is no representation for its		** positive value.		*/		if (operandValue == Long.MIN_VALUE)		{			throw StandardException.newException(SQLState.LANG_OUTSIDE_RANGE_FOR_DATATYPE, "BIGINT");		}		result.setValue(-operandValue);		return result;	}    /**     * This method implements the isNegative method.     *     * @return  A boolean.  if this.value is negative, return true.     *     * @exception StandException       Thrown on error     */        protected boolean isNegative()    {        return !isNull() && value < 0L;    }	/*	 * String display of value	 */	public String toString()	{		if (isNull())			return "NULL";		else			return Long.toString(value);	}	/*	 * Hash code	 */	public int hashCode()	{		return (int) (value ^ (value >> 32));	}    private static final int BASE_MEMORY_USAGE = ClassSize.estimateBaseFromCatalog( SQLLongint.class);    public int estimateMemoryUsage()    {        return BASE_MEMORY_USAGE;    }	/*	 * object state	 */	private long		value;	private boolean	isnull;}

⌨️ 快捷键说明

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