1 package com.daffodilwoods.daffodildb.server.sql99.expression.expressionprimary; 2 3 import java.math.*; 4 import java.util.*; 5 6 import com.daffodilwoods.daffodildb.server.sql99.common.*; 7 import com.daffodilwoods.daffodildb.server.sql99.expression.*; 8 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.predicates.*; 9 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*; 10 import com.daffodilwoods.daffodildb.server.sql99.token.*; 11 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 12 import com.daffodilwoods.daffodildb.utils.*; 13 import com.daffodilwoods.daffodildb.utils.field.*; 14 import com.daffodilwoods.database.resource.*; 15 16 public class searchedcase extends AbstractValueExpression implements casespecification, _sortspecificationAndselectSubList, TypeConstants, Datatypes { 17 18 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439220; 19 public elseclause _Optelseclause1; 20 public searchedwhenclause[] _Repsearchedwhenclause2; 21 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223; 22 23 private int datatype = -1; 24 private int[] datatype2; 25 private int datatype3 = -1; 26 private int size = -1; 27 private int[] size2; 28 private int size3 = -1; 29 30 public Object run(Object object) throws com.daffodilwoods.database.resource.DException { 31 if (datatype == -1) { 32 datatype = getAppropriateDatatype(object); 33 size = getAppropriateSize(object); 34 } 35 FieldBase result; 36 int index = getIndexOfWhenClauseSatisfyingCondition(object); 37 if (index != -1) { 38 result = (FieldBase) _Repsearchedwhenclause2[index].run(object); 39 return result.isNull() ? result : FieldUtility.convertToAppropriateType(result, 40 datatype,size,result.getCollator()); 41 } 42 if (_Optelseclause1 != null) { 43 result = (FieldBase) _Optelseclause1.run(object); 44 return result.isNull() ? result : FieldUtility.convertToAppropriateType(result, 45 datatype,size,result.getCollator()); 46 } 47 return new FieldLiteral(FieldUtility.NULLBUFFERRANGE, datatype); 48 } 49 50 private int getIndexOfWhenClauseSatisfyingCondition(Object object) throws DException { 51 for (int i = 0; i < _Repsearchedwhenclause2.length; i++) { 52 if (_Repsearchedwhenclause2[i].isConditionSatisfied(object) == 0) { 53 return i; 54 } 55 } 56 return -1; 57 58 } 59 60 61 private ColumnDetails[] columnDetails; 62 private ColumnDetails column; 63 64 public ParameterInfo[] getParameterInfo() throws DException { 65 ArrayList list = new ArrayList(); 66 for (int i = 0; i < _Repsearchedwhenclause2.length; ++i) { 67 ParameterInfo[] temp = _Repsearchedwhenclause2[i].getParameterInfo(); 68 if (temp != null) { 69 list.addAll(Arrays.asList(temp)); 70 } 71 } 72 return (ParameterInfo[]) list.toArray(new ParameterInfo[list.size()]); 73 } 74 75 public ColumnDetails[] getChildColumnDetails() throws DException { 76 return columnDetails; 77 } 78 79 public AbstractRowValueExpression[] getChilds() { 80 int length = _Repsearchedwhenclause2.length; 81 AbstractRowValueExpression[] childs = new AbstractRowValueExpression[length]; 82 for (int i = 0; i < length; ++i) { 83 childs[i] = (AbstractRowValueExpression) _Repsearchedwhenclause2[i]; 84 } 85 return childs; 86 } 87 88 public ColumnDetails[] getColumnDetails() throws DException { 89 ColumnDetails[] columnDetails1; 90 ColumnDetails[][] details = new ColumnDetails[_Repsearchedwhenclause2.length][]; 91 int length = 0; 92 for (int i = 0; i < _Repsearchedwhenclause2.length; i++) { 93 details[i] = _Repsearchedwhenclause2[i] == null ? new ColumnDetails[0] : _Repsearchedwhenclause2[i].getColumnDetails(); 94 length += details[i].length; 95 } 96 columnDetails1 = new ColumnDetails[length]; 97 int index = 0; 98 for (int i = 0; i < details.length; i++) { 99 ColumnDetails[] cds = (ColumnDetails[]) details[i]; 100 for (int j = 0; j < cds.length; j++) { 101 columnDetails1[index++] = cds[j]; 102 } 103 } 104 ColumnDetails[] columnDetails2 = null; 105 if (_Optelseclause1 != null) { 106 columnDetails2 = _Optelseclause1.getColumnDetails(); 107 } 108 column = new ColumnDetails(); 109 column.setColumn(new String [] {toString()}); 110 column.setType(CASEEXPRESSION); 111 column.setObject(this); 112 this.columnDetails = columnDetails2 != null ? StaticClass.mergeColumnDetails(columnDetails1, columnDetails2) : columnDetails1; 113 return new ColumnDetails[] {column}; 114 } 115 116 private int getAppropriateDatatype(Object object) throws DException { 117 int max = -1; 118 int length = _Repsearchedwhenclause2.length; 119 datatype2 = new int[length]; 120 for (int i = 0; i < length; i++) { 121 setDataTypeForNull(_Repsearchedwhenclause2[i], object); 122 datatype2[i] = _Repsearchedwhenclause2[i].getByteComparison(object). 123 getDataTypes()[0]; 124 max = datatype2[i] > max ? datatype2[i] : max; 125 } 126 if (_Optelseclause1 != null) { 127 datatype3 = _Optelseclause1.getByteComparison(object).getDataTypes()[0]; 128 size = ( (max == CHAR || max == CHARACTER) && (datatype3 == CHAR || max == CHARACTER )) ? 255 : -1 ; 129 max = datatype3 > max ? datatype3 : max; 130 } 131 return GeneralPurposeStaticClass.isCharacterType(max)?VARCHAR:max; 132 133 } 134 private int getAppropriateSize(Object object) throws DException { 135 int max = -1; 136 int length = _Repsearchedwhenclause2.length; 137 size2 = new int[length]; 138 for (int i = 0; i < length; i++) { 139 size2[i] = _Repsearchedwhenclause2[i].getByteComparison(object). 140 getSize(); 141 max = size2[i] > max ? size2[i] : max; 142 } 143 if (_Optelseclause1 != null) { 144 size3 = _Optelseclause1.getByteComparison(object).getSize(); 145 max = size3 > max ? size3 : max; 146 } 147 148 if (datatype == DEC || datatype == NUMERIC || datatype == DECIMAL || 149 datatype == BIGDECIMAL) { 150 size = 38; 151 } 152 return max > size ? max : size ; 153 } 154 155 public com.daffodilwoods.daffodildb.server.sql99.utils._Reference[] checkSemantic(com.daffodilwoods.daffodildb.server.serversystem._ServerSession parent) throws DException { 156 _Reference[] ref = null; 157 int length = _Repsearchedwhenclause2.length; 158 for (int i = 0; i < length; i++) { 159 ref = GeneralPurposeStaticClass.getJointReferences(ref, _Repsearchedwhenclause2[i].checkSemantic(parent)); 160 } 161 if (_Optelseclause1 != null) { 162 ref = GeneralPurposeStaticClass.getJointReferences(ref, _Optelseclause1.checkSemantic(parent)); 163 } 164 getAppropriateDatatype(parent); for (int i = 1; i < length; i++) { 166 Check.checkForDatatype(datatype2[0], datatype2[i]); 167 } 168 if (_Optelseclause1 != null) { 169 Check.checkForDatatype(datatype2[0], datatype3); 170 } 171 return ref; 172 } 173 174 private FieldBase getResult(FieldBase fBase) throws DException { 175 Object object = fBase.getObject(); 176 switch(datatype){ 177 case BYTE : case TINYINT : 178 return new FieldLiteral( new Byte ("" + object) , BYTE); 179 case SHORT : case SMALLINT : 180 return new FieldLiteral( new Short ("" + object ) , SHORT); 181 case INTEGER : case INT : 182 return new FieldLiteral( new Integer ("" + object ) , INTEGER); 183 case LONG : case BIGINT : 184 return new FieldLiteral( new Long ("" + object) , LONG); 185 case REAL : 186 return new FieldLiteral( new Float ("" + object ) , REAL); 187 case DOUBLE : case FLOAT : case DOUBLEPRECISION : 188 return new FieldLiteral( new Double ("" + object ) , DOUBLE); 189 case BIGDECIMAL : case DEC : case DECIMAL : case NUMERIC : 190 return new FieldLiteral( new BigDecimal("" + object ) , BIGDECIMAL); 191 case CHARACTER :case VARCHAR: case CHAR: case CHARACTERVARYING: 192 return new FieldStringLiteral( object.toString() , CHARACTER ) ; 193 194 case BOOLEAN : 195 return new FieldLiteral(new Boolean ("" + object) , BOOLEAN); 196 default : 197 throw new DException("DSE514",new Object []{new Integer (datatype)}); 198 } 199 } 200 201 public String toString() { 202 StringBuffer sb = new StringBuffer (); 203 sb.append(" "); 204 sb.append(_SRESERVEDWORD12065439223); 205 sb.append(" "); 206 for (int i = 0; i < _Repsearchedwhenclause2.length; i++) { 207 sb.append(_Repsearchedwhenclause2[i]); 208 } 209 sb.append(" "); 210 if (_Optelseclause1 != null) { 211 sb.append(_Optelseclause1); 212 } 213 sb.append(" "); 214 sb.append(_SRESERVEDWORD12065439220); 215 return sb.toString(); 216 } 217 218 public Object clone() throws CloneNotSupportedException { 219 searchedcase tempClass = new searchedcase(); 220 tempClass._SRESERVEDWORD12065439220 = (SRESERVEDWORD1206543922) _SRESERVEDWORD12065439220.clone(); 221 if (_Optelseclause1 != null) { 222 tempClass._Optelseclause1 = (elseclause) _Optelseclause1.clone(); 223 } 224 searchedwhenclause[] temp_Repsearchedwhenclause2 = new searchedwhenclause[_Repsearchedwhenclause2.length]; 225 for (int i = 0; i < _Repsearchedwhenclause2.length; i++) { 226 temp_Repsearchedwhenclause2[i] = (searchedwhenclause) _Repsearchedwhenclause2[i].clone(); 227 } 228 tempClass._Repsearchedwhenclause2 = temp_Repsearchedwhenclause2; 229 tempClass._SRESERVEDWORD12065439223 = (SRESERVEDWORD1206543922) _SRESERVEDWORD12065439223.clone(); 230 return tempClass; 231 } 232 233 public ByteComparison getByteComparison(Object object) throws DException { 234 ByteComparison bc = new ByteComparison(false, new int[] {getAppropriateDatatype(object)}); 235 bc.setSize(getAppropriateSize(object)); 236 return bc; 237 } 238 241 private void setDataTypeForNull(searchedwhenclause searchClause, 242 Object object) throws DException { 243 if (searchClause._result0.toString().trim().equalsIgnoreCase("null") && 244 (_Optelseclause1 != null)) { 245 searchClause._result0.getColumnDetails()[0].setDatatype(_Optelseclause1. 246 getByteComparison(object).getDataTypes()[0]); 247 } 248 if (_Optelseclause1 != null && 249 _Optelseclause1._result0.toString().trim().equalsIgnoreCase("null")) { 250 _Optelseclause1.getColumnDetails()[0].setDatatype(searchClause. 251 getByteComparison(object).getDataTypes()[0]); 252 } 253 } 254 255 } 256 | Popular Tags |