KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > expression > stringvalueexpression > substringfunction


1 package com.daffodilwoods.daffodildb.server.sql99.expression.
2     stringvalueexpression;
3
4 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
5 import com.daffodilwoods.daffodildb.server.serversystem.*;
6 import com.daffodilwoods.daffodildb.server.sql99.common.*;
7 import com.daffodilwoods.daffodildb.server.sql99.expression.
8     numericvalueexpression.*;
9 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*;
10 import com.daffodilwoods.daffodildb.server.sql99.token.*;
11 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
12 import com.daffodilwoods.daffodildb.utils.*;
13 import com.daffodilwoods.daffodildb.utils.field.*;
14 import com.daffodilwoods.database.resource.*;
15 import com.daffodilwoods.database.utility.P;
16 import java.util.ArrayList JavaDoc;
17 import java.util.Arrays JavaDoc;
18 import in.co.daffodil.db.jdbc.DatabaseProperties;
19
20 public class substringfunction
21     extends AbstractStringValueExpression
22     implements charactervaluefunction {
23
24
25
26   public Srightparen_1874859514 _Srightparen_18748595140 ;
27   public numericvalueexpression _OptScomma94843605numericvalueexpression1 ;
28   public numericvalueexpression _numericvalueexpression2 ;
29   public Scomma94843605 _Scomma948436053 ;
30   public charactervalueexpression _charactervalueexpression4 ;
31   public Sleftparen653880241 _Sleftparen6538802415 ;
32   public SNONRESERVEDWORD136444255 _SNONRESERVEDWORD1364442556 ;
33
34
35
36
37   public Object JavaDoc run(Object JavaDoc object) throws com.daffodilwoods.database.resource.
38
      DException {
39     FieldBase result1 = (FieldBase) _charactervalueexpression4.run(object);
40     if (result1.isNull()) {
41       return new FieldStringLiteral(FieldUtility.NULLBUFFERRANGE, CHARACTER);
42     }
43     FieldBase result2 = (FieldBase) _numericvalueexpression2.run(object);
44     if (result2.isNull()) {
45       return new FieldStringLiteral(FieldUtility.NULLBUFFERRANGE, CHARACTER);
46     }
47          FieldBase result3=null;
48     if(_OptScomma94843605numericvalueexpression1!=null) {
49        result3 = (FieldBase) _OptScomma94843605numericvalueexpression1.run(object);
50     }
51    if(result3==null||result3.isNull()) {
52     return getResultInCaseOfTwoParameter(getDataType(result1), result1.getObject(),
53         getCount(result2.getObject(), getDataType(result2)));
54
55    } else {
56      return getResulInCaseOfThreeParameter(
57          getDataType(result1), result1.getObject(),
58          getCount(result2.getObject(), getDataType(result2)),
59          getCount(result3.getObject(), getDataType(result3)));
60    }
61   }
62
63   public ColumnDetails[] getChildColumnDetails() throws DException {
64     return columnDetails;
65   }
66
67   public ParameterInfo[] getParameterInfo() throws DException {
68       ArrayList JavaDoc list =new ArrayList JavaDoc();
69       ParameterInfo[] parameterInfo1 = _charactervalueexpression4.getParameterInfo();
70       for (int i = 0; i < parameterInfo1.length; i++) {
71         if (parameterInfo1[i].getQuestionMark()) {
72           parameterInfo1[i].setDataType(Datatypes.CHARACTER);
73           parameterInfo1[i].setName("SUBSTRING Arg1");
74           list.addAll(Arrays.asList(parameterInfo1));
75         }
76       }
77       ParameterInfo[] parameterInfo2 = _numericvalueexpression2.getParameterInfo();
78       for (int i = 0; i <parameterInfo2.length; i++) {
79         if (parameterInfo2[i].getQuestionMark()) {
80           parameterInfo2[i].setDataType(Datatypes.INTEGER);
81           parameterInfo2[i].setName("SUBSTRING Arg2");
82           list.addAll(Arrays.asList(parameterInfo2));
83         }
84       }
85       if(_OptScomma94843605numericvalueexpression1!=null ) {
86         ParameterInfo[] parameterInfo4 = _OptScomma94843605numericvalueexpression1.
87             getParameterInfo();
88         for (int i = 0; i < parameterInfo4.length; i++) {
89           if (parameterInfo4[i].getQuestionMark()) {
90             parameterInfo4[i].setDataType(Datatypes.INTEGER);
91             parameterInfo4[i].setName("SUBSTRING Arg3");
92             list.addAll(Arrays.asList(parameterInfo4));
93           }
94         }
95       }
96
97       ParameterInfo[] param3 = new ParameterInfo[list.size()];
98       list.toArray(param3);
99       for (int i = 0; i < param3.length; i++) {
100         if(param3[i].getQuestionMark()){
101           return param3;
102         }
103       }
104      return getThisParameterInfo();
105
106   }
107
108   protected ParameterInfo[] getThisParameterInfo() throws DException {
109     ParameterInfo parameterInfo = new ParameterInfo();
110     parameterInfo.setName(toString());
111     parameterInfo.setDataType(Datatypes.CHARACTER);
112     return new ParameterInfo[] {
113         parameterInfo};
114   }
115
116
117
118   protected String JavaDoc getNameOfColumn(ColumnDetails[] columnDetails) throws
119       DException {
120     String JavaDoc nameOfColumn = "";
121     for (int i = 0; i < columnDetails.length; ++i) {
122       nameOfColumn += columnDetails[i].getColumn();
123     }
124     return nameOfColumn;
125   }
126
127   private Integer JavaDoc getCount(Object JavaDoc object, int type) throws DException {
128     switch (type) {
129       case BYTE:
130       case TINYINT:
131       case INTEGER:
132       case INT:
133       case REAL:
134       case DOUBLE:
135       case FLOAT:
136       case DOUBLEPRECISION:
137       case LONG:
138       case BIGINT:
139       case SHORT:
140       case SMALLINT:
141       case BIGDECIMAL:
142       case DEC:
143       case DECIMAL:
144       case NUMERIC:
145         return new Integer JavaDoc( ( (Number JavaDoc) object).intValue());
146       case CHARACTER:
147       case VARCHAR:
148       case CHAR:
149       case CHARACTERVARYING:
150         String JavaDoc string = (String JavaDoc) object;
151         Double JavaDoc d = null;
152         try {
153           d = new Double JavaDoc(string);
154         }
155         catch (Exception JavaDoc e) {
156           throw new DException("DSE4104", null);
157         }
158         return new Integer JavaDoc(d.intValue());
159       default:
160         throw new DException("DSE4108",
161                              new Object JavaDoc[] {StaticClass.getDataTypeName(type),
162                              "substring"});
163     }
164   }
165
166   private Object JavaDoc getResulInCaseOfThreeParameter(int type, Object JavaDoc result1, Integer JavaDoc start,
167                            Integer JavaDoc length) throws DException {
168     int startP = start.intValue();
169     int lengthP = length.intValue();
170     switch (type) {
171       case CHARACTER:
172       case VARCHAR:
173       case CHAR:
174       case CHARACTERVARYING:
175         return new FieldStringLiteral(subString( (String JavaDoc) result1, startP,
176                                                 lengthP), Datatype.CHARACTER);
177       default:
178         throw new DException("DSE4108",
179                              new Object JavaDoc[] {StaticClass.getDataTypeName(type),
180                              "substring"});
181     }
182   }
183
184
185   private Object JavaDoc getResultInCaseOfTwoParameter(int type, Object JavaDoc result1, Integer JavaDoc start) throws DException {
186     switch (type) {
187       case CHARACTER:
188       case VARCHAR:
189       case CHAR:
190       case CHARACTERVARYING:
191         int length =start.intValue();
192         if(length< 0||length>((String JavaDoc)result1).length()) {
193           return new FieldStringLiteral("", Datatype.CHARACTER);
194         }
195         return new FieldStringLiteral( ( (String JavaDoc) result1).substring(start.
196               intValue() - 1), Datatype.CHARACTER);
197       default:
198         throw new DException("DSE4108",
199                              new Object JavaDoc[] {StaticClass.getDataTypeName(type),
200                              "substring"});
201     }
202   }
203
204
205   private String JavaDoc subString(String JavaDoc string, int beginIndex, int length) throws
206       DException {
207     beginIndex = beginIndex - 1;
208     if (beginIndex < 0 || length < 1)
209       throw new DException("DSE1160", null);
210     if (beginIndex > string.length()) {
211       return "";
212     }
213     if ( (beginIndex + length) > string.length()) {
214       return string.substring(beginIndex);
215     }
216     return string.substring(beginIndex, beginIndex + length);
217
218   }
219
220
221   public AbstractRowValueExpression[] getChilds() {
222     ArrayList JavaDoc list =new ArrayList JavaDoc();
223     list.add((AbstractRowValueExpression) (_charactervalueexpression4));
224     list.add((AbstractRowValueExpression) (_numericvalueexpression2));
225     if(_OptScomma94843605numericvalueexpression1!=null )
226       list.add((AbstractRowValueExpression) (_OptScomma94843605numericvalueexpression1));
227     AbstractRowValueExpression[] childs = new AbstractRowValueExpression[list.size()];
228     list.toArray(childs);
229     return childs;
230
231   }
232
233   public String JavaDoc getType() throws DException {
234     return (String JavaDoc) _SNONRESERVEDWORD1364442556.run(null);
235   }
236
237   public String JavaDoc toString() {
238          StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
239          sb.append(" ");
240          sb.append(_SNONRESERVEDWORD1364442556);
241          sb.append(" ");
242          sb.append(_Sleftparen6538802415);
243          sb.append(" ");
244          sb.append(_charactervalueexpression4);
245          sb.append(" ");
246          sb.append(_Scomma948436053);
247          sb.append(" ");
248          sb.append(_numericvalueexpression2);
249          sb.append(" ");
250          if(_OptScomma94843605numericvalueexpression1 != null ) {
251            sb.append(_Scomma948436053);
252            sb.append(_OptScomma94843605numericvalueexpression1);
253            sb.append(" ");
254          }
255          sb.append(_Srightparen_18748595140);
256          return sb.toString();
257  }
258
259
260   public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
261     substringfunction tempClass = new substringfunction();
262     tempClass._Srightparen_18748595140 = (Srightparen_1874859514)
263         _Srightparen_18748595140.clone();
264     if(_OptScomma94843605numericvalueexpression1!=null)
265     tempClass._OptScomma94843605numericvalueexpression1 = (numericvalueexpression)
266         _OptScomma94843605numericvalueexpression1.clone();
267     tempClass._numericvalueexpression2 = (numericvalueexpression)
268         _numericvalueexpression2.clone();
269     tempClass._Scomma948436053 = (Scomma94843605) _Scomma948436053.clone();
270     tempClass._charactervalueexpression4 = (charactervalueexpression)
271         _charactervalueexpression4.clone();
272     tempClass._Sleftparen6538802415 = (Sleftparen653880241)
273         _Sleftparen6538802415.clone();
274     tempClass._SNONRESERVEDWORD1364442556 = (SNONRESERVEDWORD136444255)
275         _SNONRESERVEDWORD1364442556.clone();
276     return tempClass;
277   }
278
279   public _Reference[] checkSemantic(_ServerSession parent) throws DException {
280     _Reference[] ref = super.checkSemantic(parent);
281     if(ref!=null) {
282           return ref;
283         }
284     int type = _charactervalueexpression4.getByteComparison(parent).
285         getDataTypes()[0];
286     switch (type) {
287       case -1:
288       case CHARACTER:
289       case VARCHAR:
290       case CHAR:
291       case CHARACTERVARYING:
292         return ref;
293       default:
294         throw new DException("DSE4108",
295                              new Object JavaDoc[] {StaticClass.getDataTypeName(type),
296                              "substring"});
297     }
298
299   }
300
301   public int getColumnSize(Object JavaDoc object) throws DException {
302     ColumnDetails[] columnDetails = getChildColumnDetails();
303     int columnSize=-1;
304    if(_OptScomma94843605numericvalueexpression1!=null) {
305       if (columnDetails[2].getQuestion()) {
306          columnSize = DatabaseProperties.maxCharLiteralLength;
307       }
308      else if (columnDetails[2].getType() != TypeConstants.CONSTANT ||
309              columnDetails[2].getSize() != -5 /*Inintial size of col*/) {
310       columnSize = columnDetails[2].getSize();
311     }
312     else {
313       if(_OptScomma94843605numericvalueexpression1!=null) {
314         FieldBase field = (FieldBase) _OptScomma94843605numericvalueexpression1.run(object);
315         field.setDatatype(columnDetails[2].getDatatype());
316         columnSize = field.getLength();
317       }else {
318         FieldBase field = (FieldBase) _charactervalueexpression4.
319           run(object);
320        field.setDatatype(columnDetails[0].getDatatype());
321        columnSize = field.getLength();
322
323       }
324     }
325    } else {
326     if (columnDetails[1].getQuestion()) {
327       columnSize = DatabaseProperties.maxCharLiteralLength;
328     }
329     else if (columnDetails[0].getType() != TypeConstants.CONSTANT ||
330               columnDetails[0].getSize() != -5) {
331        columnSize = columnDetails[0].getSize();
332     }
333     else {
334       FieldBase field = (FieldBase) _charactervalueexpression4.
335           run(object);
336       field.setDatatype(columnDetails[0].getDatatype());
337       columnSize = field.getLength();
338
339     }
340   }
341    return columnSize;
342   }
343
344 }
345
Popular Tags