1 package com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.predicates; 2 3 import com.daffodilwoods.daffodildb.server.sql99.common.*; 4 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*; 5 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*; 6 import com.daffodilwoods.daffodildb.server.sql99.expression.stringvalueexpression.*; 7 import com.daffodilwoods.daffodildb.utils.field.*; 8 import com.daffodilwoods.database.resource.*; 9 10 18 19 public class CharacterPredicate extends PredicateAbstract implements predicate, OperatorConstants, _ComparisonPredicate { 20 21 private charactervalueexpression leftMatchValue; 22 private int operatorType; 23 private FieldBase rightPattern; 24 25 public CharacterPredicate(charactervalueexpression leftMatchValue0, int operatorType0, FieldBase rightPattern0, ColumnDetails[] columns0) { 26 leftMatchValue = leftMatchValue0; 27 operatorType = operatorType0; 28 rightPattern = rightPattern0; 29 columnDetails = columns0; 30 } 31 32 public double getCost(long rowCount, boolean index) throws DException { 33 switch (operatorType) { 34 case LESSTHAN: 35 rowCount *= CostFactorConstants.GREATERTHAN / 100; 36 case GREATERTHANEQUALTO: 37 rowCount *= CostFactorConstants.GREATERTHANEQUALTO / 100; 38 } 39 if (index) { 40 rowCount *= CostFactorConstants.INDEXPREDICATE / 100; 41 } 42 return rowCount; 43 } 44 45 public long getEstimatedRows(long noOfRows) throws DException { 46 switch (operatorType) { 47 case LESSTHAN: 48 return noOfRows * CostFactorConstants.GREATERTHAN / 100; 49 case GREATERTHANEQUALTO: 50 return noOfRows * CostFactorConstants.GREATERTHANEQUALTO / 100; 51 } 52 return noOfRows; 53 } 54 55 public int getPredicateType() throws DException { 56 return operatorType; 57 } 58 59 public Object getValue() throws DException { 60 return rightPattern; 61 } 62 63 public Object run(Object object) throws com.daffodilwoods.database.resource.DException { 64 Object fieldBase1 = leftMatchValue.run(object); 65 int cmp = -1; 66 try { 67 cmp = comparator.compare(fieldBase1, rightPattern); 68 } catch (NullPointerException ex) { 69 comparator = getAppropriateComparator(fieldBase1, rightPattern, null); 70 cmp = comparator.compare(fieldBase1, rightPattern); 71 } catch (DException ex1) { 72 throw ex1; 73 } 74 return booleanResult[operatorType - 1][cmp + 2]; 75 } 76 77 public AbstractRowValueExpression[] getChilds() { 78 AbstractRowValueExpression[] childs = new AbstractRowValueExpression[] { (AbstractRowValueExpression) (leftMatchValue)}; 79 return childs; 80 } 81 82 public void setOperator(int Type) throws DException { 83 operatorType = Type; 84 } 85 86 public ColumnDetails[] getColumnDetails() throws DException { 87 return columnDetails; 88 } 89 90 public String toString() { 91 try { 92 return leftMatchValue + " " + getOperator(operatorType) + "'" + rightPattern.getObject() + "'"; 93 } catch (DException ex) { 94 return null; 95 } 96 } 97 98 private String getOperator(int operatorType) { 99 switch (operatorType) { 100 case GREATERTHANEQUALTO: 101 return " >= "; 102 case LESSTHAN: 103 return " < "; 104 } 105 return operatorType + ""; 106 } 107 } 108 | Popular Tags |