Class UserDefinedTypeCompiler
- java.lang.Object
-
- org.apache.derby.impl.sql.compile.BaseTypeCompiler
-
- org.apache.derby.impl.sql.compile.UserDefinedTypeCompiler
-
- All Implemented Interfaces:
TypeCompiler
public class UserDefinedTypeCompiler extends BaseTypeCompiler
-
-
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
Constructors Constructor Description UserDefinedTypeCompiler()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
compatible(TypeId otherType)
Determine if this type is compatible to some other type (e.g.boolean
convertible(TypeId otherType, boolean forDataTypeFunction)
Right now, casting is not allowed from one user defined type to another.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.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.boolean
storable(TypeId otherType, ClassFactory cf)
ANSI UDTs can only be stored into values of exactly their own type.-
Methods inherited from class org.apache.derby.impl.sql.compile.BaseTypeCompiler
dataValueMethodName, generateNull, getPrimitiveMethodName, getStoredFormatIdFromTypeId, getTypeCompiler, getTypeId, numberConvertible, numberStorable, pushCollationForDataValue, resolveArithmeticOperation, setTypeId, userTypeStorable
-
-
-
-
Method Detail
-
convertible
public boolean convertible(TypeId otherType, boolean forDataTypeFunction)
Right now, casting is not allowed from one user defined type to another.- Parameters:
otherType
-forDataTypeFunction
-- Returns:
- true if otherType is convertible to this type, else false.
- See Also:
TypeCompiler.convertible(org.apache.derby.iapi.types.TypeId, boolean)
-
compatible
public boolean compatible(TypeId otherType)
Description copied from interface:TypeCompiler
Determine if this type is compatible to some other type (e.g. COALESCE(thistype, othertype)).- Parameters:
otherType
- The CompilationType of the other type to compare this type to- Returns:
- true if the types are compatible, false if not compatible
- See Also:
TypeCompiler.compatible(org.apache.derby.iapi.types.TypeId)
-
storable
public boolean storable(TypeId otherType, ClassFactory cf)
ANSI UDTs can only be stored into values of exactly their own type. This restriction can be lifted when we implement the ANSI subclassing clauses. Old-style User types are storable into other user types that they are assignable to. The other type must be a subclass of this type, or implement this type as one of its interfaces.- Parameters:
otherType
- the type of the instance to store into this type.cf
- A ClassFactory- Returns:
- true if otherType is storable into this type, else false.
-
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()
-
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)
-
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 classBaseTypeCompiler
-
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 interfaceTypeCompiler
- Overrides:
generateDataValue
in classBaseTypeCompiler
- Parameters:
mb
- The method to put the expression incollationType
- 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)
-
-