KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > expression > datetimevalueexpression > timestampfunction


1 package com.daffodilwoods.daffodildb.server.sql99.expression.datetimevalueexpression;
2
3 import com.daffodilwoods.database.resource.*;
4 import com.daffodilwoods.daffodildb.server.sql99.token.*;
5 import com.daffodilwoods.daffodildb.server.sql99.expression.stringvalueexpression.charactervalueexpression;
6 import com.daffodilwoods.daffodildb.server.sql99.common.TypeConstants;
7 import com.daffodilwoods.daffodildb.server.sql99.common.Datatypes;
8 import java.sql.Timestamp JavaDoc;
9 import com.daffodilwoods.daffodildb.utils.TypeValidityHandler;
10 import com.daffodilwoods.daffodildb.utils.field.FieldTimeStampLiteral;
11 import com.daffodilwoods.daffodildb.server.sql99.common.StaticClass;
12 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
13 import com.daffodilwoods.daffodildb.server.sql99.utils._Reference;
14 import com.daffodilwoods.daffodildb.utils.field.FieldBase;
15 import com.daffodilwoods.daffodildb.utils.FieldUtility;
16 import com.daffodilwoods.daffodildb.server.sql99.utils.ByteComparison;
17 import com.daffodilwoods.daffodildb.server.sql99.common.ColumnDetails;
18 import com.daffodilwoods.daffodildb.server.sql99.common.ParameterInfo;
19 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.AbstractRowValueExpression;
20 import java.text.SimpleDateFormat JavaDoc;
21 import com.daffodilwoods.daffodildb.utils.DTimeStamp;
22 import java.text.*;
23 import com.daffodilwoods.daffodildb.server.sql99.expression.stringvalueexpression.*;
24 import java.text.DateFormat JavaDoc;
25 import java.sql.Date JavaDoc;
26 import com.daffodilwoods.database.resource.DException;
27
28 public class timestampfunction extends AbstractDateTimeValueFunction implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter ,datetimevaluefunction , TypeConstants, Datatypes{
29
30
31   public Srightparen_1874859514 _Srightparen_18748595140 ;
32   public Scomma94843605characterstringliteral _OptScomma94843605characterstringliteral1 ;
33   public Scomma94843605characterstringliteral _OptScomma94843605characterstringliteral2 ;
34   public charactervalueexpression _charactervalueexpression3 ;
35   public Sleftparen653880241 _Sleftparen6538802414 ;
36   public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439225 ;
37
38
39          public _Reference[] checkSemantic(_ServerSession parent) throws DException {
40          _Reference[] ref = super.checkSemantic(parent);
41          if(ref!=null) {
42            return ref;
43           }
44          int type = _charactervalueexpression3.getByteComparison(parent).getDataTypes()[0];
45          switch (type) {
46             case -1:
47             case CHARACTER:
48             case VARCHAR:
49             case CHAR:
50             case CHARACTERVARYING:
51               return ref;
52            default:
53             throw new DException("DSE4108", new Object JavaDoc[] {StaticClass.getDataTypeName(type), "TimestampFunction"});
54           }
55
56          }
57
58
59      public Object JavaDoc run(Object JavaDoc object) throws com.daffodilwoods.database.resource.DException {
60
61        FieldBase result = (FieldBase) _charactervalueexpression3.run(object);
62        if (result.isNull()) {
63         return new FieldTimeStampLiteral(FieldUtility.NULLBUFFERRANGE);
64         }
65        FieldBase format_mask1 =null ,format_mask2 =null;
66        if (_OptScomma94843605characterstringliteral2 != null) {
67          format_mask1 = (FieldBase) _OptScomma94843605characterstringliteral2.run(object);
68          if (format_mask1 != null && !format_mask1.isNull()) {
69            int type1 = setAndGetDatatype(format_mask1);
70          }
71        }
72
73        if (_OptScomma94843605characterstringliteral1 != null) {
74          format_mask2 = (FieldBase) _OptScomma94843605characterstringliteral1.run(object);
75          if (format_mask2 != null && !format_mask2.isNull()) {
76            int type2 = setAndGetDatatype(format_mask2);
77          }
78        }
79        int type = setAndGetDatatype(result);
80       return getResult( type, result.getObject() ,(format_mask1 == null ? null :(String JavaDoc)format_mask1.getObject()),(format_mask2 == null ? null :(String JavaDoc)format_mask2.getObject()));
81
82     }
83
84
85     private int setAndGetDatatype(FieldBase fieldbase) throws DException{
86      int type =fieldbase.getDatatype();
87       if(type==-1) {
88         fieldbase.setDatatype( -1);
89         type = fieldbase.getDatatype();
90       }
91       return type;
92     }
93
94     private Object JavaDoc getResult(int type, Object JavaDoc result, String JavaDoc format_mask1,String JavaDoc format_mask2) throws DException {
95       switch (type) {
96         case CHARACTER:
97         case VARCHAR:
98         case CHAR:
99         case CHARACTERVARYING:
100           String JavaDoc string = (String JavaDoc)result;
101           if(format_mask1 ==null){
102             return new FieldTimeStampLiteral(getTimeStampWhenFormatIsNotSpecified(string,type));
103           }
104           format_mask1 = format_mask1.replaceAll("Y","y");
105           format_mask1 = format_mask1.replaceAll("MM","M");
106           format_mask1 = format_mask1.replaceAll("DD","d");
107           format_mask1 = format_mask1.replaceAll("HH24","H");
108           format_mask1 = format_mask1.replaceAll("MI","m");
109           format_mask1 = format_mask1.replaceAll("SS","s");
110           SimpleDateFormat JavaDoc dateFormat = new SimpleDateFormat JavaDoc(format_mask1);
111
112             Timestamp JavaDoc timestamp = null;
113             try {
114               timestamp = getJDKCompatibleTimestamp(dateFormat.parse(string).getTime());
115             }
116             catch (ParseException ex) {
117               throw new DException("DSE419",new Object JavaDoc[] {"TimestampFunction"});
118             }
119             catch (DException ex) {
120               throw new DException("DSE4108", new Object JavaDoc[] {StaticClass.getDataTypeName(type), "TimestampFunction"});
121             }
122             return new FieldTimeStampLiteral(timestamp);
123         default:
124            throw new DException("DSE4108", new Object JavaDoc[] {StaticClass.getDataTypeName(type), "TimestampFunction"});
125      }
126
127   }
128
129
130   private Timestamp JavaDoc getJDKCompatibleTimestamp(long timestampWithNanoSeconds) throws DException {
131    Timestamp JavaDoc ts = new Timestamp JavaDoc(timestampWithNanoSeconds);
132    String JavaDoc javaVersion = System.getProperty("java.runtime.version").substring(0, 3);
133    try {
134       float version = Float.parseFloat(javaVersion);
135       if (version >= 1.4f)
136          return ts;
137       DTimeStamp dtimestamp = new DTimeStamp(ts.getTime() + ts.getNanos() / 1000000);
138       return dtimestamp;
139    } catch (NumberFormatException JavaDoc ex) {
140       return ts;
141    }
142 }
143
144  private Object JavaDoc getTimeStampWhenFormatIsNotSpecified(String JavaDoc string, int type) throws DException {
145    Timestamp JavaDoc timestamps;
146   try {
147    timestamps = TypeValidityHandler.getTimestamp(string);
148   }
149   catch (DException exd) {
150     SimpleDateFormat JavaDoc dateFormat = new SimpleDateFormat JavaDoc("D-MMM-yyyy");
151     try {
152       timestamps = getJDKCompatibleTimestamp(dateFormat.parse(string).getTime());
153     }
154     catch (ParseException ex) {
155        throw new DException("DSE8022", null);
156     }
157     catch (DException ex) {
158       throw ex;
159     }
160
161   }
162    return timestamps;
163  }
164
165  /*
166      When a date format is used by TO_CHAR or TO_DATE they return part of the date/time. When used by TRUNC they will return the first day of the period. When used by ROUND the values will round up at mid year/mid month (July 1 or 16th day)
167      CC Century ,
168      SCC Century BC prefixed with -,
169      YYYY Year 2001,SYYY Year BC prefixed with -
170      IYYY ISO Year 2001
171      YY Year 01
172      RR Year 01 rollover for Y2K compatibility *
173      YEAR Year spelled out
174      SYEAR Year spelled out BC prefixed with -
175      BC BC/AD Indicator *
176      Q Quarter : Jan-Mar=1, Apr-Jun=2
177      MM Month of year 01, 02...12
178      RM Roman Month I, II...XII *
179      MONTH In full [January ]...[December ]
180      FMMONTH In full [January]...[December]
181      MON JAN, FEB
182      WW Week of year 1-52
183      W Week of month 1-5
184      IW ISO std week of year
185      DDD Day of year 1-366 *
186      DD Day of month 1-31
187      D Day of week 1-7
188      DAY In full [Monday ]...[Sunday ]
189      FMDAY In full [Monday]...[Sunday]
190      DY MON...SUN
191      DDTH Ordinal Day 7TH
192      DDSPTH Spell out ordinal SEVENTH
193      J Julian Day (days since 31/12/4713)
194      HH Hours of day (1-12)
195      HH12 Hours of day (1-12)
196      HH24 Hours of day (1-24)
197      SPHH Spell out SEVEN
198      AM am or pm *
199      PM am or pm *
200      A.M. a.m. or p.m. *
201      P.M. a.m. or p.m. *
202      MI Minutes 0-59
203      SS Seconds 0-59 *
204      SSSS Seconds past midnight (0-86399) *
205
206      The following punctuation -/,.;: can be included in any date format
207      any other chars can be included "in quotes"
208
209   * Formats marked with * can only be used with TO_CHAR or TO_DATE not TRUNC() or ROUND()
210
211      Date formats that are spelled out in characters will adopt the capitalisation of the format
212      e.g.
213      'MONTH' =JANUARY
214      'Month' = January
215   */

216
217  private SimpleDateFormat JavaDoc dateTimeFormat(String JavaDoc format) throws DException {
218    String JavaDoc valid_Format = getValidDateFormat(format);
219    return new SimpleDateFormat JavaDoc(valid_Format);
220  }
221
222  private String JavaDoc getValidDateFormat(String JavaDoc format_mask) {
223   format_mask = format_mask.replaceAll("BC", "G");
224   format_mask = format_mask.replaceAll("AC", "G");
225
226   format_mask= format_mask.replaceAll("YYYY", "yyyy");
227   format_mask = format_mask.replaceAll("IYYY", "yyyy");
228   format_mask = format_mask.replaceAll("YY", "yy");
229   format_mask = format_mask.replaceAll("YEAR", "yyyy");
230   format_mask = format_mask.replaceAll("SYEAR", "yyyy");
231
232   format_mask = format_mask.replaceAll("MM", "M");
233   format_mask = format_mask.replaceAll("Mon","MMM");
234   format_mask = format_mask.replaceAll("MON","MMM");
235   format_mask = format_mask.replaceAll("FMonth","MMMM");
236   format_mask = format_mask.replaceAll("FMMonth","MMMM");
237   format_mask = format_mask.replaceAll("FMmonth","MMMM");
238   format_mask = format_mask.replaceAll("Month", "MMMM");
239   format_mask = format_mask.replaceAll("month", "MMMM");
240
241
242
243   format_mask = format_mask.replaceAll("WW", "w");
244   format_mask = format_mask.replaceAll("IW", "w");
245
246   format_mask = format_mask.replaceAll("DDDth", "D");
247   format_mask = format_mask.replaceAll("DDD", "D");
248   format_mask = format_mask.replaceAll("DDth", "d");
249   format_mask = format_mask.replaceAll("ddth", "d");
250   format_mask = format_mask.replaceAll("DD", "d");
251   format_mask = format_mask.replaceAll("DAY", "E");
252   format_mask = format_mask.replaceAll("FMDAY", "E");
253
254
255   format_mask = format_mask.replaceAll("HH", "h");
256   format_mask = format_mask.replaceAll("HH12", "h");
257   format_mask = format_mask.replaceAll("HH24", "H");
258   format_mask = format_mask.replaceAll("MI", "m");
259   format_mask = format_mask.replaceAll("SS", "s");
260   format_mask = format_mask.replaceAll("ss", "s");
261   format_mask = format_mask.replaceAll("ssss", "s");
262
263
264   format_mask = format_mask.replaceAll("AM", "a");
265   format_mask = format_mask.replaceAll("PM", "a");
266   format_mask = format_mask.replaceAll("A.M.", "a");
267   format_mask = format_mask.replaceAll("P.M.", "a");
268    return format_mask;
269  }
270
271
272     public ParameterInfo[] getParameterInfo() throws DException {
273     /* ArrayList list =new ArrayList();
274       ParameterInfo[] param1 = _charactervalueexpression3.getParameterInfo();
275       for (int i = 0; i < param1.length; i++){
276         if (param1[i].getQuestionMark()) {
277           param1[i].setDataType(Datatype.CHARACTER);
278           param1[i].setName("TIMESTAMPFUNCTION Arg1");
279           list.addAll(Arrays.asList(param1));
280         }
281       }
282       ParameterInfo[] param2 =null;
283       if(_OptScomma94843605characterstringliteral2!=null) {
284         param2 = _OptScomma94843605characterstringliteral2.getParameterInfo();
285         for (int i = 0; i < param2.length; i++) {
286         if (param2[i].getQuestionMark()) {
287           param2[i].setDataType(Datatypes.CHARACTER);
288           param2[i].setName("TIMESTAMPFUNCTION Arg2");
289           list.addAll(Arrays.asList(param2));
290           }
291          }
292         }
293       ParameterInfo[] param3 =null;
294       if(_OptScomma94843605characterstringliteral1!=null) {
295         param3 = _OptScomma94843605characterstringliteral1.getParameterInfo();
296         for (int i = 0; i < param3.length; i++) {
297         if (param3[i].getQuestionMark()) {
298           param3[i].setDataType(Datatypes.CHARACTER);
299           param3[i].setName("TIMESTAMPFUNCTION Arg3");
300           list.addAll(Arrays.asList(param3));
301           }
302          }
303         }
304       ParameterInfo[] param4 = new ParameterInfo[list.size()];
305       list.toArray(param4);
306       for (int i = 0; i < param4.length; i++) {
307         if(param4[i].getQuestionMark())
308           return param4;
309       }
310       return getThisParameterInfo(); */

311     return new ParameterInfo[0];
312    }
313
314    protected String JavaDoc getNameOfColumn(ColumnDetails[] columnDetails) throws DException {
315       String JavaDoc nameOfColumn = "";
316       for (int i = 0; i < columnDetails.length; ++i) {
317          nameOfColumn += columnDetails[i].getColumn();
318       }
319       return nameOfColumn;
320    }
321
322    protected ParameterInfo[] getThisParameterInfo() throws DException {
323        ParameterInfo parameterInfo = new ParameterInfo();
324        parameterInfo.setName(toString());
325        parameterInfo.setDataType(TIMESTAMP);
326        return new ParameterInfo[] {parameterInfo};
327     }
328
329
330   public ByteComparison getByteComparison(Object JavaDoc object) throws DException {
331      ByteComparison byteComparison = new ByteComparison(false, new int[] {TIMESTAMP});
332      byteComparison.setSize(getColumnSize(object));
333      return byteComparison;
334    }
335
336
337    public String JavaDoc getType() throws DException {
338      return (String JavaDoc) _SRESERVEDWORD12065439225.run(null);
339    }
340
341    public int getFunctionType() {
342      return TIMESTAMPFUNCTION;
343    }
344
345
346
347    public AbstractRowValueExpression[] getChilds() {
348      if (_OptScomma94843605characterstringliteral2 == null) {
349        if (_OptScomma94843605characterstringliteral1 == null) {
350          return new AbstractRowValueExpression[] {
351              (AbstractRowValueExpression) (_charactervalueexpression3)};
352        }
353        else {
354          return new AbstractRowValueExpression[] {
355              (AbstractRowValueExpression) (_charactervalueexpression3),
356              (AbstractRowValueExpression)
357              _OptScomma94843605characterstringliteral1
358          };
359
360        }
361      }
362      else {
363        if (_OptScomma94843605characterstringliteral1 == null) {
364          return new AbstractRowValueExpression[] {
365              (AbstractRowValueExpression) (_charactervalueexpression3),
366              (AbstractRowValueExpression) _OptScomma94843605characterstringliteral2
367          };
368        }
369        else {
370          return new AbstractRowValueExpression[] {
371              (AbstractRowValueExpression) (_charactervalueexpression3),
372              (AbstractRowValueExpression)
373              _OptScomma94843605characterstringliteral2,
374              (AbstractRowValueExpression)
375              _OptScomma94843605characterstringliteral1
376          };
377
378        }
379      }
380    }
381
382      public ColumnDetails[] getChildColumnDetails() throws DException {
383        return columnDetails;
384      }
385
386
387         public String JavaDoc toString() {
388         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
389         sb.append(" ");
390         sb.append(_SRESERVEDWORD12065439225);
391         sb.append(" ");
392         sb.append(_Sleftparen6538802414);
393         sb.append(" ");
394         sb.append(_charactervalueexpression3);
395         sb.append(" ");
396         if(_OptScomma94843605characterstringliteral2 != null ) {
397           sb.append(_OptScomma94843605characterstringliteral2);
398         }
399         sb.append(" ");
400         if(_OptScomma94843605characterstringliteral1 != null ) {
401           sb.append(_OptScomma94843605characterstringliteral1);
402         }
403         sb.append(" ");
404         sb.append(_Srightparen_18748595140);
405         return sb.toString();
406      }
407
408      public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
409       timestampfunction tempClass = new timestampfunction();
410       tempClass._Srightparen_18748595140 = (Srightparen_1874859514) _Srightparen_18748595140.clone();
411       tempClass._OptScomma94843605characterstringliteral1 = (Scomma94843605characterstringliteral) _OptScomma94843605characterstringliteral1.clone();
412       tempClass._OptScomma94843605characterstringliteral2 = (Scomma94843605characterstringliteral) _OptScomma94843605characterstringliteral2.clone();
413       tempClass._charactervalueexpression3 = (charactervalueexpression) _charactervalueexpression3.clone();
414       tempClass._Sleftparen6538802414 = (Sleftparen653880241) _Sleftparen6538802414.clone();
415       tempClass._SRESERVEDWORD12065439225 = (SRESERVEDWORD1206543922) _SRESERVEDWORD12065439225.clone();
416       return tempClass;
417    }
418
419
420
421
422      public int getColumnSize( Object JavaDoc object) throws DException {
423             return Datatypes.TIMESTAMPSIZE;
424        }
425
426
427    }
428
Popular Tags