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 ; 8 import java.util.*; 9 import com.daffodilwoods.database.utility.P; 10 import com.daffodilwoods.daffodildb.utils.byteconverter.CCzufDpowfsufs; 11 import java.math.BigInteger ; 12 13 public class FieldLiteral extends FieldBase implements Datatypes,Comparable { 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 object0,int datatype0) { 24 object = object0; 25 datatype = datatype0; 26 } 27 28 public Object 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 number = object.toString(); 44 try { 45 switch(type){ 46 case BYTE : case TINYINT : 47 object = new Byte (Byte.parseByte(number)); 48 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Byte )object)); 49 datatype = type; 50 break; 51 case SHORT : case SMALLINT : 52 object = new Short (Short.parseShort(number)); 53 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Short )object)); 54 datatype = type; 55 break; 56 case INTEGER :case INT : 57 object = new Integer (Integer.parseInt(number)); 58 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Integer )object)); 59 datatype = type; 60 break; 61 case LONG : case BIGINT : 62 object = new Long (Long.parseLong(number)); 63 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Long )object)); 64 datatype = type; 65 break; 66 case FLOAT : case REAL : case DOUBLE : 67 case DOUBLEPRECISION : 68 object = new Double (Double.parseDouble(number)); 69 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double )object)); 70 datatype = DOUBLE; 71 break; 72 case BIGDECIMAL : case DECIMAL : case DEC : case NUMERIC : 73 object = new BigDecimal (number); 74 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((BigDecimal )object)); 75 datatype = type; 76 break; 77 case -1 : 78 int counter = 1; 79 while(true){ 80 try { 81 switch(counter){ 82 case 1 : 83 object = new Byte (Byte.parseByte(number)); 84 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Byte )object)); 85 datatype = BYTE; 86 return; 87 case 2 : 88 object = new Short (Short.parseShort(number)); 89 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Short )object)); 90 datatype = SHORT; 91 return; 92 case 3 : 93 object = new Integer (Integer.parseInt(number)); 94 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Integer )object)); 95 datatype = INTEGER; 96 return; 97 case 4 : 98 object = new Long (Long.parseLong(number)); 99 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Long )object)); 100 datatype = LONG; 101 return; 102 case 5 : new BigInteger (number); 104 object = new BigDecimal (number); 105 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((BigDecimal )object)); 106 datatype = BIGDECIMAL; 107 return; 108 case 6 : 109 try { 110 object = new Double (Double.parseDouble(number)); 111 if(Double.MAX_VALUE < ((Double )object).doubleValue()) 112 throw new ArithmeticException (); 113 } 114 catch (NumberFormatException ex) { 115 String msg = ex.getMessage(); 116 if("Infinity".equalsIgnoreCase(msg)){ 117 object = new Double (Double.POSITIVE_INFINITY); 118 } 119 else if("-Infinity".equalsIgnoreCase(msg)){ 120 object = new Double (Double.NEGATIVE_INFINITY); 121 } 122 else if("NaN".equalsIgnoreCase(msg)){ 123 object = new Double (Double.NaN); 124 } 125 else 126 throw ex; 127 } 128 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double )object)); 129 datatype = DOUBLE; 130 return; 131 default : 132 try { 133 object = new BigDecimal (Double.parseDouble(number)); 134 } 135 catch (NumberFormatException ex) { 136 String msg = ex.getMessage(); 137 if("Infinity".equalsIgnoreCase(msg)){ 138 object = new BigDecimal (Double.POSITIVE_INFINITY); 139 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double )object)); 140 datatype = DOUBLE; 141 return; 142 } 143 else if("-Infinity".equalsIgnoreCase(msg)){ 144 object = new BigDecimal (Double.NEGATIVE_INFINITY); 145 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double )object)); 146 datatype = DOUBLE; 147 return; 148 } 149 else if("Infinite or NaN".equalsIgnoreCase(msg)){ 150 object = new Double (Double.NaN); 151 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((Double )object)); 152 datatype = DOUBLE; 153 return; 154 } 155 else 156 throw ex; 157 } 158 bufferRange = new BufferRange(CCzufDpowfsufs.getBytes((BigDecimal )object)); 159 datatype = BIGDECIMAL; 160 return; 161 } 162 } 163 catch (Exception ex) { 164 if(counter > 6){ 165 ; throw ex; 167 } 168 counter++; 169 } 170 } 171 default : 172 setDatatype(-1); 173 break; 174 } 175 } 176 catch (Exception ex) { 177 setDatatype(-1); 178 } 179 } 180 181 public boolean equals(Object fieldBase){ 182 try { 183 Object o1 = getObject(); 184 Object 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 fieldBase){ 195 try { 196 Object o1 = getObject(); 197 Object 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 )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 toString(){ 224 String str = "FieldLiteral = [Object [" + (object instanceof Object [] ? P.print((Object [])object) : object ) + "]"; 225 str += "DataTypes = " + datatype; 226 str += "BufferRange = " + bufferRange + " ]"; 227 return str; 228 } 229 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 |