001: /*
002:
003: Derby - Class org.apache.derby.impl.sql.compile.BooleanTypeCompiler
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.sql.compile;
023:
024: import org.apache.derby.iapi.services.loader.ClassFactory;
025:
026: import org.apache.derby.iapi.error.StandardException;
027:
028: import org.apache.derby.iapi.reference.SQLState;
029:
030: import org.apache.derby.iapi.types.DataTypeDescriptor;
031: import org.apache.derby.iapi.types.BooleanDataValue;
032: import org.apache.derby.iapi.types.TypeId;
033:
034: import org.apache.derby.iapi.sql.compile.TypeCompiler;
035:
036: import org.apache.derby.catalog.types.BaseTypeIdImpl;
037: import org.apache.derby.iapi.reference.ClassName;
038:
039: import java.sql.Types;
040:
041: /**
042: * This class implements TypeCompiler for the SQL BOOLEAN datatype.
043: *
044: * @author Jerry Brenner
045: */
046:
047: public class BooleanTypeCompiler extends BaseTypeCompiler {
048: /**
049: * Tell whether this type (boolean) can be compared to the given type.
050: *
051: * @param otherType The TypeId of the other type.
052: */
053:
054: public boolean comparable(TypeId otherType, boolean forEquals,
055: ClassFactory cf) {
056: TypeId this TypeId = getTypeId();
057: TypeCompiler otherTypeCompiler = getTypeCompiler(otherType);
058:
059: /* Only allow comparison of Boolean with Boolean or string types */
060: return otherType.getSQLTypeName().equals(
061: this TypeId.getSQLTypeName())
062: || otherType.isStringTypeId()
063: || otherType.isNumericTypeId()
064: || (otherType.userType() && otherTypeCompiler
065: .comparable(this TypeId, forEquals, cf));
066: }
067:
068: /**
069: * Tell whether this type (boolean) can be converted to the given type.
070: *
071: * @see TypeCompiler#convertible
072: */
073: public boolean convertible(TypeId otherType,
074: boolean forDataTypeFunction) {
075: int otherJDBCTypeId = otherType.getJDBCTypeId();
076:
077: if ((otherJDBCTypeId == Types.DATE)
078: || (otherJDBCTypeId == Types.TIME)
079: || (otherJDBCTypeId == Types.TIMESTAMP)) {
080: return false;
081: }
082:
083: return true;
084: }
085:
086: /**
087: * Tell whether this type (boolean) is compatible with the given type.
088: *
089: * @param otherType The TypeId of the other type.
090: */
091: public boolean compatible(TypeId otherType) {
092: return convertible(otherType, false);
093: }
094:
095: /** @see TypeCompiler#storable */
096: public boolean storable(TypeId otherType, ClassFactory cf) {
097: /* Are the types the same or is other type a string or number type? */
098: if (otherType.isBooleanTypeId() || otherType.isStringTypeId()
099: || otherType.isNumericTypeId()) {
100: return true;
101: }
102:
103: /*
104: ** If the other type is user-defined, use the java types to determine
105: ** assignability.
106: */
107: return userTypeStorable(getTypeId(), otherType, cf);
108: }
109:
110: /** @see TypeCompiler#interfaceName */
111: public String interfaceName() {
112: return ClassName.BooleanDataValue;
113: }
114:
115: /**
116: * @see TypeCompiler#getCorrespondingPrimitiveTypeName
117: */
118:
119: public String getCorrespondingPrimitiveTypeName() {
120: /* Only numerics and booleans get mapped to Java primitives */
121: return "boolean";
122: }
123:
124: /**
125: * Get the method name for getting out the corresponding primitive
126: * Java type.
127: *
128: * @return String The method call name for getting the
129: * corresponding primitive Java type.
130: */
131: public String getPrimitiveMethodName() {
132: return "getBoolean";
133: }
134:
135: /**
136: * @see TypeCompiler#getCastToCharWidth
137: */
138: public int getCastToCharWidth(DataTypeDescriptor dts) {
139: return TypeCompiler.BOOLEAN_MAXWIDTH_AS_CHAR;
140: }
141:
142: protected String nullMethodName() {
143: return "getNullBoolean";
144: }
145: }
|