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 ; 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 clone() throws CloneNotSupportedException { 31 throw new CloneNotSupportedException (); 32 } 33 34 public ParameterInfo[] getParameterInfo() throws com.daffodilwoods.database.resource.DException { 35 36 throw new java.lang.UnsupportedOperationException ("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 71 throw new java.lang.UnsupportedOperationException ("Method getPredicateType() not yet implemented. in Class " + getClass()); 72 } 73 74 protected SuperComparator getJoinComparator(Object [] fieldBase1, Object [] 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 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 result1, Object iteratorValue, _ServerSession serverSession) throws DException { 138 if (result1 instanceof Object []) { 139 Object [] rr = (Object []) result1; 140 Object [] values = (Object []) 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 []) iteratorValue)[0], serverSession)}); 148 } 149 150 protected SuperComparator getAppropriateObjectComparatorInCaseofSubQuery(Object result1, Object iteratorValue, _ServerSession serverSession) throws DException { 151 if (result1 instanceof Object []) { 152 Object [] rr = (Object []) result1; 153 Object [] values = (Object []) 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 167 168 public SuperComparator getAppropriateComparator(ByteComparison byteComparison1, ByteComparison byteComparison2, Object value1, Object 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 180 181 public SuperComparator getAppropriateComparator(Object value1, Object value2, _ServerSession serverSession) throws DException { 182 boolean leftSingleElement = false; 183 boolean rightSingleElement = false; 184 FieldBase[] fieldBases1 = null; 185 try { 186 fieldBases1 = GeneralPurposeStaticClass.changeIntoFieldBase( (Object []) value1); 187 } catch (ClassCastException ex) { 188 leftSingleElement = true; 189 } 190 FieldBase[] fieldBases2 = null; 191 try { 192 fieldBases2 = GeneralPurposeStaticClass.changeIntoFieldBase( (Object []) value2); 193 } catch (ClassCastException 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 214 215 216 217 218 219 protected ArrayList getUniqueTableDetails(ArrayList 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 |