KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > utils > field > FieldLiteral


1 package com.daffodilwoods.daffodildb.utils.field;
2
3 import com.daffodilwoods.daffodildb.utils.BufferRange;
4 import com.daffodilwoods.database.resource.DException;
5 import com.daffodilwoods.daffodildb.server.sql99.common.ColumnDetails;
6 import com.daffodilwoods.daffodildb.server.sql99.common.Datatypes;
7 import java.math.BigDecimal JavaDoc;
8 import java.util.*;
9 import com.daffodilwoods.database.utility.P;
10 import com.daffodilwoods.daffodildb.utils.byteconverter.CCzufDpowfsufs;
11 import java.math.BigInteger JavaDoc;
12
13 public class FieldLiteral extends FieldBase implements Datatypes,Comparable JavaDoc{
14
15     private ColumnDetails columnDetails;
16     private boolean isNull;
17
18     public FieldLiteral(BufferRange bufferRange0,int datatype0) {
19       bufferRange = bufferRange0;
20       datatype = datatype0;
21     }
22
23     public FieldLiteral(Object JavaDoc object0,int datatype0) {
24       object = object0;
25       datatype = datatype0;
26     }
27
28     public Object JavaDoc getObject() throws DException{
29         if(datatype == -1)
30             setDatatype(-1);
31         return object;
32     }
33
34     public int getDatatype() {
35         return datatype;
36     }
37
38     public void setDatatype(int type) throws DException{
39         if(object == null){
40             datatype = type;
41             return;
42         }
43         String JavaDoc number = object.toString();
44         try {
45             switch(type){
46                 case BYTE : case TINYINT :
47                     object = new Byte JavaDoc(Byte.parseByte(number));
48                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Byte JavaDoc)object));
49                     datatype = type;
50                     break;
51                 case SHORT : case SMALLINT :
52                     object = new Short JavaDoc(Short.parseShort(number));
53                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Short JavaDoc)object));
54                     datatype = type;
55                     break;
56                 case INTEGER :case INT :
57                     object = new Integer JavaDoc(Integer.parseInt(number));
58                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Integer JavaDoc)object));
59                     datatype = type;
60                     break;
61                 case LONG : case BIGINT :
62                     object = new Long JavaDoc(Long.parseLong(number));
63                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Long JavaDoc)object));
64                     datatype = type;
65                     break;
66                 case FLOAT : case REAL : case DOUBLE :
67                 case DOUBLEPRECISION :
68                     object = new Double JavaDoc(Double.parseDouble(number));
69                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double JavaDoc)object));
70                     datatype = DOUBLE;
71                     break;
72                 case BIGDECIMAL : case DECIMAL : case DEC : case NUMERIC :
73                     object = new BigDecimal JavaDoc(number);
74                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((BigDecimal JavaDoc)object));
75                     datatype = type;
76                     break;
77                 case -1 : /* for the cases like (constant = constant)*/
78                     int counter = 1;
79                     while(true){
80                         try {
81                             switch(counter){
82                                 case 1 :
83                                     object = new Byte JavaDoc(Byte.parseByte(number));
84                                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Byte JavaDoc)object));
85                                     datatype = BYTE;
86                                     return;
87                                 case 2 :
88                                     object = new Short JavaDoc(Short.parseShort(number));
89                                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Short JavaDoc)object));
90                                     datatype = SHORT;
91                                     return;
92                                 case 3 :
93                                     object = new Integer JavaDoc(Integer.parseInt(number));
94                                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Integer JavaDoc)object));
95                                     datatype = INTEGER;
96                                     return;
97                                 case 4 :
98                                     object = new Long JavaDoc(Long.parseLong(number));
99                                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Long JavaDoc)object));
100                                     datatype = LONG;
101                                     return;
102                                  case 5 : // This was done to prevent the precision of large non decimal number.
103
new BigInteger JavaDoc(number);
104                                     object = new BigDecimal JavaDoc(number);
105                                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((BigDecimal JavaDoc)object));
106                                     datatype = BIGDECIMAL;
107                                     return;
108                                   case 6 :
109                                     try {
110                                        object = new Double JavaDoc(Double.parseDouble(number));
111                                        if(/*Double.MIN_VALUE > ((Double)object).doubleValue() || */Double.MAX_VALUE < ((Double JavaDoc)object).doubleValue())
112                                          throw new ArithmeticException JavaDoc();
113                                     }
114                                     catch (NumberFormatException JavaDoc ex) {
115                                        String JavaDoc msg = ex.getMessage();
116                                        if("Infinity".equalsIgnoreCase(msg)){
117                                           object = new Double JavaDoc(Double.POSITIVE_INFINITY);
118                                        }
119                                        else if("-Infinity".equalsIgnoreCase(msg)){
120                                           object = new Double JavaDoc(Double.NEGATIVE_INFINITY);
121                                        }
122                                        else if("NaN".equalsIgnoreCase(msg)){
123                                           object = new Double JavaDoc(Double.NaN);
124                                        }
125                                        else
126                                           throw ex;
127                                     }
128                                       bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double JavaDoc)object));
129                                       datatype = DOUBLE;
130                                       return;
131                                  default :
132                                     try {
133                                       object = new BigDecimal JavaDoc(Double.parseDouble(number));
134                                     }
135                                     catch (NumberFormatException JavaDoc ex) {
136                                        String JavaDoc msg = ex.getMessage();
137                                        if("Infinity".equalsIgnoreCase(msg)){
138                                           object = new BigDecimal JavaDoc(Double.POSITIVE_INFINITY);
139                                           bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double JavaDoc)object));
140                                            datatype = DOUBLE;
141                                            return;
142                                        }
143                                        else if("-Infinity".equalsIgnoreCase(msg)){
144                                           object = new BigDecimal JavaDoc(Double.NEGATIVE_INFINITY);
145                                           bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double JavaDoc)object));
146                                           datatype = DOUBLE;
147                                           return;
148                                        }
149                                        else if("Infinite or NaN".equalsIgnoreCase(msg)){
150                                           object = new Double JavaDoc(Double.NaN);
151                                           bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double JavaDoc)object));
152                                           datatype = DOUBLE;
153                                           return;
154                                        }
155                                        else
156                                           throw ex;
157                                     }
158                                     bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((BigDecimal JavaDoc)object));
159                                  datatype = BIGDECIMAL;
160                                  return;
161                             }
162                         }
163                         catch (Exception JavaDoc ex) {
164                             if(counter > 6){
165          ;//// Removed By Program ** System.out.println("OBJECT = "+object+" Class = "+object.getClass());
166
throw ex;
167                             }
168                             counter++;
169                         }
170                     }
171                   default :
172                     setDatatype(-1);
173                     break;
174             }
175         }
176         catch (Exception JavaDoc ex) {
177             setDatatype(-1);
178         }
179     }
180
181     public boolean equals(Object JavaDoc fieldBase){
182         try {
183             Object JavaDoc o1 = getObject();
184             Object JavaDoc o2 = ((FieldBase)fieldBase).getObject();
185             if(o1 == null && o2 == null)
186                 return true;
187             return o1 != null && o2 != null ? o1.equals(o2) : false;
188         }
189         catch (DException ex) {
190             return false;
191         }
192     }
193
194     public int compareTo(Object JavaDoc fieldBase){
195       try {
196            Object JavaDoc o1 = getObject();
197            Object JavaDoc o2 = ((FieldBase)fieldBase).getObject();
198            if(o1 == null && o2 == null)
199                return 0;
200             else if(o1 == null && o2 !=null)
201               return -1;
202             else if(o1!=null && o2==null)
203               return 1;
204             else
205               return ((Comparable JavaDoc)o1).compareTo(o2);
206        }
207        catch (DException ex) {
208            return -1;
209        }
210
211     }
212
213
214
215     public boolean isNull() {
216         return object == null;
217     }
218
219     public boolean getNull(){
220         return object == null;
221     }
222
223     public String JavaDoc toString(){
224         String JavaDoc str = "FieldLiteral = [Object [" + (object instanceof Object JavaDoc[] ? P.print((Object JavaDoc[])object) : object ) + "]";
225         str += "DataTypes = " + datatype;
226         str += "BufferRange = " + bufferRange + " ]";
227         return str;
228     }
229 /*
230     public static void main(String[] args){
231       Double d = new Double(Double.MIN_VALUE);
232       byte[] b = com.daffodilwoods.daffodildb.utils.byteconverter.CCzufDpowfsufs.getBytes(d);
233       byte[] b1 = com.daffodilwoods.daffodildb.utils.byteconverter.CCzufDpowfsufs.getBytes(1D);
234     }
235 /*/

236     public BufferRange getBufferRange() {
237       try {
238         if(bufferRange == null)
239           setDatatype(datatype);
240       }
241       catch (DException ex) {
242
243       }
244       return bufferRange;
245     }
246     public byte getByte(int index) {
247        getBufferRange();
248         return bufferRange.getByte(index);
249     }
250
251     public byte[] getBytes(){
252        getBufferRange();
253         return bufferRange.getBytes();
254     }
255
256 }
257
Popular Tags