KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > utils > FieldUtility


1 package com.daffodilwoods.daffodildb.utils;
2
3 import java.math.*;
4 import java.sql.*;
5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
6 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.*;
7 import com.daffodilwoods.daffodildb.server.sql99.common.*;
8 import com.daffodilwoods.daffodildb.utils.byteconverter.*;
9 import com.daffodilwoods.daffodildb.utils.comparator.*;
10 import com.daffodilwoods.daffodildb.utils.field.*;
11 import com.daffodilwoods.database.general.*;
12 import com.daffodilwoods.database.resource.*;
13 import com.daffodilwoods.daffodildb.utils.comparator.SuperComparator;
14 import com.daffodilwoods.daffodildb.utils.field.*;
15 import com.daffodilwoods.daffodildb.utils.FieldBaseConverter;
16 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.DBlobUpdatable;
17 import java.text.Collator JavaDoc;
18 import com.daffodilwoods.database.utility.*;
19 import java.util.Calendar JavaDoc;
20 import java.util.GregorianCalendar JavaDoc;
21 import java.util.Arrays JavaDoc;
22
23 public class FieldUtility {
24
25    public static BufferRange NULLBUFFERRANGE = new BufferRange(true);
26    public static FieldBase NULLFIELDBASE = new FieldLiteral(NULLBUFFERRANGE, -1);
27    public static final FieldBase Int1 = new FieldLiteral(new Integer JavaDoc(1), Datatype.INTEGER);
28    public static final FieldBase Int0 = new FieldLiteral(new Integer JavaDoc(0), Datatype.INTEGER);
29    public static final FieldBase Int_1 = new FieldLiteral(new Integer JavaDoc( -1), Datatype.INTEGER);
30
31    public static FieldBase convertToAppropriateType(FieldBase field, int datatype, int size, Collator JavaDoc collator) throws DException {
32       return convertToAppropriateType(field, datatype, size, -1, collator);
33    }
34
35    public static FieldBase convertToAppropriateType(FieldBase field, int datatype, int size, int scale, Collator JavaDoc collator) throws DException {
36       int fieldType = field.getDatatype();
37       if (fieldType == Datatypes.DEFAULT_DATATYPE)
38          return field;
39
40       if (field.isNull()) {
41          FieldBase convertedField = getField(datatype, null, collator);
42          convertedField.setBufferRange(NULLBUFFERRANGE);
43          return convertedField;
44       }
45       if (fieldType == -1) {
46          try {
47             field.setDatatype( -1);
48          } catch (Exception JavaDoc ex) {
49             throw new RuntimeException JavaDoc(ex.getMessage());
50          }
51          fieldType = field.getDatatype();
52       }
53       FieldBase convertedField;
54       switch (datatype) {
55          case Datatype.BIGDECIMAL:
56          case Datatype.DEC:
57          case Datatype.DECIMAL:
58          case Datatype.NUMERIC:
59             switch (fieldType) {
60                case Datatype.BOOLEAN:
61                   if (scale == 0)
62                      return new FieldBigDecimal(
63                          new BufferRange(Boolean.TRUE.equals(field.getObject()) ? "1".getBytes() : "0".getBytes()),
64                          datatype);
65                   convertedField = new FieldBigDecimal(
66                       new BufferRange(Boolean.TRUE.equals(field.getObject()) ? "1.0".getBytes() : "0.0".getBytes()),
67                       datatype);
68                   return convertedField;
69                case Datatype.BIGDECIMAL:
70                case Datatype.DEC:
71                case Datatype.DECIMAL:
72                case Datatype.NUMERIC:
73                   scale = scale < 0 ? 0 : scale;
74                   checkPrecisionScale(field.getObject().toString(), size, scale);
75                   BigDecimal bd = ( (BigDecimal) field.getObject());
76                   bd = bd.setScale(scale, BigDecimal.ROUND_HALF_EVEN);
77                   convertedField = new FieldBigDecimal(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes(bd)) : field.getBufferRange(), datatype);
78                   return convertedField;
79                case Datatype.LONG:
80                case Datatype.BIGINT:
81                case Datatype.SHORT:
82                case Datatype.SMALLINT:
83                case Datatype.DOUBLE:
84                case Datatype.DOUBLEPRECISION:
85                case Datatype.FLOAT:
86                case Datatype.REAL:
87                case Datatype.TINYINT:
88                case Datatype.BYTE:
89                case Datatype.INT:
90                case Datatype.INTEGER:
91                   scale = scale < 0 ? 0 : scale;
92                   checkPrecisionScale(field.getObject().toString(), size, scale);
93                   bd = new BigDecimal( (field.getObject().toString()));
94                   bd = bd.setScale(scale, BigDecimal.ROUND_HALF_EVEN);
95                   convertedField = new FieldBigDecimal(new BufferRange(CCzufDpowfsufs.getBytes(bd)), datatype);
96                   return convertedField;
97                case Datatype.CHAR:
98                case Datatype.CHARACTER:
99                case Datatype.CHARACTERVARYING:
100                case Datatype.CHARVARYING:
101                case Datatype.VARCHAR:
102                default:
103                   try {
104                      scale = scale < 0 ? 0 : scale;
105                      checkPrecisionScale(field.getObject().toString(), size, scale);
106                      bd = new BigDecimal( (field.getObject().toString()));
107                      bd = bd.setScale(scale, BigDecimal.ROUND_HALF_EVEN);
108                      convertedField = new FieldBigDecimal(
109                          new BufferRange(CCzufDpowfsufs.getBytes(bd)),
110                          datatype);
111                      return convertedField;
112                   } catch (RuntimeException JavaDoc ex) {
113                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
114                   }
115
116             }
117          case Datatype.BIGINT:
118          case Datatype.LONG:
119             switch (fieldType) {
120                case Datatype.BIGINT:
121                case Datatype.LONG:
122                   convertedField = new FieldLong(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Long JavaDoc) field.getObject())) : field.getBufferRange(), datatype);
123                   return convertedField;
124                case Datatype.BIGDECIMAL:
125                case Datatype.DEC:
126                case Datatype.DECIMAL:
127                case Datatype.NUMERIC:
128                   TypeValidityHandler.checkLongWithBigDecimal(field);
129                   convertedField = new FieldLong(
130                       new BufferRange(CCzufDpowfsufs.getBytes( ( (BigDecimal) field.getObject()).longValue())),
131                       datatype);
132                   return convertedField;
133                case Datatype.BOOLEAN:
134                   convertedField = new FieldLong(
135                       new BufferRange(CCzufDpowfsufs.getBytes(Boolean.TRUE.equals(field.getObject()) ? 1 : 0)),
136                       datatype);
137                   return convertedField;
138                case Datatype.DOUBLE:
139                case Datatype.DOUBLEPRECISION:
140                case Datatype.FLOAT:
141                   TypeValidityHandler.checkLongWithDouble(field);
142                   convertedField = new FieldLong(
143                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).longValue())),
144                       datatype);
145                   return convertedField;
146                case Datatype.REAL:
147                   TypeValidityHandler.checkLongWithFloat(field);
148                   convertedField = new FieldLong(
149                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).longValue())),
150                       datatype);
151                   return convertedField;
152                case Datatype.INT:
153                case Datatype.INTEGER:
154                case Datatype.SHORT:
155                case Datatype.SMALLINT:
156                case Datatype.TINYINT:
157                case Datatype.BYTE:
158                   convertedField = new FieldLong(
159                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).longValue())),
160                       datatype);
161                   return convertedField;
162                default:
163                   try {
164                      convertedField = new FieldLong(
165                          new BufferRange(CCzufDpowfsufs.getBytes(new Long JavaDoc(field.getObject().toString()))),
166                          datatype);
167                      return convertedField;
168                   } catch (RuntimeException JavaDoc re) {
169                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
170                   }
171
172             }
173          case Datatype.BOOLEAN:
174             switch (fieldType) {
175                case Datatype.BOOLEAN:
176                   convertedField = new FieldBoolean(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Boolean JavaDoc) field.getObject())) : field.getBufferRange(), datatype);
177                   return convertedField;
178                default:
179                   try {
180                     String JavaDoc ss =field.getObject().toString();
181                     /**
182                      * A check has been added to fix the bug 12329 in convertToAppropriateType method
183                      of fieldUtilitiy class.If column data type is boolean but passed parameter is
184                      non boolean type then a checking has been performed for parameter if it 1 then
185                      true is returned otherwise false. -- Sube Singh
186                      */

187                     if(ss.equals("1")){
188                       convertedField = new FieldBoolean(new BufferRange(CCzufDpowfsufs.getBytes(new Boolean JavaDoc(true))),datatype);
189                       return convertedField;
190
191                     } else {
192                       convertedField = new FieldBoolean(new BufferRange(CCzufDpowfsufs.getBytes(new Boolean JavaDoc(ss))),datatype);
193                       return convertedField;
194                     }
195                   } catch (RuntimeException JavaDoc re) {
196                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
197                   }
198
199             }
200          case Datatype.TINYINT:
201          case Datatype.BYTE:
202             switch (fieldType) {
203                case Datatype.BYTE:
204                case Datatype.TINYINT:
205                   convertedField = new FieldByte(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Byte JavaDoc) field.getObject())) : field.getBufferRange(), datatype);
206                   return convertedField;
207                case Datatype.BOOLEAN:
208                   convertedField = new FieldByte(
209                       new BufferRange(Boolean.TRUE.equals(field.getObject()) ? new byte[] {1}
210                                        : new byte[] {0}),
211                       datatype);
212                   return convertedField;
213                case Datatype.INT:
214                case Datatype.INTEGER:
215                case Datatype.LONG:
216                case Datatype.BIGINT:
217                case Datatype.SHORT:
218                case Datatype.SMALLINT:
219                   TypeValidityHandler.checkByteWithNonDecimal(field);
220                   convertedField = new FieldByte(
221                       new BufferRange(new byte[] { ( (Number JavaDoc) field.getObject()).byteValue()}), datatype);
222                   return convertedField;
223                case Datatype.DOUBLE:
224                case Datatype.DOUBLEPRECISION:
225                case Datatype.FLOAT:
226                   TypeValidityHandler.checkByteWithDouble(field);
227                   convertedField = new FieldByte(
228                       new BufferRange(new byte[] { ( (Number JavaDoc) field.getObject()).byteValue()}), datatype);
229                   return convertedField;
230                case Datatype.REAL:
231                   TypeValidityHandler.checkByteWithFloat(field);
232                   convertedField = new FieldByte(
233                       new BufferRange(new byte[] { ( (Number JavaDoc) field.getObject()).byteValue()}), datatype);
234                   return convertedField;
235                default:
236                   try {
237                      convertedField = new FieldByte(
238                          new BufferRange(CCzufDpowfsufs.getBytes(new Byte JavaDoc(field.getObject().toString()))),
239                          datatype);
240                      return convertedField;
241                   } catch (RuntimeException JavaDoc re) {
242                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
243                   }
244
245             }
246          case Datatype.BINARY:
247          case Datatype.VARBINARY:
248             switch (fieldType) {
249                case Datatype.BINARY:
250                case Datatype.VARBINARY:
251                   try {
252                      if (field.getBufferRange().getLength() > size) {
253                         throw new SizeMisMatchException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
254                      }
255                   } catch (NullPointerException JavaDoc ex) {
256                      throw ex;
257                   }
258                   byte[] bytes1 = (byte[]) field.getObject();
259                   if (datatype == Datatype.BINARY) {
260                      byte[] tmp1 = new byte[size];
261                      Arrays.fill(tmp1, (byte) 0);
262                      System.arraycopy(bytes1, 0, tmp1, (size - bytes1.length), bytes1.length);
263                      bytes1 = tmp1;
264                   }
265                   convertedField = new FieldBinary(new BufferRange(bytes1), datatype);
266                   return convertedField;
267                case Datatype.BLOB:
268                case Datatype.BINARYLARGEOBJECT:
269                case Datatype.LONGVARBINARY:
270                case Datatype.VARCHAR:
271                case Datatype.CHAR:
272                case Datatype.CHARACTER:
273                case Datatype.CHARACTERVARYING:
274                case Datatype.CHARVARYING:
275                   try {
276                      if (field.getBufferRange().getLength() > size) {
277                         throw new SizeMisMatchException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
278                      }
279                   } catch (NullPointerException JavaDoc ex) {
280                      throw ex;
281                   }
282                   byte[] bytes = field.getBytes();
283                   if (datatype == Datatype.BINARY) {
284                      byte[] tmp = new byte[size];
285                      Arrays.fill(tmp, (byte) 0);
286                      System.arraycopy(bytes, 0, tmp, (size - bytes.length), bytes.length);
287                      bytes = tmp;
288                   }
289                   convertedField = new FieldBinary(new BufferRange(bytes), datatype);
290                   return convertedField;
291                case Datatype.SHORT:
292                case Datatype.SMALLINT:
293                case Datatype.TINYINT:
294                case Datatype.BYTE:
295                case Datatype.INT:
296                case Datatype.INTEGER:
297                   convertedField = convertNonDecimalToBinary(field, size, fieldType);
298                   return convertedField;
299                default:
300                   throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
301             }
302          case Datatype.CHARACTERLARGEOBJECT:
303          case Datatype.CHARLARGEOBJECT:
304          case Datatype.CLOB:
305          case Datatype.LONGVARCHAR:
306             switch (fieldType) {
307                case Datatype.CLOB:
308                   try {
309                      return new DClobUpdatable( ( (Clob) field.getObject()).getAsciiStream());
310                   } catch (SQLException ex) {
311                      throw new DException("DSE0", new Object JavaDoc[] {ex.getMessage()});
312                   }
313                   case Datatype.CHAR:
314                case Datatype.CHARACTER:
315                case Datatype.CHARACTERVARYING:
316                case Datatype.CHARVARYING:
317                case Datatype.VARCHAR:
318                   return new DClobUpdatable( (String JavaDoc) field.getObject());
319                case Datatype.BINARY:
320                case Datatype.VARBINARY:
321                   return new DClobUpdatable( (byte[]) field.getObject());
322                default:
323                   throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
324             }
325          case Datatype.BLOB:
326          case Datatype.BINARYLARGEOBJECT:
327          case Datatype.LONGVARBINARY:
328             switch (fieldType) {
329                case Datatype.BLOB:
330                   try {
331                      return new DBlobUpdatable( ( (Blob) field.getObject()).getBinaryStream());
332                   } catch (SQLException ex) {
333                      throw new DException("DSE0", new Object JavaDoc[] {ex.getMessage()});
334                   }
335                   case Datatype.CHAR:
336                case Datatype.CHARACTER:
337                case Datatype.CHARACTERVARYING:
338                case Datatype.CHARVARYING:
339                case Datatype.VARCHAR:
340                   return new DBlobUpdatable( (String JavaDoc) field.getObject());
341                case Datatype.BINARY:
342                case Datatype.VARBINARY:
343                   return new DBlobUpdatable( (byte[]) field.getObject());
344                default:
345                   throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
346             }
347
348          case Datatype.CHAR:
349          case Datatype.CHARACTER:
350          case Datatype.CHARACTERVARYING:
351          case Datatype.CHARVARYING:
352          case Datatype.VARCHAR:
353             switch (fieldType) {
354                case Datatype.BINARY:
355                case Datatype.VARBINARY:
356                case Datatype.BLOB:
357                case Datatype.BINARYLARGEOBJECT:
358                case Datatype.LONGVARBINARY:
359                   throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
360                case Datatype.CHARACTERLARGEOBJECT:
361                case Datatype.CHARLARGEOBJECT:
362                case Datatype.CLOB:
363                case Datatype.LONGVARCHAR:
364                   if (field.getLength() > size){
365          ;//// Removed By Program ** System.out.println("field.getLength()="+field.getLength()+" size ::: "+size);
366
throw new SizeMisMatchException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
367                   }
368                   String JavaDoc ss1 = null;
369                   try {
370                      ss1 = ( (Clob) field.getObject()).getSubString(1, field.getLength());
371                   } catch (SQLException ex) {
372                      throw new DException("DSE0", new Object JavaDoc[] {ex.getMessage()});
373                   }
374                   convertedField = new FieldString(
375                       new BufferRange(CCzufDpowfsufs.getBytes(ss1, datatype == Datatype.CHAR || datatype == Datatype.CHARACTER ? size : -1, collator != null)),
376                       datatype, collator);
377                   return convertedField;
378                default:
379                   String JavaDoc ss = field.getObject().toString();
380                   if (ss.length() > size) {
381          ;//// Removed By Program ** System.out.println("Size passed " + size + " data passed " + ss.length());
382
throw new SizeMisMatchException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
383                   }
384                   convertedField = new FieldString(
385                       new BufferRange(CCzufDpowfsufs.getBytes(ss, datatype == Datatype.CHAR || datatype == Datatype.CHARACTER ? size : -1, collator != null)),
386                       datatype, collator);
387                   return convertedField;
388             }
389
390          case Datatype.BIT:
391          case Datatype.BITVARYING:
392             switch (fieldType) { /** @todo CHANGE acc. to field bit */
393                case Datatype.BOOLEAN:
394                   String JavaDoc s = field.getObject().toString().trim();
395                   s = (s.equalsIgnoreCase("0") || s.equalsIgnoreCase("false")) ? "0" : "1";
396                   if (s.length() > size)
397                      throw new SizeMisMatchException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
398                   convertedField = new FieldString(new BufferRange(CCzufDpowfsufs.getBytes(s, datatype == Datatype.BIT ? size : -1, false)),
399                       datatype, collator);
400                   return convertedField;
401                default:
402                   try {
403                      String JavaDoc ss = field.getObject().toString().trim();
404                      ss = (ss.equalsIgnoreCase("0") || ss.equalsIgnoreCase("false")) ? "0" : (ss.equalsIgnoreCase("1") || ss.equalsIgnoreCase("true")) ? "1" : ss;
405                      if (ss.length() > size) {
406          ;//// Removed By Program ** System.out.println("Object Passes " + field.getObject().getClass() + " [" + ss + "] Length Declared " + size + " Length Passed " + ss.length());
407
throw new SizeMisMatchException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
408                      }
409                      for (int i = 0; i < ss.length(); i++) {
410                         if (! (ss.charAt(i) == '0' || ss.charAt(i) == '1')) {
411                            throw new DException("DSE773", null);
412                         }
413                      }
414                      convertedField = new FieldString(new BufferRange(CCzufDpowfsufs.getBytes(ss, datatype == Datatype.BIT ? size : -1, false)),
415                          datatype, collator);
416                      return convertedField;
417                   } catch (RuntimeException JavaDoc re) {
418                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
419                   }
420
421             }
422
423          case Datatype.DOUBLE:
424          case Datatype.DOUBLEPRECISION:
425          case Datatype.FLOAT:
426             switch (fieldType) {
427                case Datatype.DOUBLE:
428                case Datatype.DOUBLEPRECISION:
429                case Datatype.FLOAT:
430                   convertedField = new FieldDouble(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Double JavaDoc) field.getObject())) : field.getBufferRange(), datatype);
431                   return convertedField;
432                case Datatype.BIGDECIMAL:
433                   TypeValidityHandler.checkDoubleWithBigDecimal(field);
434                   convertedField = new FieldDouble(
435                       new BufferRange(CCzufDpowfsufs.getBytes( ( (BigDecimal) field.getObject()).doubleValue())),
436                       datatype);
437                   return convertedField;
438                case Datatype.BOOLEAN:
439                   convertedField = new FieldDouble(
440                       new BufferRange(CCzufDpowfsufs.getBytes(Boolean.TRUE.equals(field.getObject()) ? 1d : 0d)),
441                       datatype);
442                   return convertedField;
443                case Datatype.INT:
444                case Datatype.INTEGER:
445                case Datatype.SHORT:
446                case Datatype.SMALLINT:
447                case Datatype.BIGINT:
448                case Datatype.LONG:
449                case Datatype.TINYINT:
450                case Datatype.BYTE:
451                   convertedField = new FieldDouble(
452                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).doubleValue())),
453                       Datatype.DOUBLE);
454                   return convertedField;
455                case Datatype.REAL:
456                   TypeValidityHandler.checkDoubleWithFloat(field);
457                   convertedField = new FieldDouble(
458                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).doubleValue())),
459                       Datatype.DOUBLE);
460                   return convertedField;
461                default:
462                   try {
463                      convertedField = new FieldDouble(
464                          new BufferRange(CCzufDpowfsufs.getBytes(new Double JavaDoc(field.getObject().toString()))),
465                          datatype);
466                      return convertedField;
467                   } catch (RuntimeException JavaDoc re) {
468                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
469                   }
470
471             }
472
473          case Datatype.INT:
474          case Datatype.INTEGER:
475             switch (fieldType) {
476                case Datatype.INT:
477                case Datatype.INTEGER:
478                   convertedField = new FieldInteger(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Integer JavaDoc) field.getObject())) : field.getBufferRange(), datatype);
479                   return convertedField;
480                case Datatype.BIGDECIMAL:
481                case Datatype.DEC:
482                case Datatype.DECIMAL:
483                case Datatype.NUMERIC:
484                   TypeValidityHandler.checkIntegerWithBigDecimal(field);
485                   convertedField = new FieldInteger(
486                       new BufferRange(CCzufDpowfsufs.getBytes( ( (BigDecimal) field.getObject()).intValue())),
487                       datatype);
488                   return convertedField;
489                case Datatype.BOOLEAN:
490                   convertedField = new FieldInteger(
491                       new BufferRange(CCzufDpowfsufs.getBytes(Boolean.TRUE.equals(field.getObject()) ? 1 : 0)),
492                       datatype);
493                   return convertedField;
494                case Datatype.BIGINT:
495                case Datatype.LONG:
496                   TypeValidityHandler.checkIntegerWithNonDecimal(field);
497                   convertedField = new FieldInteger(
498                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).intValue())),
499                       datatype);
500                   return convertedField;
501                case Datatype.DOUBLE:
502                case Datatype.DOUBLEPRECISION:
503                case Datatype.FLOAT:
504                   TypeValidityHandler.checkIntegerWithDouble(field);
505                   convertedField = new FieldInteger(
506                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).intValue())),
507                       datatype);
508                   return convertedField;
509                case Datatype.REAL:
510                   TypeValidityHandler.checkIntegerWithFloat(field);
511                   convertedField = new FieldInteger(
512                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).intValue())),
513                       datatype);
514                   return convertedField;
515                case Datatype.SHORT:
516                case Datatype.SMALLINT:
517                case Datatype.TINYINT:
518                case Datatype.BYTE:
519                   convertedField = new FieldInteger(
520                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).intValue())),
521                       datatype);
522                   return convertedField;
523                default:
524                   try {
525                      convertedField = new FieldInteger(
526                          new BufferRange(CCzufDpowfsufs.getBytes(new Integer JavaDoc(field.getObject().toString()))),
527                          datatype);
528                      return convertedField;
529                   } catch (RuntimeException JavaDoc re) {
530                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
531                   }
532
533             }
534
535          case Datatype.REAL:
536             switch (fieldType) {
537                case Datatype.REAL:
538                   convertedField = new FieldReal(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Float JavaDoc) field.getObject())) : field.getBufferRange(), datatype);
539                   return convertedField;
540                case Datatype.BIGDECIMAL:
541                case Datatype.DEC:
542                case Datatype.DECIMAL:
543                case Datatype.NUMERIC:
544                   TypeValidityHandler.checkFloatWithBigDecimal(field);
545                   convertedField = new FieldReal(
546                       new BufferRange(CCzufDpowfsufs.getBytes( ( (BigDecimal) field.getObject()).floatValue())),
547                       datatype);
548                   return convertedField;
549                case Datatype.BOOLEAN:
550                   convertedField = new FieldReal(
551                       new BufferRange(CCzufDpowfsufs.getBytes(Boolean.TRUE.equals(field.getObject()) ? 1.0f : 0.0f)),
552                       datatype);
553                   return convertedField;
554                case Datatype.SHORT:
555                case Datatype.SMALLINT:
556                case Datatype.BIGINT:
557                case Datatype.LONG:
558                case Datatype.INT:
559                case Datatype.INTEGER:
560                case Datatype.DOUBLE:
561                case Datatype.DOUBLEPRECISION:
562                case Datatype.TINYINT:
563                case Datatype.BYTE:
564                   convertedField = new FieldReal(
565                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).floatValue())),
566                       datatype);
567                   return convertedField;
568                case Datatype.FLOAT:
569                   TypeValidityHandler.checkFloatWithDouble(field);
570                   convertedField = new FieldReal(
571                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).floatValue())),
572                       datatype);
573                   return convertedField;
574                default:
575                   try {
576                      convertedField = new FieldReal(
577                          new BufferRange(CCzufDpowfsufs.getBytes(new Float JavaDoc(field.getObject().toString()))),
578                          datatype);
579                      return convertedField;
580                   } catch (RuntimeException JavaDoc e) {
581                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
582                   }
583
584             }
585
586          case Datatype.SHORT:
587          case Datatype.SMALLINT:
588
589             switch (fieldType) {
590                case Datatype.BYTE:
591                case Datatype.TINYINT:
592                   convertedField = new FieldShort(new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).shortValue())), datatype);
593                   return convertedField;
594                case Datatype.SHORT:
595                case Datatype.SMALLINT:
596                   convertedField = new FieldShort(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Short JavaDoc) field.getObject())) : field.getBufferRange(), datatype);
597                   return convertedField;
598                case Datatype.BIGDECIMAL:
599                   TypeValidityHandler.checkShortWithBigDecimal(field);
600                   convertedField = new FieldShort(
601                       new BufferRange(CCzufDpowfsufs.getBytes( ( (BigDecimal) field.getObject()).shortValue())),
602                       datatype);
603                   return convertedField;
604                case Datatype.BOOLEAN:
605                   convertedField = new FieldShort(
606                       new BufferRange(CCzufDpowfsufs.getBytes(Boolean.TRUE.equals(field.getObject()) ? new Short JavaDoc("1") : new Short JavaDoc("0"))),
607                       datatype);
608                   return convertedField;
609                case Datatype.BIGINT:
610                case Datatype.LONG:
611                case Datatype.INT:
612                case Datatype.INTEGER:
613                   TypeValidityHandler.checkShortWithNonDecimal(field);
614                   convertedField = new FieldShort(
615                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).shortValue())),
616                       datatype);
617                   return convertedField;
618                case Datatype.DOUBLE:
619                case Datatype.DOUBLEPRECISION:
620                case Datatype.FLOAT:
621                   TypeValidityHandler.checkShortWithDouble(field);
622                   convertedField = new FieldShort(
623                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).shortValue())),
624                       datatype);
625                   return convertedField;
626                case Datatype.REAL:
627                   TypeValidityHandler.checkShortWithFloat(field);
628                   convertedField = new FieldShort(
629                       new BufferRange(CCzufDpowfsufs.getBytes( ( (Number JavaDoc) field.getObject()).shortValue())),
630                       datatype);
631                   return convertedField;
632                default:
633                   try {
634                      convertedField = new FieldShort(
635                          new BufferRange(CCzufDpowfsufs.getBytes(new Short JavaDoc(field.getObject().toString()))),
636                          datatype);
637                      return convertedField;
638                   } catch (RuntimeException JavaDoc e) {
639                      throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
640                   }
641
642             }
643
644          case Datatype.DATE:
645             switch (fieldType) {
646                case Datatype.DATE:
647                   convertedField = new FieldDate(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Date) field.getObject())) : field.getBufferRange(), datatype);
648                   return convertedField;
649                case Datatype.TIMESTAMP:
650                   convertedField = new FieldDate(
651                       new BufferRange(CCzufDpowfsufs.getBytes(TypeValidityHandler.getDBDate( (Timestamp) field.getObject()))),
652                       datatype);
653                   return convertedField;
654                case Datatype.TIME:
655                   throw new DException("DSE5547", new Object JavaDoc[] {"Time", "Date"});
656                case Datatype.CHAR:
657                case Datatype.CHARACTER:
658                case Datatype.CHARACTERVARYING:
659                case Datatype.CHARVARYING:
660                case Datatype.VARCHAR:
661                   convertedField = new FieldDate(
662                       new BufferRange(CCzufDpowfsufs.getBytes(TypeValidityHandler.getDBDateFromDateTimestamp( (String JavaDoc) field.getObject()))),
663                       datatype);
664                   return convertedField;
665                default:
666                   throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
667             }
668
669          case Datatype.TIME:
670             switch (fieldType) {
671                case Datatype.TIME:
672                   convertedField = new FieldTime(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Time) field.getObject())) : field.getBufferRange(), datatype);
673                   return convertedField;
674                case Datatype.TIMESTAMP:
675                   convertedField = new FieldTime(
676                       new BufferRange(CCzufDpowfsufs.getBytes(TypeValidityHandler.getTime( (Timestamp) field.getObject()))),
677                       datatype);
678                   return convertedField;
679                case Datatype.DATE:
680                   throw new DException("DSE5547", new Object JavaDoc[] {"Date", "Time"});
681                case Datatype.CHAR:
682                case Datatype.CHARACTER:
683                case Datatype.CHARACTERVARYING:
684                case Datatype.CHARVARYING:
685                case Datatype.VARCHAR:
686                   convertedField = new FieldTime(
687                       new BufferRange(CCzufDpowfsufs.getBytes(TypeValidityHandler.getTimeFromTimeTimeStamp( (String JavaDoc) field.getObject()))),
688                       datatype);
689                   return convertedField;
690                default:
691                   throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
692             }
693
694          case Datatype.TIMESTAMP:
695             switch (fieldType) {
696                case Datatype.TIMESTAMP:
697                   convertedField = new FieldTimeStamp(field.getBufferRange() == null ? new BufferRange(CCzufDpowfsufs.getBytes( (Timestamp) field.getObject())) : field.getBufferRange(), datatype);
698                   return convertedField;
699                case Datatype.TIME:
700                   throw new DException("DSE5547", new Object JavaDoc[] {"Time", "Timestamp"});
701                case Datatype.DATE:
702                   convertedField = new FieldTimeStamp(
703                       new BufferRange(CCzufDpowfsufs.getBytes(new Timestamp( ( (Date) field.getObject()).getTime()))),
704                       datatype);
705                   return convertedField;
706                case Datatype.CHAR:
707                case Datatype.CHARACTER:
708                case Datatype.CHARACTERVARYING:
709                case Datatype.CHARVARYING:
710                case Datatype.VARCHAR:
711                   convertedField = new FieldTimeStamp(
712                       new BufferRange(CCzufDpowfsufs.getBytes(TypeValidityHandler.getTimeStampFromTimestampDate( (String JavaDoc) field.getObject()))),
713                       datatype);
714                   return convertedField;
715                default:
716                   throw new DException("DSE773", new Object JavaDoc[] {field.getObject(), StaticClass.getDataTypeName(datatype)});
717             }
718
719          case Datatype.ARRAY:
720          case Datatype.MODULE:
721          case Datatype.RECORD:
722          case Datatype.RECORDSET:
723          case Datatype.REF:
724          case Datatype.STRUCT:
725          case Datatype.SUM:
726          case Datatype.TIME_WITH_TIMEZONE:
727          case Datatype.TIMESTAMP_WITH_TIMEZONE:
728             throw new DException("DSE1133", new Object JavaDoc[] {new Integer JavaDoc(datatype)});
729          default:
730             throw new DException("DSE1021", new Object JavaDoc[] {new Integer JavaDoc(datatype)});
731       }
732    }
733
734    public static FieldBase[] convertToAppropriateType(FieldBase[] fields, int[] datatype, int[] size, int[] scale, Collator JavaDoc collator) throws DException {
735       if (fields == null)
736          return null;
737       FieldBase[] fieldsToReturn = new FieldBase[fields.length];
738       for (int i = 0; i < fields.length; i++)
739          fieldsToReturn[i] = convertToAppropriateType(fields[i], datatype[i], size[i], scale[i], collator);
740       return fieldsToReturn;
741    }
742
743    public static FieldBase[] convertToAppropriateType(Object JavaDoc[] fields, int[] datatype, int[] size, int[] scale, Collator JavaDoc collator) throws DException {
744       if (fields == null)
745          return null;
746       FieldBase[] fieldsToReturn = new FieldBase[fields.length];
747       for (int i = 0; i < fields.length; i++)
748          fieldsToReturn[i] = convertToAppropriateType( (FieldBase) fields[i], datatype[i], size[i], scale[i], collator);
749       return fieldsToReturn;
750    }
751
752    public static FieldBase getField(int datatype, Object JavaDoc values, Collator JavaDoc collator) throws DException {
753       switch (datatype) {
754          case Datatype.INT:
755          case Datatype.INTEGER:
756             return FieldBaseConverter.getFieldBase( (Integer JavaDoc) values, datatype);
757          case Datatype.LONG:
758          case Datatype.BIGINT:
759             return FieldBaseConverter.getFieldBase( (Long JavaDoc) values, datatype);
760          case Datatype.DOUBLE:
761          case Datatype.DOUBLEPRECISION:
762          case Datatype.FLOAT:
763             return FieldBaseConverter.getFieldBase( (Double JavaDoc) values, datatype);
764          case Datatype.REAL:
765             return FieldBaseConverter.getFieldBase( (Float JavaDoc) values, datatype);
766          case Datatype.SMALLINT:
767          case Datatype.SHORT:
768             return FieldBaseConverter.getFieldBase( (Short JavaDoc) values, datatype);
769          case Datatype.TINYINT:
770          case Datatype.BYTE:
771             return FieldBaseConverter.getFieldBase( (Byte JavaDoc) values, datatype);
772          case Datatype.BINARY:
773          case Datatype.VARBINARY:
774             return FieldBaseConverter.getFieldBase( (byte[]) values, datatype);
775          case Datatype.DEC:
776          case Datatype.DECIMAL:
777          case Datatype.NUMERIC:
778          case Datatype.BIGDECIMAL:
779             return FieldBaseConverter.getFieldBase( (BigDecimal) values, datatype);
780          case Datatype.VARCHAR:
781          case Datatype.CHAR:
782          case Datatype.CHARACTER:
783          case Datatype.CHARACTERVARYING:
784          case Datatype.CHARVARYING:
785             return FieldBaseConverter.getFieldBase( (String JavaDoc) values, datatype, collator);
786          case Datatype.BIT:
787          case Datatype.BITVARYING:
788             return FieldBaseConverter.getFieldBase( (String JavaDoc) values, datatype, null);
789          case Datatype.BLOB:
790          case Datatype.BINARYLARGEOBJECT:
791          case Datatype.LONGVARBINARY:
792             return values instanceof DBlobUpdatable ? values == null ? new DBlobUpdatable(true) : (FieldBase) values
793                 : FieldBaseConverter.getFieldBase( (Blob) values);
794          case Datatype.DATE:
795             return FieldBaseConverter.getFieldBase( (java.sql.Date JavaDoc) values);
796          case Datatype.TIMESTAMP:
797             return FieldBaseConverter.getFieldBase( (java.sql.Timestamp JavaDoc) values);
798          case Datatype.TIME:
799             return FieldBaseConverter.getFieldBase( (java.sql.Time JavaDoc) values);
800          case Datatype.BOOLEAN:
801             return FieldBaseConverter.getFieldBase( (Boolean JavaDoc) values);
802          case Datatype.CHARACTERLARGEOBJECT:
803          case Datatype.CHARLARGEOBJECT:
804          case Datatype.CLOB:
805          case Datatype.LONGVARCHAR:
806             return values instanceof DClobUpdatable ?
807                 values == null ? new DClobUpdatable(true) : (FieldBase) values
808                 : FieldBaseConverter.getFieldBase( (Clob) values);
809          default:
810             throw new DException("DSE514", new Object JavaDoc[] {StaticClass.getDataTypeName(datatype)});
811       }
812    }
813
814    public static FieldBase getField(int datatype, Object JavaDoc values) throws DException {
815
816       switch (datatype) {
817          case Datatype.INT:
818          case Datatype.INTEGER:
819             return FieldBaseConverter.getFieldBase( (Integer JavaDoc) values, datatype);
820          case Datatype.LONG:
821          case Datatype.BIGINT:
822             return FieldBaseConverter.getFieldBase( (Long JavaDoc) values, datatype);
823          case Datatype.DOUBLE:
824          case Datatype.DOUBLEPRECISION:
825          case Datatype.FLOAT:
826             return FieldBaseConverter.getFieldBase( (Double JavaDoc) values, datatype);
827          case Datatype.REAL:
828             return FieldBaseConverter.getFieldBase( (Float JavaDoc) values, datatype);
829          case Datatype.SMALLINT:
830          case Datatype.SHORT:
831             return FieldBaseConverter.getFieldBase( (Short JavaDoc) values, datatype);
832          case Datatype.TINYINT:
833          case Datatype.BYTE:
834             return FieldBaseConverter.getFieldBase( (Byte JavaDoc) values, datatype);
835          case Datatype.BINARY:
836          case Datatype.VARBINARY:
837             return FieldBaseConverter.getFieldBase( (byte[]) values, datatype);
838          case Datatype.DEC:
839          case Datatype.DECIMAL:
840          case Datatype.NUMERIC:
841          case Datatype.BIGDECIMAL:
842             return FieldBaseConverter.getFieldBase( (BigDecimal) values, datatype);
843          case Datatype.VARCHAR:
844          case Datatype.CHAR:
845          case Datatype.CHARACTER:
846          case Datatype.CHARACTERVARYING:
847          case Datatype.CHARVARYING:
848             return FieldBaseConverter.getFieldBase( (String JavaDoc) values, datatype, null);
849          case Datatype.BIT:
850          case Datatype.BITVARYING:
851             return FieldBaseConverter.getFieldBase( (String JavaDoc) values, datatype, null);
852          case Datatype.BLOB:
853          case Datatype.BINARYLARGEOBJECT:
854          case Datatype.LONGVARBINARY:
855             return values instanceof DBlobUpdatable ? values == null ? new DBlobUpdatable(true) : (FieldBase) values
856                 : FieldBaseConverter.getFieldBase( (Blob) values);
857          case Datatype.DATE:
858             return FieldBaseConverter.getFieldBase( (java.sql.Date JavaDoc) values);
859          case Datatype.TIMESTAMP:
860             return FieldBaseConverter.getFieldBase( (java.sql.Timestamp JavaDoc) values);
861          case Datatype.TIME:
862             return FieldBaseConverter.getFieldBase( (java.sql.Time JavaDoc) values);
863          case Datatype.BOOLEAN:
864             return FieldBaseConverter.getFieldBase( (Boolean JavaDoc) values);
865          case Datatype.CHARACTERLARGEOBJECT:
866          case Datatype.CHARLARGEOBJECT:
867          case Datatype.CLOB:
868          case Datatype.LONGVARCHAR:
869             return values instanceof DClobUpdatable ?
870                 values == null ? new DClobUpdatable(true) : (FieldBase) values
871                 : FieldBaseConverter.getFieldBase( (Clob) values);
872          default:
873             throw new DException("get filed nit implemnetd for datatype " + datatype, null);
874       }
875    }
876
877    public static FieldBase getField(int datatype, BufferRange values) throws DException {
878       switch (datatype) {
879          case Datatype.INT:
880          case Datatype.INTEGER:
881             return new FieldInteger(values, datatype);
882          case Datatype.LONG:
883          case Datatype.BIGINT:
884             return new FieldLong(values, datatype);
885          case Datatype.DOUBLE:
886          case Datatype.DOUBLEPRECISION:
887          case Datatype.FLOAT:
888             return new FieldDouble(values, datatype);
889          case Datatype.REAL:
890             return new FieldReal(values, datatype);
891          case Datatype.SMALLINT:
892          case Datatype.SHORT:
893             return new FieldShort(values, datatype);
894          case Datatype.TINYINT:
895          case Datatype.BYTE:
896             return new FieldByte(values, datatype);
897          case Datatype.BINARY:
898          case Datatype.VARBINARY:
899             return new FieldBinary(values, datatype);
900          case Datatype.DEC:
901          case Datatype.DECIMAL:
902          case Datatype.NUMERIC:
903          case Datatype.BIGDECIMAL:
904             return new FieldBigDecimal(values, datatype);
905          case Datatype.VARCHAR:
906          case Datatype.CHAR:
907          case Datatype.CHARACTER:
908          case Datatype.CHARACTERVARYING:
909          case Datatype.CHARVARYING:
910             return new FieldString(values, datatype, null);
911          case Datatype.DATE:
912             return new FieldDate(values, datatype);
913          case Datatype.TIMESTAMP:
914             return new FieldTimeStamp(values, datatype);
915          case Datatype.TIME:
916             return new FieldTime(values, datatype);
917          case Datatype.BOOLEAN:
918             return new FieldBoolean(values, datatype);
919          default:
920             throw new DException("get field not implemented for datatype " + datatype, null);
921       }
922    }
923
924    public static FieldBase getField(Long JavaDoc value) {
925       return new FieldLong(new BufferRange(CCzufDpowfsufs.getBytes(value)), Datatype.LONG);
926    }
927
928    public static FieldBase getFieldForVariable(Object JavaDoc object) throws DException {
929      FieldBase field = null;
930       if (object == null) {
931          field = new FieldLiteral(null, -1);
932          field.setBufferRange(NULLBUFFERRANGE);
933       } else if (object instanceof Boolean JavaDoc) {
934          field = new FieldBooleanLiteral( ( (Boolean JavaDoc) object).booleanValue() ? 0 : 1, Datatype.BOOLEAN);
935       } else if (object instanceof String JavaDoc) {
936          field = new FieldStringLiteral(object, Datatype.CHAR);
937       } else if (object instanceof byte[]) {
938          field = new FieldBinary(new BufferRange( (byte[]) object), Datatype.BINARY);
939       } else if (object instanceof Blob) {
940          try {
941             field = new DBlobUpdatable( ( (Blob) object).getBinaryStream());
942          } catch (SQLException ex) {
943             throw new DException("DSE0", new Object JavaDoc[] {ex});
944          }
945       } else if (object instanceof Clob) {
946          try {
947             field = new DClobUpdatable( ( (Clob) object).getAsciiStream());
948          } catch (SQLException ex) {
949             throw new DException("DSE0", new Object JavaDoc[] {ex});
950          }
951       } else if (object instanceof Date) {
952          field = new FieldDateLiteral(object);
953       } else if (object instanceof Time) {
954          field = new FieldTimeLiteral(object);
955
956       } else if (object instanceof Timestamp) {
957          field = new FieldTimeStampLiteral(object);
958       } else
959          field = new FieldLiteral(object, -1);
960       return field;
961    }
962
963    public static SuperComparator getAppropriateComparator(int type1, int type2, boolean caseSensitive) {
964       throw new UnsupportedOperationException JavaDoc("method getField() not implemented");
965    }
966
967    public static FieldBase[] getFields(Object JavaDoc[] object) throws DException {
968       FieldBase[] array = new FieldBase[object.length];
969       for (int i = 0; i < object.length; i++) {
970          array[i] = getFieldForVariable(object[i]);
971       }
972       return array;
973    }
974
975    public static FieldBase[] getFields(int[] datatypes, Collator JavaDoc collator) throws DException {
976       FieldBase[] array = new FieldBase[datatypes.length];
977       for (int i = 0; i < datatypes.length; i++) {
978          array[i] = getField(datatypes[i], null, collator);
979       }
980       return array;
981    }
982
983    public static Object JavaDoc[] getBlankFields(int[] datatypes, Collator JavaDoc collator) throws DException {
984       Object JavaDoc[] array = new Object JavaDoc[datatypes.length];
985       for (int i = 0; i < datatypes.length; i++) {
986          array[i] = getField(datatypes[i], null, collator);
987       }
988       return array;
989    }
990
991    private static FieldBinary convertNonDecimalToBinary(FieldBase field, int size, int fieldType) throws DException {
992       BufferRange bf = field.getBufferRange();
993       int length = bf.getLength();
994       byte[] result = size == length ? bf.getBytes()
995           : size > length ? padBytes(bf.getBytes(), size - length)
996           : truncateBytes(bf.getBytes(), length, size);
997       return new FieldBinary(new BufferRange(result), fieldType);
998    }
999
1000   private static byte[] truncateBytes(byte[] bytes, int length, int size) throws DException {
1001      byte[] result = new byte[length - size];
1002      System.arraycopy(bytes, length - size, result, 0, size);
1003      return result;
1004   }
1005
1006   private static byte[] padBytes(byte[] bytes, int length) throws DException {
1007      byte sign = getSign(bytes[0]);
1008      byte b = sign == -1 ? (byte) - 1 : (byte) 0;
1009      byte[] result = new byte[bytes.length + length];
1010      for (int i = 0; i < length; i++) {
1011         result[i] = b;
1012      }
1013      System.arraycopy(bytes, 0, result, length, bytes.length);
1014      return result;
1015   }
1016
1017   private static byte getSign(byte b) {
1018      return (byte) ( (b >> 7) & 0xff);
1019   }
1020
1021   public static FieldBase[] setFieldLiteralBufferRange(Object JavaDoc[] object) throws DException {
1022      FieldBase[] fbs = new FieldBase[object.length];
1023      FieldBase fb = null;
1024      for (int i = 0, len = object.length; i < len; i++) {
1025         fb = (FieldBase) object[i];
1026         fb.setDatatype(fb.getDatatype());
1027         fbs[i] = fb;
1028      }
1029      return fbs;
1030   }
1031
1032   public static FieldBase[] setFieldLiteralBufferRangeWithArray(Object JavaDoc[] object) throws DException {
1033      FieldBase[] fbs = new FieldBase[object.length];
1034      FieldBase fb = null;
1035      for (int i = 0, len = object.length; i < len; i++) {
1036         if (object[i] instanceof Object JavaDoc[])
1037            fb = (FieldBase) ( (Object JavaDoc[]) object[i])[0];
1038         else
1039            fb = (FieldBase) object[i];
1040         fb.setDatatype(fb.getDatatype());
1041         fbs[i] = fb;
1042      }
1043      return fbs;
1044   }
1045
1046   public static FieldBase setFieldLiteralBufferRange(Object JavaDoc object) throws DException {
1047      FieldBase fb = (FieldBase) object;
1048      fb.setDatatype(fb.getDatatype());
1049      return fb;
1050   }
1051
1052   private static void checkPrecisionScale(String JavaDoc object, int size, int scale) throws DException {
1053      char aaa = object.charAt(0);
1054      if (aaa == '-' || aaa == '+') {
1055         object = object.substring(1);
1056      }
1057      int length = object.indexOf('.');
1058      if (length == -1) { // Non-decimal values
1059
int expIndex = object.indexOf('E');
1060         expIndex = expIndex == -1 ? object.indexOf('e') : expIndex;
1061         length = expIndex == -1 ? object.length() : (Integer.parseInt(object.substring(expIndex + 1)) + 1) + expIndex - 1;
1062         if (length > (size - scale))
1063            throw new DException("DSE5546", null);
1064      } else { // Decimal values
1065
if (size == scale) {
1066            if ( (length == 1 && !object.startsWith("0")) || length > 1)
1067               throw new DException("DSE5546", null);
1068         } else {
1069            int eIndex = object.indexOf('E');
1070            eIndex = eIndex == -1 ? object.indexOf('e') : eIndex;
1071            length = eIndex == -1 ? length : Integer.parseInt(object.substring(eIndex + 1)) + 1;
1072            if (length > (size - scale)) {
1073               throw new DException("DSE5546", null);
1074            }
1075         }
1076      }
1077   }
1078
1079   public static FieldBase[] changeIntoFildBase(Object JavaDoc obj) throws DException {
1080      Object JavaDoc[] temp = (Object JavaDoc[]) obj;
1081      FieldBase[] fb = new FieldBase[temp.length];
1082      for (int i = 0; i < temp.length; i++) {
1083         fb[i] = (FieldBase) temp[i];
1084      }
1085      return fb;
1086   }
1087}
1088
Popular Tags