KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > expression > numericvalueexpression > numericvalueexpressionSminussign1770466157term


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 JavaDoc object) throws DException {
22     return super.getDataType(object, null);
23   }
24
25 int dtType=-1;//Done by Sandeep
26
public _Reference[] checkSemantic(_ServerSession parent) throws DException {
27     _Reference[] refs = super.checkSemantic(parent);
28     if (refs == null || refs.length == 0) { // check put by Kaushik on 14/07/2004 for 'invalid column' problem in DDL
29
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 JavaDoc 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: // for subquery
44
switch (Rcd.length) {
45           case 0: //for subquery
46
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: //Handle subqueryThrow error Here
58
dataType2 = dataType1 = getDataTypeForByte(childs[0].
59                 getByteComparison(object));
60             cd[0].setDatatype(dataType1); //Datatypes.BIGDECIMAL
61
break;
62           default:
63
64             if (cd[0].getQuestion()) {
65               switch (Rcd[0].getDatatype()) {
66                 case -1:
67                   cd[0].setDatatype(15); //BigDecimal
68
Rcd[0].setDatatype(15); //Bigdecimal
69
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 JavaDoc[] {"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 JavaDoc[] {"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); //BigDecimal
123
Rcd[0].setDatatype(15); //Bigdecimal
124
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 JavaDoc[] {"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 JavaDoc[] {"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 JavaDoc toString() {
192     StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
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 JavaDoc clone() throws CloneNotSupportedException JavaDoc {
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 JavaDoc result1,
214                              Object JavaDoc 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 JavaDoc str = toString();
226     columnDetail.setColumn(new String JavaDoc[] {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   /* Method overridden by Kaushik to solve Bug no. 11993
239      public ParameterInfo[] getParameterInfo() throws DException {
240      ParameterInfo[] parameterInfo = super.getParameterInfo();
241      for (int i = 0; i < parameterInfo.length; i++) {
242      if(parameterInfo[i].getQuestionMark()){
243         parameterInfo[i].setDataType(Datatypes.BIGDECIMAL);
244      }
245      }
246      return parameterInfo;
247    }*/

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()); //BIGDECIMAL
255
}
256     }
257     return parameterInfo;
258   }
259
260 public int getAppropriateDataType(Object JavaDoc 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