KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.expression.
2     numericvalueexpression;
3
4 import java.math.*;
5
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.sql99.common.*;
8 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*;
9 import com.daffodilwoods.daffodildb.server.sql99.token.*;
10 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
11 import com.daffodilwoods.daffodildb.utils.field.*;
12 import com.daffodilwoods.database.resource.*;
13
14 public class termSasterisk_344623246factor
15     extends AbstractTerm
16     implements term, Datatypes, _sortspecificationAndselectSubList {
17   public factor _factor0;
18   public Sasterisk_344623246 _Sasterisk_3446232461;
19   public term _term2;
20
21   public _Reference[] checkSemantic(_ServerSession parent) throws DException {
22     _Reference[] refs = super.checkSemantic(parent);
23     if (refs == null || refs.length == 0) { // check put by Kaushik on 14/07/2004 for 'invalid column' problem in DDL
24
ByteComparison bc1 = _term2.getByteComparison(parent);
25       ByteComparison bc2 = _factor0.getByteComparison(parent);
26       checkSemantic(parent, bc1, bc2);
27     }
28     setAppropriateDatatypeAndCheck(parent);
29     return refs;
30   }
31
32   int dtType = -1;
33   private void setAppropriateDatatypeAndCheck(Object JavaDoc object) throws DException {
34     ColumnDetails[] cd = _term2.getColumnDetails();
35     ColumnDetails[] Rcd = _factor0.getColumnDetails();
36     int dataType1 = 0;
37     int dataType2 = 0;
38     switch (cd.length) {
39       case 0: // for subquery
40
switch (Rcd.length) {
41           case 0: //for subquery
42
dataType1 = getDataTypeForByte(childs[0].getByteComparison(object));
43             dataType2 = getDataTypeForByte(childs[1].getByteComparison(object));
44             break;
45           default: //Handle Subquery
46
dataType1 = getDataTypeForByte(childs[0].getByteComparison(object));
47             Rcd[0].setDatatype(Datatypes.BIGDECIMAL);
48             dataType2 = Datatypes.BIGDECIMAL;
49         }
50         break;
51       default:
52         switch (Rcd.length) {
53           case 0: //subquery
54
dataType2 = getDataTypeForByte(childs[1].getByteComparison(object));
55             cd[0].setDatatype(Datatypes.BIGDECIMAL);
56             dataType1 = Datatypes.BIGDECIMAL;
57             break;
58           default:
59             if ( (cd[0].getQuestion() && (Rcd[0].getQuestion()))) {
60               cd[0].setDatatype(15); //BigDecimal
61
Rcd[0].setDatatype(15); //BigDecimal
62
dataType1 = 15;
63               dataType2 = 15;
64             }
65             else
66             if (cd[0].getQuestion()) {
67               dataType2 = getDataTypeForByte(childs[1].getByteComparison(object));
68               cd[0].setDatatype(15); //BigDecimal
69
dataType1 = 15;
70             }
71             else
72             if (Rcd[0].getQuestion()) {
73               dataType1 = getDataTypeForByte(childs[0].getByteComparison(object));
74               Rcd[0].setDatatype(15); //BigDecimal
75
dataType2 = 15;
76             }
77             else {
78               dataType1 = getDataTypeForByte(childs[0].getByteComparison(object));
79               dataType2 = getDataTypeForByte(childs[1].getByteComparison(object));
80
81             }
82         }
83     }
84
85
86      if (dataType1 == -1 || dataType2 == -1) { // To avoid checking for '?' when called from SemanticChecking
87
dtType = -1;
88        return;
89      }
90
91
92     switch (dataType1) {
93       case BYTE:
94       case TINYINT:
95         switch (dataType2) {
96           case BYTE:
97           case TINYINT:
98             dtType = SHORT;
99             break;
100           case SHORT:
101           case SMALLINT:
102             dtType = INTEGER;
103             break;
104           case INTEGER:
105           case INT:
106             dtType = LONG;
107             break;
108           case LONG:
109           case BIGINT:
110             dtType = BIGDECIMAL;
111             break;
112           case BIGDECIMAL:
113           case DEC:
114           case DECIMAL:
115           case NUMERIC:
116             dtType = BIGDECIMAL;
117             break;
118           case REAL:
119             dtType = FLOAT;
120             break;
121           case DOUBLE:
122           case FLOAT:
123           case DOUBLEPRECISION:
124             dtType = DOUBLE;
125             break;
126           case CHARACTER:
127           case VARCHAR:
128           case CHAR:
129           case CHARACTERVARYING:
130             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "BYTE"});
131             /* Done by vibha*/
132           case DATE:
133           case TIMESTAMP:
134           case TIME:
135             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
136                                  "BYTE"});
137         }
138         break;
139       case SHORT:
140       case SMALLINT:
141         switch (dataType2) {
142           case BYTE:
143           case TINYINT:
144             dtType = INTEGER;
145             break;
146           case SHORT:
147           case SMALLINT:
148             dtType = INTEGER;
149             break;
150           case INTEGER:
151           case INT:
152             dtType = LONG;
153             break;
154           case LONG:
155           case BIGINT:
156             dtType = BIGDECIMAL;
157             break;
158           case BIGDECIMAL:
159           case DEC:
160           case DECIMAL:
161           case NUMERIC:
162             dtType = BIGDECIMAL;
163             break;
164           case REAL:
165             dtType = DOUBLE;
166             break;
167           case DOUBLE:
168           case FLOAT:
169           case DOUBLEPRECISION:
170             dtType = BIGDECIMAL;
171             break;
172           case CHARACTER:
173           case VARCHAR:
174           case CHAR:
175           case CHARACTERVARYING:
176             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "SHORT"});
177             /* Done by vibha*/
178           case DATE:
179           case TIMESTAMP:
180           case TIME:
181             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
182                                  "SORT"});
183         }
184         break;
185       case INTEGER:
186       case INT:
187         switch (dataType2) {
188
189           case BYTE:
190           case TINYINT:
191             dtType = LONG;
192             break;
193           case SHORT:
194           case SMALLINT:
195             dtType = LONG;
196             break;
197
198           case INTEGER:
199           case INT:
200             dtType = LONG;
201             break;
202           case LONG:
203           case BIGINT:
204             dtType = DOUBLE;
205             break;
206           case BIGDECIMAL:
207           case DEC:
208           case DECIMAL:
209           case NUMERIC:
210             dtType = BIGDECIMAL;
211             break;
212           case REAL:
213             dtType = DOUBLE;
214             break;
215           case DOUBLE:
216           case FLOAT:
217           case DOUBLEPRECISION:
218             dtType = BIGDECIMAL;
219             break;
220           case CHARACTER:
221           case VARCHAR:
222           case CHAR:
223           case CHARACTERVARYING:
224             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "INT"});
225             /* Done by vibha*/
226           case DATE:
227           case TIMESTAMP:
228           case TIME:
229             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
230                                  "INT"});
231         }
232         break;
233       case LONG:
234       case BIGINT:
235         switch (dataType2) {
236           case BYTE:
237           case TINYINT:
238             dtType = BIGDECIMAL;
239             break;
240           case SHORT:
241           case SMALLINT:
242             dtType = DOUBLE;
243             break;
244           case INTEGER:
245           case INT:
246             dtType = DOUBLE;
247             break;
248           case LONG:
249           case BIGINT:
250             dtType = DOUBLE;
251             break;
252           case BIGDECIMAL:
253           case DEC:
254           case DECIMAL:
255           case NUMERIC:
256             dtType = BIGDECIMAL;
257             break;
258           case REAL:
259             dtType = DOUBLE;
260             break;
261           case DOUBLE:
262           case FLOAT:
263           case DOUBLEPRECISION:
264             dtType = BIGDECIMAL;
265             break;
266           case CHARACTER:
267           case VARCHAR:
268           case CHAR:
269           case CHARACTERVARYING:
270             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "LONG"});
271             /* Done by vibha*/
272           case DATE:
273           case TIMESTAMP:
274           case TIME:
275             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
276                                  "LONG"});
277         }
278         break;
279       case BIGDECIMAL:
280       case DEC:
281       case DECIMAL:
282       case NUMERIC:
283         switch (dataType2) {
284           case SHORT:
285           case SMALLINT:
286             dtType = BIGDECIMAL;
287             break;
288           case BYTE:
289           case TINYINT:
290             dtType = BIGDECIMAL;
291             break;
292           case INTEGER:
293           case INT:
294             dtType = BIGDECIMAL;
295             break;
296           case DOUBLE:
297           case FLOAT:
298           case DOUBLEPRECISION:
299             dtType = BIGDECIMAL;
300             break;
301           case REAL:
302             dtType = BIGDECIMAL;
303             break;
304           case LONG:
305           case BIGINT:
306             dtType = BIGDECIMAL;
307             break;
308           case BIGDECIMAL:
309           case DEC:
310           case DECIMAL:
311           case NUMERIC:
312             dtType = BIGDECIMAL;
313             break;
314           case CHARACTER:
315           case VARCHAR:
316           case CHAR:
317           case CHARACTERVARYING:
318             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER",
319                                  "BIGDECIMAL"});
320             /* Done by vibha*/
321           case DATE:
322           case TIMESTAMP:
323           case TIME:
324             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
325                                  "BIGDECIMAL"});
326         }
327         break;
328       case REAL:
329         switch (dataType2) {
330           case SHORT:
331           case SMALLINT:
332             dtType = DOUBLE;
333             break;
334           case BYTE:
335           case TINYINT:
336             dtType = DOUBLE;
337             break;
338           case INTEGER:
339           case INT:
340             dtType = DOUBLE;
341             break;
342           case LONG:
343           case BIGINT:
344             dtType = DOUBLE;
345             break;
346           case BIGDECIMAL:
347           case DEC:
348           case DECIMAL:
349           case NUMERIC:
350             dtType = BIGDECIMAL;
351             break;
352           case REAL:
353             dtType = DOUBLE;
354             break;
355           case DOUBLE:
356           case FLOAT:
357           case DOUBLEPRECISION:
358             dtType = BIGDECIMAL;
359             break;
360           case CHARACTER:
361           case VARCHAR:
362           case CHAR:
363           case CHARACTERVARYING:
364             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "FLOAT"});
365             /* Done by vibha*/
366           case DATE:
367           case TIMESTAMP:
368           case TIME:
369             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
370                                  "FLOAT"});
371         }
372         break;
373       case DOUBLE:
374       case FLOAT:
375       case DOUBLEPRECISION:
376         switch (dataType2) {
377           case SHORT:
378           case SMALLINT:
379             dtType = BIGDECIMAL;
380             break;
381           case BYTE:
382           case TINYINT:
383             dtType = BIGDECIMAL;
384             break;
385           case INTEGER:
386           case INT:
387             dtType = BIGDECIMAL;
388             break;
389           case LONG:
390           case BIGINT:
391             dtType = BIGDECIMAL;
392             break;
393           case BIGDECIMAL:
394           case DEC:
395           case DECIMAL:
396           case NUMERIC:
397             dtType = BIGDECIMAL;
398             break;
399           case REAL:
400             dtType = BIGDECIMAL;
401             break;
402           case DOUBLE:
403           case FLOAT:
404           case DOUBLEPRECISION:
405             dtType = BIGDECIMAL;
406             break;
407           case CHARACTER:
408           case VARCHAR:
409           case CHAR:
410           case CHARACTERVARYING:
411             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "DOUBLE"});
412             /* Done by vibha*/
413           case DATE:
414           case TIMESTAMP:
415           case TIME:
416             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
417                                  "DOUBLE"});
418         }
419         break;
420       case CHARACTER:
421       case VARCHAR:
422       case CHAR:
423       case CHARACTERVARYING:
424         switch (dataType2) {
425           case BYTE:
426             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "BYTE"});
427           case SHORT:
428           case SMALLINT:
429             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "SHORT"});
430           case INTEGER:
431           case INT:
432             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "INT"});
433           case LONG:
434           case BIGINT:
435             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "LONG"});
436           case BIGDECIMAL:
437           case DEC:
438           case DECIMAL:
439           case NUMERIC:
440             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER",
441                                  "BIGDECIMAL"});
442           case REAL:
443             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "FLOAT"});
444           case DOUBLE:
445           case FLOAT:
446           case DOUBLEPRECISION:
447             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "DOUBLE"});
448           case DATE:
449           case TIME:
450           case TIMESTAMP:
451             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER",
452                                  "DATE/TIME/TIMESTAMP"});
453           case CHARACTER:
454           case VARCHAR:
455           case CHAR:
456           case CHARACTERVARYING:
457             throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER",
458                                  "CHARACTER"});
459
460         }
461         break;
462         /*Done by vibha*/
463         /** case DATE:
464               switch (dataType2) {
465                 case BYTE:
466                 case TINYINT:
467                 case SHORT:
468                 case INT:
469                 case INTEGER:
470                 case LONG:
471                 case BIGINT:
472                 case REAL:
473                 case DOUBLE:
474                 case FLOAT:
475                 case DOUBLEPRECISION:
476                 case SMALLINT:
477                 case BIGDECIMAL:
478                 case DEC:
479                 case DECIMAL:
480                 case NUMERIC:
481                 case DATE:
482                           dtType = DATE;
483                 case TIME:
484                 case TIMESTAMP:
485          throw new DException("DSE87", new Object[] {"DATE/TIME/TIMESTAMP",
486                                        "DATE/TIME/TIMESTAMP"});
487
488               }
489
490             case TIMESTAMP:
491               switch (dataType2) {
492                 case SHORT:
493                 case SMALLINT:
494                 case INTEGER:
495                 case INT:
496                 case LONG:
497                 case BIGINT:
498                 case BIGDECIMAL:
499                 case DEC:
500                 case DECIMAL:
501                 case BYTE:
502                 case NUMERIC:
503                 case REAL:
504                 case DOUBLE:
505                 case FLOAT:
506                 case DOUBLEPRECISION:
507                 case TINYINT:
508                 case TIMESTAMP:
509                           dtType = TIMESTAMP;
510                 case DATE:
511                 case TIME:
512
513          throw new DException("DSE87", new Object[] {"DATE/TIME/TIMESTAMP",
514                                        "DATE/TIME/TIMESTAMP"});
515
516               }
517          **/

518         /*Done by vibha*/
519       case DATE:
520       case TIMESTAMP:
521       case TIME:
522         switch (dataType2) {
523           case SHORT:
524           case SMALLINT:
525             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
526                                  "SHORT"});
527           case INTEGER:
528           case INT:
529             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
530                                  "INT"});
531           case LONG:
532           case BIGINT:
533             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
534                                  "LONG"});
535           case BIGDECIMAL:
536           case DEC:
537           case DECIMAL:
538           case NUMERIC:
539             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
540                                  "BIGDECIMAL"});
541           case REAL:
542             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
543                                  "FLOAT"});
544           case DOUBLE:
545           case FLOAT:
546           case DOUBLEPRECISION:
547             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
548                                  "DOUBLE"});
549           case DATE:
550           case TIME:
551           case TIMESTAMP:
552             throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
553                                  "DATE/TIME/TIMESTAMP"});
554         }
555         break;
556       default:
557         throw new DException("DSE35",
558                              new Object JavaDoc[] {StaticClass.getDataTypeName(dataType1),
559                              StaticClass.getDataTypeName(dataType2)});
560     }
561   }
562
563   public FieldBase getObject(int type1, int type2, Object JavaDoc result1,
564                              Object JavaDoc result2) throws DException {
565     try {
566       switch (type1) {
567         case BYTE:
568         case TINYINT:
569           byte operand0 = ( (Byte JavaDoc) result1).byteValue();
570           switch (type2) {
571             case BYTE:
572             case TINYINT:
573               byte s11 = ( (Byte JavaDoc) result2).byteValue();
574               return new FieldLiteral(new Short JavaDoc( (short) (operand0 * s11)),
575                                       SHORT);
576             case SHORT:
577             case SMALLINT:
578               short s1 = ( (Short JavaDoc) result2).shortValue();
579               return new FieldLiteral(new Integer JavaDoc( (int) (operand0 * s1)),
580                                       INTEGER);
581             case INTEGER:
582             case INT:
583               int s2 = ( (Integer JavaDoc) result2).intValue();
584               return new FieldLiteral(new Long JavaDoc( (operand0 * s2)), LONG);
585             case LONG:
586             case BIGINT:
587               long s3 = ( (Long JavaDoc) result2).longValue();
588               return new FieldLiteral(new BigDecimal("" + (operand0 * s3)),
589                                       BIGDECIMAL);
590             case BIGDECIMAL:
591             case DEC:
592             case DECIMAL:
593             case NUMERIC:
594               BigDecimal bbb = new BigDecimal(operand0 + "");
595               return new FieldLiteral(bbb.multiply( (BigDecimal) result2),
596                                       BIGDECIMAL);
597             case REAL:
598               float s4 = ( (Float JavaDoc) result2).floatValue();
599               return new FieldLiteral(new Double JavaDoc(operand0 * s4), DOUBLE);
600             case DOUBLE:
601             case FLOAT:
602             case DOUBLEPRECISION:
603               double s5 = ( (Double JavaDoc) result2).doubleValue();
604               return new FieldLiteral(new Double JavaDoc(operand0 * s5), DOUBLE);
605             case CHARACTER:
606             case VARCHAR:
607             case CHAR:
608             case CHARACTERVARYING:
609               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "BYTE"});
610             case DATE:
611             case TIME:
612             case TIMESTAMP:
613               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
614                                    "BYTE"});
615           }
616           break;
617         case SHORT:
618         case SMALLINT:
619           short operand = ( (Short JavaDoc) result1).shortValue();
620           switch (type2) {
621             case BYTE:
622             case TINYINT:
623               byte s11 = ( (Byte JavaDoc) result2).byteValue();
624               return new FieldLiteral(new Integer JavaDoc( (int) (operand * s11)),
625                                       INTEGER);
626             case SHORT:
627             case SMALLINT:
628               short s1 = ( (Short JavaDoc) result2).shortValue();
629               return new FieldLiteral(new Integer JavaDoc( (int) (operand * s1)),
630                                       INTEGER);
631             case INTEGER:
632             case INT:
633               int s2 = ( (Integer JavaDoc) result2).intValue();
634               return new FieldLiteral(new Long JavaDoc( (long) (operand * s2)), LONG);
635             case LONG:
636             case BIGINT:
637               long s3 = ( (Long JavaDoc) result2).longValue();
638               return new FieldLiteral(new BigDecimal( (double) (operand * s3)),
639                                       BIGDECIMAL);
640             case BIGDECIMAL:
641             case DEC:
642             case DECIMAL:
643             case NUMERIC:
644               double b1 = ( (Short JavaDoc) result1).doubleValue();
645               return new FieldLiteral( ( (BigDecimal) result2).multiply(new
646                   BigDecimal(b1)), BIGDECIMAL);
647             case REAL:
648               float s4 = ( (Float JavaDoc) result2).floatValue();
649               return new FieldLiteral(new Double JavaDoc( (double) (operand * s4)),
650                                       DOUBLE);
651             case DOUBLE:
652             case FLOAT:
653             case DOUBLEPRECISION:
654               double s5 = ( (Double JavaDoc) result2).doubleValue();
655               return new FieldLiteral(new BigDecimal(operand * s5), BIGDECIMAL);
656             case CHARACTER:
657             case VARCHAR:
658             case CHAR:
659             case CHARACTERVARYING:
660               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "SHORT"});
661             case DATE:
662             case TIME:
663             case TIMESTAMP:
664               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
665                                    "SORT"});
666           }
667           break;
668         case INTEGER:
669         case INT:
670           int operand1 = ( (Integer JavaDoc) result1).intValue();
671           switch (type2) {
672             case BYTE:
673             case TINYINT:
674               byte s11 = ( (Byte JavaDoc) result2).byteValue();
675               return new FieldLiteral(new Long JavaDoc( (operand1 * s11)), LONG);
676             case SHORT:
677             case SMALLINT:
678               short s6 = ( (Short JavaDoc) result2).shortValue();
679               return new FieldLiteral(new Long JavaDoc( (long) operand1 * s6), LONG);
680             case INTEGER:
681             case INT:
682               int operand2 = ( (Integer JavaDoc) result2).intValue();
683               return new FieldLiteral(new Long JavaDoc( (long) operand1 * operand2),
684                                       LONG);
685             case LONG:
686             case BIGINT:
687               long operand3 = ( (Long JavaDoc) result2).longValue();
688               return new FieldLiteral(new Double JavaDoc( (double) operand1 * operand3),
689                                       DOUBLE);
690             case BIGDECIMAL:
691             case DEC:
692             case DECIMAL:
693             case NUMERIC:
694               double b2 = ( (Integer JavaDoc) result1).doubleValue();
695               return new FieldLiteral( ( (BigDecimal) result2).multiply(new
696                   BigDecimal(b2)), BIGDECIMAL);
697             case REAL:
698               float operand4 = ( (Float JavaDoc) result2).floatValue();
699               return new FieldLiteral(new Double JavaDoc(operand1 * operand4), DOUBLE);
700             case DOUBLE:
701             case FLOAT:
702             case DOUBLEPRECISION:
703               double operand5 = ( (Double JavaDoc) result2).doubleValue();
704               return new FieldLiteral(new BigDecimal(operand1 * operand5),
705                                       BIGDECIMAL);
706             case CHARACTER:
707             case VARCHAR:
708             case CHAR:
709             case CHARACTERVARYING:
710               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "INT"});
711             case DATE:
712             case TIME:
713             case TIMESTAMP:
714               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
715                                    "INT"});
716           }
717           break;
718         case LONG:
719         case BIGINT:
720           long operand11 = ( (Long JavaDoc) result1).longValue();
721           switch (type2) {
722             case BYTE:
723             case TINYINT:
724               byte s11 = ( (Byte JavaDoc) result2).byteValue();
725               return new FieldLiteral(new BigDecimal("" + (operand11 * s11)),
726                                       BIGDECIMAL);
727             case SHORT:
728             case SMALLINT:
729               short s7 = ( (Short JavaDoc) result2).shortValue();
730               return new FieldLiteral(new Double JavaDoc( (double) operand11 * s7),
731                                       DOUBLE);
732             case INTEGER:
733             case INT:
734               int operand6 = ( (Integer JavaDoc) result2).intValue();
735               return new FieldLiteral(new Double JavaDoc( (double) operand11 * operand6),
736                                       DOUBLE);
737             case LONG:
738             case BIGINT:
739               long operand7 = ( (Long JavaDoc) result2).longValue();
740               return new FieldLiteral(new Double JavaDoc( (double) operand11 * operand7),
741                                       DOUBLE);
742             case BIGDECIMAL:
743             case DEC:
744             case DECIMAL:
745             case NUMERIC:
746               double b3 = ( (Long JavaDoc) result1).doubleValue();
747               return new FieldLiteral( ( (BigDecimal) result2).multiply(new
748                   BigDecimal(b3)), BIGDECIMAL);
749             case REAL:
750               float operand8 = ( (Float JavaDoc) result2).floatValue();
751               return new FieldLiteral(new Double JavaDoc( (double) operand11 * operand8),
752                                       DOUBLE);
753             case DOUBLE:
754             case FLOAT:
755             case DOUBLEPRECISION:
756               double operand9 = ( (Double JavaDoc) result2).doubleValue();
757               return new FieldLiteral(new BigDecimal(operand11 * operand9),
758                                       BIGDECIMAL);
759             case CHARACTER:
760             case VARCHAR:
761             case CHAR:
762             case CHARACTERVARYING:
763               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "LONG"});
764             case DATE:
765             case TIME:
766             case TIMESTAMP:
767               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
768                                    "LONG"});
769           }
770           break;
771         case BIGDECIMAL:
772         case DEC:
773         case DECIMAL:
774         case NUMERIC:
775           switch (type2) {
776             case SHORT:
777             case SMALLINT:
778               double d1 = ( (Number JavaDoc) result2).doubleValue();
779               return new FieldLiteral( ( (BigDecimal) result1).multiply(new
780                   BigDecimal(d1)), BIGDECIMAL);
781             case BYTE:
782             case TINYINT:
783               double s11 = ( (Byte JavaDoc) result2).doubleValue();
784               return new FieldLiteral( ( (BigDecimal) result1).multiply(new
785                   BigDecimal(s11)), BIGDECIMAL);
786             case INTEGER:
787             case INT:
788               double s12 = ( (Integer JavaDoc) result2).doubleValue();
789               return new FieldLiteral( ( (BigDecimal) result1).multiply(new
790                   BigDecimal(s12)), BIGDECIMAL);
791             case DOUBLE:
792             case FLOAT:
793             case DOUBLEPRECISION:
794               double s13 = 0.0;
795               try {
796                 s13 = ( (Double JavaDoc) result2).doubleValue();
797               }
798               catch (ClassCastException JavaDoc ex) {
799                 throw ex;
800               }
801               return new FieldLiteral( ( (BigDecimal) result1).multiply(new
802                   BigDecimal(s13)), BIGDECIMAL);
803             case REAL:
804               double s14 = ( (Float JavaDoc) result2).doubleValue();
805               return new FieldLiteral( ( (BigDecimal) result1).multiply(new
806                   BigDecimal(s14)), BIGDECIMAL);
807             case LONG:
808             case BIGINT:
809               double s15 = ( (Long JavaDoc) result2).doubleValue();
810               return new FieldLiteral( ( (BigDecimal) result1).multiply(new
811                   BigDecimal(s15)), BIGDECIMAL);
812             case BIGDECIMAL:
813             case DEC:
814             case DECIMAL:
815             case NUMERIC:
816               return new FieldLiteral( ( (BigDecimal) result1).multiply( (
817                   BigDecimal) result2), BIGDECIMAL);
818             case CHARACTER:
819             case VARCHAR:
820             case CHAR:
821             case CHARACTERVARYING:
822               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER",
823                                    "BIGDECIMAL"});
824             case DATE:
825             case TIME:
826             case TIMESTAMP:
827               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
828                                    "BIGDECIMAL"});
829           }
830           break;
831         case REAL:
832           float operand111 = ( (Float JavaDoc) result1).floatValue();
833           switch (type2) {
834             case SHORT:
835             case SMALLINT:
836               short s8 = ( (Short JavaDoc) result2).shortValue();
837               return new FieldLiteral(new Double JavaDoc( (double) operand111 * s8),
838                                       DOUBLE);
839             case BYTE:
840             case TINYINT:
841               byte s11 = ( (Byte JavaDoc) result2).byteValue();
842               return new FieldLiteral(new Double JavaDoc( (double) operand111 * s11),
843                                       DOUBLE);
844             case INTEGER:
845             case INT:
846               int operand12 = ( (Integer JavaDoc) result2).intValue();
847               return new FieldLiteral(new Double JavaDoc(operand111 * operand12),
848                                       DOUBLE);
849             case LONG:
850             case BIGINT:
851               long operand13 = ( (Long JavaDoc) result2).longValue();
852               return new FieldLiteral(new Double JavaDoc(operand111 * operand13),
853                                       DOUBLE);
854             case BIGDECIMAL:
855             case DEC:
856             case DECIMAL:
857             case NUMERIC:
858               double b4 = ( (Float JavaDoc) result1).doubleValue();
859               return new FieldLiteral( ( (BigDecimal) result2).multiply(new
860                   BigDecimal(b4)), BIGDECIMAL);
861             case REAL:
862               float operand14 = ( (Float JavaDoc) result2).floatValue();
863               return new FieldLiteral(new Double JavaDoc(operand111 * operand14),
864                                       DOUBLE);
865             case DOUBLE:
866             case FLOAT:
867             case DOUBLEPRECISION:
868               double operand15 = ( (Double JavaDoc) result2).doubleValue();
869               return new FieldLiteral(new BigDecimal(operand111 * operand15),
870                                       BIGDECIMAL);
871             case CHARACTER:
872             case VARCHAR:
873             case CHAR:
874             case CHARACTERVARYING:
875               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "FLOAT"});
876             case DATE:
877             case TIME:
878             case TIMESTAMP:
879               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
880                                    "FLOAT"});
881           }
882           break;
883         case DOUBLE:
884         case FLOAT:
885         case DOUBLEPRECISION:
886           double operand1111 = ( (Double JavaDoc) result1).doubleValue();
887           switch (type2) {
888             case SHORT:
889             case SMALLINT:
890               short s9 = ( (Short JavaDoc) result2).shortValue();
891               return new FieldLiteral(new BigDecimal(operand1111 * s9),
892                                       BIGDECIMAL);
893             case BYTE:
894             case TINYINT:
895               byte s11 = ( (Byte JavaDoc) result2).byteValue();
896               return new FieldLiteral(new BigDecimal(operand1111 * s11),
897                                       BIGDECIMAL);
898             case INTEGER:
899             case INT:
900               int operand16 = ( (Integer JavaDoc) result2).intValue();
901               return new FieldLiteral(new BigDecimal(operand1111 * operand16),
902                                       BIGDECIMAL);
903             case LONG:
904             case BIGINT:
905               long operand17 = ( (Long JavaDoc) result2).longValue();
906               return new FieldLiteral(new BigDecimal(operand1111 * operand17),
907                                       BIGDECIMAL);
908             case BIGDECIMAL:
909             case DEC:
910             case DECIMAL:
911             case NUMERIC:
912               double b5 = ( (Double JavaDoc) result1).doubleValue();
913               return new FieldLiteral( ( (BigDecimal) result2).multiply(new
914                   BigDecimal(b5)), BIGDECIMAL);
915             case REAL:
916               float operand18 = ( (Float JavaDoc) result2).floatValue();
917               return new FieldLiteral(new BigDecimal(operand1111 * operand18),
918                                       BIGDECIMAL);
919             case DOUBLE:
920             case FLOAT:
921             case DOUBLEPRECISION:
922               double operand19 = ( (Double JavaDoc) result2).doubleValue();
923               return new FieldLiteral(new BigDecimal(operand1111 * operand19),
924                                       BIGDECIMAL);
925             case CHARACTER:
926             case VARCHAR:
927             case CHAR:
928             case CHARACTERVARYING:
929               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "DOUBLE"});
930             case DATE:
931             case TIME:
932             case TIMESTAMP:
933               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
934                                    "DOUBLE"});
935           }
936           break;
937         case CHARACTER:
938         case VARCHAR:
939         case CHAR:
940         case CHARACTERVARYING:
941           switch (type2) {
942             case SHORT:
943             case SMALLINT:
944               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "SHORT"});
945             case INTEGER:
946             case INT:
947               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "INT"});
948             case LONG:
949             case BIGINT:
950               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "LONG"});
951             case BIGDECIMAL:
952             case DEC:
953             case DECIMAL:
954             case NUMERIC:
955               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER",
956                                    "BIGDECIMAL"});
957             case REAL:
958               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "FLOAT"});
959             case DOUBLE:
960             case FLOAT:
961             case DOUBLEPRECISION:
962               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER", "DOUBLE"});
963             case DATE:
964             case TIME:
965             case TIMESTAMP:
966               throw new DException("DSE87", new Object JavaDoc[] {"CHARACTER",
967                                    "DATE/TIME/TIMESTAMP"});
968
969           }
970           break;
971         case DATE:
972         case TIME:
973         case TIMESTAMP:
974           switch (type2) {
975             case SHORT:
976             case SMALLINT:
977               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
978                                    "SHORT"});
979             case INTEGER:
980             case INT:
981               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
982                                    "INT"});
983             case LONG:
984             case BIGINT:
985               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
986                                    "LONG"});
987             case BIGDECIMAL:
988             case DEC:
989             case DECIMAL:
990             case NUMERIC:
991               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
992                                    "BIGDECIMAL"});
993             case REAL:
994               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
995                                    "FLOAT"});
996             case DOUBLE:
997             case FLOAT:
998             case DOUBLEPRECISION:
999               throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
1000                                   "DOUBLE"});
1001            case DATE:
1002            case TIME:
1003            case TIMESTAMP:
1004              throw new DException("DSE87", new Object JavaDoc[] {"DATE/TIME/TIMESTAMP",
1005                                   "DATE/TIME/TIMESTAMP"});
1006          }
1007      }
1008    }
1009    catch (ArithmeticException JavaDoc ae) {
1010      throw new DException("DSE334", new Object JavaDoc[] {"divide by zero"});
1011    }
1012    catch (NumberFormatException JavaDoc ex) {
1013      throw new DException("DSE334", null);
1014    }
1015
1016    throw new DException("DSE35",
1017                         new Object JavaDoc[] {StaticClass.getDataTypeName(type1),
1018                         StaticClass.getDataTypeName(type2)});
1019  }
1020
1021  public int getDataType(Object JavaDoc object) throws DException {
1022    return super.getDataType(object, "MULTIPLY");
1023  }
1024
1025  public AbstractRowValueExpression[] getChilds() {
1026    AbstractRowValueExpression[] childs = new AbstractRowValueExpression[] {
1027         (AbstractRowValueExpression) _term2,
1028        (AbstractRowValueExpression) _factor0};
1029    return childs;
1030  }
1031
1032  public int getCardinality() throws DException {
1033    if (_term2.getCardinality() > 1 || _factor0.getCardinality() > 1) {
1034      throw new DException("DSE213", null);
1035    }
1036    return 1;
1037  }
1038
1039  /* public ColumnDetails[] getColumnDetails() throws DException {
1040        if (columnDetails == null) {
1041          ColumnDetails firstlistOfColumns[] = _term2.getColumnDetails();
1042          ColumnDetails secondlistOfColumns[] = _factor0.getColumnDetails();
1043          int length = firstlistOfColumns.length + secondlistOfColumns.length;
1044          columnDetails = new ColumnDetails[length];
1045          int index = 0;
1046          for (; index < firstlistOfColumns.length; ++index) {
1047            columnDetails[index] = firstlistOfColumns[index];
1048          }
1049          for (int i = 0; i < secondlistOfColumns.length; ++i, ++index) {
1050            columnDetails[index] = secondlistOfColumns[i];
1051           }
1052         }
1053         return columnDetails;
1054     }
1055   */

1056  public String JavaDoc toString() {
1057    StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
1058    sb.append(" ");
1059    sb.append(_term2);
1060    sb.append(" ");
1061    sb.append(_Sasterisk_3446232461);
1062    sb.append(" ");
1063    sb.append(_factor0);
1064    return sb.toString();
1065  }
1066
1067  public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
1068    termSasterisk_344623246factor tempClass = new termSasterisk_344623246factor();
1069    tempClass._factor0 = (factor) _factor0.clone();
1070    tempClass._Sasterisk_3446232461 = (Sasterisk_344623246)
1071        _Sasterisk_3446232461.clone();
1072    tempClass._term2 = (term) _term2.clone();
1073    return tempClass;
1074  }
1075
1076  public ColumnDetails[] getColumnDetails() throws DException {
1077    if (columnDetails == null) {
1078      ColumnDetails firstlistOfColumns[] = _term2.getColumnDetails();
1079      ColumnDetails secondlistOfColumns[] = _factor0.getColumnDetails();
1080      int length = firstlistOfColumns.length + secondlistOfColumns.length;
1081      columnDetails = new ColumnDetails[length];
1082      int index = 0;
1083      for (; index < firstlistOfColumns.length; ++index) {
1084        columnDetails[index] = firstlistOfColumns[index];
1085      }
1086      for (int i = 0; i < secondlistOfColumns.length; ++i, ++index) {
1087        columnDetails[index] = secondlistOfColumns[i];
1088      }
1089    }
1090
1091    if (columnDetails.length == 1)
1092      return columnDetails;
1093
1094    ColumnDetails columnDetail = new ColumnDetails();
1095    String JavaDoc str = toString();
1096    columnDetail.setColumn(new String JavaDoc[] {str});
1097    columnDetail.setType(FUNCTIONAL);
1098    columnDetail.setObject(this);
1099    columnDetail.setExpression(str);
1100    return new ColumnDetails[] {
1101        columnDetail};
1102  }
1103
1104  public ColumnDetails[] getChildColumnDetails() throws DException {
1105    return columnDetails;
1106  }
1107
1108  public ByteComparison getByteComparison(Object JavaDoc object) throws DException {
1109    initializeChildren();
1110
1111    return new ByteComparison(false,
1112                              new int[] {dtType});
1113  }
1114
1115  /* Method overridden by Kaushik to solve Bug no. 11993 */
1116  public ParameterInfo[] getParameterInfo() throws DException {
1117    ParameterInfo[] parameterInfo = super.getParameterInfo();
1118    for (int i = 0; i < parameterInfo.length; i++) {
1119      if (parameterInfo[i].getQuestionMark()) {
1120        parameterInfo[i].setDataType(Datatypes.BIGDECIMAL);
1121      }
1122    }
1123    return parameterInfo;
1124  }
1125
1126}
1127
Popular Tags