org.apache.derby.impl.sql.compile
Class NumericTypeCompiler

java.lang.Object
  extended by org.apache.derby.impl.sql.compile.BaseTypeCompiler
      extended by org.apache.derby.impl.sql.compile.NumericTypeCompiler
All Implemented Interfaces:
TypeCompiler

public final class NumericTypeCompiler
extends BaseTypeCompiler

This class implements TypeId for the SQL numeric datatype.


Field Summary
 
Fields inherited from interface org.apache.derby.iapi.sql.compile.TypeCompiler
AVG_OP, BOOLEAN_MAXWIDTH_AS_CHAR, DEFAULT_DECIMAL_PRECISION, DEFAULT_DECIMAL_SCALE, DIVIDE_OP, DOUBLE_MAXWIDTH_AS_CHAR, INT_MAXWIDTH_AS_CHAR, LONGINT_MAXWIDTH_AS_CHAR, MAX_DECIMAL_PRECISION_SCALE, MINUS_OP, MOD_OP, PLUS_OP, REAL_MAXWIDTH_AS_CHAR, SMALLINT_MAXWIDTH_AS_CHAR, SUM_OP, TIMES_OP, TINYINT_MAXWIDTH_AS_CHAR
 
Constructor Summary
NumericTypeCompiler()
           
 
Method Summary
 boolean compatible(TypeId otherType)
          Tell whether this type (numeric) is compatible with the given type.
 boolean convertible(TypeId otherType, boolean forDataTypeFunction)
          Determine if this type can be CONVERTed to some other type
(package private)  java.lang.String dataValueMethodName()
          Return the method name to get a Derby DataValueDescriptor object of the correct type.
 void generateDataValue(MethodBuilder mb, int collationType, LocalField field)
          The caller will have pushed a DataValueFactory and value of that can be converted to the correct type, e.g. int for a SQL INTEGER.
 int getCastToCharWidth(DataTypeDescriptor dts)
          Return the maximum width for this data type when cast to a char type.
 java.lang.String getCorrespondingPrimitiveTypeName()
          Get the name of the corresponding Java type.
private  int getPrecision(java.lang.String operator, DataTypeDescriptor leftType, DataTypeDescriptor rightType)
          Get the precision of the operation involving two of the same types.
 java.lang.String getPrimitiveMethodName()
          Get the method name for getting out the corresponding primitive Java type.
private  int getScale(java.lang.String operator, DataTypeDescriptor leftType, DataTypeDescriptor rightType)
          Get the scale of the operation involving two of the same types.
 java.lang.String interfaceName()
          Get the name of the interface for this type.
(package private)  java.lang.String nullMethodName()
          Return the method name to get a Derby DataValueDescriptor object of the correct type set to SQL NULL.
 DataTypeDescriptor resolveArithmeticOperation(DataTypeDescriptor leftType, DataTypeDescriptor rightType, java.lang.String operator)
          Type resolution methods on binary operators
 boolean storable(TypeId otherType, ClassFactory cf)
          Determine if this type can have a value of another type stored into it.
 
Methods inherited from class org.apache.derby.impl.sql.compile.BaseTypeCompiler
generateNull, getStoredFormatIdFromTypeId, getTypeCompiler, getTypeId, numberConvertible, numberStorable, pushCollationForDataValue, setTypeId, userTypeStorable
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

NumericTypeCompiler

public NumericTypeCompiler()
Method Detail

interfaceName

public java.lang.String interfaceName()
Description copied from interface: TypeCompiler
Get the name of the interface for this type. For example, the interface for a SQLInteger is NumberDataValue. The full path name of the type is returned.

Returns:
The name of the interface for this type.
See Also:
TypeCompiler.interfaceName()

getCorrespondingPrimitiveTypeName

public java.lang.String getCorrespondingPrimitiveTypeName()
Description copied from interface: TypeCompiler
Get the name of the corresponding Java type. For numerics and booleans we will get the corresponding Java primitive type. e Each SQL type has a corresponding Java type. When a SQL value is passed to a Java method, it is translated to its corresponding Java type. For example, a SQL Integer will be mapped to a Java int, but a SQL date will be mapped to a java.sql.Date.

Returns:
The name of the corresponding Java primitive type.
See Also:
TypeCompiler.getCorrespondingPrimitiveTypeName()

getPrimitiveMethodName

public java.lang.String getPrimitiveMethodName()
Get the method name for getting out the corresponding primitive Java type.

Specified by:
getPrimitiveMethodName in interface TypeCompiler
Overrides:
getPrimitiveMethodName in class BaseTypeCompiler
Returns:
String The method call name for getting the corresponding primitive Java type.

getCastToCharWidth

public int getCastToCharWidth(DataTypeDescriptor dts)
Description copied from interface: TypeCompiler
Return the maximum width for this data type when cast to a char type.

Parameters:
dts - The associated DataTypeDescriptor for this TypeId.
Returns:
int The maximum width for this data type when cast to a char type.
See Also:
TypeCompiler.getCastToCharWidth(org.apache.derby.iapi.types.DataTypeDescriptor)

resolveArithmeticOperation

public DataTypeDescriptor resolveArithmeticOperation(DataTypeDescriptor leftType,
                                                     DataTypeDescriptor rightType,
                                                     java.lang.String operator)
                                              throws StandardException
Description copied from interface: TypeCompiler
Type resolution methods on binary operators

Specified by:
resolveArithmeticOperation in interface TypeCompiler
Overrides:
resolveArithmeticOperation in class BaseTypeCompiler
Parameters:
leftType - The type of the left parameter
rightType - The type of the right parameter
operator - The name of the operator (e.g. "+").
Returns:
The type of the result
Throws:
StandardException - Thrown on error
See Also:
TypeCompiler.resolveArithmeticOperation(org.apache.derby.iapi.types.DataTypeDescriptor, org.apache.derby.iapi.types.DataTypeDescriptor, java.lang.String)

convertible

public boolean convertible(TypeId otherType,
                           boolean forDataTypeFunction)
Description copied from interface: TypeCompiler
Determine if this type can be CONVERTed to some other type

Parameters:
otherType - The CompilationType of the other type to compare this type to
forDataTypeFunction - true if this is a type function that requires more liberal behavior (e.g DOUBLE can convert a char but you cannot cast a CHAR to double.
Returns:
true if the types can be converted, false if conversion is not allowed
See Also:
TypeCompiler.convertible(org.apache.derby.iapi.types.TypeId, boolean)

compatible

public boolean compatible(TypeId otherType)
Tell whether this type (numeric) is compatible with the given type.

Parameters:
otherType - The TypeId of the other type.
Returns:
true if the types are compatible, false if not compatible

storable

public boolean storable(TypeId otherType,
                        ClassFactory cf)
Description copied from interface: TypeCompiler
Determine if this type can have a value of another type stored into it. Note that direction is relevant here: the test is that the otherType is storable into this type.

Parameters:
otherType - The TypeId of the other type to compare this type to
cf - A ClassFactory
Returns:
true if the other type can be stored in a column of this type.
See Also:
TypeCompiler.storable(org.apache.derby.iapi.types.TypeId, org.apache.derby.iapi.services.loader.ClassFactory)

dataValueMethodName

java.lang.String dataValueMethodName()
Return the method name to get a Derby DataValueDescriptor object of the correct type. This implementation returns "getDataValue".

Overrides:
dataValueMethodName in class BaseTypeCompiler

nullMethodName

java.lang.String nullMethodName()
Description copied from class: BaseTypeCompiler
Return the method name to get a Derby DataValueDescriptor object of the correct type set to SQL NULL. The method named will be called with one argument: a holder object if pushCollationForDataValue() returns false, otherwise two arguments, the second being the collationType.

Specified by:
nullMethodName in class BaseTypeCompiler

getPrecision

private int getPrecision(java.lang.String operator,
                         DataTypeDescriptor leftType,
                         DataTypeDescriptor rightType)
Get the precision of the operation involving two of the same types. Only meaningful for decimals, which override this.

Parameters:
operator - a string representing the operator, null means no operator, just a type merge
leftType - the left type
rightType - the left type
Returns:
the resultant precision

getScale

private int getScale(java.lang.String operator,
                     DataTypeDescriptor leftType,
                     DataTypeDescriptor rightType)
Get the scale of the operation involving two of the same types. Since we don't really have a good way to pass the resultant scale and precision around at execution time, we will model that BigDecimal does by default. This is good in most cases, though we would probably like to use something more sophisticated for division.

Parameters:
operator - a string representing the operator, null means no operator, just a type merge
leftType - the left type
rightType - the left type
Returns:
the resultant precision

generateDataValue

public void generateDataValue(MethodBuilder mb,
                              int collationType,
                              LocalField field)
Description copied from class: BaseTypeCompiler
The caller will have pushed a DataValueFactory and value of that can be converted to the correct type, e.g. int for a SQL INTEGER. Thus upon entry the stack looks like: ...,dvf,value If field is not null then it is used as the holder of the generated DataValueDescriptor to avoid object creations on multiple passes through this code. The field may contain null or a valid value. This method then sets up to call the required method on DataValueFactory using the dataValueMethodName(). The value left on the stack will be a DataValueDescriptor of the correct type: If the field contained a valid value then generated code will return that value rather than a newly created object. If field was not-null then the generated code will set the value of field to be the return from the DataValueFactory method call. Thus if the field was empty (set to null) when this code is executed it will contain the newly generated value, otherwise it will be reset to the same value. ...,dvd

Specified by:
generateDataValue in interface TypeCompiler
Overrides:
generateDataValue in class BaseTypeCompiler
Parameters:
mb - The method to put the expression in
collationType - For character DVDs, this will be used to determine what Collator should be associated with the DVD which in turn will decide whether to generate CollatorSQLcharDVDs or SQLcharDVDs. For other types of DVDs, this parameter will be ignored.
field - LocalField
See Also:
TypeCompiler.generateDataValue(MethodBuilder, int, LocalField)

Built on Thu 2010-12-23 20:49:13+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.