1 package com.daffodilwoods.daffodildb.server.sql99.expression. 2 numericvalueexpression; 3 4 import com.daffodilwoods.daffodildb.server.serversystem.*; 5 import com.daffodilwoods.daffodildb.server.sql99.common.*; 6 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*; 7 import com.daffodilwoods.daffodildb.server.sql99.token.*; 8 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 9 import com.daffodilwoods.daffodildb.utils.field.*; 10 import com.daffodilwoods.database.resource.*; 11 12 public class numericvalueexpressionSminussign1770466157term 13 extends AbstractTerm 14 implements numericvalueexpression, Datatypes, 15 _sortspecificationAndselectSubList { 16 17 public term _term0; 18 public Sminussign1770466157 _Sminussign17704661571; 19 public numericvalueexpression _numericvalueexpression2; 20 21 public int getDataType(Object object) throws DException { 22 return super.getDataType(object, null); 23 } 24 25 int dtType=-1; public _Reference[] checkSemantic(_ServerSession parent) throws DException { 27 _Reference[] refs = super.checkSemantic(parent); 28 if (refs == null || refs.length == 0) { ByteComparison bc1 = _numericvalueexpression2.getByteComparison(parent); 30 ByteComparison bc2 = _term0.getByteComparison(parent); 31 checkSemantic(parent, bc1, bc2); 32 } 33 setAppropriateDatatypeAndCheck(parent); 34 return refs; 35 } 36 37 private void setAppropriateDatatypeAndCheck(Object object) throws DException { 38 ColumnDetails[] Rcd = _term0.getColumnDetails(); 39 ColumnDetails[] cd = _numericvalueexpression2.getColumnDetails(); 40 int dataType1 = 0; 41 int dataType2 = 0; 42 switch (cd.length) { 43 case 0: switch (Rcd.length) { 45 case 0: dataType1 = getDataTypeForByte(childs[0].getByteComparison(object)); 47 dataType2 = getDataTypeForByte(childs[1].getByteComparison(object)); 48 break; 49 default: 50 dataType1 = dataType2 = getDataTypeForByte(childs[1]. 51 getByteComparison(object)); 52 Rcd[0].setDatatype(dataType2); 53 } 54 break; 55 default: 56 switch (Rcd.length) { 57 case 0: dataType2 = dataType1 = getDataTypeForByte(childs[0]. 59 getByteComparison(object)); 60 cd[0].setDatatype(dataType1); break; 62 default: 63 64 if (cd[0].getQuestion()) { 65 switch (Rcd[0].getDatatype()) { 66 case -1: 67 cd[0].setDatatype(15); Rcd[0].setDatatype(15); dataType1 = 15; 70 dataType2 = 15; 71 break; 72 case BYTE: 73 case TINYINT: 74 case SHORT: 75 case SMALLINT: 76 case INTEGER: 77 case INT: 78 case LONG: 79 case BIGINT: 80 case BIGDECIMAL: 81 case DEC: 82 case DECIMAL: 83 case NUMERIC: 84 case REAL: 85 case DOUBLE: 86 case FLOAT: 87 case DOUBLEPRECISION: 88 cd[0].setDatatype(15); 89 dataType1 = 15; 90 dataType2 = getDataTypeForByte(childs[1].getByteComparison( 91 object)); 92 break; 93 case CHARACTER: 94 case VARCHAR: 95 case CHAR: 96 case CHARACTERVARYING: 97 throw new DException("DSE87", new Object [] {"CHARACTER", 98 "UNKNOWN"}); 99 case DATE: 100 case TIMESTAMP: 101 cd[0].setDatatype(5); 102 dataType1 = 5; 103 dataType2 = getDataTypeForByte(childs[1].getByteComparison( 104 object)); 105 break; 106 case TIME: 107 throw new DException("DSE87", new Object [] {"TIME", "UNKNOWN"}); 108 109 default: 110 dataType1 = getDataTypeForByte(childs[0].getByteComparison( 111 object)); 112 dataType2 = getDataTypeForByte(childs[1].getByteComparison( 113 object)); 114 115 } 116 117 } 118 else { 119 if (Rcd[0].getQuestion()) { 120 switch (cd[0].getDatatype()) { 121 case -1: 122 cd[0].setDatatype(15); Rcd[0].setDatatype(15); dataType1 = 15; 125 dataType2 = 15; 126 break; 127 case BYTE: 128 case TINYINT: 129 case SHORT: 130 case SMALLINT: 131 case INTEGER: 132 case INT: 133 case LONG: 134 case BIGINT: 135 case BIGDECIMAL: 136 case DEC: 137 case DECIMAL: 138 case NUMERIC: 139 case REAL: 140 case DOUBLE: 141 case FLOAT: 142 case DOUBLEPRECISION: 143 Rcd[0].setDatatype(15); 144 dataType2 = 15; 145 dataType1 = cd[0].getDatatype(); 146 break; 147 case CHARACTER: 148 case VARCHAR: 149 case CHAR: 150 case CHARACTERVARYING: 151 throw new DException("DSE87", new Object [] {"CHARACTER", 152 "UNKNOWN"}); 153 case DATE: 154 case TIMESTAMP: 155 Rcd[0].setDatatype(5); 156 dataType1 = 5; 157 dataType2 = cd[0].getDatatype(); 158 break; 159 case TIME: 160 throw new DException("DSE87", new Object [] {"TIME", 161 "UNKNOWN"}); 162 default: 163 dataType1 = getDataTypeForByte(childs[0].getByteComparison( 164 object)); 165 dataType2 = getDataTypeForByte(childs[1].getByteComparison( 166 object)); 167 } 168 } 169 else { 170 dataType1 = getDataTypeForByte(childs[0].getByteComparison( 171 object)); 172 dataType2 = getDataTypeForByte(childs[1].getByteComparison( 173 object)); 174 175 } 176 177 } 178 } 179 } 180 dtType = GeneralPurposeStaticClass.getDataTypeForArithmetic(dataType1, 181 dataType2); 182 } 183 184 public AbstractRowValueExpression[] getChilds() { 185 AbstractRowValueExpression[] childs = new AbstractRowValueExpression[] { 186 (AbstractRowValueExpression) (_numericvalueexpression2), 187 (AbstractRowValueExpression) (_term0)}; 188 return childs; 189 } 190 191 public String toString() { 192 StringBuffer sb = new StringBuffer (); 193 sb.append(" "); 194 sb.append(_numericvalueexpression2); 195 sb.append(" "); 196 sb.append(_Sminussign17704661571); 197 sb.append(" "); 198 sb.append(_term0); 199 return sb.toString(); 200 } 201 202 public Object clone() throws CloneNotSupportedException { 203 numericvalueexpressionSminussign1770466157term tempClass = new 204 numericvalueexpressionSminussign1770466157term(); 205 tempClass._term0 = (term) _term0.clone(); 206 tempClass._Sminussign17704661571 = (Sminussign1770466157) 207 _Sminussign17704661571.clone(); 208 tempClass._numericvalueexpression2 = (numericvalueexpression) 209 _numericvalueexpression2.clone(); 210 return tempClass; 211 } 212 213 public FieldBase getObject(int type1, int type2, Object result1, 214 Object result2) throws DException { 215 return GeneralPurposeStaticClass.minus(type1, type2, result1, result2); 216 217 } 218 219 public ColumnDetails[] getColumnDetails() throws DException { 220 ColumnDetails cd[] = super.getColumnDetails(); 221 if (cd.length == 1) 222 return cd; 223 224 ColumnDetails columnDetail = new ColumnDetails(); 225 String str = toString(); 226 columnDetail.setColumn(new String [] {str}); 227 columnDetail.setType(FUNCTIONAL); 228 columnDetail.setObject(this); 229 columnDetail.setExpression(str); 230 return new ColumnDetails[] { 231 columnDetail}; 232 } 233 234 public ColumnDetails[] getChildColumnDetails() throws DException { 235 return columnDetails; 236 } 237 238 248 public ParameterInfo[] getParameterInfo() throws DException { 249 ParameterInfo[] parameterInfo = super.getParameterInfo(); 250 for (int i = 0; i < parameterInfo.length; i++) { 251 if (parameterInfo[i].getQuestionMark()) { 252 for (int j = 0; j < columnDetails.length; j++) 253 if (columnDetails[j].getQuestion()) 254 parameterInfo[i].setDataType(columnDetails[j].getDatatype()); } 256 } 257 return parameterInfo; 258 } 259 260 public int getAppropriateDataType(Object object) throws DException{ 261 try { 262 if (dtType == -1) { 263 setAppropriateDatatypeAndCheck(object); 264 } 265 } 266 catch (DException ex) { 267 return 0; 268 } 269 return dtType; 270 271 } 272 } 273 | Popular Tags |