KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > expression > booleanvalueexpression > predicates > PredicateAbstract


1 package com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.predicates;
2
3 import java.text.*;
4
5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.sql99.common.*;
8 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*;
9 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
10 import com.daffodilwoods.daffodildb.utils.*;
11 import com.daffodilwoods.daffodildb.utils.comparator.*;
12 import com.daffodilwoods.daffodildb.utils.field.*;
13 import com.daffodilwoods.database.resource.*;
14 import java.util.ArrayList JavaDoc;
15 import com.daffodilwoods.daffodildb.utils.comparator.ComparisionPredicateJoinComparator;
16
17 public abstract class PredicateAbstract extends AbstractBooleanValueExpression implements predicate {
18
19    public ColumnDetails[] columnDetails;
20    public SuperComparator comparator;
21
22    public int getConditionType() throws DException {
23       return ExecutionPlanConstants.PREDICATE;
24    }
25
26    public int canUseForSeek() throws DException {
27       return TypeConstants.NOSEEK;
28    }
29
30    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
31       throw new CloneNotSupportedException JavaDoc();
32    }
33
34    public ParameterInfo[] getParameterInfo() throws com.daffodilwoods.database.resource.DException {
35       /**@todo Implement this com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.booleanprimary method*/
36       throw new java.lang.UnsupportedOperationException JavaDoc("Method getParameterInfo() not yet implemented." + getClass());
37    }
38
39    public ColumnDetails[] getColumnDetails() throws DException {
40       initializeChildren();
41       if (columnDetails != null) {
42          return columnDetails;
43       }
44       ColumnDetails[][] details = new ColumnDetails[childs.length][];
45       int length = 0;
46       for (int i = 0; i < childs.length; i++) {
47          details[i] = childs[i] == null ? new ColumnDetails[0] : childs[i].getColumnDetails();
48          length += details[i].length;
49       }
50       columnDetails = new ColumnDetails[length];
51       int index = 0;
52       for (int i = 0; i < details.length; i++) {
53          ColumnDetails[] cds = (ColumnDetails[]) details[i];
54          for (int j = 0; j < cds.length; j++) {
55             columnDetails[index++] = cds[j];
56          }
57       }
58       return columnDetails;
59    }
60
61    public boolean isNullPredicate() throws DException {
62       return false;
63    }
64
65    public long getEstimatedRows(long noOfRows) throws DException {
66       return noOfRows;
67    }
68
69    public int getPredicateType() throws DException {
70       /**@todo Implement this com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression._BooleanPrimary method*/
71       throw new java.lang.UnsupportedOperationException JavaDoc("Method getPredicateType() not yet implemented. in Class " + getClass());
72    }
73
74    protected SuperComparator getJoinComparator(Object JavaDoc[] fieldBase1, Object JavaDoc[] fieldBase2, _ServerSession serverSession) throws DException {
75       int length = fieldBase1.length;
76       SuperComparator[] comparators = new SuperComparator[length];
77       for (int i = 0; i < length; i++) {
78          try {
79             comparators[i] = getComparator( (FieldBase) fieldBase1[i], (FieldBase) fieldBase2[i], serverSession);
80          } catch (ClassCastException JavaDoc ex) {
81             throw ex;
82          }
83       }
84       return new CKpjoDpnqbsbups(comparators);
85    }
86
87
88
89    protected SuperComparator getComparator(FieldBase fieldBase1, FieldBase fieldBase2, _ServerSession serverSession) throws DException {
90       initializeDatatypes(fieldBase1, fieldBase2);
91       Collator collator = fieldBase1.getCollator();
92       collator = collator == null ? fieldBase2.getCollator() : collator;
93       return GetByteComparator.getAppropriateComparator(fieldBase1.getDatatype(), fieldBase2.getDatatype(), serverSession, collator);
94    }
95
96    protected void initializeDatatypes(FieldBase fieldBase1, FieldBase fieldBase2) throws DException {
97       int dataType1 = fieldBase1.getDatatype();
98       int dataType2 = fieldBase2.getDatatype();
99       if (dataType1 == -1 && dataType2 == -1) {
100          fieldBase1.setDatatype(dataType1);
101          fieldBase2.setDatatype(fieldBase1.getDatatype());
102       } else if (dataType2 == -1) {
103          fieldBase2.setDatatype(dataType1);
104       } else if (dataType1 == -1) {
105          fieldBase1.setDatatype(dataType2);
106       }
107       int size1 = fieldBase1.getSize();
108       int size2 = fieldBase2.getSize();
109       if (size1 == -1 && size2 == -1) {
110          fieldBase1.setSize( -1);
111          fieldBase2.setSize( -1);
112       } else if (size1 == -1 && size2 != -1) {
113          if (fieldBase2.getDatatype() != Datatype.VARCHAR && fieldBase2.getDatatype() != Datatype.CHARVARYING && fieldBase2.getDatatype() != Datatype.CHARACTERVARYING) {
114             fieldBase1.setSize(fieldBase2.getSize());
115          } else {
116             fieldBase1.setSize( -1);
117          }
118       } else if (size1 != -1 && size2 == -1) {
119          if (fieldBase1.getDatatype() != Datatype.VARCHAR && fieldBase1.getDatatype() != Datatype.CHARVARYING && fieldBase1.getDatatype() != Datatype.CHARACTERVARYING) {
120             fieldBase2.setSize(fieldBase1.getSize());
121          } else {
122             fieldBase2.setSize( -1);
123          }
124       }
125    }
126
127    public void releaseResource() throws DException {
128       initializeChildren();
129       for (int i = 0; i < childs.length; i++) {
130          childs[i].releaseResource();
131       }
132       synchronized (this) {
133          comparator = null;
134       }
135    }
136
137    protected SuperComparator getAppropriateSuperComparatorInCaseofSubQuery(Object JavaDoc result1, Object JavaDoc iteratorValue, _ServerSession serverSession) throws DException {
138       if (result1 instanceof Object JavaDoc[]) {
139          Object JavaDoc[] rr = (Object JavaDoc[]) result1;
140          Object JavaDoc[] values = (Object JavaDoc[]) iteratorValue;
141          SuperComparator[] comparators = new SuperComparator[rr.length];
142          for (int i = 0; i < rr.length; i++) {
143             comparators[i] = getComparator( (FieldBase) rr[i], (FieldBase) values[i], serverSession);
144          }
145          return new CKpjoDpnqbsbups(comparators);
146       }
147       return new CJoDpnqbsbups(new SuperComparator[] {getComparator( (FieldBase) result1, (FieldBase) ( (Object JavaDoc[]) iteratorValue)[0], serverSession)});
148    }
149
150    protected SuperComparator getAppropriateObjectComparatorInCaseofSubQuery(Object JavaDoc result1, Object JavaDoc iteratorValue, _ServerSession serverSession) throws DException {
151       if (result1 instanceof Object JavaDoc[]) {
152          Object JavaDoc[] rr = (Object JavaDoc[]) result1;
153          Object JavaDoc[] values = (Object JavaDoc[]) iteratorValue;
154          SuperComparator[] comparators = new SuperComparator[rr.length];
155          for (int i = 0; i < rr.length; i++) {
156             comparators[i] = new CPckfduDpnqbsbups();
157          }
158          return new CKpjoDpnqbsbups(comparators);
159       }
160       return new CJoDpnqbsbups(new SuperComparator[] {new CPckfduDpnqbsbups()});
161    }
162
163    /*@
164     * If any of the ByteComparison have negative response for using byte Comparison, CPckfduDpnqbsbups 'll be used. Otherwise
165     * appropriate Comparator 'll be selected based on the dataTypes of the cplumn involved.
166     **/

167
168    public SuperComparator getAppropriateComparator(ByteComparison byteComparison1, ByteComparison byteComparison2, Object JavaDoc value1, Object JavaDoc value2, _ServerSession serverSession) throws DException {
169       if (!byteComparison1.canUseByteComparison() || !byteComparison2.canUseByteComparison()) {
170          return new CPckfduDpnqbsbups();
171       }
172       return getAppropriateComparator(value1, value2, serverSession);
173    }
174
175    /*@
176     * The method is being called by different predicates during the selection of appropriate comparator. While taking the decision
177     * for the comparator, Special handling are being made for the presence of Multivalued expression. In case of Multivalued expression,
178     * expression from each side may returns single fieldBase object or the array of FieldBase objects .
179     **/

180
181    public SuperComparator getAppropriateComparator(Object JavaDoc value1, Object JavaDoc value2, _ServerSession serverSession) throws DException {
182       boolean leftSingleElement = false;
183       boolean rightSingleElement = false;
184       FieldBase[] fieldBases1 = null;
185       try {
186          fieldBases1 = GeneralPurposeStaticClass.changeIntoFieldBase( (Object JavaDoc[]) value1);
187       } catch (ClassCastException JavaDoc ex) {
188          leftSingleElement = true;
189       }
190       FieldBase[] fieldBases2 = null;
191       try {
192          fieldBases2 = GeneralPurposeStaticClass.changeIntoFieldBase( (Object JavaDoc[]) value2);
193       } catch (ClassCastException JavaDoc ex) {
194          rightSingleElement = true;
195       }
196       if (leftSingleElement && rightSingleElement) {
197          return getComparator( (FieldBase) value1, (FieldBase) value2, serverSession);
198       }
199       if (leftSingleElement && !rightSingleElement) {
200          return new CJoDpnqbsbups(new SuperComparator[] {getComparator( (FieldBase) value1, fieldBases2[0], serverSession)});
201       }
202       if (!leftSingleElement && rightSingleElement) {
203          return new CJoTqfdjbmDpnqbsbups(new SuperComparator[] {getComparator(fieldBases1[0], (FieldBase) value2, serverSession)});
204       }
205       return getJoinComparator(fieldBases1, fieldBases2, serverSession);
206    }
207
208
209    /**
210     * Returns Unique List of tables involved in the condition.
211     * @return
212     * @throws DException
213     */

214
215    /* Method written by Kaushik ,needed becoz of singleColumn return from scalar functions etc rather than multiple columnDetails as returning previously.*/
216
217
218    /* Method written by Kaushik ,needed becoz of singleColumn return from scalar functions etc rather than multiple columnDetails as returning previously.*/
219    protected ArrayList JavaDoc getUniqueTableDetails(ArrayList JavaDoc uniqueTableDetails,ColumnDetails[] columnDetails0) throws DException {
220    for (int i = 0, length = columnDetails0.length; i < length; i++) {
221       int type = columnDetails0[i].getType();
222       if (type == REFERENCE) {
223          TableDetails tableDetail = columnDetails0[i].getTableDetails();
224          if (!uniqueTableDetails.contains(tableDetail)) {
225             uniqueTableDetails.add(tableDetail);
226          }
227       }
228       if (type == SCALARFUNCTION || type == CASEEXPRESSION) {
229         uniqueTableDetails.clear();
230         return uniqueTableDetails;
231       }
232       else if(type==FUNCTIONAL){
233         ColumnDetails[] cd=columnDetails0[i].getChildColumnDetails();
234         if(cd!=null)
235           getUniqueTableDetails(uniqueTableDetails,cd);
236         else
237           uniqueTableDetails.clear();
238         return uniqueTableDetails;
239       }
240     }
241     return uniqueTableDetails;
242   }
243
244 }
245
Popular Tags