/** * TODO: does not check for escape char * or if it will contain single match chars */ private static float estimateMatchCost(float childCost, float ndv, MatchCriteria criteria) { Expression matchExpression = criteria.getRightExpression(); if(matchExpression instanceof Constant && ((Constant)matchExpression).getType().equals(DataTypeManager.DefaultDataClasses.STRING)) { String compareValue = (String) ((Constant)matchExpression).getValue(); if(criteria.getMode() != MatchMode.REGEX && criteria.getEscapeChar() == MatchCriteria.NULL_ESCAPE_CHAR && compareValue != null && compareValue.indexOf('%') < 0) { return (childCost / 2) * (1 / 3f + 1 / ndv); //without knowing length constraints we'll make an average guess } } else if (EvaluatableVisitor.willBecomeConstant(criteria.getLeftExpression())) { if (ndv > Math.sqrt(childCost)) { return (float) Math.sqrt(childCost - ndv); } return childCost/ndv; } return childCost / 3; }
/** * TODO: does not check for escape char * or if it will contain single match chars */ private static float estimateMatchCost(float childCost, float ndv, MatchCriteria criteria) { Expression matchExpression = criteria.getRightExpression(); if(matchExpression instanceof Constant && ((Constant)matchExpression).getType().equals(DataTypeManager.DefaultDataClasses.STRING)) { String compareValue = (String) ((Constant)matchExpression).getValue(); if(criteria.getMode() != MatchMode.REGEX && criteria.getEscapeChar() == MatchCriteria.NULL_ESCAPE_CHAR && compareValue != null && compareValue.indexOf('%') < 0) { return (childCost / 2) * (1 / 3f + 1 / ndv); //without knowing length constraints we'll make an average guess } } else if (EvaluatableVisitor.willBecomeConstant(criteria.getLeftExpression())) { if (ndv > Math.sqrt(childCost)) { return (float) Math.sqrt(childCost - ndv); } return childCost/ndv; } return childCost / 3; }
/** * TODO: does not check for escape char * or if it will contain single match chars */ private static float estimateMatchCost(float childCost, float ndv, MatchCriteria criteria) { Expression matchExpression = criteria.getRightExpression(); if(matchExpression instanceof Constant && ((Constant)matchExpression).getType().equals(DataTypeManager.DefaultDataClasses.STRING)) { String compareValue = (String) ((Constant)matchExpression).getValue(); if(criteria.getMode() != MatchMode.REGEX && criteria.getEscapeChar() == MatchCriteria.NULL_ESCAPE_CHAR && compareValue != null && compareValue.indexOf('%') < 0) { return (childCost / 2) * (1 / 3f + 1 / ndv); //without knowing length constraints we'll make an average guess } } else if (EvaluatableVisitor.willBecomeConstant(criteria.getLeftExpression())) { if (ndv > Math.sqrt(childCost)) { return (float) Math.sqrt(childCost - ndv); } return childCost/ndv; } return childCost / 3; }
boolean escaped = false; char escapeChar = matchCriteria.getEscapeChar(); if (matchCriteria.getMode() == MatchMode.REGEX) { escapeChar = '\\'; if (pattern.length() > 0 && matchCriteria.getMode() == MatchMode.REGEX && pattern.charAt(0) != '^') { for (int j = matchCriteria.getMode() == MatchMode.REGEX?1:0; j < pattern.length(); j++) { char character = pattern.charAt(j); if (matchCriteria.getMode() == MatchMode.LIKE) { if (character == MatchCriteria.WILDCARD_CHAR || character == MatchCriteria.MATCH_CHAR) { break;
Like translate(MatchCriteria criteria) { Character escapeChar = null; if(criteria.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) { escapeChar = new Character(criteria.getEscapeChar()); } Like like = new Like(translate(criteria.getLeftExpression()), translate(criteria.getRightExpression()), escapeChar, criteria.isNegated()); like.setMode(criteria.getMode()); return like; }
Like translate(MatchCriteria criteria) { Character escapeChar = null; if(criteria.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) { escapeChar = new Character(criteria.getEscapeChar()); } Like like = new Like(translate(criteria.getLeftExpression()), translate(criteria.getRightExpression()), escapeChar, criteria.isNegated()); like.setMode(criteria.getMode()); return like; }
Like translate(MatchCriteria criteria) { Character escapeChar = null; if(criteria.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) { escapeChar = new Character(criteria.getEscapeChar()); } Like like = new Like(translate(criteria.getLeftExpression()), translate(criteria.getRightExpression()), escapeChar, criteria.isNegated()); like.setMode(criteria.getMode()); return like; }
boolean escaped = false; char escapeChar = matchCriteria.getEscapeChar(); if (matchCriteria.getMode() == MatchMode.REGEX) { escapeChar = '\\'; if (pattern.length() > 0 && matchCriteria.getMode() == MatchMode.REGEX && pattern.charAt(0) != '^') { for (int j = matchCriteria.getMode() == MatchMode.REGEX?1:0; j < pattern.length(); j++) { char character = pattern.charAt(j); if (matchCriteria.getMode() == MatchMode.LIKE) { if (character == MatchCriteria.WILDCARD_CHAR || character == MatchCriteria.MATCH_CHAR) { break;
result = match(rightValue, criteria.getEscapeChar(), leftValue, criteria.getMode());
result = match(rightValue, criteria.getEscapeChar(), leftValue, criteria.getMode());
result = match(rightValue, criteria.getEscapeChar(), leftValue, criteria.getMode());
return; switch (obj.getMode()) { case LIKE: if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE)) {
public void visit(MatchCriteria obj) { switch (obj.getMode()) { case LIKE: if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE)) {
append(SPACE); switch (obj.getMode()) { case SIMILAR: append(SIMILAR);
append(SPACE); switch (obj.getMode()) { case SIMILAR: append(SIMILAR);
public void visit(MatchCriteria obj) { switch (obj.getMode()) { case LIKE: if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE)) {
append(SPACE); switch (obj.getMode()) { case SIMILAR: append(SIMILAR);