KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.expression.stringvalueexpression;
2 import com.daffodilwoods.database.resource.*;
3 import com.daffodilwoods.daffodildb.server.sql99.token.*;
4 import com.daffodilwoods.daffodildb.server.sql99.common.ColumnDetails;
5 import com.daffodilwoods.daffodildb.server.sql99.utils.ByteComparison;
6 import com.daffodilwoods.daffodildb.server.sql99.utils._Reference;
7 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
8 import com.daffodilwoods.daffodildb.server.sql99.common.ParameterInfo;
9 import com.daffodilwoods.daffodildb.server.sql99.expression.numericvalueexpression.*;
10 import com.daffodilwoods.daffodildb.server.sql99.common.*;
11 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*;
12 import in.co.daffodil.db.jdbc.*;
13 import com.daffodilwoods.daffodildb.utils.field.*;
14 import com.daffodilwoods.daffodildb.utils.*;
15 import java.util.*;
16
17 public class dumpfunction extends AbstractStringValueExpression implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter ,charactervaluefunction {
18
19      public Srightparen_1874859514 _Srightparen_18748595140 ;
20      public numericvalueexpression _OptScomma94843605numericvalueexpression1 ;
21      public numericvalueexpression _OptScomma94843605numericvalueexpression2 ;
22      public numericvalueexpression _OptScomma94843605numericvalueexpression3 ;
23      public charactervalueexpression _charactervalueexpression4 ;
24      public Sleftparen653880241 _Sleftparen6538802415 ;
25      public SNONRESERVEDWORD136444255 _SNONRESERVEDWORD1364442556 ;
26
27
28  /*
29   The dump function returns a varchar2 value that includes the datatype code, the length in bytes, and the internal representation of the expression.
30   The syntax for the dump function is:
31   dump ( expression, [return_format], [start_position], [length] )
32   expression is the expression to analyze.
33   return_format is optional. It determines the format of the return value. This parameter can be any of the following values:
34
35   Value Explanation
36   8 octal notation
37   10 decimal notation
38   16 hexadecimal notation
39   17 single characters
40   1008 octal notation with the character set name
41   1010 decimal notation with the character set name
42   1016 hexadecimal notation with the character set name
43   1017 single characters with the character set name
44   start_position and length are optional parameters. They determines which portion of the internal representation to display. If these parameters are omitted, the dump function will display the entire internal representation in decimal notation.
45
46   For example:
47
48   dump ('Tech') would return 'Typ=96 Len=4: 84,101,99,104'
49   dump ('Tech', 10) would return 'Typ=96 Len=4: 84,101,99,104'
50   dump ('Tech', 16) would return 'Typ=96 Len=4: 54,65,63,68'
51   dump ('Tech', 1016) would return 'Typ=96 Len=4 CharacterSet=US7ASCII: 54,65,63,68'
52   dump ('Tech', 1017) would return 'Typ=96 Len=4 CharacterSet=US7ASCII: T,e,c,h'
53   */

54       private int type1,type2;
55
56       public Object JavaDoc run(Object JavaDoc object) throws DException{
57
58         FieldBase result = (FieldBase) _charactervalueexpression4.run(object);
59        if(result.isNull()){
60         new FieldStringLiteral(FieldUtility.NULLBUFFERRANGE, CHARACTER);
61        }
62        FieldBase fromat = null;
63        if(_OptScomma94843605numericvalueexpression3!=null){
64         fromat =(FieldBase)_OptScomma94843605numericvalueexpression3.run(object);
65         type2 = getDataType(fromat);
66       }
67          type1 = getDataType(result);
68
69        if(_OptScomma94843605numericvalueexpression2!=null){
70       throw new DException("DSE22", new Object JavaDoc[] {"to specify start_position in DUMP function "});
71        }
72        if(_OptScomma94843605numericvalueexpression1!=null){
73       throw new DException("DSE22", new Object JavaDoc[] {"to specify length in DUMP function "});
74        }
75        int SQLType =in.co.daffodil.db.jdbc.Utilities.getCorrespondingSqlTypeOfDatabaseType(type1);
76        return getResult(result,fromat,type1,type2,SQLType);
77       }
78
79
80        private String JavaDoc getDump(Object JavaDoc object,int dataType) throws DException {
81          if (object == null) //Done by Sandeep to sort out compiere problem : see bug # 13465
82
return null;
83          String JavaDoc str = object.toString();
84          if (str.length() == 0) { //Done by Sandeep see bug # 13465
85
return null;
86          }
87         int length=str.length(), bytes;
88         StringBuffer JavaDoc toreturn = new StringBuffer JavaDoc();
89         toreturn.append("Typ=");
90         toreturn.append(""+dataType);
91         toreturn.append(" Len= ");
92         toreturn.append(""+length+" :");
93         for (int i = 0; i <length; i++) {
94         bytes = ((int) str.charAt(i) ) ;
95         toreturn.append(""+bytes);
96         if(i+1 != length )
97           toreturn.append(" , ");
98         }
99          return toreturn.toString();
100        }
101
102
103
104         public ParameterInfo[] getParameterInfo() throws DException {
105      /* ParameterInfo[] param=_charactervalueexpression4.getParameterInfo();
106          for (int i = 0; i < param.length; i++) {
107            if (param[i].getQuestionMark()) {
108              param[i].setDataType(Datatypes.CHARACTER);
109              param[i].setName("Dump Arg1");
110              return param;
111            }
112          }
113          return getThisParameterInfo(); */

114        return new ParameterInfo[0];
115        }
116
117        protected ParameterInfo[] getThisParameterInfo() throws DException {
118           ParameterInfo parameterInfo = new ParameterInfo();
119           parameterInfo.setName(toString());
120           parameterInfo.setDataType(Datatypes.CHARACTER);
121           return new ParameterInfo[] {parameterInfo};
122        }
123
124
125        public ColumnDetails[] getChildColumnDetails() throws DException {
126           return columnDetails;
127        }
128
129        protected String JavaDoc getNameOfColumn(ColumnDetails[] columnDetails) throws
130            DException {
131           String JavaDoc nameOfColumn = "";
132           for (int i = 0; i < columnDetails.length; ++i) {
133              nameOfColumn += columnDetails[i].getColumn();
134           }
135           return nameOfColumn;
136        }
137
138
139        private Object JavaDoc getResult(FieldBase result,FieldBase return_format,int type1,int type2,int SQLType) throws DException {
140           int return_formats=0;
141           boolean formatNotDefined=false;
142           Object JavaDoc object = result.getObject();
143           if(return_format!=null&&!return_format.isNull()) {
144             try {
145               return_formats = ( (Number JavaDoc) return_format.getObject()).intValue();
146             }
147             catch (DException ex) {
148               throw new DException("DSE4108", new Object JavaDoc[] {StaticClass.getDataTypeName(type1), "DUMP"});
149             }
150
151           } else {
152            formatNotDefined =true;
153           }
154
155           switch (type1) {
156              case BYTE:
157              case TINYINT:
158              case INTEGER:
159              case INT:
160              case REAL:
161              case DOUBLE:
162              case FLOAT:
163              case DOUBLEPRECISION:
164              case LONG:
165              case BIGINT:
166              case SHORT:
167              case SMALLINT:
168              case BIGDECIMAL:
169              case DEC:
170              case DECIMAL:
171              case NUMERIC:
172              case CHARACTER:
173              case VARCHAR:
174              case CHAR:
175              case CHARACTERVARYING:
176                 if(return_formats==10 || formatNotDefined ) {
177                   return new FieldStringLiteral(getDump(object, SQLType),
178                                                 Datatypes.CHARACTER);
179                 }
180                 throw new DException("DSE4110", new Object JavaDoc[] {new Integer JavaDoc(return_formats), "DUMP"});
181              default :
182                   throw new DException("DSE4108", new Object JavaDoc[] {StaticClass.getDataTypeName(type1), "DUMP"});
183           }
184        }
185
186
187        public AbstractRowValueExpression[] getChilds() {
188          ArrayList list =new ArrayList();
189          list.add((AbstractRowValueExpression) (_charactervalueexpression4));
190          if(_OptScomma94843605numericvalueexpression3 != null ) {
191            list.add((AbstractRowValueExpression)_OptScomma94843605numericvalueexpression3);
192           }
193           if(_OptScomma94843605numericvalueexpression2 != null ) {
194         list.add((AbstractRowValueExpression)_OptScomma94843605numericvalueexpression2);
195           }
196           if(_OptScomma94843605numericvalueexpression1 != null ) {
197          list.add((AbstractRowValueExpression)_OptScomma94843605numericvalueexpression1);
198           }
199           AbstractRowValueExpression[] childs = new AbstractRowValueExpression[list.size()] ;
200            list.toArray(childs);
201           return childs;
202        }
203
204
205
206      public String JavaDoc toString() {
207     StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
208     sb.append(" ");
209     sb.append(_SNONRESERVEDWORD1364442556);
210     sb.append(" ");
211     sb.append(_Sleftparen6538802415);
212     sb.append(" ");
213     sb.append(_charactervalueexpression4);
214     sb.append(" ");
215     if(_OptScomma94843605numericvalueexpression3 != null ) {
216     sb.append(_OptScomma94843605numericvalueexpression3);
217     }
218     sb.append(" ");
219     if(_OptScomma94843605numericvalueexpression2 != null ) {
220     sb.append(_OptScomma94843605numericvalueexpression2);
221     }
222     sb.append(" ");
223     if(_OptScomma94843605numericvalueexpression1 != null ) {
224     sb.append(_OptScomma94843605numericvalueexpression1);
225     }
226     sb.append(" ");
227     sb.append(_Srightparen_18748595140);
228     return sb.toString();
229 }
230
231       public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
232          dumpfunction tempClass = new dumpfunction();
233          tempClass._Srightparen_18748595140 = (Srightparen_1874859514)
234              _Srightparen_18748595140.clone();
235          tempClass._charactervalueexpression4 = (charactervalueexpression)
236              _charactervalueexpression4.clone();
237          if(_OptScomma94843605numericvalueexpression1!=null)
238         tempClass._OptScomma94843605numericvalueexpression1 = (numericvalueexpression)_OptScomma94843605numericvalueexpression1.clone();
239          if(_OptScomma94843605numericvalueexpression2!=null)
240         tempClass._OptScomma94843605numericvalueexpression2 = (numericvalueexpression)_OptScomma94843605numericvalueexpression2.clone();
241          if(_OptScomma94843605numericvalueexpression3!=null)
242         tempClass._OptScomma94843605numericvalueexpression3 = (numericvalueexpression)_OptScomma94843605numericvalueexpression3.clone();
243          tempClass._Sleftparen6538802415 = (Sleftparen653880241)
244              _Sleftparen6538802415.clone();
245          tempClass._SNONRESERVEDWORD1364442556 = (SNONRESERVEDWORD136444255)
246              _SNONRESERVEDWORD1364442556.clone();
247          return tempClass;
248       }
249
250       public ByteComparison getByteComparison(Object JavaDoc object) throws DException {
251         ByteComparison byteComparison =new ByteComparison(false, new int[] {Datatypes.CHARACTER});
252         int columnSize=getColumnSize(object);
253         byteComparison.setSize(columnSize);
254         return byteComparison;
255       }
256
257
258       public _Reference[] checkSemantic(_ServerSession parent) throws DException {
259          _Reference[] ref = super.checkSemantic(parent);
260          if(ref!=null) {
261              return ref;
262            }
263          int type = _charactervalueexpression4.getByteComparison(parent).getDataTypes()[0];
264          switch (type) {
265             case -1:
266             case BYTE:
267             case TINYINT:
268             case INTEGER:
269             case INT:
270             case REAL:
271             case DOUBLE:
272             case FLOAT:
273             case DOUBLEPRECISION:
274             case LONG:
275             case BIGINT:
276             case SHORT:
277             case SMALLINT:
278             case BIGDECIMAL:
279             case DEC:
280             case DECIMAL:
281             case NUMERIC:
282             case CHARACTER:
283             case VARCHAR:
284             case CHAR:
285             case CHARACTERVARYING:
286                return ref;
287             default:
288                throw new DException("DSE4108", new Object JavaDoc[] {StaticClass.getDataTypeName(type), "LCASE"});
289          }
290
291       }
292
293       public int getColumnSize(Object JavaDoc object) throws DException {
294         ColumnDetails[] columnDetails = getChildColumnDetails();
295         if (columnDetails[0].getQuestion()) {
296           return DatabaseProperties.maxCharLiteralLength;
297         }
298         else if (columnDetails[0].getType() != TypeConstants.CONSTANT ||
299                  columnDetails[0].getSize() != -5) {
300           return columnDetails[0].getSize();
301         } else {
302           FieldBase field = (FieldBase) _charactervalueexpression4.run(object);
303           field.setDatatype(columnDetails[0].getDatatype());
304           return field.getLength();
305         }
306
307       }
308
309   /**
310    * getType
311    *
312    * @return String
313    */

314   public String JavaDoc getType()throws DException {
315      return (String JavaDoc) _SNONRESERVEDWORD1364442556.run(null);
316   }
317
318 }
319
Popular Tags