/** * {@inheritDoc} */ @Override protected void addChildrenTo(Collection<Expression> children) { children.add(getStringExpression()); children.add(getPatternValue()); children.add(getEscapeCharacter()); }
/** * @param expression * @param m * @param kunderaMetadata * @param kunderaQuery * @return */ public static Map<String, Object> onLikeExpression(Expression expression, EntityMetadata m, KunderaMetadata kunderaMetadata, KunderaQuery kunderaQuery) { LikeExpression likeExp = (LikeExpression) expression; Expression sfpExp = likeExp.getStringExpression(); Map<String, Object> map = KunderaQueryUtils.setFieldClazzAndColumnFamily(sfpExp, m, kunderaMetadata); kunderaQuery.addFilterClause( (String) map.get(Constants.COL_NAME), likeExp.getIdentifier(), likeExp.getPatternValue().toActualText(), (String) map.get(Constants.FIELD_NAME), (Boolean) map.get(Constants.IGNORE_CASE)); return map; }
/** * Returns the {@link Expression} that represents the escape character, which is either a single * character or an input parameter. * * @return The expression that was parsed representing the escape character */ public Expression getEscapeCharacter() { if (escapeCharacter == null) { escapeCharacter = buildNullExpression(); } return escapeCharacter; }
/** * Populate like query. * * @param likeExpression * the like expression * @param metadata * the metadata * @return the filter builder */ private QueryBuilder populateLikeQuery(LikeExpression likeExpression, EntityMetadata metadata) { Expression patternValue = likeExpression.getPatternValue(); String field = likeExpression.getStringExpression().toString(); String likePattern = (patternValue instanceof InputParameter) ? kunderaQuery.getParametersMap() .get((patternValue).toParsedText()).toString() : patternValue.toParsedText().toString(); String jpaField = getField(field); log.debug("Pattern value for field " + field + " is: " + patternValue); QueryBuilder filterBuilder = getQueryBuilder(kunderaQuery.new FilterClause(jpaField, Expression.LIKE, likePattern, field), metadata); return filterBuilder; }
if (!expression.hasStringExpression()) { int startPosition = position(expression); addProblem(expression, startPosition, LikeExpression_MissingStringExpression); if (!expression.hasPatternValue()) { length(expression.getStringExpression()) + 4 /* LIKE */ + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 1 : 0) + (expression.hasSpaceAfterLike() ? 1 : 0); if (expression.hasEscape()) { if (!expression.hasEscapeCharacter()) { length(expression.getStringExpression()) + 4 /* LIKE */ + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 1 : 0) + (expression.hasSpaceAfterLike() ? 1 : 0) + length(expression.getPatternValue()) + (expression.hasSpaceAfterPatternValue() ? 1 : 0) + 6 + /* ESCAPE */ + (expression.hasSpaceAfterEscape() ? 1 : 0);
protected void validateLikeExpressionEscapeCharacter(LikeExpression expression) { Expression escapeCharacter = expression.getEscapeCharacter(); length(expression.getStringExpression()) + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 4 : 0) + 4 /* LIKE */ + (expression.hasSpaceAfterLike() ? 1 : 0) + length(expression.getPatternValue()) + (expression.hasSpaceAfterPatternValue() ? 1 : 0) + 6 + /* ESCAPE */ + (expression.hasSpaceAfterEscape() ? 1 : 0); length(expression.getStringExpression()) + 4 /* LIKE */ + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 1 : 0) + (expression.hasSpaceAfterLike() ? 1 : 0) + length(expression.getPatternValue()) + (expression.hasSpaceAfterPatternValue() ? 1 : 0) + 6 + /* ESCAPE */ + (expression.hasSpaceAfterEscape() ? 1 : 0);
/** * {@inheritDoc} */ @Override public void visit(LikeExpression expression) { expression.getStringExpression().accept(this); StateObject stringStateObject = stateObject; expression.getPatternValue().accept(this); StateObject patternValue = stateObject; LikeExpressionStateObject stateObject = new LikeExpressionStateObject( parent, stringStateObject, expression.hasNot(), patternValue, literal(expression.getEscapeCharacter(), LiteralType.STRING_LITERAL) ); stateObject.setExpression(expression); this.stateObject = stateObject; }
/** * {@inheritDoc} */ @Override public void visit(LikeExpression expression) { super.visit(expression); int position = queryPosition.getPosition(expression) - corrections.peek(); if (expression.hasStringExpression()) { int length = expression.getStringExpression().getLength() + SPACE_LENGTH; // Within "LIKE" or "NOT LIKE" if (isPositionWithin(position, length, expression.getIdentifier())) { proposals.addIdentifier(LIKE); proposals.addIdentifier(NOT_LIKE); } // After "LIKE " or "NOT LIKE " else if (expression.hasSpaceAfterLike()) { length += expression.getIdentifier().length() + SPACE_LENGTH; // After "<pattern value> " if (expression.hasPatternValue() && expression.hasSpaceAfterPatternValue()) { length += expression.getPatternValue().getLength() + SPACE_LENGTH; // Within "ESCAPE" if (isPositionWithin(position, length, ESCAPE)) { proposals.addIdentifier(ESCAPE); } } } } }
/** * {@inheritDoc} */ public void visit(LikeExpression expression) { if (badExpression) { if (!expression.hasStringExpression() && positionWithinInvalidExpression <= 4 /* LIKE */) { queryPosition.setExpression(expression); queryPosition.addPosition(expression, positionWithinInvalidExpression); } } else { if (expression.hasEscapeCharacter()) { expression.getEscapeCharacter().accept(this); } else if (expression.hasPatternValue() && !expression.hasEscape()) { expression.getPatternValue().accept(this); } if (queryPosition.getExpression() == null) { queryPosition.setExpression(expression); } queryPosition.addPosition(expression, expression.getLength() - correction); } }
if (expression.hasStringExpression()) { Expression stringExpression = expression.getStringExpression(); expression.getPatternValue().accept(this); expression.getEscapeCharacter().accept(this);
/** * {@inheritDoc} */ @Override public void visit(LikeExpression expression) { // Only AND, OR, NOT or clause identifiers can follow this expression // when the type is LOGICAL or CLAUSE appendable = appendableType == AppendableType.COMPLETE || appendableType == AppendableType.LOGICAL; if (appendable) { boolean oldConditionalExpression = conditionalExpression; conditionalExpression = false; if (expression.hasEscape()) { expression.getEscapeCharacter().accept(this); } else { expression.getPatternValue().accept(this); } conditionalExpression = oldConditionalExpression; } }
/** * {@inheritDoc} */ @Override protected AbstractExpression buildExpression(AbstractExpression parent, WordParser wordParser, String word, JPQLQueryBNF queryBNF, AbstractExpression expression, boolean tolerant) { expression = new LikeExpression(parent, expression); expression.parse(wordParser, tolerant); return expression; } }
children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(NOT)); children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(LIKE)); children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(ESCAPE)); children.add(buildStringExpression(SPACE));
if (!expression.hasStringExpression()) { int startPosition = position(expression); addProblem(expression, startPosition, LikeExpression_MissingStringExpression); if (!expression.hasPatternValue()) { length(expression.getStringExpression()) + 4 /* LIKE */ + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 1 : 0) + (expression.hasSpaceAfterLike() ? 1 : 0); if (expression.hasEscape()) { if (!expression.hasEscapeCharacter()) { length(expression.getStringExpression()) + 4 /* LIKE */ + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 1 : 0) + (expression.hasSpaceAfterLike() ? 1 : 0) + length(expression.getPatternValue()) + (expression.hasSpaceAfterPatternValue() ? 1 : 0) + 6 + /* ESCAPE */ + (expression.hasSpaceAfterEscape() ? 1 : 0);
protected void validateLikeExpressionEscapeCharacter(LikeExpression expression) { Expression escapeCharacter = expression.getEscapeCharacter(); length(expression.getStringExpression()) + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 4 : 0) + 4 /* LIKE */ + (expression.hasSpaceAfterLike() ? 1 : 0) + length(expression.getPatternValue()) + (expression.hasSpaceAfterPatternValue() ? 1 : 0) + 6 + /* ESCAPE */ + (expression.hasSpaceAfterEscape() ? 1 : 0); length(expression.getStringExpression()) + 4 /* LIKE */ + (expression.hasSpaceAfterStringExpression() ? 1 : 0) + (expression.hasNot() ? 1 : 0) + (expression.hasSpaceAfterLike() ? 1 : 0) + length(expression.getPatternValue()) + (expression.hasSpaceAfterPatternValue() ? 1 : 0) + 6 + /* ESCAPE */ + (expression.hasSpaceAfterEscape() ? 1 : 0);
/** * {@inheritDoc} */ @Override public void visit(LikeExpression expression) { // Create the first expression expression.getStringExpression().accept(this); Expression firstExpression = queryExpression; // Create the expression for the pattern value expression.getPatternValue().accept(this); Expression patternValue = queryExpression; // Create the LIKE expression with the escape character if (expression.hasEscapeCharacter()) { expression.getEscapeCharacter().accept(this); queryExpression = firstExpression.like(patternValue, queryExpression); } // Create the LIKE expression with no escape character else { queryExpression = firstExpression.like(patternValue); } // Negate the expression if (expression.hasNot()) { queryExpression = queryExpression.not(); } // Set the expression type type[0] = Boolean.class; }
if (expression.hasStringExpression()) { Expression stringExpression = expression.getStringExpression(); expression.getPatternValue().accept(this); expression.getEscapeCharacter().accept(this);
/** * Populate like query. * * @param likeExpression * the like expression * @param metadata * the metadata * @return the filter builder */ private QueryBuilder populateLikeQuery(LikeExpression likeExpression, EntityMetadata metadata) { Expression patternValue = likeExpression.getPatternValue(); String field = likeExpression.getStringExpression().toString(); String likePattern = (patternValue instanceof InputParameter) ? kunderaQuery.getParametersMap() .get((patternValue).toParsedText()).toString() : patternValue.toParsedText().toString(); String jpaField = getField(field); log.debug("Pattern value for field " + field + " is: " + patternValue); QueryBuilder filterBuilder = getQueryBuilder(kunderaQuery.new FilterClause(jpaField, Expression.LIKE, likePattern, field), metadata); return filterBuilder; }
/** * {@inheritDoc} */ @Override protected AbstractExpression buildExpression(AbstractExpression parent, WordParser wordParser, String word, JPQLQueryBNF queryBNF, AbstractExpression expression, boolean tolerant) { expression = new LikeExpression(parent, expression); expression.parse(wordParser, tolerant); return expression; } }
children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(NOT)); children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(LIKE)); children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(SPACE)); children.add(buildStringExpression(ESCAPE)); children.add(buildStringExpression(SPACE));