private Filter onLikeExpression(Expression expression, EntityMetadata m, String idColumn, Boolean isIdColumn) { Map<String, Object> map = KunderaQueryUtils.setFieldClazzAndColumnFamily( (StateFieldPathExpression) ((LikeExpression) expression).getStringExpression(), m, kunderaMetadata); Class fieldClazz = (Class) map.get(Constants.FIELD_CLAZZ); String colFamily = (String) map.get(Constants.COL_FAMILY); String columnName = (String) map.get(Constants.DB_COL_NAME); isIdColumn = idColumn.equalsIgnoreCase(columnName); Object value = KunderaQueryUtils.getValue(((LikeExpression) expression).getPatternValue(), fieldClazz, kunderaQuery); if (!isEmbeddable(map)) { byte[] valueInBytes = getValueInBytes(value, fieldClazz, isIdColumn, m); return createNewFilter(((LikeExpression) expression).getIdentifier(), Bytes.toBytes(colFamily), Bytes.toBytes(columnName), valueInBytes, isIdColumn); } else { return createFilterForEmbeddables(((LikeExpression) expression).getIdentifier(), isIdColumn, m, fieldClazz, value, columnName); } }
/** * @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; }
/** * {@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); } } } } }