KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.expression.stringvalueexpression;
2
3 import com.daffodilwoods.database.resource.*;
4 import com.daffodilwoods.daffodildb.server.sql99.token.*;
5 import com.daffodilwoods.daffodildb.server.sql99.utils.ByteComparison;
6 import com.daffodilwoods.daffodildb.server.sql99.common.ColumnDetails;
7 import com.daffodilwoods.daffodildb.server.sql99.utils._Reference;
8 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
9 import com.daffodilwoods.daffodildb.server.sql99.common.ParameterInfo;
10 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.
11
    AbstractRowValueExpression;
12 import com.daffodilwoods.daffodildb.server.sql99.common.*;
13 import in.co.daffodil.db.jdbc.DatabaseProperties;
14 import com.daffodilwoods.daffodildb.utils.field.*;
15 import com.daffodilwoods.daffodildb.utils.*;
16 import java.util.*;
17 import com.daffodilwoods.daffodildb.utils.field.FieldLiteral;
18
19 public class trimfunction extends AbstractStringValueExpression implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter ,charactervaluefunction {
20
21      public Srightparen_1874859514 _Srightparen_18748595140 ;
22      public charactervalueexpression _charactervalueexpression1 ;
23      public trimoptionOptcharactervalueexpressionSRESERVEDWORD1206543922 _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 ;
24      public Sleftparen653880241 _Sleftparen6538802413 ;
25      public SNONRESERVEDWORD136444255 _SNONRESERVEDWORD1364442554 ;
26
27          public Object JavaDoc run(Object JavaDoc object) throws DException{
28
29           FieldBase result = (FieldBase) _charactervalueexpression1.run(object);
30           if (result.isNull()) {
31           return new FieldStringLiteral(FieldUtility.NULLBUFFERRANGE, CHARACTER);
32            }
33           Object JavaDoc[] optional =new Object JavaDoc[2];
34           String JavaDoc trimFrom=null;
35           FieldBase trimValue=null;
36           if(_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222!=null) {
37             optional =(Object JavaDoc[])_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222.run(object);
38            trimFrom =(String JavaDoc)optional[0];
39            trimValue=(FieldBase)optional[1];
40           }
41          return getResult(getDataType(result), result.getObject(),trimFrom,trimValue);
42     }
43
44         private Object JavaDoc getResult(int type, Object JavaDoc object,String JavaDoc trimOption ,FieldBase trimValue ) throws DException {
45         switch (type) {
46            case BYTE:
47            case TINYINT:
48            case INTEGER:
49            case INT:
50            case REAL:
51            case DOUBLE:
52            case FLOAT:
53            case DOUBLEPRECISION:
54            case LONG:
55            case BIGINT:
56            case SHORT:
57            case SMALLINT:
58            case BIGDECIMAL:
59            case DEC:
60            case DECIMAL:
61            case NUMERIC:
62               Number JavaDoc operand = (Number JavaDoc) object;
63               return new FieldStringLiteral(trim(operand.toString(),trimOption,trimValue), Datatypes.CHARACTER);
64            case CHARACTER:
65            case VARCHAR:
66            case CHAR:
67            case CHARACTERVARYING:
68               String JavaDoc string = (String JavaDoc) object;
69               return new FieldStringLiteral(trim(string,trimOption,trimValue), Datatypes.CHARACTER);
70            default:
71               throw new DException("DSE514", new Object JavaDoc[] {StaticClass.getDataTypeName(type)});
72         }
73        }
74
75     /* Trim ( [ leading | trailing | both [trim_character] ] string1 )
76          The trim function removes all specified characters either from the beginning or the ending of a string.
77          The syntax for the trim function is:
78          trim ( [ leading | trailing | both [trim_character] ] string1 )
79          leading - remove trim_string from the front of string1.
80          trailing - remove trim_string from the end of string1.
81          both - remove trim_string from the front and end of string1.
82          If none of these are chosen (ie: leading, trailing, both), the trim function will remove trim_string from both the front and end of string1.
83          trim_character is the character that will be removed from string1. If this parameter is omitted, the trim function will remove all leading and trailing spaces from string1.
84          string1 is the string to trim.
85          For example:
86          trim (' tech ') would return 'tech'
87          trim (' ' from ' tech ') would return 'tech'
88          trim (leading '0' from '000123') would return '123'
89          trim (trailing '1' from 'Tech1') would return 'Tech'
90          trim (both '1' from '123Tech111') would return '23Tech'
91
92 */

93
94    private String JavaDoc trim(String JavaDoc string,String JavaDoc trimOption0 ,FieldBase trimValue0)throws DException {
95     String JavaDoc trimOption="",trimValue="";
96      if(trimOption0!=null){
97        trimOption =trimOption0;
98      }
99      if(trimValue0!=null && !trimValue0.isNull()){
100       trimValue =trimValue0.getObject().toString();
101     }
102     boolean startsWith =string.startsWith(trimValue);
103     boolean endsWith = string.endsWith(trimValue);
104
105       if(checkForLeadingDenomiNator(trimOption)){
106         return removeLeading(string, trimValue, startsWith );
107       }
108       else if(checkForTrailingDenomiNator(trimOption)){
109         return removeTrailing(string, trimValue, endsWith );
110       }
111       else if(checkForBothDenomiNator(trimOption)){ //both - remove trim_string from the front and end of string1.
112
return removeBoth(string, trimValue,startsWith , endsWith);
113       }
114       else
115         return string.trim();
116       /** The count is the number of characters in the String. */
117    }
118
119    public String JavaDoc removeLeading(String JavaDoc value, String JavaDoc leading,boolean startFound) throws DException{
120      if(startFound){
121        do {
122          value = value.replaceFirst(leading, "");
123        }
124        while (value.startsWith(leading));
125      }
126        return value;
127    }
128
129    public String JavaDoc removeTrailing(String JavaDoc value, String JavaDoc trailing,boolean endFound) throws DException{
130      if(endFound){
131      do{
132
133        int index = value.lastIndexOf(trailing);
134        value = value.substring(0,index);
135      }while(value.endsWith(trailing));
136      }
137      return value;
138    }
139
140    public String JavaDoc removeBoth(String JavaDoc value, String JavaDoc words,boolean startFound,boolean endFound) throws DException{
141      value = removeLeading(value,words, startFound);
142      value = removeTrailing(value,words, endFound);
143      return value;
144    }
145
146  private boolean checkForLeadingDenomiNator(String JavaDoc denominator) {
147    if(denominator.equalsIgnoreCase("leading")) {
148      return true;
149    }
150    return false;
151  }
152  private boolean checkForTrailingDenomiNator(String JavaDoc denominator) {
153     if(denominator.equalsIgnoreCase("trailing")) {
154       return true;
155     }
156     return false;
157   }
158
159   private boolean checkForBothDenomiNator(String JavaDoc denominator) {
160       if(denominator.equalsIgnoreCase("both")) {
161         return true;
162       }
163       return false;
164     }
165
166
167        public ParameterInfo[] getParameterInfo() throws DException {
168          /* ParameterInfo[] param =_charactervalueexpression1.getParameterInfo();
169             for (int i = 0; i < param.length; i++) {
170               if (param[i].getQuestionMark()) {
171                 param[i].setDataType(Datatypes.CHARACTER);
172                 param[i].setName("TRIM Arg");
173                 return param;
174               }
175             }
176             return getThisParameterInfo();*/

177          return new ParameterInfo[0];
178          }
179
180          protected ParameterInfo[] getThisParameterInfo() throws DException {
181             ParameterInfo parameterInfo = new ParameterInfo();
182             parameterInfo.setName(toString());
183             parameterInfo.setDataType(Datatypes.CHARACTER);
184             return new ParameterInfo[] {parameterInfo};
185          }
186
187
188          protected String JavaDoc getNameOfColumn(ColumnDetails[] columnDetails) throws DException {
189            String JavaDoc nameOfColumn = "";
190            for (int i = 0; i < columnDetails.length; ++i) {
191               nameOfColumn += columnDetails[i].getColumn();
192            }
193            return nameOfColumn;
194         }
195
196
197         public String JavaDoc toString() {
198     StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
199     sb.append(" ");
200     sb.append(_SNONRESERVEDWORD1364442554);
201     sb.append(" ");
202     sb.append(_Sleftparen6538802413);
203     sb.append(" ");
204     if(_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 != null ) {
205     sb.append(_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222);
206     }
207     sb.append(" ");
208     sb.append(_charactervalueexpression1);
209     sb.append(" ");
210     sb.append(_Srightparen_18748595140);
211     return sb.toString();
212 }
213
214
215       public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
216         trimfunction tempClass = new trimfunction();
217         tempClass._Srightparen_18748595140 = (Srightparen_1874859514)
218             _Srightparen_18748595140.clone();
219         tempClass._charactervalueexpression1 = (charactervalueexpression)
220             _charactervalueexpression1.clone();
221         if (_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 != null) {
222           tempClass.
223               _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 = (
224               trimoptionOptcharactervalueexpressionSRESERVEDWORD1206543922)
225               _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222.
226               clone();
227         }
228         tempClass._Sleftparen6538802413 = (Sleftparen653880241)
229             _Sleftparen6538802413.clone();
230         tempClass._SNONRESERVEDWORD1364442554 = (SNONRESERVEDWORD136444255)
231             _SNONRESERVEDWORD1364442554.clone();
232         return tempClass;
233       }
234
235
236
237       /**
238              * getByteComparison
239              *
240              * @param object Object
241              * @return ByteComparison
242              */

243             public ByteComparison getByteComparison(Object JavaDoc object) throws DException {
244               ByteComparison byteComparison =new ByteComparison(false, new int[] {CHARACTER});
245                int columnSize= getColumnSize(object);
246                byteComparison.setSize(columnSize);
247                return byteComparison;
248
249             }
250
251             /**
252              * getChildColumnDetails
253              *
254              * @return ColumnDetails[]
255              */

256
257             public ColumnDetails[] getChildColumnDetails() {
258               return columnDetails;
259             }
260
261             /**
262              * getChilds
263              *
264              * @return AbstractRowValueExpression[]
265              */

266             public AbstractRowValueExpression[] getChilds() {
267             /* ArrayList list =new ArrayList();
268               if(_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222!=null) {
269                 list.add((AbstractRowValueExpression)_charactervalueexpression1);
270                 list.add((AbstractRowValueExpression)_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222._trimoption1);
271                 list.add( (AbstractRowValueExpression)
272                     _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222.
273                          _OptcharactervalueexpressionSRESERVEDWORD12065439220.
274                          _charactervalueexpression1);
275                 list.add( (AbstractRowValueExpression)
276                     _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222.
277                          _OptcharactervalueexpressionSRESERVEDWORD12065439220.
278                          _SRESERVEDWORD12065439220);
279               } else {
280                 list.add((AbstractRowValueExpression)_charactervalueexpression1);
281               }
282               AbstractRowValueExpression[] childs =new AbstractRowValueExpression[list.size()];
283               list.toArray(childs);
284               return (AbstractRowValueExpression[])childs;*/

285             AbstractRowValueExpression[] childs =new AbstractRowValueExpression[]{(AbstractRowValueExpression)_charactervalueexpression1};
286             return childs;
287             }
288
289
290             /**
291              * getType
292              *
293              * @return String
294              */

295             public String JavaDoc getType() throws DException {
296                return (String JavaDoc) _SNONRESERVEDWORD1364442554.run(null);
297             }
298
299
300             public _Reference[] checkSemantic(_ServerSession parent) throws DException {
301                 _Reference[] ref = (_Reference[])_charactervalueexpression1.checkSemantic(parent);
302                  if(ref!=null) {
303                     return ref;
304                   }
305                   int type = _charactervalueexpression1.getByteComparison(parent).
306                       getDataTypes()[0];
307                   switch (type) {
308                     case -1:
309                     case BYTE:
310                     case TINYINT:
311                     case INTEGER:
312                     case INT:
313                     case REAL:
314                     case DOUBLE:
315                     case FLOAT:
316                     case DOUBLEPRECISION:
317                     case LONG:
318                     case BIGINT:
319                     case SHORT:
320                     case SMALLINT:
321                     case BIGDECIMAL:
322                     case DEC:
323                     case DECIMAL:
324                     case NUMERIC:
325                     case CHARACTER:
326                     case VARCHAR:
327                     case CHAR:
328                     case CHARACTERVARYING:
329                       return ref;
330                     default:
331                       throw new DException("DSE514",
332                                            new Object JavaDoc[] {StaticClass.getDataTypeName(type),
333                                            "TRIM"});
334                   }
335              }
336
337
338
339              public int getColumnSize(Object JavaDoc object) throws DException {
340                ColumnDetails[] columnDetails = getChildColumnDetails();
341                if (columnDetails[0].getQuestion()) {
342                  return DatabaseProperties.maxCharLiteralLength;
343                }
344                else if (columnDetails[0].getType() != TypeConstants.CONSTANT ||
345                         columnDetails[0].getSize() != -5) {
346                  return columnDetails[0].getSize();
347                } else {
348                  FieldBase field = (FieldBase) _charactervalueexpression1.run(object);
349                  field.setDatatype(columnDetails[0].getDatatype());
350                  return field.getLength();
351                }
352
353              }
354
355 }
356
Popular Tags