Top Description Constructors Methods
org.apache.derby.impl.sql.compile

public final Class NumericTypeCompiler

extends BaseTypeCompiler
Class Inheritance
Imports
org.apache.derby.shared.common.error.StandardException, org.apache.derby.shared.common.reference.ClassName, .Limits, .SQLState, org.apache.derby.iapi.services.compiler.LocalField, .MethodBuilder, org.apache.derby.iapi.services.io.StoredFormatIds, org.apache.derby.iapi.services.loader.ClassFactory, org.apache.derby.shared.common.sanity.SanityManager, org.apache.derby.iapi.sql.compile.TypeCompiler, org.apache.derby.iapi.types.DataTypeDescriptor, .NumberDataValue, .TypeId

This class implements TypeId for the SQL numeric datatype.

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public boolean
compatible(TypeId
The TypeId of the other type.
otherType
)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.compatible.

Tell whether this type (numeric) is compatible with the given type.

public boolean
convertible(TypeId
The CompilationType of the other type to compare this type to
otherType
,
boolean
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.
forDataTypeFunction
)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.convertible.

Determine if this type can be CONVERTed to some other type

pack-priv String
dataValueMethodName()

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.dataValueMethodName.

Return the method name to get a Derby DataValueDescriptor object of the correct type.

public void
generateDataValue(MethodBuilder
The method to put the expression in
mb
,
int
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.
collationType
,
LocalField
LocalField
field
)

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.generateDataValue.

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.generateDataValue.

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.

public int
getCastToCharWidth(DataTypeDescriptor
The associated DataTypeDescriptor for this TypeId.
dts
)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.getCastToCharWidth.

Return the maximum width for this data type when cast to a char type.

public String
private int

Returns:

the resultant precision
getPrecision
(String
a string representing the operator, null means no operator, just a type merge
operator
,
DataTypeDescriptor
the left type
leftType
,
DataTypeDescriptor
the left type
rightType
)

Get the precision of the operation involving two of the same types.

public String

Returns:

String The method call name for getting the corresponding primitive Java type.
getPrimitiveMethodName
()

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.getPrimitiveMethodName.

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.getPrimitiveMethodName.

Get the method name for getting out the corresponding primitive Java type.

private int

Returns:

the resultant precision
getScale
(String
a string representing the operator, null means no operator, just a type merge
operator
,
DataTypeDescriptor
the left type
leftType
,
DataTypeDescriptor
the left type
rightType
)

Get the scale of the operation involving two of the same types.

public String
interfaceName()

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.interfaceName.

Get the name of the interface for this type.

pack-priv String
nullMethodName()

Implements abstract org.apache.derby.impl.sql.compile.BaseTypeCompiler.nullMethodName.

Return the method name to get a Derby DataValueDescriptor object of the correct type set to SQL NULL.

public DataTypeDescriptor
resolveArithmeticOperation(DataTypeDescriptor
The type of the left parameter
leftType
,
DataTypeDescriptor
The type of the right parameter
rightType
,
String
The name of the operator (e.g. "+").
operator
)

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.resolveArithmeticOperation.

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.resolveArithmeticOperation.

Type resolution methods on binary operators

public boolean
storable(TypeId
The TypeId of the other type to compare this type to
otherType
,
ClassFactory
A ClassFactory
cf
)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.storable.

Determine if this type can have a value of another type stored into it.

Inherited from org.apache.derby.impl.sql.compile.BaseTypeCompiler:
generateNullgetStoredFormatIdFromTypeIdgetTypeCompilergetTypeIdnumberConvertiblenumberStorablepushCollationForDataValuesetTypeIduserTypeStorable

Constructor Detail

NumericTypeCompilerback to summary
public NumericTypeCompiler()

Method Detail

compatibleback to summary
public boolean compatible(TypeId otherType)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.compatible.

Tell whether this type (numeric) is compatible with the given type.

Parameters
otherType:TypeId

The TypeId of the other type.

Returns:boolean

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.compatible.

true if the types are compatible, false if not compatible

convertibleback to summary
public boolean convertible(TypeId otherType, boolean forDataTypeFunction)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.convertible.

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.convertible.

Determine if this type can be CONVERTed to some other type

Parameters
otherType:TypeId

The CompilationType of the other type to compare this type to

forDataTypeFunction:boolean

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:boolean

true if the types can be converted, false if conversion is not allowed

See Also
TypeCompiler#convertible
dataValueMethodNameback to summary
pack-priv String dataValueMethodName()

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.dataValueMethodName.

Return the method name to get a Derby DataValueDescriptor object of the correct type. This implementation returns "getDataValue", unless the type is DECIMAL, in which case "getDecimalDataValue" is returned.

Annotations
@Override
generateDataValueback to summary
public void generateDataValue(MethodBuilder mb, int collationType, LocalField field)

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.generateDataValue.

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.generateDataValue.

Doc from org.apache.derby.impl.sql.compile.BaseTypeCompiler.generateDataValue.

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

Parameters
mb:MethodBuilder

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.generateDataValue.

The method to put the expression in

collationType:int

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.generateDataValue.

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

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.generateDataValue.

LocalField

Annotations
@Override
getCastToCharWidthback to summary
public int getCastToCharWidth(DataTypeDescriptor dts)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.getCastToCharWidth.

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.getCastToCharWidth.

Return the maximum width for this data type when cast to a char type.

Parameters
dts:DataTypeDescriptor

The associated DataTypeDescriptor for this TypeId.

Returns:int

int The maximum width for this data type when cast to a char type.

See Also
TypeCompiler#getCastToCharWidth
getCorrespondingPrimitiveTypeNameback to summary
public String getCorrespondingPrimitiveTypeName()

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.getCorrespondingPrimitiveTypeName.

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.getCorrespondingPrimitiveTypeName.

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:String

The name of the corresponding Java primitive type.

See Also
TypeCompiler#getCorrespondingPrimitiveTypeName
getPrecisionback to summary
private int getPrecision(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:String

a string representing the operator, null means no operator, just a type merge

leftType:DataTypeDescriptor

the left type

rightType:DataTypeDescriptor

the left type

Returns:int

the resultant precision

getPrimitiveMethodNameback to summary
public String getPrimitiveMethodName()

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.getPrimitiveMethodName.

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.getPrimitiveMethodName.

Get the method name for getting out the corresponding primitive Java type.

Returns:String

String The method call name for getting the corresponding primitive Java type.

Annotations
@Override
getScaleback to summary
private int getScale(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:String

a string representing the operator, null means no operator, just a type merge

leftType:DataTypeDescriptor

the left type

rightType:DataTypeDescriptor

the left type

Returns:int

the resultant precision

interfaceNameback to summary
public String interfaceName()

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.interfaceName.

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.interfaceName.

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:String

The name of the interface for this type.

See Also
TypeCompiler#interfaceName
nullMethodNameback to summary
pack-priv String nullMethodName()

Implements abstract org.apache.derby.impl.sql.compile.BaseTypeCompiler.nullMethodName.

Doc from org.apache.derby.impl.sql.compile.BaseTypeCompiler.nullMethodName.

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.

resolveArithmeticOperationback to summary
public DataTypeDescriptor resolveArithmeticOperation(DataTypeDescriptor leftType, DataTypeDescriptor rightType, String operator) throws StandardException

Overrides org.apache.derby.impl.sql.compile.BaseTypeCompiler.resolveArithmeticOperation.

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.resolveArithmeticOperation.

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.resolveArithmeticOperation.

Type resolution methods on binary operators

Parameters
leftType:DataTypeDescriptor

The type of the left parameter

rightType:DataTypeDescriptor

The type of the right parameter

operator:String

The name of the operator (e.g. "+").

Returns:DataTypeDescriptor

The type of the result

Annotations
@Override
Exceptions
StandardException:
Thrown on error
See Also
TypeCompiler#resolveArithmeticOperation
storableback to summary
public boolean storable(TypeId otherType, ClassFactory cf)

Implements org.apache.derby.iapi.sql.compile.TypeCompiler.storable.

Doc from org.apache.derby.iapi.sql.compile.TypeCompiler.storable.

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:TypeId

The TypeId of the other type to compare this type to

cf:ClassFactory

A ClassFactory

Returns:boolean

true if the other type can be stored in a column of this type.

See Also
TypeCompiler#storable